shared-storage-writable-service-worker-img.tentative.https.sub.html (4211B)
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=/service-workers/service-worker/resources/test-helpers.sub.js></script> 9 <script> 10 const SCOPE = '/shared-storage/resources/' 11 + 'shared-storage-writable-fetch-request-fallback-to-network-iframe.https.html'; 12 const SCRIPT = '/shared-storage/resources/' 13 + 'shared-storage-writable-fetch-request-fallback-to-network-worker.js'; 14 const SAME_ORIGIN = new URL("", location.href).origin; 15 const CROSS_ORIGIN = 'https://{{domains[www]}}:{{ports[https][0]}}'; 16 17 async function loadSharedStorageImageInNewFrame(data) { 18 let {test, key, value, hasSharedStorageWritableAttribute, isSameOrigin} 19 = data; 20 21 const framePromise = new Promise((resolve, reject) => { 22 let frame = document.createElement('iframe'); 23 frame.src = SCOPE; 24 frame.onload = function() { 25 resolve(frame); 26 }; 27 frame.onerror = function() { 28 reject(new Error('Iframe load failed')); 29 }; 30 test.add_cleanup(function() { 31 frame.remove(); 32 }); 33 document.body.appendChild(frame); 34 }); 35 let frame = await framePromise; 36 37 const sameOriginImgSrc = `/shared-storage/resources/` + 38 `shared-storage-writable-pixel.png?key=${key}&value=${value}`; 39 const imgSrc = isSameOrigin ? 40 sameOriginImgSrc : 41 CROSS_ORIGIN + sameOriginImgSrc; 42 return { 43 loadedImage: frame.contentWindow.loadImage(imgSrc, 44 hasSharedStorageWritableAttribute), 45 imageUrl: imgSrc, 46 }; 47 } 48 49 promise_test(async t => { 50 await service_worker_unregister(t, SCOPE); 51 let reg = await navigator.serviceWorker.register(SCRIPT, 52 { scope: SCOPE }); 53 t.add_cleanup(_ => reg.unregister()); 54 let worker = reg.installing; 55 await wait_for_state(t, worker, 'activated'); 56 assert_not_equals(worker, null, 'worker is installing'); 57 58 let {loadedImage, imageUrl} = await loadSharedStorageImageInNewFrame({ 59 test: t, 60 key: 'a', value: 'b', 61 hasSharedStorageWritableAttribute: true, 62 isSameOrigin: true, 63 }); 64 checkInterceptedUrls(worker, [ 65 {"url": SAME_ORIGIN + SCOPE, "mode": "navigate", "SSWHeader": "null"}, 66 { 67 "url": SAME_ORIGIN + "/resources/testharness.js", 68 "mode": "no-cors", 69 "SSWHeader": "null" 70 }, 71 {"url": SAME_ORIGIN + imageUrl, "mode": "no-cors", "SSWHeader": "null"}, 72 ]); 73 await verifyKeyValueForOrigin('a', 'b', SAME_ORIGIN); 74 await deleteKeyForOrigin('a', SAME_ORIGIN); 75 }, 'test <img sharedstoragewritable src=[url]> via JS from service worker ' 76 + 'for same origin img'); 77 78 promise_test(async t => { 79 await service_worker_unregister(t, SCOPE); 80 let reg = await navigator.serviceWorker.register(SCRIPT, 81 { scope: SCOPE }); 82 t.add_cleanup(_ => reg.unregister()); 83 let worker = reg.installing; 84 await wait_for_state(t, worker, 'activated'); 85 assert_not_equals(worker, null, 'worker is installing'); 86 87 let {loadedImage, imageUrl} = await loadSharedStorageImageInNewFrame({ 88 test: t, 89 key: 'c', value: 'd', 90 hasSharedStorageWritableAttribute: true, 91 isSameOrigin: false, 92 }); 93 checkInterceptedUrls(worker, [ 94 {"url": SAME_ORIGIN + SCOPE, "mode": "navigate", "SSWHeader": "null"}, 95 { 96 "url": SAME_ORIGIN + "/resources/testharness.js", 97 "mode": "no-cors", 98 "SSWHeader": "null" 99 }, 100 {"url": imageUrl, "mode": "no-cors", "SSWHeader": "null"}, 101 ]); 102 await verifyKeyValueForOrigin('c', 'd', CROSS_ORIGIN); 103 await deleteKeyForOrigin('c', CROSS_ORIGIN); 104 }, 'test <img sharedstoragewritable src=[url]> via JS from service worker ' 105 + 'for cross origin img'); 106 </script> 107 </body>