[epiphany/wip/js-forms: 315/317] web-extension: Handle forms submitted through JS



commit ca9736fd1594e341c52ad722afc91521f5ba9c85
Author: Exalm <exalm7659 gmail com>
Date:   Sun Nov 5 12:31:13 2017 +0500

    web-extension: Handle forms submitted through JS
    
    https://bugzilla.gnome.org/show_bug.cgi?id=742573

 embed/web-extension/ephy-web-extension.c |   40 ++++++++++++++++++++++-------
 1 files changed, 30 insertions(+), 10 deletions(-)
---
diff --git a/embed/web-extension/ephy-web-extension.c b/embed/web-extension/ephy-web-extension.c
index 02d5fd7..b264fa8 100644
--- a/embed/web-extension/ephy-web-extension.c
+++ b/embed/web-extension/ephy-web-extension.c
@@ -464,10 +464,9 @@ out:
   g_list_free_full (records, g_object_unref);
 }
 
-static gboolean
-form_submitted_cb (WebKitDOMHTMLFormElement *dom_form,
-                   WebKitDOMEvent           *dom_event,
-                   WebKitWebPage            *web_page)
+static void
+handle_form_submission (WebKitWebPage            *web_page,
+                        WebKitDOMHTMLFormElement *dom_form)
 {
   EphyWebExtension *extension = ephy_web_extension_get ();
   EphyEmbedFormAuth *form_auth;
@@ -483,13 +482,13 @@ form_submitted_cb (WebKitDOMHTMLFormElement *dom_form,
   char *form_action;
 
   if (!extension->password_manager)
-    return TRUE;
+    return;
 
   if (!ephy_web_dom_utils_find_form_auth_elements (dom_form,
                                                    &username_node,
                                                    &password_node,
                                                    AUTH_CACHE_SUBMIT))
-    return TRUE;
+    return;
 
   if (username_node) {
     g_object_get (username_node,
@@ -534,8 +533,29 @@ form_submitted_cb (WebKitDOMHTMLFormElement *dom_form,
   g_free (password_field_name);
   g_free (uri_str);
   g_free (origin);
+}
 
-  return TRUE;
+static void
+web_page_will_submit_form (WebKitWebPage            *web_page,
+                           WebKitDOMHTMLFormElement *dom_form,
+                           WebKitFormSubmissionStep  step,
+                           WebKitFrame              *frame,
+                           WebKitFrame              *source_frame,
+                           GPtrArray                *text_field_names,
+                           GPtrArray                *text_field_values)
+{
+  gboolean form_submit_handled;
+
+  form_submit_handled =
+    GPOINTER_TO_INT (g_object_get_data (G_OBJECT (dom_form),
+                                        "ephy-form-submit-handled"));
+
+  if (!form_submit_handled) {
+    g_object_set_data (G_OBJECT (dom_form),
+                       "ephy-form-submit-handled",
+                       GINT_TO_POINTER (TRUE));
+    handle_form_submission (web_page, dom_form);
+  }
 }
 
 static void
@@ -1177,9 +1197,6 @@ web_page_form_controls_associated (WebKitWebPage    *web_page,
                                             username_node,
                                             password_node,
                                             NULL);
-      webkit_dom_event_target_add_event_listener (WEBKIT_DOM_EVENT_TARGET (form), "submit",
-                                                  G_CALLBACK (form_submitted_cb), FALSE,
-                                                  web_page);
 
       /* Plug in the user autocomplete */
       origin = ephy_uri_to_security_origin (uri);
@@ -1335,6 +1352,9 @@ ephy_web_extension_page_created_cb (EphyWebExtension *extension,
   g_signal_connect (web_page, "context-menu",
                     G_CALLBACK (web_page_context_menu),
                     extension);
+  g_signal_connect (web_page, "will-submit-form",
+                    G_CALLBACK (web_page_will_submit_form),
+                    extension);
   g_signal_connect (web_page, "form-controls-associated",
                     G_CALLBACK (web_page_form_controls_associated),
                     extension);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]