Skip to content

Commit

Permalink
Correct the skip-waiting-installed.html behavior
Browse files Browse the repository at this point in the history
According to the latest spec, the skipWaiting promise should be resolved
after 'activate' event is dispatched. This change is from
w3c/ServiceWorker#1065.

Tracing through the spec, skipWaiting() enters "Try Activate".
"Try Activate" invokes "Activate". "Activate" blocks until the final step:
"13. Run the Update Worker State algorithm passing registration’s active
worker and activated as the arguments."

"Update Worker State" queues a task to set ServiceWorker#state to 'activated'.
But in step 10, we have dispatched the 'activate' event. Therefore the order
should be:
1. 'activate' event handler runs
2. skipWaiting() promise resolves
3. ServiceWorker#state is set to 'activated'

So we correct the test case here and delete all the wrong expected files.

BUG=725616

Change-Id: Id0765988c7cdf48f39bb73ccb3fc0cce6ea60949
Reviewed-on: https://chromium-review.googlesource.com/646244
Commit-Queue: Matt Falkenhagen <[email protected]>
Reviewed-by: Matt Falkenhagen <[email protected]>
Cr-Commit-Position: refs/heads/master@{#499513}
  • Loading branch information
xzhan96 authored and jakearchibald committed Nov 16, 2017
1 parent 1d64b7f commit cd6f216
Showing 1 changed file with 10 additions and 12 deletions.
Original file line number Diff line number Diff line change
@@ -1,29 +1,27 @@
self.state = 'starting';

self.addEventListener('install', function() {
self.state = 'installing';
});
var saw_activate_event = false

self.addEventListener('activate', function() {
self.state = 'activating';
saw_activate_event = true;
});

self.addEventListener('message', function(event) {
var port = event.data.port;
if (self.state !== 'installing') {
port.postMessage('FAIL: Worker should be waiting in installed state');
return;
}
event.waitUntil(self.skipWaiting()
.then(function(result) {
if (result !== undefined) {
port.postMessage('FAIL: Promise should be resolved with undefined');
return;
}

if (self.state === 'activating') {
if (!saw_activate_event) {
port.postMessage(
'FAIL: Promise should be resolved after activate event is dispatched');
return;
}

if (self.registration.active.state !== 'activating') {
port.postMessage(
'FAIL: Promise should be resolved before worker is activated');
'FAITL: Promise should be resolved before ServiceWorker#state is set to activated');
return;
}

Expand Down

0 comments on commit cd6f216

Please sign in to comment.