javascript-url-task-queuing.html (2153B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>javascript: URL task queuing</title> 4 <link rel="help" href="https://github.com/whatwg/html/issues/3730"> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 8 <body> 9 <script> 10 "use strict"; 11 12 testIsAsync(() => { 13 const iframe = document.createElement("iframe"); 14 document.body.append(iframe); 15 iframe.contentWindow.location.href = "javascript:window.top.javascriptURLRan = true; window.top.resolveTestPromise();"; 16 }, `Navigating an iframe via location.href to a javascript: URL must queue a task`); 17 18 testIsAsync(() => { 19 const iframe = document.createElement("iframe"); 20 iframe.src = "javascript:window.top.javascriptURLRan = true; window.top.resolveTestPromise();"; 21 document.body.append(iframe); 22 }, `Navigating an iframe via src="" to a javascript: URL before insertion must queue a task`); 23 24 testIsAsync(() => { 25 const iframe = document.createElement("iframe"); 26 document.body.append(iframe); 27 iframe.src = "javascript:window.top.javascriptURLRan = true; window.top.resolveTestPromise();"; 28 }, `Navigating an iframe via src="" to a javascript: URL after insertion must queue a task`); 29 30 testIsAsync(() => { 31 const w = window.open(); 32 w.location.href = "javascript:window.opener.javascriptURLRan = true; window.opener.resolveTestPromise();"; 33 }, `Navigating an opened window via location.href to a javascript: URL must queue a task`); 34 35 testIsAsync(() => { 36 window.open("javascript:window.opener.javascriptURLRan = true; window.opener.resolveTestPromise();"); 37 }, `Navigating an opened window as part of creation to a javascript: URL must queue a task`); 38 39 function testIsAsync(setupFunc, description) { 40 promise_test(async t => { 41 t.add_cleanup(() => { 42 delete window.resolveTestPromise; 43 delete window.javascriptURLRan; 44 }); 45 46 const ranPromise = new Promise(resolve => { 47 window.resolveTestPromise = resolve; 48 }); 49 50 setupFunc(); 51 52 assert_equals(window.javascriptURLRan, undefined, "Must not run sync"); 53 54 // Ensure that we do actually run the code, though. 55 await ranPromise; 56 }, description); 57 } 58 </script>