Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Unified Diff: ios/chrome/browser/passwords/resources/password_controller.js

Issue 2814773002: Move password-related methods from core.js to password_controller.js. (Closed)
Patch Set: Reupload after fixing BUILD.gn (need to remove deleted core_js_unittest.mm) Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/passwords/resources/password_controller.js
diff --git a/ios/chrome/browser/passwords/resources/password_controller.js b/ios/chrome/browser/passwords/resources/password_controller.js
index f3bb4213d9097e437d8dd52d3c0753e3b917288e..8e3ecb4b70c7a21346ba72872896a7ba5c7ea44d 100644
--- a/ios/chrome/browser/passwords/resources/password_controller.js
+++ b/ios/chrome/browser/passwords/resources/password_controller.js
@@ -28,13 +28,54 @@ if (__gCrWeb && !__gCrWeb['fillPasswordForm']) {
*/
__gCrWeb['findPasswordForms'] = function() {
var formDataList = [];
- if (__gCrWeb.hasPasswordField()) {
+ if (hasPasswordField_(window)) {
__gCrWeb.getPasswordFormDataList(formDataList, window);
}
return __gCrWeb.stringify(formDataList);
};
/**
+ * Returns true if the top window or any frames inside contain an input field
+ * of type 'password'. This method is only used for unit tests and are only
+ * kept for legacy reasons. Prefer to use the private
+ * {@code hasPasswordField_} within this file.
+ * @return {boolean} Whether a password field exists.
+ *
+ * TODO(crbug.com/614092): investigate if this method can be completely
+ * removed from the gCrWeb public interface.
+ */
+ __gCrWeb['hasPasswordFieldTestOnly'] = function() {
+ return hasPasswordField_(window);
+ };
+
+ /** Returns true if the supplied window or any frames inside contain an input
+ * field of type 'password'.
+ * @private
+ */
+ var hasPasswordField_ = function(win) {
+ var doc = win.document;
+
+ // We may will not be allowed to read the 'document' property from a frame
+ // that is in a different domain.
+ if (!doc) {
+ return false;
+ }
+
+ if (doc.querySelector('input[type=password]')) {
+ return true;
+ }
+
+ var frames = win.frames;
+ for (var i = 0; i < frames.length; i++) {
+ if (hasPasswordField_(frames[i])) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+
+ /**
* Returns the password form with the given |name| as a JSON string.
* @param {string} name The name of the form to extract.
* @return {string} The password form.

Powered by Google App Engine
This is Rietveld 408576698