aboutsummaryrefslogtreecommitdiffstats
path: root/embed
diff options
context:
space:
mode:
authorManuel Rego Casasnovas <rego@igalia.com>2013-02-25 18:58:40 +0800
committerClaudio Saavedra <csaavedra@igalia.com>2013-02-28 15:07:53 +0800
commit236494702aa8dab1af7992e8f82e1420372fff15 (patch)
tree55c3716ec5746d92055d6ff71132ff2c2b2d4ac5 /embed
parent6753ea9b24f5a46f3b96132dc43c89fdfa281e03 (diff)
downloadgsoc2013-epiphany-236494702aa8dab1af7992e8f82e1420372fff15.tar
gsoc2013-epiphany-236494702aa8dab1af7992e8f82e1420372fff15.tar.gz
gsoc2013-epiphany-236494702aa8dab1af7992e8f82e1420372fff15.tar.bz2
gsoc2013-epiphany-236494702aa8dab1af7992e8f82e1420372fff15.tar.lz
gsoc2013-epiphany-236494702aa8dab1af7992e8f82e1420372fff15.tar.xz
gsoc2013-epiphany-236494702aa8dab1af7992e8f82e1420372fff15.tar.zst
gsoc2013-epiphany-236494702aa8dab1af7992e8f82e1420372fff15.zip
Create ephy-web-dom-utils for sharing DOM bindings code between WK1 and WK2
https://bugzilla.gnome.org/show_bug.cgi?id=694659
Diffstat (limited to 'embed')
-rw-r--r--embed/ephy-web-view.c62
-rw-r--r--embed/web-extension/Makefile.am7
-rw-r--r--embed/web-extension/ephy-web-extension.c65
3 files changed, 17 insertions, 117 deletions
diff --git a/embed/ephy-web-view.c b/embed/ephy-web-view.c
index 0973b5cf1..96be4c55d 100644
--- a/embed/ephy-web-view.c
+++ b/embed/ephy-web-view.c
@@ -43,6 +43,7 @@
#include "ephy-settings.h"
#include "ephy-string.h"
#include "ephy-web-app-utils.h"
+#include "ephy-web-dom-utils.h"
#include "ephy-zoom.h"
#include <gio/gio.h>
@@ -3396,12 +3397,15 @@ ephy_web_view_set_typed_address (EphyWebView *view,
g_object_notify (G_OBJECT (view), "typed-address");
}
-#define MIN_INPUT_LENGTH 50
-
/**
* ephy_web_view_has_modified_forms:
* @view: an #EphyWebView
*
+ * A small heuristic is used here. If there's only one input element modified
+ * and it does not have a lot of text the user is likely not very interested in
+ * saving this work, so it returns %FALSE in this case (eg, google search
+ * input).
+ *
* Returns %TRUE if the user has modified &lt;input&gt; or &lt;textarea&gt;
* values in @view's loaded document.
*
@@ -3433,60 +3437,10 @@ ephy_web_view_has_modified_forms (EphyWebView *view)
return retval;
#else
- WebKitDOMHTMLCollection *forms = NULL;
- WebKitDOMDocument *document = NULL;
- gulong forms_n;
- int i;
-
g_return_val_if_fail (EPHY_IS_WEB_VIEW (view), FALSE);
- document = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (view));
- forms = webkit_dom_document_get_forms (document);
- forms_n = webkit_dom_html_collection_get_length (forms);
-
- for (i = 0; i < forms_n; i++) {
- WebKitDOMHTMLCollection *elements;
- WebKitDOMNode *form_element = webkit_dom_html_collection_item (forms, i);
- gulong elements_n;
- int j;
- gboolean modified_input_element = FALSE;
-
- elements = webkit_dom_html_form_element_get_elements (WEBKIT_DOM_HTML_FORM_ELEMENT (form_element));
- elements_n = webkit_dom_html_collection_get_length (elements);
-
- for (j = 0; j < elements_n; j++) {
- WebKitDOMNode *element;
-
- element = webkit_dom_html_collection_item (elements, j);
-
- if (WEBKIT_DOM_IS_HTML_TEXT_AREA_ELEMENT (element))
- if (webkit_dom_html_text_area_element_is_edited (WEBKIT_DOM_HTML_TEXT_AREA_ELEMENT (element)))
- return TRUE;
-
- if (WEBKIT_DOM_IS_HTML_INPUT_ELEMENT (element))
- if (webkit_dom_html_input_element_is_edited (WEBKIT_DOM_HTML_INPUT_ELEMENT (element))) {
- glong length;
- char *text;
-
- /* A small heuristic here. If there's only one input element
- * modified and it does not have a lot of text the user is
- * likely not very interested in saving this work, so do
- * nothing (eg, google search input). */
- if (modified_input_element)
- return TRUE;
-
- modified_input_element = TRUE;
-
- text = webkit_dom_html_input_element_get_value (WEBKIT_DOM_HTML_INPUT_ELEMENT (element));
- length = g_utf8_strlen (text, -1);
- g_free (text);
-
- if (length > MIN_INPUT_LENGTH)
- return TRUE;
- }
- }
- }
- return FALSE;
+ WebKitDOMDocument *document = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (view));
+ return ephy_web_dom_has_modified_forms (document);
#endif
}
diff --git a/embed/web-extension/Makefile.am b/embed/web-extension/Makefile.am
index fe7277288..b11f40689 100644
--- a/embed/web-extension/Makefile.am
+++ b/embed/web-extension/Makefile.am
@@ -1,11 +1,16 @@
webextension_LTLIBRARIES = libephywebextension.la
+INCLUDES = \
+ -I$(top_srcdir)/lib
+
webextensiondir = \
$(libdir)/epiphany/$(EPIPHANY_MAJOR)/web-extensions
libephywebextension_la_SOURCES = \
ephy-web-extension.c \
- ephy-web-extension.h
+ ephy-web-extension.h \
+ $(top_srcdir)/lib/ephy-web-dom-utils.c \
+ $(top_srcdir)/lib/ephy-web-dom-utils.h
libephywebextension_la_CPPFLAG = \
$(AM_CPPFLAGS)
diff --git a/embed/web-extension/ephy-web-extension.c b/embed/web-extension/ephy-web-extension.c
index 8eb93e8a7..2355228e7 100644
--- a/embed/web-extension/ephy-web-extension.c
+++ b/embed/web-extension/ephy-web-extension.c
@@ -19,6 +19,7 @@
#include "config.h"
#include "ephy-web-extension.h"
+#include "ephy-web-dom-utils.h"
#include <gio/gio.h>
#include <webkit2/webkit-web-extension.h>
@@ -33,66 +34,6 @@ static const char introspection_xml[] =
" </interface>"
"</node>";
-#define MIN_INPUT_LENGTH 50
-
-static gboolean
-ephy_web_extension_page_has_modified_forms (WebKitWebPage *web_page)
-{
- WebKitDOMHTMLCollection *forms = NULL;
- WebKitDOMDocument *document = NULL;
- gulong forms_n;
- int i;
-
- document = webkit_web_page_get_dom_document (web_page);
- forms = webkit_dom_document_get_forms (document);
- forms_n = webkit_dom_html_collection_get_length (forms);
-
- for (i = 0; i < forms_n; i++) {
- WebKitDOMHTMLCollection *elements;
- WebKitDOMNode *form_element = webkit_dom_html_collection_item (forms, i);
- gulong elements_n;
- int j;
- gboolean modified_input_element = FALSE;
-
- elements = webkit_dom_html_form_element_get_elements (WEBKIT_DOM_HTML_FORM_ELEMENT (form_element));
- elements_n = webkit_dom_html_collection_get_length (elements);
-
- for (j = 0; j < elements_n; j++) {
- WebKitDOMNode *element;
-
- element = webkit_dom_html_collection_item (elements, j);
-
- if (WEBKIT_DOM_IS_HTML_TEXT_AREA_ELEMENT (element))
- if (webkit_dom_html_text_area_element_is_edited (WEBKIT_DOM_HTML_TEXT_AREA_ELEMENT (element)))
- return TRUE;
-
- if (WEBKIT_DOM_IS_HTML_INPUT_ELEMENT (element))
- if (webkit_dom_html_input_element_is_edited (WEBKIT_DOM_HTML_INPUT_ELEMENT (element))) {
- glong length;
- char *text;
-
- /* A small heuristic here. If there's only one input element
- * modified and it does not have a lot of text the user is
- * likely not very interested in saving this work, so do
- * nothing (eg, google search input). */
- if (modified_input_element)
- return TRUE;
-
- modified_input_element = TRUE;
-
- text = webkit_dom_html_input_element_get_value (WEBKIT_DOM_HTML_INPUT_ELEMENT (element));
- length = g_utf8_strlen (text, -1);
- g_free (text);
-
- if (length > MIN_INPUT_LENGTH)
- return TRUE;
- }
- }
- }
-
- return FALSE;
-}
-
static void
handle_method_call (GDBusConnection *connection,
const char *sender,
@@ -119,9 +60,9 @@ handle_method_call (GDBusConnection *connection,
}
if (g_strcmp0 (method_name, "HasModifiedForms") == 0) {
- gboolean has_modifed_forms;
+ WebKitDOMDocument *document = webkit_web_page_get_dom_document (web_page);
+ gboolean has_modifed_forms = ephy_web_dom_has_modified_forms (document);
- has_modifed_forms = ephy_web_extension_page_has_modified_forms (web_page);
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", has_modifed_forms));
}
}