1<!DOCTYPE html> 2<meta charset=utf-8> 3<script src="/resources/testharness.js"></script> 4<script src="/resources/testharnessreport.js"></script> 5<script src="/common/get-host-info.sub.js"></script> 6<script src="/common/utils.js"></script> 7<script src="/common/dispatcher/dispatcher.js"></script> 8<!-- Pull in executor_path needed by newPopup / newIframe --> 9<script src="/html/cross-origin-embedder-policy/credentialless/resources/common.js"></script> 10<!-- Pull in newPopup / newIframe --> 11<script src="/html/cross-origin-embedder-policy/anonymous-iframe/resources/common.js"></script> 12<body> 13<script> 14 15const emit_script = (channel_name, message, done_queue_name) => ` 16 const bc = new BroadcastChannel("${channel_name}"); 17 bc.postMessage("${message}"); 18 send("${done_queue_name}", "done"); 19`; 20 21promise_test(async t => { 22 const origin = get_host_info().HTTPS_ORIGIN; 23 const not_same_site_origin = get_host_info().HTTPS_NOTSAMESITE_ORIGIN; 24 const response_queue_uuid = token(); 25 26 const popup_init_script = ` 27 const importScript = ${importScript}; 28 await importScript("/html/cross-origin-embedder-policy/credentialless" + 29 "/resources/common.js"); 30 await importScript("/html/cross-origin-embedder-policy/anonymous-iframe" + 31 "/resources/common.js"); 32 await importScript("/common/utils.js"); 33 send("${response_queue_uuid}", newIframe("${origin}")); 34 `; 35 36 // Create a same-origin iframe in a cross-site popup. 37 const not_same_site_popup_uuid = newPopup(t, not_same_site_origin); 38 send(not_same_site_popup_uuid, popup_init_script); 39 const iframe_1_uuid = await receive(response_queue_uuid); 40 41 // Create a same-origin iframe in a same-site popup. 42 const same_origin_popup_uuid = newPopup(t, origin); 43 send(same_origin_popup_uuid, popup_init_script); 44 const iframe_2_uuid = await receive(response_queue_uuid); 45 46 const channel_name = token(); 47 const bc = new BroadcastChannel(channel_name); 48 bc.onmessage = t.step_func(e => { 49 assert_equals(e.data, "msg from iframe2"); 50 t.done(); 51 }); 52 53 // Instruct the not-same-top-level-site iframe to send a message on the BC 54 // channel we are listening on. This message should not be received since 55 // the iframe should be in a different partition. 56 send(iframe_1_uuid, 57 emit_script(channel_name, "msg from iframe1", response_queue_uuid)); 58 assert_equals(await receive(response_queue_uuid), "done"); 59 60 // Now instruct the same-top-level-site iframe to send a BC message. By 61 // the time we send the script to execute, have it send the BC message, 62 // and then receive the BC message in our BC instance, it should be 63 // reasonable to assume that the message from the first iframe would have 64 // been delivered if it was going to be. 65 send(iframe_2_uuid, 66 emit_script(channel_name, "msg from iframe2", response_queue_uuid)); 67 assert_equals(await receive(response_queue_uuid), "done"); 68 69}, "BroadcastChannel messages aren't received from a cross-partition iframe"); 70 71</script> 72</body> 73