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

Unified Diff: ios/chrome/browser/passwords/js_password_manager.mm

Issue 1456983002: Move JS-related password manager code upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Indent fixed, capitalisation fixed, typo fixed Created 5 years, 1 month 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/js_password_manager.mm
diff --git a/ios/chrome/browser/passwords/js_password_manager.mm b/ios/chrome/browser/passwords/js_password_manager.mm
new file mode 100644
index 0000000000000000000000000000000000000000..d28205b6b506117f575dd54603bb2a8bcaa0495f
--- /dev/null
+++ b/ios/chrome/browser/passwords/js_password_manager.mm
@@ -0,0 +1,107 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/passwords/js_password_manager.h"
+
+#include "base/json/string_escape.h"
+#include "base/logging.h"
+#include "base/strings/sys_string_conversions.h"
+
+namespace {
+// Sanitizes |JSONString| and wraps it in quotes so it can be injected safely in
+// JavaScript.
+NSString* JSONEscape(NSString* JSONString) {
+ return base::SysUTF8ToNSString(
+ base::GetQuotedJSONString(base::SysNSStringToUTF8(JSONString)));
+}
+} // namespace
+
+@interface JsPasswordManager ()
+// Injects a script that does two things:
+// 1. Injects password controller JavaScript in the page.
+// 2. Extracts the _submitted_ password form data from the DOM on the page.
+// The result is returned in |completionHandler|.
+// |completionHandler| cannot be nil.
+- (void)evaluateExtraScript:(NSString*)script
+ completionHandler:(void (^)(NSString*))completionHandler;
+@end
+
+@implementation JsPasswordManager
+
+- (void)findPasswordFormsWithCompletionHandler:
+ (void (^)(NSString*))completionHandler {
+ DCHECK(completionHandler);
+ [self evaluateExtraScript:@"__gCrWeb.findPasswordForms()"
+ completionHandler:completionHandler];
+}
+
+- (void)extractForm:(NSString*)formName
+ completionHandler:(void (^)(NSString*))completionHandler {
+ DCHECK(completionHandler);
+ NSString* extra = [NSString
+ stringWithFormat:@"__gCrWeb.getPasswordForm(%@)", JSONEscape(formName)];
+ [self evaluateExtraScript:extra completionHandler:completionHandler];
+}
+
+- (void)fillPasswordForm:(NSString*)JSONString
+ withUsername:(NSString*)username
+ password:(NSString*)password
+ completionHandler:(void (^)(BOOL))completionHandler {
+ DCHECK(completionHandler);
+ NSString* script = [NSString
+ stringWithFormat:@"__gCrWeb.fillPasswordForm(%@, %@, %@)", JSONString,
+ JSONEscape(username), JSONEscape(password)];
+ [self evaluate:script
+ stringResultHandler:^(NSString* result, NSError* error) {
+ completionHandler(!error && [result isEqualToString:@"true"]);
+ }];
+}
+
+- (void)clearAutofilledPasswordsInForm:(NSString*)formName
+ completionHandler:(void (^)(BOOL))completionHandler {
+ NSString* script =
+ [NSString stringWithFormat:@"__gCrWeb.clearAutofilledPasswords(%@)",
+ JSONEscape(formName)];
+ [self evaluate:script
+ stringResultHandler:^(NSString* result, NSError* error) {
+ completionHandler(!error && [result isEqualToString:@"true"]);
+ }];
+}
+
+- (void)fillPasswordForm:(NSString*)formName
+ withGeneratedPassword:(NSString*)password
+ completionHandler:(void (^)(BOOL))completionHandler {
+ NSString* script =
+ [NSString stringWithFormat:
+ @"__gCrWeb.fillPasswordFormWithGeneratedPassword(%@, %@)",
+ JSONEscape(formName), JSONEscape(password)];
+ [self evaluate:script
+ stringResultHandler:^(NSString* result, NSError* error) {
+ if (completionHandler)
+ completionHandler(!error && [result isEqualToString:@"true"]);
+ }];
+}
+
+#pragma mark -
+#pragma mark ProtectedMethods
+
+- (NSString*)scriptPath {
+ return @"password_controller";
+}
+
+#pragma mark -
+#pragma mark Private
+
+- (void)evaluateExtraScript:(NSString*)script
+ completionHandler:(void (^)(NSString*))completionHandler {
+ DCHECK(completionHandler);
+ [self injectDependenciesIfMissing];
+ NSString* JS = [[self injectionContent] stringByAppendingString:script];
+ [self evaluate:JS
+ stringResultHandler:^(NSString* result, NSError*) {
+ completionHandler(result);
+ }];
+}
+
+@end
« no previous file with comments | « ios/chrome/browser/passwords/js_password_manager.h ('k') | ios/chrome/browser/passwords/resources/credential_manager.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698