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

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

Issue 2585233003: Upstream Chrome on iOS source code [2/11]. (Closed)
Patch Set: Created 4 years 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 2016 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/payments/js_payment_request_manager.h"
6
7 #include "base/json/json_writer.h"
8 #include "base/json/string_escape.h"
9 #include "base/logging.h"
10 #include "base/strings/sys_string_conversions.h"
11 #include "base/values.h"
12 #include "ios/web/public/payments/payment_request.h"
13
14 namespace {
15
16 // Sanitizes |JSON| and wraps it in quotes so it can be injected safely in
17 // JavaScript.
18 NSString* JSONEscape(NSString* JSON) {
19 return base::SysUTF8ToNSString(
20 base::GetQuotedJSONString(base::SysNSStringToUTF8(JSON)));
21 }
22
23 } // namespace
24
25 @interface JSPaymentRequestManager ()
26
27 // Executes the JavaScript in |script| and passes a BOOL to |completionHandler|
28 // 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.
30 - (void)executeScript:(NSString*)script
31 completionHandler:(void (^)(BOOL))completionHandler;
32
33 @end
34
35 @implementation JSPaymentRequestManager
36
37 - (void)resolveRequestPromise:(const web::PaymentResponse&)paymentResponse
38 completionHandler:(void (^)(BOOL))completionHandler {
39 std::unique_ptr<base::DictionaryValue> paymentResponseData =
40 paymentResponse.ToDictionaryValue();
41 std::string paymentResponseDataJSON;
42 base::JSONWriter::Write(*paymentResponseData, &paymentResponseDataJSON);
43 NSString* script = [NSString
44 stringWithFormat:
45 @"__gCrWeb['paymentRequestManager'].pendingRequest.resolve(%@)",
46 base::SysUTF8ToNSString(paymentResponseDataJSON)];
47 [self executeScript:script completionHandler:completionHandler];
48 }
49
50 - (void)rejectRequestPromise:(NSString*)errorMessage
51 completionHandler:(void (^)(BOOL))completionHandler {
52 NSString* script = [NSString
53 stringWithFormat:
54 @"__gCrWeb['paymentRequestManager'].pendingRequest.reject(%@)",
55 JSONEscape(errorMessage)];
56 [self executeScript:script completionHandler:completionHandler];
57 }
58
59 - (void)resolveResponsePromise:(void (^)(BOOL))completionHandler {
60 NSString* script =
61 @"__gCrWeb['paymentRequestManager'].pendingResponse.resolve()";
62 [self executeScript:script completionHandler:completionHandler];
63 }
64
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
75 completionHandler:(void (^)(BOOL))completionHandler {
76 [self executeJavaScript:script
77 completionHandler:^(id result, NSError* error) {
78 if (completionHandler)
79 completionHandler(!error);
80 }];
81 }
82
83 #pragma mark - Protected methods
84
85 - (NSString*)scriptPath {
86 return @"payment_request_manager";
87 }
88
89 - (NSString*)presenceBeacon {
90 return @"__gCrWeb.paymentRequestManager";
91 }
92
93 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698