shared-storage-writable-fetch-request-in-sandboxed-iframe-inner.https.sub.html (1976B)
1 <!doctype html> 2 <body> 3 <script src=/resources/testharness.js></script> 4 <script src=/shared-storage/resources/util.js></script> 5 <script> 6 7 async function init() { 8 // Make fetch request that sets (expectedKey, expectedValue) to shared storage 9 // via response header. 10 let {expectedKey, expectedValue} = parseExpectedKeyAndValueData(); 11 const rawWriteHeader = `set;key=${expectedKey};value=${expectedValue}`; 12 const writeHeader = encodeURIComponent(rawWriteHeader); 13 const fetchUrl = 14 `/shared-storage/resources/shared-storage-write-notify-parent.py` + 15 `?write=${writeHeader}`; 16 let frame = document.createElement('iframe'); 17 let parentOrOpener = window.opener || window.parent; 18 fetch(fetchUrl, {sharedStorageWritable: true}) 19 .then(response => response.text()) 20 .then(htmlContent => { 21 frame.srcdoc = htmlContent; 22 23 const promise = new Promise((resolve, reject) => { 24 window.addEventListener('message', async function handler(evt) { 25 if (evt.source === frame.contentWindow && 26 evt.data.sharedStorageWritableHeader) { 27 assert_equals(evt.data.sharedStorageWritableHeader, '?1'); 28 parentOrOpener.postMessage({ 29 sharedStorageFetchStatus: "success", 30 sharedStorageWritableHeader: 31 evt.data.sharedStorageWritableHeader}, 32 "*"); 33 document.body.removeChild(frame); 34 window.removeEventListener('message', handler); 35 resolve(); 36 } 37 }); 38 window.addEventListener('error', () => { 39 reject(new Error('Fetch or navigation error')); 40 }); 41 }); 42 43 // Navigate and wait for notification. 44 document.body.appendChild(frame); 45 return promise; 46 }) 47 .catch(error => { 48 parentOrOpener.postMessage({sharedStorageFetchStatus: error}, "*"); 49 }); 50 } 51 52 init(); 53 </script> 54 </body>