mirror of
https://github.com/servo/servo.git
synced 2025-08-28 00:28:20 +01:00
Update web-platform-tests to revision 4e6563687b9c03d2f54ce0f06ef0ccc8e0964328
This commit is contained in:
parent
e68585a26f
commit
c80d322d92
56 changed files with 1205 additions and 66 deletions
|
@ -13,6 +13,34 @@ self.createIframe = (url, t) => new Promise(resolve => {
|
|||
t.add_cleanup(() => iframe.remove());
|
||||
});
|
||||
|
||||
/**
|
||||
* @description - Function unregisters any service workers in this scope
|
||||
* and then creates a new registration. The function returns
|
||||
* a promise that resolves when the registered service worker
|
||||
* becomes activated. The resolved promise yields the
|
||||
* service worker registration
|
||||
* @param {testCase} t - test case to add cleanup functions to
|
||||
*/
|
||||
self.createServiceWorker = async (t, sw_registration_name, scope_url) => {
|
||||
let registration = await navigator.serviceWorker.getRegistration(scope_url);
|
||||
if (registration)
|
||||
await registration.unregister();
|
||||
|
||||
registration = await navigator.serviceWorker.register(sw_registration_name,
|
||||
{scope_url});
|
||||
t.add_cleanup(() => registration.unregister());
|
||||
|
||||
return new Promise(resolve => {
|
||||
const serviceWorker = registration.installing || registration.active ||
|
||||
registration.waiting;
|
||||
serviceWorker.addEventListener('statechange', event => {
|
||||
if (event.target.state === 'activated') {
|
||||
resolve(serviceWorker);
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Function that will return a promise that resolves when a message event
|
||||
* is fired. Returns a promise that resolves to the message that was received
|
||||
|
@ -22,3 +50,23 @@ self.waitForMessage = () => new Promise(resolve => {
|
|||
resolve(event.data);
|
||||
}, {once: true});
|
||||
});
|
||||
|
||||
/**
|
||||
* Sends a message via MessageChannel and waits for the response
|
||||
* @param {*} message
|
||||
* @returns {Promise} resolves with the response payload
|
||||
*/
|
||||
self.sendMessageOverChannel = (message, target) => {
|
||||
return new Promise(function(resolve, reject) {
|
||||
const messageChannel = new MessageChannel();
|
||||
messageChannel.port1.onmessage = event => {
|
||||
if (event.data.error) {
|
||||
reject(event.data.error);
|
||||
} else {
|
||||
resolve(event.data);
|
||||
}
|
||||
};
|
||||
|
||||
target.postMessage(message, [messageChannel.port2]);
|
||||
})
|
||||
};
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
self.GLOBAL = {
|
||||
isWindow: () => false,
|
||||
isWorker: () => false,
|
||||
};
|
||||
|
||||
self.addEventListener('message', async event => {
|
||||
if (event.data.op === 'get-cookies') {
|
||||
const workerCookies = await cookieStore.getAll();
|
||||
event.ports[0].postMessage({ workerCookies }, {
|
||||
domain: event.origin,
|
||||
});
|
||||
}
|
||||
});
|
|
@ -0,0 +1,43 @@
|
|||
<!doctype html>
|
||||
<meta charset='utf-8'>
|
||||
<title>Async Cookies: cookieStore API in ServiceWorker across origins</title>
|
||||
<link rel='help' href='https://github.com/WICG/cookie-store'>
|
||||
<link rel='author' href='jarrydg@chromium.org' title='Jarryd Goodman'>
|
||||
<script src='/resources/testharness.js'></script>
|
||||
<script src='/resources/testharnessreport.js'></script>
|
||||
<script src='resources/helpers.js'></script>
|
||||
<style>iframe {display: none}</style>
|
||||
<script>
|
||||
'use strict';
|
||||
|
||||
const kPath = '/cookie-store/resources/helper_iframe.sub.html';
|
||||
const kCorsBase = `https://{{domains[www1]}}:{{ports[https][0]}}`;
|
||||
const kCorsUrl = `${kCorsBase}${kPath}`;
|
||||
|
||||
promise_test(async t => {
|
||||
const iframe = await createIframe(kCorsUrl, t);
|
||||
assert_true(iframe != null);
|
||||
|
||||
const serviceWorker = await createServiceWorker(t,
|
||||
'serviceworker_cookieStore_cross_origin.js', '/does/not/exist');
|
||||
|
||||
|
||||
iframe.contentWindow.postMessage({
|
||||
opname: 'set-cookie',
|
||||
name: 'cookie-name',
|
||||
value: 'cookie-value',
|
||||
}, kCorsBase);
|
||||
t.add_cleanup(() => {
|
||||
cookieStore.delete('cookie-name');
|
||||
});
|
||||
|
||||
await waitForMessage();
|
||||
|
||||
const { workerCookies } = await sendMessageOverChannel({ op: 'get-cookies' },
|
||||
serviceWorker);
|
||||
|
||||
assert_equals(workerCookies.length, 1);
|
||||
assert_equals(workerCookies[0].name, 'cookie-name');
|
||||
assert_equals(workerCookies[0].value, 'cookie-value');
|
||||
}, 'cookieStore.get() in ServiceWorker reads cookie set in cross-origin frame');
|
||||
</script>
|
Loading…
Add table
Add a link
Reference in a new issue