From b1aff97077c8ca89a19f0dcf6180f614e1c81c7a Mon Sep 17 00:00:00 2001 From: Jake Archibald Date: Wed, 12 Jun 2019 10:08:52 +0100 Subject: [PATCH 1/5] Tests for self.serviceWorker --- .../global-serviceworker.https.any.js | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 service-workers/service-worker/global-serviceworker.https.any.js diff --git a/service-workers/service-worker/global-serviceworker.https.any.js b/service-workers/service-worker/global-serviceworker.https.any.js new file mode 100644 index 00000000000000..0c826e5793a819 --- /dev/null +++ b/service-workers/service-worker/global-serviceworker.https.any.js @@ -0,0 +1,41 @@ +// META: title=serviceWorker on service worker global +// META: global=!default,serviceworker + +test(() => { + assert_equals(registration.installing, null, 'registration.installing'); + assert_equals(registration.waiting, null, 'registration.waiting'); + assert_equals(registration.active, null, 'registration.active'); + assert_true('serviceWorker' in self, 'self.serviceWorker exists'); + assert_equals(serviceWorker.state, 'parsed', 'serviceWorker.state'); +}, 'First run'); + +async_test((t) => { + assert_true('serviceWorker' in self, 'self.serviceWorker exists'); + serviceWorker.postMessage({ messageTest: true }); + + addEventListener('message', t.step_func((event) => { + if (!event.data.messageTest) return; + assert_equals(event.source, serviceWorker, 'event.source'); + t.done(); + })); +}, 'Can post message to self during startup'); + +async_test((t) => { + addEventListener('install', t.step_func_done(() => { + assert_true('serviceWorker' in self, 'self.serviceWorker exists'); + assert_equals(registration.installing, self.serviceWorker, 'registration.installing'); + assert_equals(registration.waiting, null, 'registration.waiting'); + assert_equals(registration.active, null, 'registration.active'); + assert_equals(serviceWorker.state, 'installing', 'serviceWorker.state'); + })); +}, 'During install'); + +async_test((t) => { + addEventListener('activate', t.step_func_done(() => { + assert_true('serviceWorker' in self, 'self.serviceWorker exists'); + assert_equals(registration.installing, null, 'registration.installing'); + assert_equals(registration.waiting, null, 'registration.waiting'); + assert_equals(registration.active, self.serviceWorker, 'registration.active'); + assert_equals(serviceWorker.state, 'activating', 'serviceWorker.state'); + })); +}, 'During activate'); From 33e5fc221b3732e96e084ec82f4df2ea73d739d8 Mon Sep 17 00:00:00 2001 From: Jake Archibald Date: Wed, 12 Jun 2019 10:13:18 +0100 Subject: [PATCH 2/5] Don't need `self` --- .../service-worker/global-serviceworker.https.any.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/service-workers/service-worker/global-serviceworker.https.any.js b/service-workers/service-worker/global-serviceworker.https.any.js index 0c826e5793a819..e82d4d9c24fdc8 100644 --- a/service-workers/service-worker/global-serviceworker.https.any.js +++ b/service-workers/service-worker/global-serviceworker.https.any.js @@ -23,7 +23,7 @@ async_test((t) => { async_test((t) => { addEventListener('install', t.step_func_done(() => { assert_true('serviceWorker' in self, 'self.serviceWorker exists'); - assert_equals(registration.installing, self.serviceWorker, 'registration.installing'); + assert_equals(registration.installing, serviceWorker, 'registration.installing'); assert_equals(registration.waiting, null, 'registration.waiting'); assert_equals(registration.active, null, 'registration.active'); assert_equals(serviceWorker.state, 'installing', 'serviceWorker.state'); @@ -35,7 +35,7 @@ async_test((t) => { assert_true('serviceWorker' in self, 'self.serviceWorker exists'); assert_equals(registration.installing, null, 'registration.installing'); assert_equals(registration.waiting, null, 'registration.waiting'); - assert_equals(registration.active, self.serviceWorker, 'registration.active'); + assert_equals(registration.active, serviceWorker, 'registration.active'); assert_equals(serviceWorker.state, 'activating', 'serviceWorker.state'); })); }, 'During activate'); From efb73fe88f6d1573ec0f5dc2f760b602584060b4 Mon Sep 17 00:00:00 2001 From: Jake Archibald Date: Wed, 12 Jun 2019 10:16:31 +0100 Subject: [PATCH 3/5] Add read only test --- service-workers/service-worker/global-serviceworker.https.any.js | 1 + 1 file changed, 1 insertion(+) diff --git a/service-workers/service-worker/global-serviceworker.https.any.js b/service-workers/service-worker/global-serviceworker.https.any.js index e82d4d9c24fdc8..0b63608352c3c6 100644 --- a/service-workers/service-worker/global-serviceworker.https.any.js +++ b/service-workers/service-worker/global-serviceworker.https.any.js @@ -7,6 +7,7 @@ test(() => { assert_equals(registration.active, null, 'registration.active'); assert_true('serviceWorker' in self, 'self.serviceWorker exists'); assert_equals(serviceWorker.state, 'parsed', 'serviceWorker.state'); + assert_readonly(self, 'serviceWorker', `self.serviceWorker is read only`); }, 'First run'); async_test((t) => { From 946fbab510fe2ea5f68e7abc9857edaef276e255 Mon Sep 17 00:00:00 2001 From: Jake Archibald Date: Wed, 12 Jun 2019 15:50:04 +0100 Subject: [PATCH 4/5] Adding comments & test the object doesn't change --- .../service-worker/global-serviceworker.https.any.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/service-workers/service-worker/global-serviceworker.https.any.js b/service-workers/service-worker/global-serviceworker.https.any.js index 0b63608352c3c6..947d7497c06436 100644 --- a/service-workers/service-worker/global-serviceworker.https.any.js +++ b/service-workers/service-worker/global-serviceworker.https.any.js @@ -10,20 +10,28 @@ test(() => { assert_readonly(self, 'serviceWorker', `self.serviceWorker is read only`); }, 'First run'); +// Cache this for later tests. +const initialServiceWorker = self.serviceWorker; + async_test((t) => { assert_true('serviceWorker' in self, 'self.serviceWorker exists'); serviceWorker.postMessage({ messageTest: true }); + // The rest of the rest runs once we receive the above message. addEventListener('message', t.step_func((event) => { + // Ignore unrelated messages. if (!event.data.messageTest) return; assert_equals(event.source, serviceWorker, 'event.source'); t.done(); })); }, 'Can post message to self during startup'); +// The test is registered now so there isn't a race condition when collecting tests, but the asserts +// don't happen until the 'install' event fires. async_test((t) => { addEventListener('install', t.step_func_done(() => { assert_true('serviceWorker' in self, 'self.serviceWorker exists'); + assert_equals(initialServiceWorker, serviceWorker, `self.serviceWorker hasn't changed`); assert_equals(registration.installing, serviceWorker, 'registration.installing'); assert_equals(registration.waiting, null, 'registration.waiting'); assert_equals(registration.active, null, 'registration.active'); @@ -31,9 +39,12 @@ async_test((t) => { })); }, 'During install'); +// The test is registered now so there isn't a race condition when collecting tests, but the asserts +// don't happen until the 'activate' event fires. async_test((t) => { addEventListener('activate', t.step_func_done(() => { assert_true('serviceWorker' in self, 'self.serviceWorker exists'); + assert_equals(initialServiceWorker, serviceWorker, `self.serviceWorker hasn't changed`); assert_equals(registration.installing, null, 'registration.installing'); assert_equals(registration.waiting, null, 'registration.waiting'); assert_equals(registration.active, serviceWorker, 'registration.active'); From df7f249e84d8c28547f53a54cd17001b0ed327c6 Mon Sep 17 00:00:00 2001 From: Jake Archibald Date: Wed, 12 Jun 2019 15:57:52 +0100 Subject: [PATCH 5/5] Swap order --- .../service-worker/global-serviceworker.https.any.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/service-workers/service-worker/global-serviceworker.https.any.js b/service-workers/service-worker/global-serviceworker.https.any.js index 947d7497c06436..489b37f83e1c21 100644 --- a/service-workers/service-worker/global-serviceworker.https.any.js +++ b/service-workers/service-worker/global-serviceworker.https.any.js @@ -31,7 +31,7 @@ async_test((t) => { async_test((t) => { addEventListener('install', t.step_func_done(() => { assert_true('serviceWorker' in self, 'self.serviceWorker exists'); - assert_equals(initialServiceWorker, serviceWorker, `self.serviceWorker hasn't changed`); + assert_equals(serviceWorker, initialServiceWorker, `self.serviceWorker hasn't changed`); assert_equals(registration.installing, serviceWorker, 'registration.installing'); assert_equals(registration.waiting, null, 'registration.waiting'); assert_equals(registration.active, null, 'registration.active'); @@ -44,7 +44,7 @@ async_test((t) => { async_test((t) => { addEventListener('activate', t.step_func_done(() => { assert_true('serviceWorker' in self, 'self.serviceWorker exists'); - assert_equals(initialServiceWorker, serviceWorker, `self.serviceWorker hasn't changed`); + assert_equals(serviceWorker, initialServiceWorker, `self.serviceWorker hasn't changed`); assert_equals(registration.installing, null, 'registration.installing'); assert_equals(registration.waiting, null, 'registration.waiting'); assert_equals(registration.active, serviceWorker, 'registration.active');