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

Side by Side Diff: ios/chrome/browser/payments/js_payment_request_manager.mm

Issue 2632463003: Add a timeout if the page doesn't call complete() in a timely fashion. (Closed)
Patch Set: Fix comment. Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/chrome/browser/payments/js_payment_request_manager.h" 5 #import "ios/chrome/browser/payments/js_payment_request_manager.h"
6 6
7 #include "base/json/json_writer.h" 7 #include "base/json/json_writer.h"
8 #include "base/json/string_escape.h" 8 #include "base/json/string_escape.h"
9 #include "base/logging.h"
10 #include "base/strings/sys_string_conversions.h" 9 #include "base/strings/sys_string_conversions.h"
11 #include "base/values.h" 10 #include "base/values.h"
12 #include "ios/web/public/payments/payment_request.h" 11 #include "ios/web/public/payments/payment_request.h"
13 12
14 namespace { 13 namespace {
15 14
16 // Sanitizes |JSON| and wraps it in quotes so it can be injected safely in 15 // Sanitizes |JSON| and wraps it in quotes so it can be injected safely in
17 // JavaScript. 16 // JavaScript.
18 NSString* JSONEscape(NSString* JSON) { 17 NSString* JSONEscape(NSString* JSON) {
19 return base::SysUTF8ToNSString( 18 return base::SysUTF8ToNSString(
20 base::GetQuotedJSONString(base::SysNSStringToUTF8(JSON))); 19 base::GetQuotedJSONString(base::SysNSStringToUTF8(JSON)));
21 } 20 }
22 21
23 } // namespace 22 } // namespace
24 23
25 @interface JSPaymentRequestManager () 24 @interface JSPaymentRequestManager ()
26 25
27 // Executes the JavaScript in |script| and passes a BOOL to |completionHandler| 26 // Executes the JavaScript in |script| and passes a BOOL to |completionHandler|
28 // indicating whether an error occurred. The resolve and reject functions in the 27 // indicating whether an error occurred. The resolve and reject functions in the
29 // Payment Request JavaScript do not return values so the result is ignored. 28 // Payment Request JavaScript do not return values so the result is ignored.
30 - (void)executeScript:(NSString*)script 29 - (void)executeScript:(NSString*)script
31 completionHandler:(void (^)(BOOL))completionHandler; 30 completionHandler:(void (^)(BOOL))completionHandler;
32 31
33 @end 32 @end
34 33
35 @implementation JSPaymentRequestManager 34 @implementation JSPaymentRequestManager
36 35
36 - (void)executeNoop {
37 [self executeScript:@"Function.prototype()" completionHandler:nil];
38 }
39
37 - (void)resolveRequestPromise:(const web::PaymentResponse&)paymentResponse 40 - (void)resolveRequestPromise:(const web::PaymentResponse&)paymentResponse
38 completionHandler:(void (^)(BOOL))completionHandler { 41 completionHandler:(void (^)(BOOL))completionHandler {
39 std::unique_ptr<base::DictionaryValue> paymentResponseData = 42 std::unique_ptr<base::DictionaryValue> paymentResponseData =
40 paymentResponse.ToDictionaryValue(); 43 paymentResponse.ToDictionaryValue();
41 std::string paymentResponseDataJSON; 44 std::string paymentResponseDataJSON;
42 base::JSONWriter::Write(*paymentResponseData, &paymentResponseDataJSON); 45 base::JSONWriter::Write(*paymentResponseData, &paymentResponseDataJSON);
43 NSString* script = [NSString 46 NSString* script = [NSString
44 stringWithFormat: 47 stringWithFormat:
45 @"__gCrWeb['paymentRequestManager'].pendingRequest.resolve(%@)", 48 @"__gCrWeb['paymentRequestManager'].pendingRequest.resolve(%@)",
46 base::SysUTF8ToNSString(paymentResponseDataJSON)]; 49 base::SysUTF8ToNSString(paymentResponseDataJSON)];
47 [self executeScript:script completionHandler:completionHandler]; 50 [self executeScript:script completionHandler:completionHandler];
48 } 51 }
49 52
50 - (void)rejectRequestPromise:(NSString*)errorMessage 53 - (void)rejectRequestPromise:(NSString*)errorMessage
51 completionHandler:(void (^)(BOOL))completionHandler { 54 completionHandler:(void (^)(BOOL))completionHandler {
52 NSString* script = [NSString 55 NSString* script = [NSString
53 stringWithFormat: 56 stringWithFormat:
54 @"__gCrWeb['paymentRequestManager'].pendingRequest.reject(%@)", 57 @"__gCrWeb['paymentRequestManager'].pendingRequest.reject(%@)",
55 JSONEscape(errorMessage)]; 58 JSONEscape(errorMessage)];
56 [self executeScript:script completionHandler:completionHandler]; 59 [self executeScript:script completionHandler:completionHandler];
57 } 60 }
58 61
59 - (void)resolveResponsePromise:(void (^)(BOOL))completionHandler { 62 - (void)resolveResponsePromise:(void (^)(BOOL))completionHandler {
60 NSString* script = 63 NSString* script =
61 @"__gCrWeb['paymentRequestManager'].pendingResponse.resolve()"; 64 @"__gCrWeb['paymentRequestManager'].pendingResponse.resolve()";
62 [self executeScript:script completionHandler:completionHandler]; 65 [self executeScript:script completionHandler:completionHandler];
63 } 66 }
64 67
65 - (void)rejectResponsePromise:(NSString*)errorMessage
66 completionHandler:(void (^)(BOOL))completionHandler {
67 NSString* script = [NSString
68 stringWithFormat:
69 @"__gCrWeb['paymentRequestManager'].pendingResponse.reject(%@)",
70 JSONEscape(errorMessage)];
71 [self executeScript:script completionHandler:completionHandler];
72 }
73
74 - (void)executeScript:(NSString*)script 68 - (void)executeScript:(NSString*)script
75 completionHandler:(void (^)(BOOL))completionHandler { 69 completionHandler:(void (^)(BOOL))completionHandler {
76 [self executeJavaScript:script 70 [self executeJavaScript:script
77 completionHandler:^(id result, NSError* error) { 71 completionHandler:^(id result, NSError* error) {
78 if (completionHandler) 72 if (completionHandler)
79 completionHandler(!error); 73 completionHandler(!error);
80 }]; 74 }];
81 } 75 }
82 76
83 #pragma mark - Protected methods 77 #pragma mark - Protected methods
84 78
85 - (NSString*)scriptPath { 79 - (NSString*)scriptPath {
86 return @"payment_request_manager"; 80 return @"payment_request_manager";
87 } 81 }
88 82
89 - (NSString*)presenceBeacon { 83 - (NSString*)presenceBeacon {
90 return @"__gCrWeb.paymentRequestManager"; 84 return @"__gCrWeb.paymentRequestManager";
91 } 85 }
92 86
93 @end 87 @end
OLDNEW
« no previous file with comments | « ios/chrome/browser/payments/js_payment_request_manager.h ('k') | ios/chrome/browser/payments/payment_request_manager.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698