clients-matchall.https.html (1899B)
1 <!DOCTYPE html> 2 <title>Service Worker: Clients.matchAll with a prerender page</title> 3 <meta name="timeout" content="long"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="/common/utils.js"></script> 7 <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> 8 <script src="../resources/utils.js"></script> 9 <script src="resources/utils.js"></script> 10 11 <body> 12 <script> 13 setup(() => assertSpeculationRulesIsSupported()); 14 15 promise_test(async t => { 16 const uid = token(); 17 const workerUrl = 'resources/clients-matchall-service-worker.js'; 18 const pageUrl = `resources/prerendered-page.html?uid=${uid}`; 19 20 // Start a service worker. 21 const registration = 22 await service_worker_unregister_and_register(t, workerUrl, workerUrl); 23 t.add_cleanup(_ => registration.unregister()); 24 25 // Observe the message from a prerendered page. 26 const bc = new PrerenderChannel('prerender-channel', uid); 27 t.add_cleanup(_ => bc.close()); 28 const messagePromise = new Promise(resolve => { 29 bc.addEventListener('message', e => { 30 resolve(e.data); 31 }, {once:true}); 32 }); 33 34 startPrerendering(pageUrl); 35 36 const result = await messagePromise; 37 assert_equals(result, 'prerender success'); 38 39 // The service worker returns the list of client urls exposed by 40 // Clients#matchAll(). 41 const message = await new Promise(resolve => { 42 navigator.serviceWorker.onmessage = resolve; 43 get_newest_worker(registration).postMessage('invoke clients.matchAll()'); 44 }); 45 const clients = message.data; 46 47 // Don't use `assert_array_equals` as the clients may contain unrelated pages. 48 assert_true(clients.includes(window.location.href)); 49 assert_true(clients.includes(new URL(pageUrl, location).toString())); 50 }, 'The client urls (including a prerender page) are exposed by ' + 51 'Clients#matchAll()'); 52 53 </script>