tor-browser

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

test_urlbar_search_terms_persistence.js (7677B)


      1 /*
      2 * This test checks we can determine the type of search page and whether the
      3 * page is a default search page.
      4 */
      5 
      6 ChromeUtils.defineESModuleGetters(this, {
      7  UrlbarSearchTermsPersistence:
      8    "moz-src:///browser/components/urlbar/UrlbarSearchTermsPersistence.sys.mjs",
      9 });
     10 
     11 const PROVIDERS = [
     12  {
     13    id: "example",
     14    queryParamNames: ["q"],
     15    searchPageRegexp: "^https://example\\.com/",
     16    includeParams: [
     17      {
     18        key: "page",
     19        values: ["web"],
     20        canBeMissing: true,
     21      },
     22    ],
     23    excludeParams: [
     24      {
     25        key: "excludeKey",
     26        values: ["hello"],
     27      },
     28    ],
     29  },
     30  {
     31    id: "example2",
     32    queryParamNames: ["q"],
     33    searchPageRegexp: "^https://example2\\.com/",
     34    includeParams: [
     35      {
     36        key: "page",
     37        values: ["web"],
     38        canBeMissing: false,
     39      },
     40    ],
     41    excludeParams: [
     42      {
     43        key: "excludeKey",
     44      },
     45    ],
     46  },
     47  {
     48    id: "example3",
     49    queryParamNames: ["q"],
     50    searchPageRegexp: "^https://example3\\.com/",
     51    includeParams: [],
     52    excludeParams: [],
     53  },
     54  {
     55    id: "example4",
     56    queryParamNames: ["q"],
     57    searchPageRegexp: "^https://example4\\.com/",
     58    excludeParams: [],
     59  },
     60 ];
     61 
     62 const TESTS = [
     63  {
     64    title: "Tracked provider",
     65    name: "Example",
     66    cases: [
     67      {
     68        title: "Non-existent URI",
     69        originalURI: null,
     70        expected: "",
     71      },
     72      {
     73        title: "Empty URI",
     74        originalURI: "",
     75        expected: "",
     76      },
     77      {
     78        title: "Non-url",
     79        originalURI: "about:blank",
     80        expected: "",
     81      },
     82      {
     83        title: "Non-url 1",
     84        originalURI: "about:home",
     85        expected: "",
     86      },
     87      {
     88        title: "Non-url 2",
     89        originalURI: "about:newtab",
     90        expected: "",
     91      },
     92      {
     93        title: "Non-url 3",
     94        originalURI: "not://a/supported/protocol",
     95        expected: "",
     96      },
     97      {
     98        title: "Non-url 4",
     99        originalURI: "view-source:http://www.example.com/",
    100        expected: "",
    101      },
    102      {
    103        title: "No search parameters",
    104        originalURI: "https://example.com/",
    105        expected: "",
    106      },
    107      {
    108        title: "No search query param value",
    109        originalURI: "https://example.com/?q",
    110        expected: "",
    111      },
    112      {
    113        title: "With search query param value",
    114        originalURI: "https://example.com/?q=foo",
    115        expected: "foo",
    116      },
    117      {
    118        title: "With search query param value and a fake value key-value pair",
    119        originalURI: "https://example.com/?q=foo&page=fake_code",
    120        expected: "",
    121      },
    122      {
    123        title: "With search query param value and valid key-value pair",
    124        originalURI: "https://example.com/?q=foo&page=web",
    125        expected: "foo",
    126      },
    127      {
    128        title: "With search query param value and unknown key-value pair",
    129        originalURI: "https://example.com/?q=foo&key=unknown",
    130        expected: "foo",
    131      },
    132      {
    133        title:
    134          "With search query param value and valid excludeParams key-value pair",
    135        originalURI: "https://example.com/?q=foo&excludeKey=hello",
    136        expected: "",
    137      },
    138      {
    139        title:
    140          "With search query param value and invalid excludeParams key-value pair",
    141        originalURI: "https://example.com/?q=foo&page=web&excludeKey=hi",
    142        expected: "foo",
    143      },
    144    ],
    145  },
    146  {
    147    title: "Untracked provider",
    148    name: "Example1",
    149    cases: [
    150      {
    151        title: "With search query param",
    152        originalURI: "https://example1.com/?q=foo",
    153        expected: "",
    154      },
    155      {
    156        title: "No search parameters",
    157        originalURI: "https://example1.com/",
    158        expected: "",
    159      },
    160      {
    161        title: "No search query param value",
    162        originalURI: "https://example1.com/?q",
    163        expected: "",
    164      },
    165      {
    166        title: "With search query param value and unknown key-value pair",
    167        originalURI: "https://example1.com/?q=foo&key=unknown",
    168        expected: "",
    169      },
    170      {
    171        title: "with search query param value and default key-value pair",
    172        originalURI: "https://example1.com/?q=foo&default=all",
    173        expected: "foo",
    174      },
    175    ],
    176  },
    177  {
    178    title: "Tracked provider with mandatory key-value pair",
    179    name: "Example2",
    180    cases: [
    181      {
    182        title: "With search query param value",
    183        originalURI: "https://example2.com/?q=foo",
    184        expected: "",
    185      },
    186      {
    187        title: "With search query param value",
    188        originalURI: "https://example2.com/?q=foo&page=web",
    189        expected: "foo",
    190      },
    191      {
    192        title: "With search query param value and excludeParams key-value pair",
    193        originalURI: "https://example2.com/?q=foo&page=web&excludeKey=web",
    194        expected: "",
    195      },
    196      {
    197        title:
    198          "With search query param value and presence of excludeParams key",
    199        originalURI: "https://example2.com/?q=foo&excludeKey",
    200        expected: "",
    201      },
    202    ],
    203  },
    204  {
    205    title: "Empty includeParams",
    206    name: "example3",
    207    cases: [
    208      {
    209        title: "With search query param value",
    210        originalURI: "https://example3.com/?q=foo",
    211        expected: "foo",
    212      },
    213    ],
    214  },
    215  {
    216    title: "No includeParams",
    217    name: "example4",
    218    cases: [
    219      {
    220        title: "With search query param value",
    221        originalURI: "https://example4.com/?q=foo",
    222        expected: "foo",
    223      },
    224    ],
    225  },
    226 ];
    227 
    228 add_setup(async function () {
    229  await UrlbarSearchTermsPersistence.overrideSearchTermsPersistenceForTests(
    230    PROVIDERS
    231  );
    232  const CONFIG_V2 = [
    233    {
    234      recordType: "engine",
    235      identifier: "Example",
    236      base: {
    237        name: "Example",
    238        urls: {
    239          search: {
    240            base: "https://example.com/",
    241            searchTermParamName: "q",
    242          },
    243        },
    244      },
    245    },
    246    {
    247      recordType: "engine",
    248      identifier: "Example1",
    249      base: {
    250        name: "Example1",
    251        urls: {
    252          search: {
    253            base: "https://example1.com/",
    254            searchTermParamName: "q",
    255            params: [
    256              {
    257                name: "default",
    258                value: "all",
    259              },
    260            ],
    261          },
    262        },
    263      },
    264    },
    265    {
    266      recordType: "engine",
    267      identifier: "Example2",
    268      base: {
    269        name: "Example2",
    270        urls: {
    271          search: {
    272            base: "https://example2.com/",
    273            searchTermParamName: "q",
    274          },
    275        },
    276      },
    277    },
    278    {
    279      recordType: "engine",
    280      identifier: "example3",
    281      base: {
    282        name: "example3",
    283        urls: {
    284          search: {
    285            base: "https://example3.com/",
    286            searchTermParamName: "q",
    287          },
    288        },
    289      },
    290    },
    291    {
    292      recordType: "engine",
    293      identifier: "example4",
    294      base: {
    295        name: "example4",
    296        urls: {
    297          search: {
    298            base: "https://example4.com/",
    299            searchTermParamName: "q",
    300          },
    301        },
    302      },
    303    },
    304    {
    305      recordType: "defaultEngines",
    306      globalDefault: "Example",
    307      specificDefaults: [],
    308    },
    309  ];
    310  SearchTestUtils.updateRemoteSettingsConfig(CONFIG_V2);
    311  await Services.search.init();
    312 });
    313 
    314 add_task(async function test_parsing_extracted_urls() {
    315  for (let test of TESTS) {
    316    for (let { title, originalURI, expected } of test.cases) {
    317      info(`${test.name} - ${title}`);
    318 
    319      if (originalURI) {
    320        originalURI = Services.io.newURI(originalURI);
    321      }
    322 
    323      Assert.equal(
    324        UrlbarSearchTermsPersistence.getSearchTerm(originalURI),
    325        expected
    326      );
    327    }
    328  }
    329 });