tor-browser

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

browser_select_popup_from_background_tab.js (2527B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 Services.scriptloader.loadSubScript(
      7  "chrome://mochitests/content/browser/browser/base/content/test/forms/head.js",
      8  this
      9 );
     10 
     11 const PAGECONTENT =
     12  "<html><body>" +
     13  "<select id=select><option>foo foo</option><option>bar bar</option><option>baz baz</option></select><input>" +
     14  "</body></html>";
     15 
     16 let selectPopup;
     17 async function test_clicking_select_window_open(aIsPopup) {
     18  await BrowserTestUtils.withNewTab(
     19    {
     20      gBrowser,
     21      url: "data:text/html," + escape(PAGECONTENT),
     22    },
     23    async browser => {
     24      let listener = () => {
     25        Assert.ok(false, "popup should not be shown at all");
     26      };
     27      selectPopup.addEventListener("popupshown", listener);
     28 
     29      let openedPromise = aIsPopup
     30        ? BrowserTestUtils.waitForNewWindow({
     31            url: "https://example.org/",
     32          })
     33        : BrowserTestUtils.waitForNewTab(
     34            gBrowser,
     35            "https://example.org/",
     36            true
     37          );
     38 
     39      await SpecialPowers.spawn(browser, [aIsPopup], async function (isPopup) {
     40        let select = content.document.querySelector("select");
     41        select.addEventListener("mousedown", () => {
     42          content.window.open(
     43            "https://example.org/",
     44            "",
     45            isPopup ? "popup" : ""
     46          );
     47        });
     48      });
     49      BrowserTestUtils.synthesizeMouseAtCenter("select", {}, browser);
     50 
     51      let newTabOrPopup = await openedPromise;
     52      Assert.equal(selectPopup.state, "closed", "popup should not appear");
     53 
     54      selectPopup.removeEventListener("popupshown", listener);
     55      await (aIsPopup
     56        ? BrowserTestUtils.closeWindow(newTabOrPopup)
     57        : BrowserTestUtils.removeTab(newTabOrPopup));
     58    }
     59  );
     60 }
     61 
     62 // The select dropdown is created lazily, so initial it first.
     63 add_setup(async function init_select_popup() {
     64  await SpecialPowers.pushPrefEnv({
     65    set: [["test.wait300msAfterTabSwitch", true]],
     66  });
     67 
     68  await BrowserTestUtils.withNewTab(
     69    {
     70      gBrowser,
     71      url: "data:text/html," + escape(PAGECONTENT),
     72    },
     73    async browser => {
     74      selectPopup = await openSelectPopup("click");
     75      await hideSelectPopup();
     76    }
     77  );
     78 });
     79 
     80 // Test for bug 1909535.
     81 add_task(async function test_clicking_select_opens_new_tab() {
     82  await test_clicking_select_window_open(false);
     83 });
     84 
     85 add_task(async function test_clicking_select_opens_new_window() {
     86  await test_clicking_select_window_open(true);
     87 });