tor-browser

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

browser_uriFixupIntegration.js (3056B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const { UrlbarTestUtils } = ChromeUtils.importESModule(
      7  "resource://testing-common/UrlbarTestUtils.sys.mjs"
      8 );
      9 const { SearchTestUtils } = ChromeUtils.importESModule(
     10  "resource://testing-common/SearchTestUtils.sys.mjs"
     11 );
     12 
     13 SearchTestUtils.init(this);
     14 
     15 const kSearchEngineID = "browser_urifixup_search_engine";
     16 const kSearchEngineURL = "https://example.com/?search={searchTerms}";
     17 const kPrivateSearchEngineID = "browser_urifixup_search_engine_private";
     18 const kPrivateSearchEngineURL = "https://example.com/?private={searchTerms}";
     19 
     20 add_setup(async function () {
     21  await SpecialPowers.pushPrefEnv({
     22    set: [
     23      ["browser.search.separatePrivateDefault.ui.enabled", true],
     24      ["browser.search.separatePrivateDefault", true],
     25    ],
     26  });
     27 
     28  // Add new fake search engines.
     29  await SearchTestUtils.installSearchExtension(
     30    {
     31      name: kSearchEngineID,
     32      search_url: "https://example.com/",
     33      search_url_get_params: "search={searchTerms}",
     34    },
     35    { setAsDefault: true }
     36  );
     37 
     38  await SearchTestUtils.installSearchExtension(
     39    {
     40      name: kPrivateSearchEngineID,
     41      search_url: "https://example.com/",
     42      search_url_get_params: "private={searchTerms}",
     43    },
     44    { setAsDefaultPrivate: true }
     45  );
     46 });
     47 
     48 add_task(async function test() {
     49  // Test both directly setting a value and pressing enter, or setting the
     50  // value through input events, like the user would do.
     51  const setValueFns = [
     52    (value, win) => {
     53      win.gURLBar.value = value;
     54    },
     55    (value, win) => {
     56      return UrlbarTestUtils.promiseAutocompleteResultPopup({
     57        window: win,
     58        waitForFocus: SimpleTest.waitForFocus,
     59        value,
     60      });
     61    },
     62  ];
     63 
     64  for (let value of ["foo bar", "brokenprotocol:somethingelse"]) {
     65    for (let setValueFn of setValueFns) {
     66      for (let inPrivateWindow of [false, true]) {
     67        await do_test(value, setValueFn, inPrivateWindow);
     68      }
     69    }
     70  }
     71 });
     72 
     73 async function do_test(value, setValueFn, inPrivateWindow) {
     74  info(`Search ${value} in a ${inPrivateWindow ? "private" : "normal"} window`);
     75  let win = await BrowserTestUtils.openNewBrowserWindow({
     76    private: inPrivateWindow,
     77  });
     78  // Enter search terms and start a search.
     79  win.gURLBar.focus();
     80  await setValueFn(value, win);
     81 
     82  EventUtils.synthesizeKey("KEY_Enter", {}, win);
     83 
     84  // Check that we load the correct URL.
     85  let escapedValue = encodeURIComponent(value).replace("%20", "+");
     86  let searchEngineUrl = inPrivateWindow
     87    ? kPrivateSearchEngineURL
     88    : kSearchEngineURL;
     89  let expectedURL = searchEngineUrl.replace("{searchTerms}", escapedValue);
     90  await BrowserTestUtils.browserLoaded(
     91    win.gBrowser.selectedBrowser,
     92    false,
     93    expectedURL
     94  );
     95  // There should be at least one test.
     96  Assert.equal(
     97    win.gBrowser.selectedBrowser.currentURI.spec,
     98    expectedURL,
     99    "New tab should have loaded with expected url."
    100  );
    101 
    102  // Cleanup.
    103  await BrowserTestUtils.closeWindow(win);
    104 }