tor-browser

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

browser_console_webextension.js (3643B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 // Test that messages from WebExtension are logged in the Browser Console.
      5 
      6 "use strict";
      7 
      8 const TEST_URI =
      9  "https://example.com/browser/devtools/client/webconsole/" +
     10  "test/browser/test-console.html?" +
     11  Date.now();
     12 
     13 add_task(async function () {
     14  await pushPref("devtools.browsertoolbox.scope", "everything");
     15  await addTab(TEST_URI);
     16 
     17  await testWebExtensionMessages(false);
     18  await testWebExtensionMessages(true);
     19 });
     20 
     21 async function testWebExtensionMessages(
     22  createWebExtensionBeforeOpeningBrowserConsole = false
     23 ) {
     24  let extension;
     25  if (createWebExtensionBeforeOpeningBrowserConsole) {
     26    extension = await loadExtension();
     27  }
     28  const hud = await BrowserConsoleManager.toggleBrowserConsole();
     29  if (!createWebExtensionBeforeOpeningBrowserConsole) {
     30    extension = await loadExtension();
     31  }
     32 
     33  // TODO: Re-enable this (See Bug 1699050).
     34  /*
     35  // Trigger the messages logged when opening the popup.
     36  const { AppUiTestDelegate } = ChromeUtils.importESModule(
     37    "resource://testing-common/AppUiTestDelegate.sys.mjs"
     38  );
     39  const onPopupReady = extension.awaitMessage(`popup-ready`);
     40  await AppUiTestDelegate.clickBrowserAction(window, extension.id);
     41  // Ensure the popup script ran before going further
     42  AppUiTestDelegate.awaitExtensionPanel(window, extension.id);
     43  await onPopupReady;
     44  */
     45 
     46  // Wait enough so any duplicated message would have the time to be rendered
     47  await wait(1000);
     48 
     49  await checkUniqueMessageExists(
     50    hud,
     51    "content console API message",
     52    ".console-api"
     53  );
     54  await checkUniqueMessageExists(
     55    hud,
     56    "background console API message",
     57    ".console-api"
     58  );
     59 
     60  await checkUniqueMessageExists(hud, "content error", ".error");
     61  await checkUniqueMessageExists(hud, "background error", ".error");
     62 
     63  // TODO: Re-enable those checks (See Bug 1699050).
     64  // await checkUniqueMessageExists(hud, "popup console API message", ".console-api");
     65  // await checkUniqueMessageExists(hud, "popup error", ".error");
     66 
     67  await clearOutput(hud);
     68 
     69  info("Close the Browser Console");
     70  await safeCloseBrowserConsole();
     71 
     72  await extension.unload();
     73 }
     74 
     75 async function loadExtension() {
     76  const extension = ExtensionTestUtils.loadExtension({
     77    manifest: {
     78      background: { scripts: ["background.js"] },
     79 
     80      browser_action: {
     81        default_popup: "popup.html",
     82      },
     83 
     84      content_scripts: [
     85        {
     86          matches: [TEST_URI],
     87          js: ["content-script.js"],
     88        },
     89      ],
     90    },
     91    useAddonManager: "temporary",
     92 
     93    files: {
     94      "background.js": function () {
     95        console.log("background console API message");
     96        throw new Error("background error");
     97      },
     98 
     99      "popup.html": `
    100        <!DOCTYPE html>
    101        <html>
    102          <head>
    103            <meta charset="utf-8">
    104          </head>
    105          <body>Popup</body>
    106          <script src="popup.js"></script>
    107        </html>`,
    108 
    109      "popup.js": function () {
    110        console.log("popup console API message");
    111        // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
    112        setTimeout(() => {
    113          throw new Error("popup error");
    114        }, 5);
    115 
    116        // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
    117        setTimeout(() => {
    118          // eslint-disable-next-line no-undef
    119          browser.test.sendMessage(`popup-ready`);
    120        }, 10);
    121      },
    122 
    123      "content-script.js": function () {
    124        console.log("content console API message");
    125        throw new Error("content error");
    126      },
    127    },
    128  });
    129  await extension.startup();
    130  return extension;
    131 }