browser_console_window_object_inheritance.js (1908B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 add_task(async function () { 7 await addTab("about:blank"); 8 9 info(`Open browser console`); 10 const hud = await BrowserConsoleManager.openBrowserConsoleOrFocus(); 11 12 info(`Clear existing messages`); 13 const onMessagesCleared = hud.ui.once("messages-cleared"); 14 await clearOutput(hud); 15 await onMessagesCleared; 16 17 info(`Create a DOM window object`); 18 await hud.commands.scriptCommand.execute(` 19 globalThis.myBrowser = Services.appShell.createWindowlessBrowser(); 20 globalThis.myWindow = myBrowser.document.defaultView; 21 `); 22 23 info(`Check objects inheriting from a DOM window`); 24 async function check(input, expected, name) { 25 const msg = await executeAndWaitForResultMessage(hud, input, ""); 26 is(msg.node.querySelector(".message-body").textContent, expected, name); 27 } 28 await check("Object.create(myWindow)", "Object { }", "Empty object"); 29 await check( 30 "Object.create(myWindow, { location: { value: 1, enumerable: true } })", 31 "Object { location: 1 }", 32 "Object with 'location' property" 33 ); 34 await check( 35 `Object.create(myWindow, { 36 location: { 37 get() { 38 console.error("pwned!"); 39 return { href: "Oops" }; 40 }, 41 enumerable: true, 42 }, 43 })`, 44 "Object { location: Getter }", 45 "Object with 'location' unsafe getter" 46 ); 47 48 info(`Check that no error was logged`); 49 // wait a bit so potential errors can be printed 50 await wait(1000); 51 const error = findErrorMessage(hud, "", ":not(.network)"); 52 if (error) { 53 ok(false, `Got error ${JSON.stringify(error.textContent)}`); 54 } else { 55 ok(true, "No error was logged"); 56 } 57 58 info(`Cleanup`); 59 await hud.commands.scriptCommand.execute(` 60 myBrowser.close(); 61 delete globalThis.myBrowser; 62 delete globalThis.myWindow; 63 `); 64 });