1<!DOCTYPE html> 2<meta charset="utf-8"> 3<title>Incumbent settings object for host functions</title> 4<script src="/resources/testharness.js"></script> 5<script src="/resources/testharnessreport.js"></script> 6 7<!-- This is the entry page. --> 8 9<iframe src="resources/incumbent-incumbent.html"></iframe> 10 11<script> 12setup({ explicit_done: true }); 13 14// postMessage should pick the incumbent page as its .source value to set on the MessageEvent, even 15// inside host functions. 16const expectedURL = (new URL("resources/incumbent-incumbent.html", location.href)).href; 17 18let testId = 0; 19 20window.onload = () => { 21 const relevantWindow = frames[0].document.querySelector("#r").contentWindow; 22 23 function setupTest(t) { 24 ++testId; 25 const thisTestId = testId; 26 27 relevantWindow.addEventListener("messagereceived", t.step_func(e => { 28 const [receivedTestId, receivedSourceURL] = e.detail; 29 30 if (receivedTestId !== thisTestId) { 31 return; 32 } 33 34 assert_equals(receivedSourceURL, expectedURL); 35 t.done(); 36 })); 37 38 return thisTestId; 39 } 40 41 async_test(t => { 42 const thisTestId = setupTest(t); 43 44 frames[0].runWindowPostMessageVeryIndirectly(thisTestId, "*"); 45 }, "Sanity check: this all works as expected synchronously"); 46 47 async_test(t => { 48 const thisTestId = setupTest(t); 49 frames[0].runWindowPostMessageVeryIndirectlyWithNoUserCode(thisTestId, "*"); 50 }, "Start function"); 51 52 done(); 53}; 54</script> 55