[epiphany/wip/forms: 1/2] web-extension: Handle forms submitted through JS



commit 6e78119b555d436993c93b9987b5b98dca56a08f
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 |   49 ++++++++++++++++++++++++++----
 1 files changed, 43 insertions(+), 6 deletions(-)
---
diff --git a/embed/web-extension/ephy-web-extension.c b/embed/web-extension/ephy-web-extension.c
index 02d5fd7..68b1d5c 100644
--- a/embed/web-extension/ephy-web-extension.c
+++ b/embed/web-extension/ephy-web-extension.c
@@ -465,9 +465,8 @@ out:
 }
 
 static gboolean
-form_submitted_cb (WebKitDOMHTMLFormElement *dom_form,
-                   WebKitDOMEvent           *dom_event,
-                   WebKitWebPage            *web_page)
+on_form_submitted (WebKitWebPage            *web_page,
+                   WebKitDOMHTMLFormElement *dom_form)
 {
   EphyWebExtension *extension = ephy_web_extension_get ();
   EphyEmbedFormAuth *form_auth;
@@ -538,6 +537,41 @@ form_submitted_cb (WebKitDOMHTMLFormElement *dom_form,
   return TRUE;
 }
 
+static gboolean
+web_page_will_send_submit_event (WebKitWebPage            *web_page,
+                                 WebKitDOMHTMLFormElement *dom_form,
+                                 WebKitFrame              *frame,
+                                 WebKitFrame              *source_frame,
+                                 GPtrArray                *text_field_names,
+                                 GPtrArray                *text_field_values)
+{
+  g_object_set_data (G_OBJECT (dom_form),
+                     "ephy-form-submit-handled",
+                     GINT_TO_POINTER (TRUE));
+
+  return on_form_submitted (web_page, dom_form);
+}
+
+static gboolean
+web_page_will_submit_form (WebKitWebPage            *web_page,
+                           WebKitDOMHTMLFormElement *dom_form,
+                           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_steal_data (G_OBJECT (dom_form),
+                                        "ephy-form-submit-handled"));
+
+  if (form_submit_handled)
+    return TRUE;
+
+  return on_form_submitted (web_page, dom_form);
+}
+
 static void
 fill_form_cb (GList    *records,
               gpointer  user_data)
@@ -1177,9 +1211,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 +1366,12 @@ 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-send-submit-event",
+                    G_CALLBACK (web_page_will_send_submit_event),
+                    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]