[epiphany/gnome-3-32] web-extension: Don't prompt to remember passwords when disabled



commit aa5b5bac145210e060f54f6e5bf10302d7e791aa
Author: Michael Catanzaro <mcatanzaro igalia com>
Date:   Wed Mar 20 16:01:01 2019 -0500

    web-extension: Don't prompt to remember passwords when disabled
    
    When the remember passwords setting is disabled, we should try harder to
    avoid executing any related code.
    
    This requires a WebKitGTK version bump due to https://bugs.webkit.org/show_bug.cgi?id=196073
    
    Fixes #725

 embed/web-extension/ephy-web-extension.c | 20 ++++++++++++++++----
 embed/web-extension/resources/js/ephy.js | 14 +++++++++++---
 meson.build                              |  2 +-
 3 files changed, 28 insertions(+), 8 deletions(-)
---
diff --git a/embed/web-extension/ephy-web-extension.c b/embed/web-extension/ephy-web-extension.c
index b04e00fb3..9d8b1afa2 100644
--- a/embed/web-extension/ephy-web-extension.c
+++ b/embed/web-extension/ephy-web-extension.c
@@ -246,7 +246,6 @@ web_page_form_controls_associated (WebKitWebPage    *web_page,
   JSCValue *js_ephy;
   JSCValue *js_serializer;
   JSCValue *js_result;
-  gboolean remember_passwords;
   guint i;
 
   frame = webkit_web_page_get_main_frame (web_page);
@@ -265,14 +264,11 @@ web_page_form_controls_associated (WebKitWebPage    *web_page,
                                           G_CALLBACK (sensitive_form_message_serializer), NULL, NULL,
                                           G_TYPE_STRING, 2,
                                           G_TYPE_UINT64, G_TYPE_BOOLEAN);
-  remember_passwords = !extension->is_private_profile &&
-                       g_settings_get_boolean (EPHY_SETTINGS_WEB_EXTENSION_WEB, 
EPHY_PREFS_WEB_REMEMBER_PASSWORDS);
   js_result = jsc_value_object_invoke_method (js_ephy,
                                               "formControlsAssociated",
                                               G_TYPE_UINT64, webkit_web_page_get_id (web_page),
                                               G_TYPE_PTR_ARRAY, form_controls,
                                               JSC_TYPE_VALUE, js_serializer,
-                                              G_TYPE_BOOLEAN, remember_passwords,
                                               G_TYPE_NONE);
   g_object_unref (js_result);
   g_ptr_array_unref (form_controls);
@@ -650,6 +646,14 @@ js_is_edited (JSCValue *js_element)
   return webkit_dom_element_html_input_element_is_user_edited (WEBKIT_DOM_ELEMENT (node));
 }
 
+static gboolean
+js_should_remember_passwords (EphyWebExtension *extension)
+{
+  g_assert (EPHY_IS_WEB_EXTENSION (extension));
+
+  return !extension->is_private_profile && g_settings_get_boolean (EPHY_SETTINGS_WEB_EXTENSION_WEB, 
EPHY_PREFS_WEB_REMEMBER_PASSWORDS);
+}
+
 static void
 js_exception_handler (JSCContext   *context,
                       JSCException *exception)
@@ -771,6 +775,14 @@ window_object_cleared_cb (WebKitScriptWorld *world,
   jsc_value_object_set_property (js_ephy, "isEdited", js_function);
   g_object_unref (js_function);
 
+  js_function = jsc_value_new_function (js_context,
+                                        "shouldRememberPasswords",
+                                        G_CALLBACK (js_should_remember_passwords),
+                                        g_object_ref (extension), g_object_unref,
+                                        G_TYPE_BOOLEAN, 0);
+  jsc_value_object_set_property (js_ephy, "shouldRememberPasswords", js_function);
+  g_object_unref (js_function);
+
   g_object_unref (js_ephy);
   g_object_unref (js_context);
 }
diff --git a/embed/web-extension/resources/js/ephy.js b/embed/web-extension/resources/js/ephy.js
index 9f3366d68..8ee5d6569 100644
--- a/embed/web-extension/resources/js/ephy.js
+++ b/embed/web-extension/resources/js/ephy.js
@@ -1,6 +1,6 @@
 var Ephy = {};
 
-Ephy.formControlsAssociated = function(pageID, forms, serializer, rememberPasswords)
+Ephy.formControlsAssociated = function(pageID, forms, serializer)
 {
     Ephy.formManagers = [];
 
@@ -9,8 +9,7 @@ Ephy.formControlsAssociated = function(pageID, forms, serializer, rememberPasswo
             continue;
         let formManager = new Ephy.FormManager(pageID, forms[i]);
         formManager.handleSensitiveElement(serializer);
-        if (rememberPasswords)
-            formManager.preFillForms();
+        formManager.preFillForms();
         Ephy.formManagers.push(formManager);
     }
 }
@@ -425,6 +424,9 @@ Ephy.FormManager = class FormManager
 
     preFillForms()
     {
+        if (!Ephy.shouldRememberPasswords())
+            return;
+
         this._formAuth = this._findFormAuthElements(true);
         if (!this._formAuth || !this._formAuth.passwordNode) {
             Ephy.log('No pre-fillable/hookable form found');
@@ -460,6 +462,9 @@ Ephy.FormManager = class FormManager
 
     preFill()
     {
+        if (!Ephy.shouldRememberPasswords())
+            return;
+
         const self = this;
         Ephy.passwordManager.query(
             this._formAuth.url.origin,
@@ -491,6 +496,9 @@ Ephy.FormManager = class FormManager
 
     handleFormSubmission()
     {
+        if (!Ephy.shouldRememberPasswords())
+            return;
+
         if (!this._formAuth)
             return;
 
diff --git a/meson.build b/meson.build
index 2c63dbbfc..2a29da005 100644
--- a/meson.build
+++ b/meson.build
@@ -79,7 +79,7 @@ endif
 glib_requirement = '>= 2.56.0'
 gtk_requirement = '>= 3.24.0'
 nettle_requirement = '>= 3.4'
-webkitgtk_requirement = '>= 2.23.90'
+webkitgtk_requirement = '>= 2.24.1'
 
 cairo_dep = dependency('cairo', version: '>= 1.2')
 gcr_dep = dependency('gcr-3', version: '>= 3.5.5')


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