Index: third_party/WebKit/LayoutTests/http/tests/payments/chromium/resources/payment-app.js |
diff --git a/third_party/WebKit/LayoutTests/http/tests/payments/chromium/resources/payment-app.js b/third_party/WebKit/LayoutTests/http/tests/payments/chromium/resources/payment-app.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f5114e564accee4d1cf04c3628ff15abf6d4f573 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/http/tests/payments/chromium/resources/payment-app.js |
@@ -0,0 +1,48 @@ |
+var testerResolver; |
+var port; |
+ |
+self.addEventListener('message', e => { |
+ if (e.data.port) { |
+ port = e.data.port; |
+ port.postMessage('payment_app_ready'); |
+ } else { |
+ // If the message event is initiated from tester, ignores this event. |
falken
2017/01/24 02:00:51
What is "tester", and why is it sending a message
|
+ return; |
+ } |
+ e.waitUntil(new Promise((resolve) => { |
+ testerResolver = resolve; |
+ }) |
+ .then(() => { |
+ port.postMessage('payment_app_quit'); |
+ })); |
+}); |
+ |
+function getMessageFromPaymentAppWindow() { |
+ return new Promise((resolve, reject) => { |
+ var listener = self.addEventListener('message', e => { |
+ resolve(e.data); |
+ self.removeEventListener(listener); |
falken
2017/01/24 02:00:51
nit: Having multiple message handlers seems more c
|
+ }); |
+ }); |
+} |
+ |
+self.addEventListener('paymentrequest', e => { |
+ var paymentAppWindow; |
+ |
+ e.waitUntil(clients.openWindow('payment-app-window.html') |
+ .then(windowClient => { |
+ paymentAppWindow = windowClient; |
+ return getMessageFromPaymentAppWindow(); |
+ }) |
+ .then(message => { |
+ if (message == 'payment_app_window_ready') |
falken
2017/01/24 02:00:51
What other message could arrive here? Could this b
|
+ paymentAppWindow.postMessage('payment_app_request'); |
+ return getMessageFromPaymentAppWindow(); |
+ }) |
+ .then(message => { |
+ if (message == 'payment_app_response') { |
falken
2017/01/24 02:00:51
Same.
|
+ // Disconnect tester. |
+ testerResolver(); |
+ } |
+ })); |
+}); |