[epiphany/mcatanzaro/passwords: 1/2] ephy.js: Don't require input element name for form autofill



commit d1778f6237c67c6e41ac5dfb16277637e4dade1e
Author: Michael Catanzaro <mcatanzaro igalia com>
Date:   Sun Mar 3 18:15:44 2019 -0600

    ephy.js: Don't require input element name for form autofill
    
    MDN says name is deprecated since HTML *4* so we'd best check for
    element ID first, and only fall back to name if missing.
    
    This fixes form autofill for me on at least one website, which is nice.

 embed/web-extension/resources/js/ephy.js | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)
---
diff --git a/embed/web-extension/resources/js/ephy.js b/embed/web-extension/resources/js/ephy.js
index d84f7d761..1fa0361e8 100644
--- a/embed/web-extension/resources/js/ephy.js
+++ b/embed/web-extension/resources/js/ephy.js
@@ -672,17 +672,28 @@ Ephy.FormManager = class FormManager
 
         formAuth.username = null;
         if (formAuth.usernameNode && formAuth.usernameNode.value)
-            username = formAuth.usernameNode.value;
+            formAuth.username = formAuth.usernameNode.value;
 
         formAuth.usernameField = null;
-        if (formAuth.usernameNode && formAuth.usernameNode.name)
-            usernameField = formAuth.usernameNode.name;
-
-        if (!formAuth.passwordNode.name)
-            return null;
+        if (formAuth.usernameNode) {
+            // The name attribute is obsoleted by ID, but lots of websites have
+            // missed that memo, so we should check both. We'll check name
+            // before ID for compatibility with passwords saved by old versions
+            // of Epiphany.
+            if (formAuth.usernameNode.name)
+                formAuth.usernameField = formAuth.usernameNode.name;
+            else if (formAuth.usernameNode.id)
+                formAuth.usernameField = formAuth.usernameNode.id;
+        }
 
         formAuth.password = formAuth.passwordNode.value;
-        formAuth.passwordField = formAuth.passwordNode.name;
+
+        if (formAuth.passwordNode.name)
+            formAuth.passwordField = formAuth.passwordNode.name;
+        else if (formAuth.passwordNode.id)
+            formAuth.passwordField = formAuth.passwordNode.id;
+        else
+            return null;
 
         return formAuth;
     }


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