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

Side by Side 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "ios/chrome/browser/passwords/js_password_manager.h"
6
7 #include "base/json/string_escape.h"
8 #include "base/logging.h"
9 #include "base/strings/sys_string_conversions.h"
10
11 namespace {
12 // Sanitizes |JSONString| and wraps it in quotes so it can be injected safely in
13 // JavaScript.
14 NSString* JSONEscape(NSString* JSONString) {
15 return base::SysUTF8ToNSString(
16 base::GetQuotedJSONString(base::SysNSStringToUTF8(JSONString)));
17 }
18 } // namespace
19
20 @interface JsPasswordManager ()
21 // Injects a script that does two things:
22 // 1. Injects password controller JavaScript in the page.
23 // 2. Extracts the _submitted_ password form data from the DOM on the page.
24 // The result is returned in |completionHandler|.
25 // |completionHandler| cannot be nil.
26 - (void)evaluateExtraScript:(NSString*)script
27 completionHandler:(void (^)(NSString*))completionHandler;
28 @end
29
30 @implementation JsPasswordManager
31
32 - (void)findPasswordFormsWithCompletionHandler:
33 (void (^)(NSString*))completionHandler {
34 DCHECK(completionHandler);
35 [self evaluateExtraScript:@"__gCrWeb.findPasswordForms()"
36 completionHandler:completionHandler];
37 }
38
39 - (void)extractForm:(NSString*)formName
40 completionHandler:(void (^)(NSString*))completionHandler {
41 DCHECK(completionHandler);
42 NSString* extra = [NSString
43 stringWithFormat:@"__gCrWeb.getPasswordForm(%@)", JSONEscape(formName)];
44 [self evaluateExtraScript:extra completionHandler:completionHandler];
45 }
46
47 - (void)fillPasswordForm:(NSString*)JSONString
48 withUsername:(NSString*)username
49 password:(NSString*)password
50 completionHandler:(void (^)(BOOL))completionHandler {
51 DCHECK(completionHandler);
52 NSString* script = [NSString
53 stringWithFormat:@"__gCrWeb.fillPasswordForm(%@, %@, %@)", JSONString,
54 JSONEscape(username), JSONEscape(password)];
55 [self evaluate:script
56 stringResultHandler:^(NSString* result, NSError* error) {
57 completionHandler(!error && [result isEqualToString:@"true"]);
58 }];
59 }
60
61 - (void)clearAutofilledPasswordsInForm:(NSString*)formName
62 completionHandler:(void (^)(BOOL))completionHandler {
63 NSString* script =
64 [NSString stringWithFormat:@"__gCrWeb.clearAutofilledPasswords(%@)",
65 JSONEscape(formName)];
66 [self evaluate:script
67 stringResultHandler:^(NSString* result, NSError* error) {
68 completionHandler(!error && [result isEqualToString:@"true"]);
69 }];
70 }
71
72 - (void)fillPasswordForm:(NSString*)formName
73 withGeneratedPassword:(NSString*)password
74 completionHandler:(void (^)(BOOL))completionHandler {
75 NSString* script =
76 [NSString stringWithFormat:
77 @"__gCrWeb.fillPasswordFormWithGeneratedPassword(%@, %@)",
78 JSONEscape(formName), JSONEscape(password)];
79 [self evaluate:script
80 stringResultHandler:^(NSString* result, NSError* error) {
81 if (completionHandler)
82 completionHandler(!error && [result isEqualToString:@"true"]);
83 }];
84 }
85
86 #pragma mark -
87 #pragma mark ProtectedMethods
88
89 - (NSString*)scriptPath {
90 return @"password_controller";
91 }
92
93 #pragma mark -
94 #pragma mark Private
95
96 - (void)evaluateExtraScript:(NSString*)script
97 completionHandler:(void (^)(NSString*))completionHandler {
98 DCHECK(completionHandler);
99 [self injectDependenciesIfMissing];
100 NSString* JS = [[self injectionContent] stringByAppendingString:script];
101 [self evaluate:JS
102 stringResultHandler:^(NSString* result, NSError*) {
103 completionHandler(result);
104 }];
105 }
106
107 @end
OLDNEW
« 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