background-sync-sw-inner.https.html (1325B)
1 <!DOCTYPE html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script src="utils.js"></script> 5 <title>Fenced frame content to report the result of background sync's register in SW</title> 6 7 <body> 8 <script type="module"> 9 const [background_sync_register_key] = parseKeylist(); 10 const searchParams = new URL(location.href).searchParams; 11 const method = searchParams.get('method'); 12 const isPeriodic = searchParams.get('periodic'); 13 14 const getController = () => { 15 if (navigator.serviceWorker.controller) { 16 return navigator.serviceWorker.controller; 17 } 18 return new Promise(resolve => { 19 navigator.serviceWorker.addEventListener('controllerchange', () => { 20 resolve(navigator.serviceWorker.controller); 21 }); 22 }); 23 }; 24 25 const sendMessageToServiceWorker = async () => { 26 const ctrl = await getController(); 27 return new Promise(resolve => { 28 ctrl.postMessage({method, isPeriodic}); 29 navigator.serviceWorker.onmessage = e => { 30 resolve(e.data); 31 } 32 }); 33 }; 34 35 await navigator.serviceWorker.register( 36 "background-sync-sw.js", { scope: location.href, type: "module" }); 37 const data = await sendMessageToServiceWorker(); 38 39 writeValueToServer(background_sync_register_key, data); 40 </script> 41 </body>