tor-browser

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

browser_contextmenu_save_blocked.js (2452B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 var MockFilePicker = SpecialPowers.MockFilePicker;
      7 MockFilePicker.init(window.browsingContext);
      8 
      9 function mockPromptService() {
     10  let { prompt } = Services;
     11  let promptService = {
     12    QueryInterface: ChromeUtils.generateQI(["nsIPromptService"]),
     13    alert: () => {},
     14  };
     15  Services.prompt = promptService;
     16  registerCleanupFunction(() => {
     17    Services.prompt = prompt;
     18  });
     19  return promptService;
     20 }
     21 
     22 add_setup(async function () {
     23  await SpecialPowers.pushPrefEnv({
     24    set: [["test.wait300msAfterTabSwitch", true]],
     25  });
     26 });
     27 
     28 add_task(async function test_save_link_blocked_by_extension() {
     29  let ext = ExtensionTestUtils.loadExtension({
     30    manifest: {
     31      browser_specific_settings: { gecko: { id: "cancel@test" } },
     32      name: "Cancel Test",
     33      permissions: ["webRequest", "webRequestBlocking", "<all_urls>"],
     34    },
     35 
     36    background() {
     37      // eslint-disable-next-line no-undef
     38      browser.webRequest.onBeforeRequest.addListener(
     39        details => {
     40          // eslint-disable-next-line @microsoft/sdl/no-insecure-url
     41          return { cancel: details.url === "http://example.com/" };
     42        },
     43        { urls: ["*://*/*"] },
     44        ["blocking"]
     45      );
     46    },
     47  });
     48  await ext.startup();
     49 
     50  await BrowserTestUtils.withNewTab(
     51    `data:text/html;charset=utf-8,<a href="http://example.com">Download</a>`,
     52    async browser => {
     53      let menu = document.getElementById("contentAreaContextMenu");
     54      let popupShown = BrowserTestUtils.waitForEvent(menu, "popupshown");
     55      BrowserTestUtils.synthesizeMouseAtCenter(
     56        "a[href]",
     57        { type: "contextmenu", button: 2 },
     58        browser
     59      );
     60      await popupShown;
     61 
     62      await new Promise(resolve => {
     63        let promptService = mockPromptService();
     64        promptService.alert = (window, title, msg) => {
     65          is(
     66            msg,
     67            "The download cannot be saved because it is blocked by Cancel Test.",
     68            "prompt should be shown"
     69          );
     70          setTimeout(resolve, 0);
     71        };
     72 
     73        MockFilePicker.showCallback = function () {
     74          ok(false, "filepicker should never been shown");
     75          setTimeout(resolve, 0);
     76          return Ci.nsIFilePicker.returnCancel;
     77        };
     78        menu.activateItem(menu.querySelector("#context-savelink"));
     79      });
     80    }
     81  );
     82 
     83  await ext.unload();
     84 });