tor-browser

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

browser_webextension_dropdown.js (3566B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 /* globals browser */
      7 
      8 const URL =
      9  "data:text/html;charset=utf8,test for drop down menu in devtools extension";
     10 
     11 add_task(async function runTest() {
     12  const extension = await startupExtension();
     13 
     14  const tab = await addTab(URL);
     15  const toolbox = await gDevTools.showToolboxForTab(tab, {
     16    toolId: "webconsole",
     17  });
     18  const {
     19    Toolbox,
     20  } = require("resource://devtools/client/framework/toolbox.js");
     21  await toolbox.switchHost(Toolbox.HostType.WINDOW);
     22 
     23  await extension.awaitMessage("devtools_page_loaded");
     24 
     25  const toolboxAdditionalTools = toolbox.getAdditionalTools();
     26  is(
     27    toolboxAdditionalTools.length,
     28    1,
     29    "Got the expected number of toolbox specific panel registered."
     30  );
     31 
     32  const panelId = toolboxAdditionalTools[0].id;
     33 
     34  await gDevTools.showToolboxForTab(tab, { toolId: panelId });
     35 
     36  await extension.awaitMessage("devtools_panel_loaded");
     37 
     38  const panel = findExtensionPanel();
     39  ok(panel, "found extension panel");
     40 
     41  const iframe = panel.firstChild;
     42  const popupShownPromise = BrowserTestUtils.waitForSelectPopupShown(
     43    toolbox.win.browsingContext.topChromeWindow
     44  );
     45 
     46  const browser = iframe.contentDocument.getElementById(
     47    "webext-panels-browser"
     48  );
     49  ok(browser, "found extension panel browser");
     50 
     51  info("Waiting for menu");
     52  await ContentTask.spawn(browser, null, async function () {
     53    const menu = content.document.getElementById("menu");
     54    const event = new content.MouseEvent("mousedown");
     55    menu.dispatchEvent(event);
     56  });
     57 
     58  const popup = await popupShownPromise;
     59  info("popup is shown");
     60 
     61  popup.hidePopup();
     62 
     63  await toolbox.destroy();
     64 
     65  gBrowser.removeCurrentTab();
     66 
     67  await extension.unload();
     68 });
     69 
     70 async function startupExtension() {
     71  async function devtools_page() {
     72    await browser.devtools.panels.create(
     73      "drop",
     74      "/icon.png",
     75      "/devtools_panel.html"
     76    );
     77    browser.test.sendMessage("devtools_page_loaded");
     78  }
     79 
     80  async function devtools_panel() {
     81    browser.test.sendMessage("devtools_panel_loaded");
     82  }
     83 
     84  const extension = ExtensionTestUtils.loadExtension({
     85    manifest: {
     86      devtools_page: "devtools_page.html",
     87    },
     88    files: {
     89      "devtools_page.html": `<!DOCTYPE html>
     90        <html>
     91          <head>
     92            <meta charset="utf-8">
     93          </head>
     94          <body>
     95            <script src="devtools_page.js"></script>
     96          </body>
     97        </html>`,
     98      "devtools_page.js": devtools_page,
     99      "icon.png": "",
    100      "devtools_panel.html": `<!DOCTYPE html>
    101        <html>
    102          <head>
    103            <meta charset="utf-8">
    104          </head>
    105          <body>
    106            <select id="menu">
    107              <option value="A" selected>A</option>
    108              <option value="B">B</option>
    109              <option value="C">C</option>
    110            </select>
    111            <script src="devtools_panel.js"></script>
    112          </body>
    113        </html>`,
    114      "devtools_panel.js": devtools_panel,
    115    },
    116  });
    117 
    118  await extension.startup();
    119 
    120  return extension;
    121 }
    122 
    123 function findExtensionPanel() {
    124  const win = Services.wm.getMostRecentWindow("devtools:toolbox");
    125  ok(win, "toolbox separate window exists");
    126 
    127  const iframe = win.document.querySelector(".devtools-toolbox-window-iframe");
    128  const deck = iframe.contentDocument.getElementById("toolbox-deck");
    129  for (const box of deck.childNodes) {
    130    if (box.id && box.id.startsWith("toolbox-panel-webext-devtools-panel")) {
    131      return box;
    132    }
    133  }
    134  return null;
    135 }