shared-storage-writable-service-worker-iframe.tentative.https.sub.html (3711B)
1 <!doctype html> 2 <body> 3 <script src=/resources/testharness.js></script> 4 <script src=/resources/testharnessreport.js></script> 5 <script src=/common/utils.js></script> 6 <script src=/fenced-frame/resources/utils.js></script> 7 <script src=/shared-storage/resources/util.js></script> 8 <script src=/shared-storage/resources/util.sub.js></script> 9 <script src=/service-workers/service-worker/resources/test-helpers.sub.js></script> 10 <script> 11 const SCOPE = '/shared-storage/resources/shared-storage-writ'; 12 const INTERMEDIATE_FRAME_SUFFIX = 13 'able-fetch-request-fallback-to-network-iframe.https.html' 14 const SCRIPT = '/shared-storage/resources/' 15 + 'shared-storage-writable-fetch-request-fallback-to-network-worker.js'; 16 const WORKER_FRAME = '/shared-storage/resources/' 17 + 'register-service-worker-iframe.https.html'; 18 const SAME_ORIGIN = new URL("", location.href).origin; 19 const CROSS_ORIGIN = 'https://{{domains[www]}}:{{ports[https][0]}}'; 20 21 promise_test(async t => { 22 await service_worker_unregister(t, SCOPE); 23 let reg = await navigator.serviceWorker.register(SCRIPT, 24 { scope: SCOPE }); 25 t.add_cleanup(_ => reg.unregister()); 26 let worker = reg.installing; 27 await wait_for_state(t, worker, 'activated'); 28 assert_not_equals(worker, null, 'worker is installing'); 29 30 let {frame, nestedFrame, nestedFrameUrl} = 31 await loadNestedSharedStorageFrameInNewFrame({ 32 key: 'a', value: 'b', 33 hasSharedStorageWritableAttribute: true, 34 isSameOrigin: true, 35 }); 36 t.add_cleanup(function() { 37 frame.remove(); 38 }); 39 checkInterceptedUrls(worker, [ 40 { 41 "url": SAME_ORIGIN + SCOPE + INTERMEDIATE_FRAME_SUFFIX, 42 "mode": "navigate", 43 "SSWHeader": "null" 44 }, 45 { 46 "url": SAME_ORIGIN + "/resources/testharness.js", 47 "mode": "no-cors", 48 "SSWHeader": "null" 49 }, 50 { 51 "url": SAME_ORIGIN + nestedFrameUrl, 52 "mode": "navigate", 53 "SSWHeader": "null" 54 }, 55 ]); 56 await verifyKeyValueForOrigin('a', 'b', SAME_ORIGIN); 57 await deleteKeyForOrigin('a', SAME_ORIGIN); 58 }, 'test <iframe sharedstoragewritable src=[url]> via JS from service ' 59 + 'worker for same origin iframe'); 60 61 promise_test(async t => { 62 const workerFramePromise = new Promise((resolve, reject) => { 63 let workerFrame = document.createElement('iframe'); 64 workerFrame.src = CROSS_ORIGIN + WORKER_FRAME; 65 workerFrame.id = 'worker_frame'; 66 workerFrame.onload = function() { 67 resolve(workerFrame); 68 }; 69 workerFrame.onerror = function() { 70 reject(new Error('Worker frame load failed')); 71 }; 72 t.add_cleanup(function() { 73 workerFrame.remove(); 74 }); 75 document.body.appendChild(workerFrame); 76 }); 77 let workerFrame = await workerFramePromise; 78 79 const messagePromise = new Promise((resolve, reject) => { 80 let channel = new MessageChannel(); 81 channel.port1.onmessage = function(e) { 82 resolve(e.data); 83 }; 84 let message = { 85 script: SCRIPT, 86 scope: SCOPE, 87 port: channel.port2, 88 }; 89 document.getElementById('worker_frame').contentWindow 90 .postMessage(message, "*", 91 [channel.port2]); 92 }); 93 let {msg} = await messagePromise; 94 assert_equals(msg, 'test completed'); 95 }, 'test <iframe sharedstoragewritable src=[url]> via JS from service ' 96 + 'worker for cross origin iframe'); 97 </script> 98 </body>