| Index: third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/foreign-fetch-helpers.js
|
| diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/foreign-fetch-helpers.js b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/foreign-fetch-helpers.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e1831ed173c125027d5364e213da2f95b01fa6a9
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/foreign-fetch-helpers.js
|
| @@ -0,0 +1,44 @@
|
| +// Common helper functions for foreign fetch tests.
|
| +
|
| +// Installs a service worker on a different origin. Both |worker| and |scope|
|
| +// are resolved relative to the /service-workers/service-worker/resources/
|
| +// directory on a remote origin.
|
| +function install_cross_origin_worker(
|
| + t, worker, scope, origin = get_host_info().HTTPS_REMOTE_ORIGIN) {
|
| + return with_iframe(origin + new URL('resources/install-worker-helper.html', location).pathname)
|
| + .then(frame => new Promise((resolve, reject) => {
|
| + frame.contentWindow.postMessage({worker: worker,
|
| + options: {scope: scope}},
|
| + '*');
|
| + window.addEventListener('message', reply => {
|
| + if (reply.source != frame.contentWindow) return;
|
| + if (reply.data == 'success') resolve();
|
| + else reject(reply.data);
|
| + });
|
| + }));
|
| +}
|
| +
|
| +// Performs a fetch from a different origin. By default this performs a fetch
|
| +// from a window on that origin, but if |worker_type| is 'dedicated' or 'shared'
|
| +// the fetch is made from a worker on that origin instead.
|
| +// This uses a window rather than an iframe because an iframe might get blocked
|
| +// by mixed content checks.
|
| +function fetch_from_different_origin(origin, url, worker_type) {
|
| + const win = open(origin + new URL('resources/foreign-fetch-helper-iframe.html', location).pathname);
|
| + return new Promise(resolve => {
|
| + self.addEventListener('message', e => {
|
| + if (e.source != win) return;
|
| + resolve();
|
| + });
|
| + })
|
| + .then(() => new Promise((resolve) => {
|
| + const channel = new MessageChannel();
|
| + win.postMessage({url: url,
|
| + worker: worker_type},
|
| + '*', [channel.port1]);
|
| + channel.port2.onmessage = reply => {
|
| + win.close();
|
| + resolve(reply.data);
|
| + };
|
| + }));
|
| +}
|
|
|