register-service-worker-iframe.https.html (2478B)
1 <!doctype html> 2 <body> 3 <script src=/resources/testharness.js></script> 4 <script src=/common/utils.js></script> 5 <script src=/fenced-frame/resources/utils.js></script> 6 <script src=/shared-storage/resources/util.js></script> 7 <script src=/shared-storage/resources/util.sub.js></script> 8 <script src=/service-workers/service-worker/resources/test-helpers.sub.js></script> 9 <script> 10 const INTERMEDIATE_FRAME_SUFFIX = 11 'able-fetch-request-fallback-to-network-iframe.https.html' 12 const ORIGIN = new URL("", location.href).origin; 13 14 window.addEventListener('message', async function handler(event) { 15 const data = event.data; 16 if (data.script && data.scope && data.port) { 17 var absoluteScope = (new URL(data.scope, window.location).href); 18 let oldReg =await navigator.serviceWorker.getRegistration(data.scope); 19 if (oldReg && oldReg.scope === absoluteScope) { 20 await oldReg.unregister(); 21 } 22 let reg = await navigator.serviceWorker.register(data.script, 23 { scope: data.scope }); 24 let worker = reg.installing; 25 await new Promise(function(resolve) { 26 worker.addEventListener('statechange', function() { 27 if (worker.state == 'activated') { 28 resolve(); 29 } 30 }); 31 }); 32 assert_not_equals(worker, null, 'worker is installing'); 33 34 let result = await loadNestedSharedStorageFrameInNewFrame({ 35 key: 'c', value: 'd', 36 hasSharedStorageWritableAttribute: true, 37 // Same-origin to this frame, cross-origin to top. 38 isSameOrigin: true, 39 }); 40 const urls = [ 41 { 42 "url": ORIGIN + data.scope + INTERMEDIATE_FRAME_SUFFIX, 43 "mode": "navigate", 44 "SSWHeader": "null" 45 }, 46 { 47 "url": ORIGIN + "/resources/testharness.js", 48 "mode": "no-cors", 49 "SSWHeader": "null" 50 }, 51 { 52 "url": ORIGIN + result.nestedFrameUrl, 53 "mode": "navigate", 54 "SSWHeader": "null" 55 }, 56 ]; 57 await checkInterceptedUrls(worker, urls); 58 await verifyKeyValueForOrigin('c', 'd', ORIGIN); 59 await deleteKeyForOrigin('c', ORIGIN); 60 data.port.postMessage({msg: 'test completed'}); 61 reg.unregister() 62 window.removeEventListener('message', handler); 63 } 64 }); 65 </script> 66 </body>