origin-from-messageevent-opaque.window.js (2221B)
1 // META: title=`Origin.from(MessageEvent)` from opaque origins. 2 // META: script=/common/get-host-info.sub.js 3 4 async_test(t => { 5 const el = document.createElement('iframe'); 6 el.sandbox = "allow-scripts"; 7 el.srcdoc = `<script>window.top.postMessage("Hi.", "*");<\/script>`; 8 window.addEventListener("message", t.step_func(e => { 9 if (e.source === el.contentWindow) { 10 const origin = Origin.from(e); 11 assert_true(!!origin); 12 assert_true(origin.opaque); 13 t.done(); 14 } 15 })); 16 document.body.appendChild(el); 17 }, `Origin.from(MessageEvent) returns an opaque origin for a sandboxed frame.`); 18 19 async_test(t => { 20 const el = document.createElement('iframe'); 21 el.sandbox = "allow-scripts"; 22 el.srcdoc = ` 23 <script> 24 window.top.postMessage("Hi.", "*"); 25 window.top.postMessage("Bye.", "*"); 26 <\/script>`; 27 let eventOrigin = null; 28 window.addEventListener("message", t.step_func(e => { 29 if (e.source === el.contentWindow) { 30 const origin = Origin.from(e); 31 assert_true(!!origin); 32 assert_true(origin.opaque); 33 if (eventOrigin) { 34 assert_true(eventOrigin.isSameOrigin(origin)); 35 t.done(); 36 } else { 37 eventOrigin = origin; 38 } 39 } 40 })); 41 document.body.appendChild(el); 42 }, `Origin.from(MessageEvent) returns the same opaque origin for each message from a sandboxed frame.`); 43 44 async_test(t => { 45 const el = document.createElement('iframe'); 46 el.sandbox = "allow-scripts"; 47 el.srcdoc = ` 48 <script> 49 window.top.postMessage("Hi.", "*"); 50 window.addEventListener("message", e => { navigation.reload(); }); 51 <\/script>`; 52 let eventOrigin = null; 53 window.addEventListener("message", t.step_func(e => { 54 if (e.source === el.contentWindow) { 55 const origin = Origin.from(e); 56 assert_true(!!origin); 57 assert_true(origin.opaque); 58 if (eventOrigin) { 59 assert_false(eventOrigin.isSameOrigin(origin)); 60 t.done(); 61 } else { 62 eventOrigin = origin; 63 e.source.postMessage("Reload thyself.", "*"); 64 } 65 } 66 })); 67 document.body.appendChild(el); 68 }, `Origin.from(MessageEvent) returns distinct opaque origins for each message from a reloaded sandboxed frame.`);