partitioned-service-worker-iframe-claim.html (1941B)
1 <!DOCTYPE html> 2 <title>Service Worker: 3P iframe for partitioned service workers</title> 3 <script src="./test-helpers.sub.js"></script> 4 <script src="/common/get-host-info.sub.js"></script> 5 <script src="./partitioned-utils.js"></script> 6 7 <body> 8 <script> 9 // 1p mode will respond to requests for its current controller and 10 // postMessage when its controller changes. 11 async function onLoad1pMode(){ 12 self.addEventListener('message', evt => { 13 if(!evt.data) 14 return; 15 16 if (evt.data.type === "get-controller") { 17 window.parent.postMessage({controller: navigator.serviceWorker.controller}); 18 } 19 }); 20 21 navigator.serviceWorker.addEventListener('controllerchange', evt => { 22 window.parent.postMessage({status: "success", context: "1p"}, '*'); 23 }); 24 } 25 26 // 3p mode will tell its SW to claim and then postMessage its results 27 // automatically. 28 async function onLoad3pMode() { 29 reg = await setupServiceWorker(); 30 31 if(navigator.serviceWorker.controller != null){ 32 //This iframe is already under control of a service worker, testing for 33 // a controller change will timeout. Return a failure. 34 window.parent.postMessage({status: "failure", context: "3p"}, '*'); 35 return; 36 } 37 38 // Once this client is claimed, let the test know. 39 navigator.serviceWorker.addEventListener('controllerchange', evt => { 40 window.parent.postMessage({status: "success", context: "3p"}, '*'); 41 }); 42 43 // Trigger the SW to claim. 44 reg.active.postMessage({type: "claim"}); 45 46 } 47 48 const request_url = new URL(window.location.href); 49 var url_search = request_url.search.substr(1); 50 51 if(url_search == "1p-mode") { 52 self.addEventListener('load', onLoad1pMode); 53 } 54 else if(url_search == "3p-mode") { 55 self.addEventListener('load', onLoad3pMode); 56 } 57 // Else do nothing. 58 </script> 59 </body>