test_SpecialPowersSpawn.js (1599B)
1 "use strict"; 2 3 const { XPCShellContentUtils } = ChromeUtils.importESModule( 4 "resource://testing-common/XPCShellContentUtils.sys.mjs" 5 ); 6 7 XPCShellContentUtils.init(this); 8 9 const HTML = String.raw`<!DOCTYPE html> 10 <html lang="en"> 11 <head> 12 <meta charset="UTF-8"> 13 <title></title> 14 </head> 15 <body> 16 <span id="span">Hello there.</span> 17 </body> 18 </html>`; 19 20 const server = XPCShellContentUtils.createHttpServer({ 21 hosts: ["example.com"], 22 }); 23 24 server.registerPathHandler("/", (request, response) => { 25 response.setHeader("Content-Type", "text/html"); 26 response.write(HTML); 27 }); 28 29 add_task(async function () { 30 // eslint-disable-next-line @microsoft/sdl/no-insecure-url 31 let page = await XPCShellContentUtils.loadContentPage("http://example.com/", { 32 remote: true, 33 remoteSubframes: true, 34 }); 35 36 let { SpecialPowers, browsingContext } = page; 37 38 let result = await SpecialPowers.spawn( 39 browsingContext, 40 ["#span"], 41 selector => { 42 let elem = content.document.querySelector(selector); 43 return elem.textContent; 44 } 45 ); 46 47 equal(result, "Hello there.", "Got correct element text from frame"); 48 49 let line = Components.stack.lineNumber + 1; 50 let callback = () => { 51 let e = new Error("Hello."); 52 return { filename: e.fileName, lineNumber: e.lineNumber }; 53 }; 54 55 let loc = await SpecialPowers.spawn(browsingContext, [], callback); 56 equal( 57 loc.filename, 58 Components.stack.filename, 59 "Error should have correct script filename" 60 ); 61 equal( 62 loc.lineNumber, 63 line + 2, 64 "Error should have correct script line number" 65 ); 66 67 await page.close(); 68 });