test_SpecialPowersSpawn.html (2346B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test for SpecialPowers.spawn</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 7 </head> 8 <body> 9 10 <iframe id="iframe"></iframe> 11 12 <span id="hello">World.</span> 13 14 <script> 15 /* globals SpecialPowers, content */ 16 17 add_task(async function() { 18 let frame = document.getElementById("iframe"); 19 frame.src = "https://example.com/tests/testing/mochitest/tests/Harness_sanity/file_spawn.html"; 20 21 await new Promise(resolve => { 22 frame.addEventListener("load", resolve, {once: true}); 23 }); 24 25 let result = await SpecialPowers.spawn(frame, ["#span"], selector => { 26 let elem = content.document.querySelector(selector); 27 return elem.textContent; 28 }); 29 30 is(result, "Hello there.", "Got correct element text from frame"); 31 32 /* eslint-disable no-shadow */ 33 result = await SpecialPowers.spawn(frame, ["#hello"], selector => { 34 return SpecialPowers.spawn(content.parent, [selector], selector => { 35 let elem = content.document.querySelector(selector); 36 return elem.textContent; 37 }); 38 }); 39 40 is(result, "World.", "Got correct element text from frame's window.parent"); 41 42 result = await SpecialPowers.spawn(frame.contentWindow, ["#span"], selector => { 43 let elem = content.document.querySelector(selector); 44 return elem.textContent; 45 }); 46 47 is(result, "Hello there.", "Got correct element text from window proxy"); 48 49 result = await SpecialPowers.spawn(SpecialPowers.getPrivilegedProps(frame, "browsingContext"), 50 ["#span"], selector => { 51 let elem = content.document.querySelector(selector); 52 return elem.textContent; 53 }); 54 55 is(result, "Hello there.", "Got correct element text from browsing context"); 56 57 let line = 58; // Keep this in sync with the line number where the callback function starts. 58 let callback = () => { 59 let e = new Error("Hello."); 60 return { filename: e.fileName, lineNumber: e.lineNumber }; 61 }; 62 63 let loc = await SpecialPowers.spawn(frame, [], callback); 64 is(loc.filename, location.href, "Error should have correct script filename"); 65 is(loc.lineNumber, line + 2, "Error should have correct script line number"); 66 }); 67 </script> 68 </body> 69 </html>