OLD | NEW |
(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 |
OLD | NEW |