shared-storage-writable-iframe-request-in-sandboxed-iframe-inner.https.sub.html (1645B)
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 // Create iframe 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 iframeSrc = 14 `/shared-storage/resources/shared-storage-write-notify-parent.py` + 15 `?write=${writeHeader}`; 16 let frame = document.createElement('iframe'); 17 frame.src = iframeSrc; 18 frame.sharedStorageWritable = true; 19 20 // We pass the message on to the parent/opener. 21 const promise = new Promise((resolve, reject) => { 22 window.addEventListener('message', async function handler(evt) { 23 if (evt.source === frame.contentWindow && 24 evt.data.sharedStorageWritableHeader) { 25 assert_equals(evt.data.sharedStorageWritableHeader, '?1'); 26 let parentOrOpener = window.opener || window.parent; 27 parentOrOpener.postMessage({sharedStorageWritableHeader: 28 evt.data.sharedStorageWritableHeader}, 29 "*"); 30 document.body.removeChild(frame); 31 window.removeEventListener('message', handler); 32 resolve(); 33 } 34 }); 35 window.addEventListener('error', () => { 36 reject(new Error('Navigation error')); 37 }); 38 }); 39 40 // Navigate and wait for notification. 41 document.body.appendChild(frame); 42 await promise; 43 } 44 45 init(); 46 </script> 47 </body>