OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 self.addEventListener('paymentrequest', e => { | 5 self.addEventListener('paymentrequest', e => { |
6 e.waitUntil(clients.matchAll({includeUncontrolled: true}).then(clients => { | 6 e.waitUntil(clients.matchAll({includeUncontrolled: true}).then(clients => { |
7 clients.forEach(client => { | 7 clients.forEach(client => { |
8 if (client.url.indexOf('payment_app_invocation.html') != -1) { | 8 if (client.url.indexOf('payment_app_invocation.html') != -1) { |
9 client.postMessage(e.topLevelOrigin); | 9 client.postMessage(e.topLevelOrigin); |
10 client.postMessage(e.paymentRequestOrigin); | 10 client.postMessage(e.paymentRequestOrigin); |
11 client.postMessage(e.paymentRequestId); | 11 client.postMessage(e.paymentRequestId); |
12 client.postMessage(JSON.stringify(e.methodData)); | 12 client.postMessage(JSON.stringify(e.methodData)); |
13 client.postMessage(JSON.stringify(e.total)); | 13 client.postMessage(JSON.stringify(e.total)); |
14 client.postMessage(JSON.stringify(e.modifiers)); | 14 client.postMessage(JSON.stringify(e.modifiers)); |
15 client.postMessage(e.instrumentKey); | 15 client.postMessage(e.instrumentKey); |
16 } | 16 } |
17 }); | 17 }); |
18 })); | 18 })); |
19 | 19 |
20 // SW -------------------- openWindow() ------------------> payment_app_window | 20 // SW -------------------- openWindow() ------------------> payment_app_window |
21 // SW <----- postMessage('payment_app_window_ready') ------ payment_app_window | 21 // SW <----- postMessage('payment_app_window_ready') ------ payment_app_window |
22 // SW -------- postMessage('payment_app_request') --------> payment_app_window | 22 // SW -------- postMessage('payment_app_request') --------> payment_app_window |
23 // SW <-- postMessage({methodName: 'test', details: {}}) -- payment_app_window | 23 // SW <-- postMessage({methodName: 'test', details: {}}) -- payment_app_window |
24 e.respondWith(new Promise(resolve => { | 24 e.respondWith(new Promise((resolve, reject) => { |
25 let payment_app_window = undefined; | 25 let payment_app_window = undefined; |
26 let window_ready = false; | 26 let window_ready = false; |
27 | 27 |
28 let maybeSendPaymentRequest = function() { | 28 let maybeSendPaymentRequest = function() { |
29 if (payment_app_window && window_ready) | 29 if (payment_app_window && window_ready) |
30 payment_app_window.postMessage('payment_app_request'); | 30 payment_app_window.postMessage('payment_app_request'); |
31 }; | 31 }; |
32 | 32 |
33 self.addEventListener('message', e => { | 33 self.addEventListener('message', e => { |
34 if (e.data == "payment_app_window_ready") { | 34 if (e.data == "payment_app_window_ready") { |
35 window_ready = true; | 35 window_ready = true; |
36 maybeSendPaymentRequest(); | 36 maybeSendPaymentRequest(); |
37 return; | 37 return; |
38 } | 38 } |
39 | 39 |
40 if (e.data.methodName) { | 40 if (e.data.methodName) { |
41 resolve(e.data); | 41 resolve(e.data); |
42 return; | 42 return; |
43 } | 43 } |
44 }); | 44 }); |
45 | 45 |
46 // Open a window | 46 // Open a window for the payment instrument. |
47 clients.openWindow('payment_app_window.html') | 47 var payment_app_web_page = 'payment_app_window.html'; |
| 48 if(e.instrumentKey == 'bobpay-payment-app-id') { |
| 49 payment_app_web_page = 'https://bobpay.com'; |
| 50 } |
| 51 e.openWindow(payment_app_web_page) |
48 .then(window_client => { | 52 .then(window_client => { |
49 payment_app_window = window_client; | 53 payment_app_window = window_client; |
50 maybeSendPaymentRequest(); | 54 maybeSendPaymentRequest(); |
51 }) | 55 }) |
| 56 .catch(error => { |
| 57 reject(error); |
| 58 }); |
52 })); | 59 })); |
53 }); | 60 }); |
OLD | NEW |