| Index: third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/extendable-event-async-waituntil.js
|
| diff --git a/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/extendable-event-async-waituntil.js b/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/extendable-event-async-waituntil.js
|
| index d77238d9397c14b16a714165e0e33438b000b583..21b4e28a1ad646953f311fe801f130e2298111a0 100644
|
| --- a/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/extendable-event-async-waituntil.js
|
| +++ b/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/extendable-event-async-waituntil.js
|
| @@ -1,20 +1,100 @@
|
| -var result = 'FAIL: did not throw.';
|
| +// controlled by 'init'/'done' messages.
|
| +var resolveLockPromise;
|
| +var port;
|
|
|
| self.addEventListener('message', function(event) {
|
| - event.data.port.postMessage(result);
|
| + var waitPromise;
|
| + var resolveTestPromise;
|
| +
|
| + switch (event.data.step) {
|
| + case 'init':
|
| + event.waitUntil(new Promise((res) => { resolveLockPromise = res; }));
|
| + port = event.data.port;
|
| + break;
|
| + case 'done':
|
| + resolveLockPromise();
|
| + break;
|
| + case 'no-current-extension-different-task':
|
| + async_task_waituntil(event).then(reportResultExpecting('InvalidStateError'));
|
| + break;
|
| + case 'no-current-extension-different-microtask':
|
| + async_microtask_waituntil(event).then(reportResultExpecting('InvalidStateError'));
|
| + break;
|
| + case 'current-extension-different-task':
|
| + event.waitUntil(new Promise((res) => { resolveTestPromise = res; }));
|
| + async_task_waituntil(event).then(reportResultExpecting('OK')).then(resolveTestPromise);
|
| + break;
|
| + case 'current-extension-expired-same-microtask-turn':
|
| + waitPromise = Promise.resolve();
|
| + event.waitUntil(waitPromise);
|
| + waitPromise.then(() => { return sync_waituntil(event); })
|
| + .then(reportResultExpecting('OK'))
|
| + break;
|
| + case 'current-extension-expired-same-microtask-turn-extra':
|
| + // The promise handler queues a new microtask *after* the check for new
|
| + // extensions was performed.
|
| + waitPromise = Promise.resolve();
|
| + event.waitUntil(waitPromise);
|
| + waitPromise.then(() => { return async_microtask_waituntil(event); })
|
| + .then(reportResultExpecting('InvalidStateError'))
|
| + break;
|
| + case 'current-extension-expired-different-task':
|
| + event.waitUntil(Promise.resolve());
|
| + async_task_waituntil(event).then(reportResultExpecting('InvalidStateError'));
|
| + break;
|
| + }
|
| + event.source.postMessage('ACK');
|
| });
|
|
|
| -self.addEventListener('install', function(event) {
|
| - self.installEvent = event;
|
| +self.addEventListener('fetch', function(event) {
|
| + var resolveFetch;
|
| + let response = new Promise((res) => { resolveFetch = res; });
|
| + event.respondWith(response);
|
| + async_task_waituntil(event)
|
| + .then(reportResultExpecting('OK'))
|
| + .then(() => { resolveFetch(new Response('OK')); });
|
| });
|
|
|
| -self.addEventListener('activate', function(event) {
|
| +function reportResultExpecting(expectedResult) {
|
| + return function (result) {
|
| + port.postMessage({result : result, expected: expectedResult});
|
| + return result;
|
| + };
|
| +}
|
| +
|
| +function sync_waituntil(event) {
|
| + return new Promise((res, rej) => {
|
| try {
|
| - self.installEvent.waitUntil(new Promise(function(){}));
|
| - } catch (error) {
|
| - if (error.name == 'InvalidStateError')
|
| - result = 'PASS';
|
| - else
|
| - result = 'FAIL: unexpected exception: ' + error;
|
| - }
|
| + event.waitUntil(Promise.resolve());
|
| + res('OK');
|
| + } catch (error) {
|
| + res(error.name);
|
| + }
|
| + });
|
| +}
|
| +
|
| +function async_microtask_waituntil(event) {
|
| + return new Promise((res, rej) => {
|
| + Promise.resolve().then(() => {
|
| + try {
|
| + event.waitUntil(Promise.resolve());
|
| + res('OK');
|
| + } catch (error) {
|
| + res(error.name);
|
| + }
|
| + });
|
| + });
|
| +}
|
| +
|
| +function async_task_waituntil(event) {
|
| + return new Promise((res, rej) => {
|
| + setTimeout(() => {
|
| + try {
|
| + event.waitUntil(Promise.resolve());
|
| + res('OK');
|
| + } catch (error) {
|
| + res(error.name);
|
| + }
|
| + }, 0);
|
| });
|
| +}
|
|
|