[epiphany/wip/js-forms: 315/317] web-extension: Handle forms submitted through JS
- From: Michael Catanzaro <mcatanzaro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany/wip/js-forms: 315/317] web-extension: Handle forms submitted through JS
- Date: Sun, 7 Jan 2018 00:40:56 +0000 (UTC)
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]