diff options
author | Manuel Rego Casasnovas <rego@igalia.com> | 2013-02-25 18:58:40 +0800 |
---|---|---|
committer | Claudio Saavedra <csaavedra@igalia.com> | 2013-02-28 15:07:53 +0800 |
commit | 236494702aa8dab1af7992e8f82e1420372fff15 (patch) | |
tree | 55c3716ec5746d92055d6ff71132ff2c2b2d4ac5 /embed | |
parent | 6753ea9b24f5a46f3b96132dc43c89fdfa281e03 (diff) | |
download | gsoc2013-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.c | 62 | ||||
-rw-r--r-- | embed/web-extension/Makefile.am | 7 | ||||
-rw-r--r-- | embed/web-extension/ephy-web-extension.c | 65 |
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 <input> or <textarea> * 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)); } } |