| Index: third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/extendable-event-async-waituntil.https.html
|
| diff --git a/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/extendable-event-async-waituntil.https.html b/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/extendable-event-async-waituntil.https.html
|
| index c06bf84ab2dbdd034deea8610ef4735d4e9a9345..783a712ee4c842a9953cb707b78564a2c0ec45e7 100644
|
| --- a/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/extendable-event-async-waituntil.https.html
|
| +++ b/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/extendable-event-async-waituntil.https.html
|
| @@ -4,27 +4,79 @@
|
| <script src="/resources/testharnessreport.js"></script>
|
| <script src="resources/test-helpers.sub.js"></script>
|
| <script>
|
| -promise_test(function(t) {
|
| - var script = 'resources/extendable-event-async-waituntil.js';
|
| - var scope = 'resources/async-waituntil';
|
| - var worker;
|
| -
|
| - return service_worker_unregister_and_register(t, script, scope)
|
| - .then(function(registration) {
|
| - worker = registration.installing;
|
| - return wait_for_state(t, worker, 'activated');
|
| - })
|
| - .then(function() {
|
| - var channel = new MessageChannel();
|
| - var saw_message = new Promise(function(resolve) {
|
| - channel.port1.onmessage = function(e) { resolve(e.data); }
|
| - });
|
| - worker.postMessage({port: channel.port2}, [channel.port2]);
|
| - return saw_message;
|
| - })
|
| - .then(function(message) {
|
| - assert_equals(message, 'PASS');
|
| - return service_worker_unregister_and_done(t, scope);
|
| - })
|
| - }, 'Calling waitUntil asynchronously throws an exception');
|
| +
|
| +function sync_message(worker, message, transfer) {
|
| + let wait = new Promise((res, rej) => {
|
| + navigator.serviceWorker.addEventListener('message', function(e) {
|
| + if (e.data === 'ACK') {
|
| + res();
|
| + } else {
|
| + rej();
|
| + }
|
| + });
|
| + });
|
| + worker.postMessage(message, transfer);
|
| + return wait;
|
| +}
|
| +
|
| +function runTest(test, step, testBody) {
|
| + var scope = './resources/' + step;
|
| + var script = 'resources/extendable-event-async-waituntil.js?' + scope;
|
| + service_worker_unregister_and_register(test, script, scope)
|
| + .then(function(registration) {
|
| + let worker = registration.installing;
|
| + var channel = new MessageChannel();
|
| + var saw_message = new Promise(function(resolve) {
|
| + channel.port1.onmessage = function(e) { resolve(e.data); }
|
| + });
|
| +
|
| + wait_for_state(test, worker, 'activated')
|
| + .then(function() {
|
| + return sync_message(worker, { step: 'init', port: channel.port2 },
|
| + [channel.port2]);
|
| + })
|
| + .then(function() { return testBody(worker); })
|
| + .then(function() { return saw_message; })
|
| + .then(function(output) {
|
| + assert_equals(output.result, output.expected);
|
| + })
|
| + .then(function() { return sync_message(worker, { step: 'done' }); })
|
| + .then(() => { service_worker_unregister_and_done(test, scope); })
|
| + .catch(unreached_rejection(test));
|
| + });
|
| +}
|
| +
|
| +function msg_event_test(scope, test) {
|
| + var testBody = function(worker) {
|
| + return sync_message(worker, { step: scope });
|
| + };
|
| + runTest(test, scope, testBody);
|
| +}
|
| +
|
| +async_test(msg_event_test.bind(this, 'no-current-extension-different-task'),
|
| + 'Test calling waitUntil in a different task without an existing extension throws');
|
| +
|
| +async_test(msg_event_test.bind(this, 'no-current-extension-different-microtask'),
|
| + 'Test calling waitUntil in a different microtask without an existing extension throws');
|
| +
|
| +async_test(msg_event_test.bind(this, 'current-extension-different-task'),
|
| + 'Test calling waitUntil in a different task with an existing extension succeeds');
|
| +
|
| +async_test(msg_event_test.bind(this, 'current-extension-expired-same-microtask-turn'),
|
| + 'Test calling waitUntil with an existing extension promise handler succeeds');
|
| +
|
| +// The promise handler will queue a new microtask after the check for new
|
| +// extensions was performed.
|
| +async_test(msg_event_test.bind(this, 'current-extension-expired-same-microtask-turn-extra'),
|
| + 'Test calling waitUntil at the end of the microtask turn throws');
|
| +
|
| +async_test(msg_event_test.bind(this, 'current-extension-expired-different-task'),
|
| + 'Test calling waitUntil after the current extension expired in a different task fails');
|
| +
|
| +async_test(function(t) {
|
| + var testBody = function(worker) {
|
| + return with_iframe('./resources/pending-respondwith-async-waituntil/dummy.html');
|
| + }
|
| + runTest(t, 'pending-respondwith-async-waituntil', testBody);
|
| + }, 'Test calling waitUntil asynchronously with pending respondWith promise.');
|
| </script>
|
|
|