OLD | NEW |
---|---|
(Empty) | |
1 // Common helper functions for foreign fetch tests. | |
2 | |
3 // Installs a service worker on a different origin. Both |worker| and |scope| | |
4 // are resolved relative to the /serviceworker/resources/ directory on a | |
falken
2017/02/07 02:10:47
nit: /service-workers/service-worker/resources/ di
Marijn Kruisselbrink
2017/02/13 22:00:26
Done
| |
5 // remote origin. | |
6 function install_cross_origin_worker( | |
7 t, worker, scope, origin = get_host_info().HTTPS_REMOTE_ORIGIN) { | |
8 return with_iframe(origin + new URL('resources/install-worker-helper.html', lo cation).pathname) | |
9 .then(frame => new Promise((resolve, reject) => { | |
10 var channel = new MessageChannel(); | |
falken
2017/02/07 02:10:47
nit: let or const for consistency with fetch_from_
| |
11 frame.contentWindow.postMessage({worker: worker, | |
12 options: {scope: scope}, | |
13 port: channel.port1}, | |
falken
2017/02/07 02:10:47
nit: Is it possible to remove the port property? I
Marijn Kruisselbrink
2017/02/13 22:00:26
Yeah, here using event.source directly would indee
| |
14 '*', [channel.port1]); | |
15 channel.port2.onmessage = reply => { | |
16 if (reply.data == 'success') resolve(); | |
17 else reject(reply.data); | |
18 }; | |
19 })); | |
20 } | |
21 | |
22 // Performs a fetch from a different origin. By default this performs a fetch | |
23 // from a window on that origin, but if |worker_type| is 'dedicated' or 'shared' | |
24 // the fetch is made from a worker on that origin instead. | |
25 // This uses a window rather than an iframe because an iframe might get blocked | |
26 // by mixed content checks. | |
27 function fetch_from_different_origin(origin, url, worker_type) { | |
28 var win = open(origin + new URL('resources/foreign-fetch-helper-iframe.html', location).pathname); | |
29 return new Promise(resolve => { | |
30 self.addEventListener('message', e => { | |
31 if (e.source != win) return; | |
32 resolve(); | |
33 }); | |
34 }) | |
35 .then(() => new Promise((resolve) => { | |
36 let channel = new MessageChannel(); | |
falken
2017/02/07 02:10:47
const?
Marijn Kruisselbrink
2017/02/13 22:00:25
Done
| |
37 win.postMessage({url: url, | |
38 port: channel.port1, | |
39 worker: worker_type}, | |
40 '*', [channel.port1]); | |
41 channel.port2.onmessage = reply => { | |
42 win.close(); | |
43 resolve(reply.data); | |
44 }; | |
45 })); | |
46 } | |
OLD | NEW |