[epiphany/mcatanzaro/remember-passwords] web-extension: Try harder not to remember passwords when disabled



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

    web-extension: Try harder not to remember passwords when disabled
    
    When the remember passwords setting is disabled, we should try harder to
    avoid executing any related code.

 embed/web-extension/ephy-web-extension.c | 24 ++++++++++++++++++------
 embed/web-extension/resources/js/ephy.js | 14 +++++++++++---
 2 files changed, 29 insertions(+), 9 deletions(-)
---
diff --git a/embed/web-extension/ephy-web-extension.c b/embed/web-extension/ephy-web-extension.c
index 9f6ab15eb..165eec3ac 100644
--- a/embed/web-extension/ephy-web-extension.c
+++ b/embed/web-extension/ephy-web-extension.c
@@ -255,7 +255,6 @@ web_page_form_controls_associated (WebKitWebPage    *web_page,
   g_autoptr(JSCValue) js_ephy = NULL;
   g_autoptr(JSCValue) js_serializer = NULL;
   g_autoptr(JSCValue) js_result = NULL;
-  gboolean remember_passwords;
   guint i;
 
   frame = webkit_web_page_get_main_frame (web_page);
@@ -272,16 +271,13 @@ web_page_form_controls_associated (WebKitWebPage    *web_page,
   js_serializer = jsc_value_new_function (js_context,
                                           "sensitiveFormMessageSerializer",
                                           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);
+                                          G_TYPE_STRING, 1,
+                                          G_TYPE_UINT64);
   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);
 }
 
@@ -647,6 +643,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)
@@ -763,6 +767,14 @@ window_object_cleared_cb (WebKitScriptWorld *world,
                                         JSC_TYPE_VALUE);
   jsc_value_object_set_property (js_ephy, "isEdited", js_function);
   g_clear_object (&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_clear_object (&js_function);
 }
 
 void
diff --git a/embed/web-extension/resources/js/ephy.js b/embed/web-extension/resources/js/ephy.js
index f3b3b9591..149c29c29 100644
--- a/embed/web-extension/resources/js/ephy.js
+++ b/embed/web-extension/resources/js/ephy.js
@@ -248,7 +248,7 @@ Ephy.PreFillUserMenu = class PreFillUserMenu
     }
 }
 
-Ephy.formControlsAssociated = function(pageID, forms, serializer, rememberPasswords)
+Ephy.formControlsAssociated = function(pageID, forms, serializer)
 {
     Ephy.formManagers = [];
 
@@ -257,8 +257,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;
+
         let formAuth = this._generateFormAuth(true);
         if (!formAuth) {
             Ephy.log('No pre-fillable/hookable form found');
@@ -448,6 +450,9 @@ Ephy.FormManager = class FormManager
 
     preFill(formAuth)
     {
+        if (!Ephy.shouldRememberPasswords())
+            return;
+
         Ephy.passwordManager.query(
             formAuth.origin,
             formAuth.targetOrigin,
@@ -478,6 +483,9 @@ Ephy.FormManager = class FormManager
 
     handleFormSubmission()
     {
+        if (!Ephy.shouldRememberPasswords())
+            return;
+
         let formAuth = this._generateFormAuth(false);
         if (!formAuth || !formAuth.password)
             return;


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