diff --git a/html/browsers/browsing-the-web/back-forward-cache/resources/helper.sub.js b/html/browsers/browsing-the-web/back-forward-cache/resources/helper.sub.js index 4b42d91670252f..ff446f5ee9d3c8 100644 --- a/html/browsers/browsing-the-web/back-forward-cache/resources/helper.sub.js +++ b/html/browsers/browsing-the-web/back-forward-cache/resources/helper.sub.js @@ -187,16 +187,3 @@ function runBfcacheTest(params, description) { } }, description); } - -// Call clients.claim() on the service worker -async function claim(t, worker) { - const channel = new MessageChannel(); - const saw_message = new Promise(function(resolve) { - channel.port1.onmessage = t.step_func(function(e) { - assert_equals(e.data, 'PASS', 'Worker call to claim() should fulfill.'); - resolve(); - }); - }); - worker.postMessage({port: channel.port2}, [channel.port2]); - await saw_message; -} diff --git a/html/browsers/browsing-the-web/back-forward-cache/resources/service-worker.js b/html/browsers/browsing-the-web/back-forward-cache/resources/service-worker.js deleted file mode 100644 index 60dceb0a6a6f5f..00000000000000 --- a/html/browsers/browsing-the-web/back-forward-cache/resources/service-worker.js +++ /dev/null @@ -1,31 +0,0 @@ -self.addEventListener('message', function(event) { - self.clients.claim() - .then(function(result) { - if (result !== undefined) { - event.data.port.postMessage( - 'FAIL: claim() should be resolved with undefined'); - return; - } - event.data.port.postMessage('PASS'); - }) - .catch(function(error) { - event.data.port.postMessage('FAIL: exception: ' + error.name); - }); - }); - -self.addEventListener('fetch', e => { - if (e.request.url.match(/\/is-controlled/)) { - e.respondWith(new Response('controlled')); - } - else if (e.request.url.match(/\/get-clients-matchall/)) { - const options = { includeUncontrolled: true, type: 'all' }; - e.respondWith( - self.clients.matchAll(options) - .then(clients => { - const client_urls = []; - clients.forEach(client => client_urls.push(client.url)); - return new Response(JSON.stringify(client_urls)); - }) - ); - } - }); diff --git a/html/browsers/browsing-the-web/back-forward-cache/service-worker-clients-claim.https.html b/html/browsers/browsing-the-web/back-forward-cache/service-worker-clients-claim.https.html deleted file mode 100644 index d9540c221bdf21..00000000000000 --- a/html/browsers/browsing-the-web/back-forward-cache/service-worker-clients-claim.https.html +++ /dev/null @@ -1,71 +0,0 @@ -<!doctype html> -<meta name="timeout" content="long"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/common/utils.js"></script> -<script src="/common/dispatcher/dispatcher.js"></script> -<script src="resources/helper.sub.js"></script> -<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> -<script> -// Calling Clients.claim() on the service worker when a controlled page is in -// BFCache should evict the page from BFCache, as per -// https://github.com/w3c/ServiceWorker/issues/1038#issuecomment-291028845. -promise_test(async t => { - const pageA = new RemoteContext(token()); - const pageB = new RemoteContext(token()); - - const urlA = location.origin + executorPath + pageA.context_id; - const urlB = originCrossSite + executorPath + pageB.context_id; - - window.open(urlA, '_blank', 'noopener'); - await pageA.execute_script(waitForPageShow); - - // Register a service worker after `pageA` is loaded to make `pageA` - // uncontrolled at this time. - const workerUrl = - 'resources/service-worker.js?pipe=header(Service-Worker-Allowed,../)'; - const registration = - await service_worker_unregister_and_register(t, workerUrl, './'); - t.add_cleanup(_ => registration.unregister()); - await wait_for_state(t, registration.installing, 'activated'); - - // Navigate to `urlB`. - await pageA.execute_script( - (url) => { - prepareNavigation(() => { location.href = url; }); - }, - [urlB]); - await pageB.execute_script(waitForPageShow); - - // Call Clients.claim() on the service worker when `pageA` is in BFCache. - const controllerChanged = new Promise( - resolve => navigator.serviceWorker.oncontrollerchange = resolve); - await claim(t, registration.active); - await controllerChanged; - - // `pageA` doesn't appear in matchAll(). - const clients1 = await (await fetch('/get-clients-matchall')).json(); - assert_true(clients1.indexOf(urlA) < 0, - '1: matchAll() before back navigation'); - - // Back navigate and check that the page was evicted from BFCache. - await pageB.execute_script( - () => { - prepareNavigation(() => { history.back(); }); - } - ); - await pageA.execute_script(waitForPageShow); - await assert_not_bfcached(pageA); - - // After back navigation, `pageA` appear in matchAll(), because it was newly - // loaded and controlled by the service worker. - const clients2 = await (await fetch('/get-clients-matchall')).json(); - const controlled2 = await pageA.execute_script( - () => (navigator.serviceWorker.controller !== null)); - assert_true(clients2.indexOf(urlA) >= 0, - '2: matchAll() just after back navigation'); - assert_true(controlled2, - '2: pageA should be controlled just after back navigation'); - -}, 'Clients.claim() evicts pages that would be affected from BFCache'); -</script> diff --git a/html/browsers/browsing-the-web/back-forward-cache/service-worker-clients-matchall.https.html b/html/browsers/browsing-the-web/back-forward-cache/service-worker-clients-matchall.https.html deleted file mode 100644 index 069529dbe477c6..00000000000000 --- a/html/browsers/browsing-the-web/back-forward-cache/service-worker-clients-matchall.https.html +++ /dev/null @@ -1,76 +0,0 @@ -<!doctype html> -<meta name="timeout" content="long"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/common/utils.js"></script> -<script src="/common/dispatcher/dispatcher.js"></script> -<script src="resources/helper.sub.js"></script> -<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> -<script> -promise_test(async t => { - // Register a service worker and make this page controlled. - const workerUrl = - 'resources/service-worker.js?pipe=header(Service-Worker-Allowed,../)'; - const registration = - await service_worker_unregister_and_register(t, workerUrl, './'); - t.add_cleanup(_ => registration.unregister()); - await wait_for_state(t, registration.installing, 'activated'); - const controllerChanged = new Promise( - resolve => navigator.serviceWorker.oncontrollerchange = resolve); - await claim(t, registration.active); - await controllerChanged; - - const pageA = new RemoteContext(token()); - const pageB = new RemoteContext(token()); - - const urlA = location.origin + executorPath + pageA.context_id; - const urlB = originCrossSite + executorPath + pageB.context_id; - - // Open `urlA`. - window.open(urlA, '_blank', 'noopener'); - await pageA.execute_script(waitForPageShow); - - // Get Clients.matchAll() and check whether `pageA` is controlled. - // Actual `assert_*()` is called after `assert_bfcached()` below. - const clients1 = await (await fetch('/get-clients-matchall')).json(); - const controlled1 = await pageA.execute_script( - () => (navigator.serviceWorker.controller !== null)); - - // Navigate to `urlB` and get Clients.matchAll() when `urlA` is in BFCache. - await pageA.execute_script( - (url) => prepareNavigation(() => { - location.href = url; - }), - [urlB]); - await pageB.execute_script(waitForPageShow); - const clients2 = await (await fetch('/get-clients-matchall')).json(); - - // Back navigate and check whether the page is restored from BFCache. - await pageB.execute_script( - () => { - prepareNavigation(() => { history.back(); }); - } - ); - await pageA.execute_script(waitForPageShow); - await assert_bfcached(pageA); - - // Get Clients.matchAll() and check whether `pageA` is controlled. - const clients3 = await (await fetch('/get-clients-matchall')).json(); - const controlled3 = await pageA.execute_script( - () => (navigator.serviceWorker.controller !== null)); - - // Clients.matchAll() should not list `urlA` when it is in BFCache. - assert_true(clients1.indexOf(urlA) >= 0, - '1: matchAll() before navigation'); - assert_true(clients2.indexOf(urlA) < 0, - '2: matchAll() before back navigation'); - assert_true(clients3.indexOf(urlA) >= 0, - '3: matchAll() after back navigation'); - - // `pageA` should be controlled before/after BFCached. - assert_true(controlled1, - 'pageA should be controlled before BFCached'); - assert_true(controlled3, - 'pageA should be controlled after restored'); -}, 'Clients.matchAll() should not list pages in BFCache'); -</script> diff --git a/html/browsers/browsing-the-web/back-forward-cache/service-worker-controlled-after-restore.https.html b/html/browsers/browsing-the-web/back-forward-cache/service-worker-controlled-after-restore.https.html deleted file mode 100644 index 5a63b6e677af20..00000000000000 --- a/html/browsers/browsing-the-web/back-forward-cache/service-worker-controlled-after-restore.https.html +++ /dev/null @@ -1,54 +0,0 @@ -<!doctype html> -<meta name="timeout" content="long"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/common/utils.js"></script> -<script src="/common/dispatcher/dispatcher.js"></script> -<script src="resources/helper.sub.js"></script> -<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> -<script> -promise_test(async t => { - const pageA = new RemoteContext(token()); - const pageB = new RemoteContext(token()); - - const urlA = location.origin + executorPath + pageA.context_id; - const urlB = originCrossSite + executorPath + pageB.context_id; - - // Register a service worker. - const workerUrl = - 'resources/service-worker.js?pipe=header(Service-Worker-Allowed,../)'; - const registration = - await service_worker_unregister_and_register(t, workerUrl, './'); - t.add_cleanup(_ => registration.unregister()); - await wait_for_state(t, registration.installing, 'activated'); - - window.open(urlA, '_blank', 'noopener'); - await pageA.execute_script(waitForPageShow); - - assert_true( - await pageA.execute_script( - () => (navigator.serviceWorker.controller !== null)), - 'pageA should be controlled before navigation'); - - navigateAndThenBack(pageA, pageB, urlB); - await assert_bfcached(pageA); - - assert_true( - await pageA.execute_script( - () => (navigator.serviceWorker.controller !== null)), - 'navigator.serviceWorker.controller should be non-null ' + - 'after restored from BFCache'); - - const isControlled = await pageA.execute_script( - () => fetch('/is-controlled').then(r => r.text())); - - assert_true( - await pageA.execute_script( - () => (navigator.serviceWorker.controller !== null)), - 'navigator.serviceWorker.controller should be non-null ' + - 'after restored from BFCache and after fetch'); - - assert_equals(isControlled, 'controlled', - 'fetch should be intercepted after restored from BFCache'); -}, 'Pages should remain controlled after restored from BFCache'); -</script> diff --git a/html/browsers/browsing-the-web/back-forward-cache/service-worker-unregister.https.html b/html/browsers/browsing-the-web/back-forward-cache/service-worker-unregister.https.html deleted file mode 100644 index 1c3f81153c2a17..00000000000000 --- a/html/browsers/browsing-the-web/back-forward-cache/service-worker-unregister.https.html +++ /dev/null @@ -1,67 +0,0 @@ -<!doctype html> -<meta name="timeout" content="long"> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/common/utils.js"></script> -<script src="/common/dispatcher/dispatcher.js"></script> -<script src="resources/helper.sub.js"></script> -<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> -<script> -// When a service worker is unregistered when a controlled page is in BFCache, -// the page can be still restored from BFCache and remain controlled by the -// service worker. -promise_test(async t => { - // Register a service worker and make this page controlled. - const workerUrl = - 'resources/service-worker.js?pipe=header(Service-Worker-Allowed,../)'; - const registration = - await service_worker_unregister_and_register(t, workerUrl, './'); - t.add_cleanup(_ => registration.unregister()); - await wait_for_state(t, registration.installing, 'activated'); - const controllerChanged = new Promise( - resolve => navigator.serviceWorker.oncontrollerchange = resolve); - await claim(t, registration.active); - await controllerChanged; - - const pageA = new RemoteContext(token()); - const pageB = new RemoteContext(token()); - - const urlA = location.origin + executorPath + pageA.context_id; - const urlB = originCrossSite + executorPath + pageB.context_id; - - // Open `urlA`. - window.open(urlA, '_blank', 'noopener'); - await pageA.execute_script(waitForPageShow); - - assert_true( - await pageA.execute_script( - () => (navigator.serviceWorker.controller !== null)), - 'pageA should be controlled before navigation'); - - // Navigate to `urlB`. - await pageA.execute_script( - (url) => prepareNavigation(() => { - location.href = url; - }), - [urlB]); - await pageB.execute_script(waitForPageShow); - - // Unregister the service worker when the controlled `pageA` is in BFCache. - await registration.unregister(); - - // Back navigate and check whether the page is restored from BFCache. - await pageB.execute_script( - () => { - prepareNavigation(() => { history.back(); }); - } - ); - await pageA.execute_script(waitForPageShow); - await assert_not_bfcached(pageA); - - assert_true( - await pageA.execute_script( - () => (navigator.serviceWorker.controller === null)), - 'pageA should not be controlled'); - -}, 'Unregister service worker while a controlled page is in BFCache'); -</script>