tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });