tor-browser

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

test_ext_settings_overrides_defaults.js (8268B)


      1 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /* vim: set sts=2 sw=2 et tw=80: */
      3 
      4 "use strict";
      5 
      6 const { AddonTestUtils } = ChromeUtils.importESModule(
      7  "resource://testing-common/AddonTestUtils.sys.mjs"
      8 );
      9 
     10 const { SearchTestUtils } = ChromeUtils.importESModule(
     11  "resource://testing-common/SearchTestUtils.sys.mjs"
     12 );
     13 
     14 const { SearchUtils } = ChromeUtils.importESModule(
     15  "moz-src:///toolkit/components/search/SearchUtils.sys.mjs"
     16 );
     17 
     18 const { RemoteSettings } = ChromeUtils.importESModule(
     19  "resource://services-settings/remote-settings.sys.mjs"
     20 );
     21 
     22 const { sinon } = ChromeUtils.importESModule(
     23  "resource://testing-common/Sinon.sys.mjs"
     24 );
     25 
     26 const CONFIG = [
     27  {
     28    identifier: "MozParamsTest",
     29    base: {
     30      name: "MozParamsTest",
     31      urls: {
     32        search: {
     33          base: "https://example.com/",
     34          params: [
     35            {
     36              name: "test-0",
     37              searchAccessPoint: {
     38                contextmenu: "0",
     39              },
     40            },
     41            {
     42              name: "test-1",
     43              searchAccessPoint: {
     44                searchbar: "1",
     45              },
     46            },
     47            {
     48              name: "test-2",
     49              searchAccessPoint: {
     50                homepage: "2",
     51              },
     52            },
     53            {
     54              name: "test-3",
     55              searchAccessPoint: {
     56                addressbar: "3",
     57              },
     58            },
     59            {
     60              name: "test-4",
     61              searchAccessPoint: {
     62                newtab: "4",
     63              },
     64            },
     65            {
     66              name: "simple",
     67              value: "5",
     68            },
     69            {
     70              name: "term",
     71              value: "{searchTerms}",
     72            },
     73            {
     74              name: "lang",
     75              value: "{language}",
     76            },
     77            {
     78              name: "prefval",
     79              experimentConfig: "code",
     80            },
     81            {
     82              name: "experimenter-1",
     83              experimentConfig: "nimbus-key-1",
     84            },
     85            {
     86              name: "experimenter-2",
     87              experimentConfig: "nimbus-key-2",
     88            },
     89          ],
     90          searchTermParamName: "q",
     91        },
     92      },
     93    },
     94  },
     95  {
     96    identifier: "MozParamsTest2",
     97    base: {
     98      name: "MozParamsTest2",
     99      urls: {
    100        search: {
    101          base: "https://example.com/2/",
    102          params: [
    103            {
    104              name: "simple2",
    105              value: "5",
    106            },
    107          ],
    108          searchTermParamName: "q",
    109        },
    110      },
    111    },
    112  },
    113 ];
    114 
    115 const URLTYPE_SUGGEST_JSON = "application/x-suggestions+json";
    116 
    117 AddonTestUtils.init(this);
    118 AddonTestUtils.createAppInfo(
    119  "xpcshell@tests.mozilla.org",
    120  "XPCShell",
    121  "42",
    122  "42"
    123 );
    124 
    125 const kSearchEngineURL = "https://example.com/?q={searchTerms}&foo=myparams";
    126 const kSuggestURL = "https://example.com/fake/suggest/";
    127 const kSuggestURLParams = "q={searchTerms}&type=list2";
    128 
    129 Services.prefs.setBoolPref("browser.search.log", true);
    130 
    131 add_task(async function setup() {
    132  AddonTestUtils.usePrivilegedSignatures = false;
    133  AddonTestUtils.overrideCertDB();
    134  await AddonTestUtils.promiseStartupManager();
    135  await SearchTestUtils.setRemoteSettingsConfig(CONFIG);
    136  await Services.search.init();
    137  registerCleanupFunction(async () => {
    138    await AddonTestUtils.promiseShutdownManager();
    139  });
    140 });
    141 
    142 function assertEngineParameters({
    143  name,
    144  searchURL,
    145  suggestionURL,
    146  messageSnippet,
    147 }) {
    148  let engine = Services.search.getEngineByName(name);
    149  Assert.ok(engine, `Should have found ${name}`);
    150 
    151  Assert.equal(
    152    engine.getSubmission("{searchTerms}").uri.spec,
    153    encodeURI(searchURL),
    154    `Should have ${messageSnippet} the suggestion url.`
    155  );
    156  Assert.equal(
    157    engine.getSubmission("{searchTerms}", URLTYPE_SUGGEST_JSON)?.uri.spec,
    158    suggestionURL ? encodeURI(suggestionURL) : suggestionURL,
    159    `Should ${messageSnippet} the submission URL.`
    160  );
    161 }
    162 
    163 add_task(async function test_extension_changing_to_app_provided_default() {
    164  let ext1 = ExtensionTestUtils.loadExtension({
    165    manifest: {
    166      icons: {
    167        16: "foo.ico",
    168      },
    169      chrome_settings_overrides: {
    170        search_provider: {
    171          is_default: true,
    172          name: "MozParamsTest2",
    173          keyword: "MozSearch",
    174          search_url: kSearchEngineURL,
    175          suggest_url: kSuggestURL,
    176          suggest_url_get_params: kSuggestURLParams,
    177        },
    178      },
    179    },
    180    useAddonManager: "temporary",
    181  });
    182 
    183  await ext1.startup();
    184  await AddonTestUtils.waitForSearchProviderStartup(ext1);
    185 
    186  Assert.equal(
    187    Services.search.defaultEngine.name,
    188    "MozParamsTest2",
    189    "Should have switched the default engine."
    190  );
    191 
    192  assertEngineParameters({
    193    name: "MozParamsTest2",
    194    searchURL: "https://example.com/2/?simple2=5&q={searchTerms}",
    195    messageSnippet: "left unchanged",
    196  });
    197 
    198  let promiseDefaultBrowserChange = SearchTestUtils.promiseSearchNotification(
    199    "engine-default",
    200    "browser-search-engine-modified"
    201  );
    202  await ext1.unload();
    203  await promiseDefaultBrowserChange;
    204 
    205  Assert.equal(
    206    Services.search.defaultEngine.name,
    207    "MozParamsTest",
    208    "Should have reverted to the original default engine."
    209  );
    210 });
    211 
    212 add_task(async function test_extension_overriding_app_provided_default() {
    213  const settings = await RemoteSettings(SearchUtils.SETTINGS_ALLOWLIST_KEY);
    214  sinon.stub(settings, "get").returns([
    215    {
    216      thirdPartyId: "test@thirdparty.example.com",
    217      overridesAppIdv2: "MozParamsTest2",
    218      urls: [
    219        {
    220          search_url: "https://example.com/?q={searchTerms}&foo=myparams",
    221        },
    222      ],
    223    },
    224  ]);
    225 
    226  let ext1 = ExtensionTestUtils.loadExtension({
    227    manifest: {
    228      browser_specific_settings: {
    229        gecko: {
    230          id: "test@thirdparty.example.com",
    231        },
    232      },
    233      icons: {
    234        16: "foo.ico",
    235      },
    236      chrome_settings_overrides: {
    237        search_provider: {
    238          is_default: true,
    239          name: "MozParamsTest2",
    240          keyword: "MozSearch",
    241          search_url: kSearchEngineURL,
    242          suggest_url: kSuggestURL,
    243          suggest_url_get_params: kSuggestURLParams,
    244        },
    245      },
    246    },
    247    useAddonManager: "permanent",
    248  });
    249 
    250  info("startup");
    251 
    252  await ext1.startup();
    253  await AddonTestUtils.waitForSearchProviderStartup(ext1);
    254 
    255  Assert.equal(
    256    Services.search.defaultEngine.name,
    257    "MozParamsTest2",
    258    "Should have switched the default engine."
    259  );
    260  assertEngineParameters({
    261    name: "MozParamsTest2",
    262    searchURL: kSearchEngineURL,
    263    suggestionURL: `${kSuggestURL}?${kSuggestURLParams}`,
    264    messageSnippet: "changed",
    265  });
    266 
    267  info("disable");
    268 
    269  let promiseDefaultBrowserChange = SearchTestUtils.promiseSearchNotification(
    270    "engine-default",
    271    "browser-search-engine-modified"
    272  );
    273  await ext1.addon.disable();
    274  await promiseDefaultBrowserChange;
    275 
    276  Assert.equal(
    277    Services.search.defaultEngine.name,
    278    "MozParamsTest",
    279    "Should have reverted to the original default engine."
    280  );
    281  assertEngineParameters({
    282    name: "MozParamsTest2",
    283    searchURL: "https://example.com/2/?simple2=5&q={searchTerms}",
    284    messageSnippet: "reverted",
    285  });
    286 
    287  info("enable");
    288 
    289  promiseDefaultBrowserChange = SearchTestUtils.promiseSearchNotification(
    290    "engine-default",
    291    "browser-search-engine-modified"
    292  );
    293  await ext1.addon.enable();
    294  await promiseDefaultBrowserChange;
    295 
    296  Assert.equal(
    297    Services.search.defaultEngine.name,
    298    "MozParamsTest2",
    299    "Should have switched the default engine."
    300  );
    301 
    302  assertEngineParameters({
    303    name: "MozParamsTest2",
    304    searchURL: kSearchEngineURL,
    305    suggestionURL: `${kSuggestURL}?${kSuggestURLParams}`,
    306    messageSnippet: "changed",
    307  });
    308 
    309  info("unload");
    310 
    311  promiseDefaultBrowserChange = SearchTestUtils.promiseSearchNotification(
    312    "engine-default",
    313    "browser-search-engine-modified"
    314  );
    315  await ext1.unload();
    316  await promiseDefaultBrowserChange;
    317 
    318  Assert.equal(
    319    Services.search.defaultEngine.name,
    320    "MozParamsTest",
    321    "Should have reverted to the original default engine."
    322  );
    323 
    324  assertEngineParameters({
    325    name: "MozParamsTest2",
    326    searchURL: "https://example.com/2/?simple2=5&q={searchTerms}",
    327    messageSnippet: "reverted",
    328  });
    329  sinon.restore();
    330 });