From 4b90437e8c2a8cca4b8c4af28d1893ac6f0fc61c Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Wed, 10 Aug 2016 19:35:08 -0400 Subject: [PATCH 1/3] Add multi-global tests for service worker URL parsing See https://github.com/slightlyoff/ServiceWorker/issues/922. --- .../multi-globals/current/current.https.html | 2 + .../multi-globals/current/test-sw.js | 5 ++ .../incumbent/incumbent.https.html | 20 ++++++ .../multi-globals/incumbent/test-sw.js | 5 ++ .../relevant/relevant.https.html | 2 + .../multi-globals/relevant/test-sw.js | 5 ++ .../service-worker/multi-globals/test-sw.js | 5 ++ .../multi-globals/url-parsing.https.html | 67 +++++++++++++++++++ 8 files changed, 111 insertions(+) create mode 100644 service-workers/service-worker/multi-globals/current/current.https.html create mode 100644 service-workers/service-worker/multi-globals/current/test-sw.js create mode 100644 service-workers/service-worker/multi-globals/incumbent/incumbent.https.html create mode 100644 service-workers/service-worker/multi-globals/incumbent/test-sw.js create mode 100644 service-workers/service-worker/multi-globals/relevant/relevant.https.html create mode 100644 service-workers/service-worker/multi-globals/relevant/test-sw.js create mode 100644 service-workers/service-worker/multi-globals/test-sw.js create mode 100644 service-workers/service-worker/multi-globals/url-parsing.https.html diff --git a/service-workers/service-worker/multi-globals/current/current.https.html b/service-workers/service-worker/multi-globals/current/current.https.html new file mode 100644 index 00000000000000..82a48d409901b4 --- /dev/null +++ b/service-workers/service-worker/multi-globals/current/current.https.html @@ -0,0 +1,2 @@ + +Current page used as a test helper diff --git a/service-workers/service-worker/multi-globals/current/test-sw.js b/service-workers/service-worker/multi-globals/current/test-sw.js new file mode 100644 index 00000000000000..4b250ca1de9123 --- /dev/null +++ b/service-workers/service-worker/multi-globals/current/test-sw.js @@ -0,0 +1,5 @@ +this.addEventListener('fetch', event => { + if (event.request.url.includes('test.txt')) { + event.respondWith(new Response('current')); + } +}); diff --git a/service-workers/service-worker/multi-globals/incumbent/incumbent.https.html b/service-workers/service-worker/multi-globals/incumbent/incumbent.https.html new file mode 100644 index 00000000000000..4585f15b0f45d0 --- /dev/null +++ b/service-workers/service-worker/multi-globals/incumbent/incumbent.https.html @@ -0,0 +1,20 @@ + +Incumbent page used as a test helper + + + + + diff --git a/service-workers/service-worker/multi-globals/incumbent/test-sw.js b/service-workers/service-worker/multi-globals/incumbent/test-sw.js new file mode 100644 index 00000000000000..73e9490b05c869 --- /dev/null +++ b/service-workers/service-worker/multi-globals/incumbent/test-sw.js @@ -0,0 +1,5 @@ +this.addEventListener('fetch', event => { + if (event.request.url.includes('test.txt')) { + event.respondWith(new Response('incumbent')); + } +}); diff --git a/service-workers/service-worker/multi-globals/relevant/relevant.https.html b/service-workers/service-worker/multi-globals/relevant/relevant.https.html new file mode 100644 index 00000000000000..44f42eda493c27 --- /dev/null +++ b/service-workers/service-worker/multi-globals/relevant/relevant.https.html @@ -0,0 +1,2 @@ + +Relevant page used as a test helper diff --git a/service-workers/service-worker/multi-globals/relevant/test-sw.js b/service-workers/service-worker/multi-globals/relevant/test-sw.js new file mode 100644 index 00000000000000..4b4536c410b50f --- /dev/null +++ b/service-workers/service-worker/multi-globals/relevant/test-sw.js @@ -0,0 +1,5 @@ +this.addEventListener('fetch', event => { + if (event.request.url.includes('test.txt')) { + event.respondWith(new Response('relevant')); + } +}); diff --git a/service-workers/service-worker/multi-globals/test-sw.js b/service-workers/service-worker/multi-globals/test-sw.js new file mode 100644 index 00000000000000..bb814b7d16add2 --- /dev/null +++ b/service-workers/service-worker/multi-globals/test-sw.js @@ -0,0 +1,5 @@ +this.addEventListener('fetch', event => { + if (event.request.url.includes('test.txt')) { + event.respondWith(new Response('entry')); + } +}); diff --git a/service-workers/service-worker/multi-globals/url-parsing.https.html b/service-workers/service-worker/multi-globals/url-parsing.https.html new file mode 100644 index 00000000000000..55d0ec5508da33 --- /dev/null +++ b/service-workers/service-worker/multi-globals/url-parsing.https.html @@ -0,0 +1,67 @@ + +register()/getRegistration() URL parsing, with multiple globals in play + + + + + + + + + + + + + From d66e126edbc4120671775a891ae7222c1b6e85f2 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Thu, 9 Feb 2017 13:46:52 -0500 Subject: [PATCH 2/3] Respond to review feedback --- .../service-worker/multi-globals/current/test-sw.js | 10 ++++++++++ .../service-worker/multi-globals/incumbent/test-sw.js | 10 ++++++++++ .../service-worker/multi-globals/relevant/test-sw.js | 10 ++++++++++ .../service-worker/multi-globals/test-sw.js | 10 ++++++++++ .../multi-globals/url-parsing.https.html | 5 ++++- 5 files changed, 44 insertions(+), 1 deletion(-) diff --git a/service-workers/service-worker/multi-globals/current/test-sw.js b/service-workers/service-worker/multi-globals/current/test-sw.js index 4b250ca1de9123..ca340943068c2b 100644 --- a/service-workers/service-worker/multi-globals/current/test-sw.js +++ b/service-workers/service-worker/multi-globals/current/test-sw.js @@ -1,3 +1,13 @@ +'use strict'; + +this.addEventListener('install', event => { + this.skipWaiting(); +}); + +this.addEventListener('activate', event => { + clients.claim(); +}); + this.addEventListener('fetch', event => { if (event.request.url.includes('test.txt')) { event.respondWith(new Response('current')); diff --git a/service-workers/service-worker/multi-globals/incumbent/test-sw.js b/service-workers/service-worker/multi-globals/incumbent/test-sw.js index 73e9490b05c869..2f970a25ce6609 100644 --- a/service-workers/service-worker/multi-globals/incumbent/test-sw.js +++ b/service-workers/service-worker/multi-globals/incumbent/test-sw.js @@ -1,3 +1,13 @@ +'use strict'; + +this.addEventListener('install', event => { + this.skipWaiting(); +}); + +this.addEventListener('activate', event => { + clients.claim(); +}); + this.addEventListener('fetch', event => { if (event.request.url.includes('test.txt')) { event.respondWith(new Response('incumbent')); diff --git a/service-workers/service-worker/multi-globals/relevant/test-sw.js b/service-workers/service-worker/multi-globals/relevant/test-sw.js index 4b4536c410b50f..3cf80c54cb0ad1 100644 --- a/service-workers/service-worker/multi-globals/relevant/test-sw.js +++ b/service-workers/service-worker/multi-globals/relevant/test-sw.js @@ -1,3 +1,13 @@ +'use strict'; + +this.addEventListener('install', event => { + this.skipWaiting(); +}); + +this.addEventListener('activate', event => { + clients.claim(); +}); + this.addEventListener('fetch', event => { if (event.request.url.includes('test.txt')) { event.respondWith(new Response('relevant')); diff --git a/service-workers/service-worker/multi-globals/test-sw.js b/service-workers/service-worker/multi-globals/test-sw.js index bb814b7d16add2..f5a6cc5f9dc880 100644 --- a/service-workers/service-worker/multi-globals/test-sw.js +++ b/service-workers/service-worker/multi-globals/test-sw.js @@ -1,3 +1,13 @@ +'use strict'; + +this.addEventListener('install', event => { + this.skipWaiting(); +}); + +this.addEventListener('activate', event => { + clients.claim(); +}); + this.addEventListener('fetch', event => { if (event.request.url.includes('test.txt')) { event.respondWith(new Response('entry')); diff --git a/service-workers/service-worker/multi-globals/url-parsing.https.html b/service-workers/service-worker/multi-globals/url-parsing.https.html index 55d0ec5508da33..a234378284e438 100644 --- a/service-workers/service-worker/multi-globals/url-parsing.https.html +++ b/service-workers/service-worker/multi-globals/url-parsing.https.html @@ -26,7 +26,10 @@ return frames[0].testRegister(); }).then(r => { registration = r; - return fetch('test.txt'); + const newestWorker = r.installing || r.waiting || r.active; + return wait_for_state(t, newestWorker, 'activated'); + }).then(() => { + return fetch('relevant/test.txt'); }) .then(response => response.text()) .then(text => { From 07b7dd3bcffff280ccbda3c2333d72197a8a2a26 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Fri, 10 Feb 2017 13:07:23 -0500 Subject: [PATCH 3/3] Don't compare objects from different realms directly --- .../service-worker/multi-globals/url-parsing.https.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/service-workers/service-worker/multi-globals/url-parsing.https.html b/service-workers/service-worker/multi-globals/url-parsing.https.html index a234378284e438..1330d07805bb85 100644 --- a/service-workers/service-worker/multi-globals/url-parsing.https.html +++ b/service-workers/service-worker/multi-globals/url-parsing.https.html @@ -61,7 +61,9 @@ }) .then(gottenRegistration => { assert_not_equals(registration, null, 'the registration should not be null'); - assert_equals(gottenRegistration, registration, 'the retrieved registration should be equal to the original'); + assert_not_equals(gottenRegistration, null, 'the registration from the other frame should not be null'); + assert_equals(gottenRegistration.scope, registration.scope, + 'the retrieved registration\'s scope should be equal to the original\'s scope'); return registration.unregister(); });