setinterval-cross-realm-callback-report-exception.html (1102B)
1 <!doctype html> 2 <meta charset=utf-8> 3 <title>window.setInterval() reports the exception from its callback in the callback's global object</title> 4 <script src=/resources/testharness.js></script> 5 <script src=/resources/testharnessreport.js></script> 6 <iframe></iframe> 7 <iframe></iframe> 8 <iframe></iframe> 9 <script> 10 setup({ allow_uncaught_exception: true }); 11 12 const onerrorCalls = []; 13 window.onerror = () => { onerrorCalls.push("top"); }; 14 frames[0].onerror = () => { onerrorCalls.push("frame0"); }; 15 frames[1].onerror = () => { onerrorCalls.push("frame1"); }; 16 frames[2].onerror = () => { onerrorCalls.push("frame2"); }; 17 18 async_test(t => { 19 window.onload = t.step_func(() => { 20 const id = frames[0].setInterval(new frames[1].Function(` 21 parent.clearThisInterval(); 22 throw new parent.frames[2].Error("PASS"); 23 `), 4); 24 window.clearThisInterval = () => { frames[0].clearInterval(id); }; 25 26 t.step_wait_func_done(() => onerrorCalls.length > 0, 27 () => assert_array_equals(onerrorCalls, ["frame1"]), 28 undefined, 1000, 10); 29 }); 30 }); 31 </script>