Index: ios/chrome/browser/payments/resources/payment_request_manager.js |
diff --git a/ios/chrome/browser/payments/resources/payment_request_manager.js b/ios/chrome/browser/payments/resources/payment_request_manager.js |
index f5a136bb88fdbbd5f4fb74483d250c0b6c522715..c3ea5b43cb555ccfb84544ffabded00e5fe40585 100644 |
--- a/ios/chrome/browser/payments/resources/payment_request_manager.js |
+++ b/ios/chrome/browser/payments/resources/payment_request_manager.js |
@@ -187,7 +187,8 @@ var SerializedPaymentResponse; |
* @param {!SerializedPaymentResponse} paymentResponseData |
* @return {window.PaymentResponse} |
*/ |
- var parsePaymentResponseData = function(paymentResponseData) { |
+ __gCrWeb['paymentRequestManager'].parsePaymentResponseData = function( |
+ paymentResponseData) { |
return new window.PaymentResponse( |
paymentResponseData['methodName'], paymentResponseData['details']); |
}; |
@@ -197,7 +198,7 @@ var SerializedPaymentResponse; |
* request in response to a user interaction. |
* @type {Event} |
*/ |
- var updateEvent = null; |
+ __gCrWeb['paymentRequestManager'].updateEvent = null; |
/** |
* Handles invocation of updateWith() on the updateEvent object. Updates the |
@@ -207,7 +208,7 @@ var SerializedPaymentResponse; |
* @param {?Promise<?window.PaymentDetails|undefined>|undefined} |
* updateWithPromise |
*/ |
- var updateWith = function(updateWithPromise) { |
+ __gCrWeb['paymentRequestManager'].updateWith = function(updateWithPromise) { |
// Check to see |updateWithPromise| is an instance of Promise. |
if (!updateWithPromise || !(updateWithPromise.then instanceof Function) || |
!(updateWithPromise.catch instanceof Function)) { |
@@ -226,7 +227,7 @@ var SerializedPaymentResponse; |
}; |
__gCrWeb.message.invokeOnHost(message); |
- updateEvent = null; |
+ __gCrWeb['paymentRequestManager'].updateEvent = null; |
}) |
.catch(function() { |
var message = { |
@@ -234,7 +235,7 @@ var SerializedPaymentResponse; |
}; |
__gCrWeb.message.invokeOnHost(message); |
- updateEvent = null; |
+ __gCrWeb['paymentRequestManager'].updateEvent = null; |
}); |
}; |
@@ -256,7 +257,9 @@ var SerializedPaymentResponse; |
var paymentResponse = null; |
try { |
- paymentResponse = parsePaymentResponseData(paymentResponseData); |
+ paymentResponse = |
+ __gCrWeb['paymentRequestManager'].parsePaymentResponseData( |
+ paymentResponseData); |
} catch (e) { |
__gCrWeb['paymentRequestManager'].rejectRequestPromise( |
'Internal PaymentRequest error: failed to parse PaymentResponse.'); |
@@ -268,6 +271,7 @@ var SerializedPaymentResponse; |
paymentResponse); |
__gCrWeb['paymentRequestManager'].requestPromiseResolver = null; |
__gCrWeb['paymentRequestManager'].pendingRequest = null; |
+ __gCrWeb['paymentRequestManager'].updateEvent = null; |
}; |
/** |
@@ -285,6 +289,7 @@ var SerializedPaymentResponse; |
__gCrWeb['paymentRequestManager'].requestPromiseResolver.reject(message); |
__gCrWeb['paymentRequestManager'].requestPromiseResolver = null; |
__gCrWeb['paymentRequestManager'].pendingRequest = null; |
+ __gCrWeb['paymentRequestManager'].updateEvent = null; |
}; |
/** |
@@ -329,7 +334,7 @@ var SerializedPaymentResponse; |
var pendingRequest = __gCrWeb['paymentRequestManager'].pendingRequest; |
- if (updateEvent) { |
+ if (__gCrWeb['paymentRequestManager'].updateEvent) { |
__gCrWeb['paymentRequestManager'].rejectRequestPromise( |
'Internal PaymentRequest error: Only one update may take ' + |
'place at a time.'); |
@@ -337,15 +342,18 @@ var SerializedPaymentResponse; |
pendingRequest.shippingOption = shippingOptionID; |
- updateEvent = new Event( |
+ __gCrWeb['paymentRequestManager'].updateEvent = new Event( |
'shippingoptionchange', {'bubbles': true, 'cancelable': false}); |
- Object.defineProperty(updateEvent, 'updateWith', {value: updateWith}); |
+ |
+ Object.defineProperty(__gCrWeb['paymentRequestManager'].updateEvent, |
+ 'updateWith', {value: __gCrWeb['paymentRequestManager'].updateWith}); |
// setTimeout() is used in order to return immediately. Otherwise the |
// dispatchEvent call waits for all event handlers to return, which could |
// cause a ReentryGuard failure. |
window.setTimeout(function() { |
- pendingRequest.dispatchEvent(updateEvent); |
+ pendingRequest.dispatchEvent( |
+ __gCrWeb['paymentRequestManager'].updateEvent); |
}, 0); |
}; |
@@ -363,7 +371,7 @@ var SerializedPaymentResponse; |
var pendingRequest = __gCrWeb['paymentRequestManager'].pendingRequest; |
- if (updateEvent) { |
+ if (__gCrWeb['paymentRequestManager'].updateEvent) { |
__gCrWeb['paymentRequestManager'].rejectRequestPromise( |
'Internal PaymentRequest error: Only one update may take ' + |
'place at a time.'); |
@@ -371,15 +379,18 @@ var SerializedPaymentResponse; |
pendingRequest.shippingAddress = shippingAddress; |
- updateEvent = new Event( |
+ __gCrWeb['paymentRequestManager'].updateEvent = new Event( |
'shippingaddresschange', {'bubbles': true, 'cancelable': false}); |
- Object.defineProperty(updateEvent, 'updateWith', {value: updateWith}); |
+ |
+ Object.defineProperty(__gCrWeb['paymentRequestManager'].updateEvent, |
+ 'updateWith', {value: __gCrWeb['paymentRequestManager'].updateWith}); |
// setTimeout() is used in order to return immediately. Otherwise the |
// dispatchEvent call waits for all event handlers to return, which could |
// cause a ReentryGuard failure. |
window.setTimeout(function() { |
- pendingRequest.dispatchEvent(updateEvent); |
+ pendingRequest.dispatchEvent( |
+ __gCrWeb['paymentRequestManager'].updateEvent); |
}, 0); |
}; |
}()); // End of anonymous object |
@@ -587,18 +598,37 @@ window.PaymentResponse = function(methodName, details) { |
}; |
/** |
+ * Contains the possible values for the string argument accepted by |
+ * window.PaymentResponse.prototype.complete. |
+ * @enum {string} |
+ */ |
+var PaymentComplete = { |
+ SUCCESS: 'success', |
+ FAIL: 'fail', |
+ UNKNOWN: 'unknown' |
+}; |
+ |
+/** |
* Communicates the result of processing the payment. |
- * @param {boolean} success Indicates whether processing succeeded. |
+ * @param {PaymentComplete=} opt_result Indicates whether payment was |
+ * successfully processed. |
* @return {!Promise} A promise to notify the caller when the user interface has |
* been closed. |
*/ |
-window.PaymentResponse.prototype.complete = function(success) { |
+window.PaymentResponse.prototype.complete = function(opt_result) { |
+ if (opt_result != PaymentComplete.UNKNOWN && |
+ opt_result != PaymentComplete.SUCCESS && |
+ opt_result != PaymentComplete.FAIL) { |
+ opt_result = PaymentComplete.UNKNOWN; |
+ } |
+ |
if (!__gCrWeb['paymentRequestManager'].responsePromiseResolver) { |
throw new Error('Internal PaymentRequest error: No Promise to return.'); |
} |
var message = { |
- 'command': 'paymentRequest.responseComplete' |
+ 'command': 'paymentRequest.responseComplete', |
+ 'result': opt_result, |
}; |
__gCrWeb.message.invokeOnHost(message); |