tor-browser

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

test_special_search.js (17998B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 /**
      6 * Test for bug 395161 that allows special searches that restrict results to
      7 * history/bookmark/tagged items and title/url matches.
      8 *
      9 * Test 485122 by making sure results don't have tags when restricting result
     10 * to just history either by default behavior or dynamic query restrict.
     11 */
     12 
     13 testEngine_setup();
     14 
     15 function setSuggestPrefsToFalse() {
     16  Services.prefs.setBoolPref("browser.urlbar.suggest.history", false);
     17  Services.prefs.setBoolPref("browser.urlbar.suggest.bookmark", false);
     18 }
     19 
     20 const TRANSITION_TYPED = PlacesUtils.history.TRANSITION_TYPED;
     21 
     22 add_task(async function test_special_searches() {
     23  // High weight - Typed visit.
     24  let uri1 = Services.io.newURI("http://url/");
     25  // Medium weight - Regular visit.
     26  let uri2 = Services.io.newURI("http://url/2");
     27  // Medium weight - Regular visit.
     28  let uri3 = Services.io.newURI("http://foo.bar/");
     29  // High weight - Typed visit.
     30  let uri4 = Services.io.newURI("http://foo.bar/2");
     31  // High weight - Bookmark.
     32  let uri5 = Services.io.newURI("http://url/star");
     33  // High weight - Bookmark, regular visit.
     34  let uri6 = Services.io.newURI("http://url/star/2");
     35  // High weight - Bookmark, no visit.
     36  let uri7 = Services.io.newURI("http://foo.bar/star");
     37  // High weight - Bookmark.
     38  let uri8 = Services.io.newURI("http://foo.bar/star/2");
     39  // High weight - Bookmark, no visit.
     40  let uri9 = Services.io.newURI("http://url/tag");
     41  // High weight - Bookmark, no visit.
     42  let uri10 = Services.io.newURI("http://url/tag/2");
     43  // High weight - Bookmark, typed visit.
     44  let uri11 = Services.io.newURI("http://foo.bar/tag");
     45  // High weight - Bookmark, 0 visits.
     46  let uri12 = Services.io.newURI("http://foo.bar/tag/2");
     47 
     48  await PlacesTestUtils.addBookmarkWithDetails({
     49    uri: uri12,
     50    title: "foo.bar",
     51    tags: ["foo.bar"],
     52  });
     53  await PlacesTestUtils.addBookmarkWithDetails({
     54    uri: uri11,
     55    title: "title",
     56    tags: ["foo.bar"],
     57  });
     58  await PlacesTestUtils.addBookmarkWithDetails({
     59    uri: uri10,
     60    title: "foo.bar",
     61    tags: ["foo.bar"],
     62  });
     63  await PlacesTestUtils.addBookmarkWithDetails({
     64    uri: uri9,
     65    title: "title",
     66    tags: ["foo.bar"],
     67  });
     68  await PlacesTestUtils.addBookmarkWithDetails({ uri: uri8, title: "foo.bar" });
     69  await PlacesTestUtils.addBookmarkWithDetails({ uri: uri7, title: "title" });
     70  await PlacesTestUtils.addBookmarkWithDetails({ uri: uri6, title: "foo.bar" });
     71  await PlacesTestUtils.addBookmarkWithDetails({ uri: uri5, title: "title" });
     72 
     73  await PlacesTestUtils.addVisits([
     74    { uri: uri11, title: "title", transition: TRANSITION_TYPED },
     75    { uri: uri6, title: "foo.bar" },
     76    { uri: uri4, title: "foo.bar", transition: TRANSITION_TYPED },
     77    { uri: uri3, title: "title" },
     78    { uri: uri2, title: "foo.bar" },
     79    { uri: uri1, title: "title", transition: TRANSITION_TYPED },
     80  ]);
     81 
     82  await PlacesFrecencyRecalculator.recalculateAnyOutdatedFrecencies();
     83 
     84  // Order of frecency when not restricting, descending:
     85  // uri1
     86  // uri4
     87  // uri5
     88  // uri6
     89  // uri7
     90  // uri8
     91  // uri9
     92  // uri10
     93  // uri11
     94  // uri12
     95  // uri2
     96  // uri3
     97  // Because there are a lot of ties, the ordering is influenced by order in
     98  // which they were inserted.
     99 
    100  // Test restricting searches.
    101 
    102  info("History restrict");
    103  let context = createContext(UrlbarTokenizer.RESTRICT.HISTORY, {
    104    isPrivate: false,
    105  });
    106  await check_results({
    107    context,
    108    matches: [
    109      makeSearchResult(context, {
    110        engineName: SUGGESTIONS_ENGINE_NAME,
    111        heuristic: true,
    112      }),
    113      makeVisitResult(context, { uri: uri1.spec, title: "title" }),
    114      makeVisitResult(context, { uri: uri4.spec, title: "foo.bar" }),
    115      makeVisitResult(context, { uri: uri6.spec, title: "foo.bar" }),
    116      makeVisitResult(context, { uri: uri11.spec, title: "title" }),
    117      makeVisitResult(context, { uri: uri2.spec, title: "foo.bar" }),
    118      makeVisitResult(context, { uri: uri3.spec, title: "title" }),
    119    ],
    120  });
    121 
    122  info("Star restrict");
    123  context = createContext(UrlbarTokenizer.RESTRICT.BOOKMARK, {
    124    isPrivate: false,
    125  });
    126  await check_results({
    127    context,
    128    matches: [
    129      makeSearchResult(context, {
    130        engineName: SUGGESTIONS_ENGINE_NAME,
    131        heuristic: true,
    132      }),
    133      makeBookmarkResult(context, { uri: uri5.spec, title: "title" }),
    134      makeBookmarkResult(context, { uri: uri6.spec, title: "foo.bar" }),
    135      makeBookmarkResult(context, { uri: uri7.spec, title: "title" }),
    136      makeBookmarkResult(context, { uri: uri8.spec, title: "foo.bar" }),
    137      makeBookmarkResult(context, {
    138        uri: uri9.spec,
    139        title: "title",
    140      }),
    141      makeBookmarkResult(context, {
    142        uri: uri10.spec,
    143        title: "foo.bar",
    144      }),
    145      makeBookmarkResult(context, {
    146        uri: uri11.spec,
    147        title: "title",
    148      }),
    149      makeBookmarkResult(context, {
    150        uri: uri12.spec,
    151        title: "foo.bar",
    152      }),
    153    ],
    154  });
    155 
    156  info("Tag restrict");
    157  context = createContext(UrlbarTokenizer.RESTRICT.TAG, { isPrivate: false });
    158  await check_results({
    159    context,
    160    matches: [
    161      makeSearchResult(context, {
    162        engineName: SUGGESTIONS_ENGINE_NAME,
    163        heuristic: true,
    164      }),
    165      makeBookmarkResult(context, {
    166        uri: uri9.spec,
    167        title: "title",
    168      }),
    169      makeBookmarkResult(context, {
    170        uri: uri10.spec,
    171        title: "foo.bar",
    172      }),
    173      makeBookmarkResult(context, {
    174        uri: uri11.spec,
    175        title: "title",
    176      }),
    177      makeBookmarkResult(context, {
    178        uri: uri12.spec,
    179        title: "foo.bar",
    180      }),
    181    ],
    182  });
    183 
    184  info("Special as first word");
    185  context = createContext(`${UrlbarTokenizer.RESTRICT.HISTORY} foo bar`, {
    186    isPrivate: false,
    187  });
    188  await check_results({
    189    context,
    190    matches: [
    191      makeSearchResult(context, {
    192        query: "foo bar",
    193        alias: UrlbarTokenizer.RESTRICT.HISTORY,
    194        source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
    195        heuristic: true,
    196      }),
    197      makeVisitResult(context, { uri: uri4.spec, title: "foo.bar" }),
    198      makeVisitResult(context, { uri: uri6.spec, title: "foo.bar" }),
    199      makeVisitResult(context, { uri: uri11.spec, title: "title" }),
    200      makeVisitResult(context, { uri: uri2.spec, title: "foo.bar" }),
    201      makeVisitResult(context, { uri: uri3.spec, title: "title" }),
    202    ],
    203  });
    204 
    205  info("Special as last word");
    206  context = createContext(`foo bar ${UrlbarTokenizer.RESTRICT.HISTORY}`, {
    207    isPrivate: false,
    208  });
    209  await check_results({
    210    context,
    211    matches: [
    212      makeSearchResult(context, {
    213        engineName: SUGGESTIONS_ENGINE_NAME,
    214        heuristic: true,
    215      }),
    216      makeVisitResult(context, { uri: uri4.spec, title: "foo.bar" }),
    217      makeVisitResult(context, { uri: uri6.spec, title: "foo.bar" }),
    218      makeVisitResult(context, { uri: uri11.spec, title: "title" }),
    219      makeVisitResult(context, { uri: uri2.spec, title: "foo.bar" }),
    220      makeVisitResult(context, { uri: uri3.spec, title: "title" }),
    221    ],
    222  });
    223 
    224  // Test restricting and matching searches with a term.
    225 
    226  info(`foo ${UrlbarTokenizer.RESTRICT.HISTORY} -> history`);
    227  context = createContext(`foo ${UrlbarTokenizer.RESTRICT.HISTORY}`, {
    228    isPrivate: false,
    229  });
    230  await check_results({
    231    context,
    232    matches: [
    233      makeSearchResult(context, {
    234        engineName: SUGGESTIONS_ENGINE_NAME,
    235        heuristic: true,
    236      }),
    237      makeVisitResult(context, { uri: uri4.spec, title: "foo.bar" }),
    238      makeVisitResult(context, { uri: uri6.spec, title: "foo.bar" }),
    239      makeVisitResult(context, { uri: uri11.spec, title: "title" }),
    240      makeVisitResult(context, { uri: uri2.spec, title: "foo.bar" }),
    241      makeVisitResult(context, { uri: uri3.spec, title: "title" }),
    242    ],
    243  });
    244 
    245  info(`foo ${UrlbarTokenizer.RESTRICT.BOOKMARK} -> is star`);
    246  context = createContext(`foo ${UrlbarTokenizer.RESTRICT.BOOKMARK}`, {
    247    isPrivate: false,
    248  });
    249  await check_results({
    250    context,
    251    matches: [
    252      makeSearchResult(context, {
    253        engineName: SUGGESTIONS_ENGINE_NAME,
    254        heuristic: true,
    255      }),
    256      makeBookmarkResult(context, { uri: uri6.spec, title: "foo.bar" }),
    257      makeBookmarkResult(context, { uri: uri7.spec, title: "title" }),
    258      makeBookmarkResult(context, { uri: uri8.spec, title: "foo.bar" }),
    259      makeBookmarkResult(context, {
    260        uri: uri9.spec,
    261        title: "title",
    262        tags: ["foo.bar"],
    263      }),
    264      makeBookmarkResult(context, {
    265        uri: uri10.spec,
    266        title: "foo.bar",
    267        tags: ["foo.bar"],
    268      }),
    269      makeBookmarkResult(context, {
    270        uri: uri11.spec,
    271        title: "title",
    272        tags: ["foo.bar"],
    273      }),
    274      makeBookmarkResult(context, {
    275        uri: uri12.spec,
    276        title: "foo.bar",
    277        tags: ["foo.bar"],
    278      }),
    279    ],
    280  });
    281 
    282  info(`foo ${UrlbarTokenizer.RESTRICT.TITLE} -> in title`);
    283  context = createContext(`foo ${UrlbarTokenizer.RESTRICT.TITLE}`, {
    284    isPrivate: false,
    285  });
    286  await check_results({
    287    context,
    288    matches: [
    289      makeSearchResult(context, {
    290        engineName: SUGGESTIONS_ENGINE_NAME,
    291        heuristic: true,
    292      }),
    293      makeVisitResult(context, { uri: uri4.spec, title: "foo.bar" }),
    294      makeBookmarkResult(context, { uri: uri6.spec, title: "foo.bar" }),
    295      makeBookmarkResult(context, { uri: uri8.spec, title: "foo.bar" }),
    296      makeVisitResult(context, { uri: uri9.spec, title: "title" }),
    297      makeVisitResult(context, { uri: uri10.spec, title: "foo.bar" }),
    298      makeVisitResult(context, { uri: uri11.spec, title: "title" }),
    299      makeVisitResult(context, { uri: uri12.spec, title: "foo.bar" }),
    300      makeVisitResult(context, { uri: uri2.spec, title: "foo.bar" }),
    301    ],
    302  });
    303 
    304  info(`foo ${UrlbarTokenizer.RESTRICT.URL} -> in url`);
    305  context = createContext(`foo ${UrlbarTokenizer.RESTRICT.URL}`, {
    306    isPrivate: false,
    307  });
    308  await check_results({
    309    context,
    310    matches: [
    311      makeSearchResult(context, {
    312        engineName: SUGGESTIONS_ENGINE_NAME,
    313        heuristic: true,
    314      }),
    315      makeVisitResult(context, { uri: uri4.spec, title: "foo.bar" }),
    316      makeBookmarkResult(context, { uri: uri7.spec, title: "title" }),
    317      makeBookmarkResult(context, { uri: uri8.spec, title: "foo.bar" }),
    318      makeVisitResult(context, { uri: uri11.spec, title: "title" }),
    319      makeVisitResult(context, { uri: uri12.spec, title: "foo.bar" }),
    320      makeVisitResult(context, { uri: uri3.spec, title: "title" }),
    321    ],
    322  });
    323 
    324  info(`foo ${UrlbarTokenizer.RESTRICT.TAG} -> is tag`);
    325  context = createContext(`foo ${UrlbarTokenizer.RESTRICT.TAG}`, {
    326    isPrivate: false,
    327  });
    328  await check_results({
    329    context,
    330    matches: [
    331      makeSearchResult(context, {
    332        engineName: SUGGESTIONS_ENGINE_NAME,
    333        heuristic: true,
    334      }),
    335      makeBookmarkResult(context, {
    336        uri: uri9.spec,
    337        title: "title",
    338        tags: ["foo.bar"],
    339      }),
    340      makeBookmarkResult(context, {
    341        uri: uri10.spec,
    342        title: "foo.bar",
    343        tags: ["foo.bar"],
    344      }),
    345      makeBookmarkResult(context, {
    346        uri: uri11.spec,
    347        title: "title",
    348        tags: ["foo.bar"],
    349      }),
    350      makeBookmarkResult(context, {
    351        uri: uri12.spec,
    352        title: "foo.bar",
    353        tags: ["foo.bar"],
    354      }),
    355    ],
    356  });
    357 
    358  // Test conflicting restrictions.
    359 
    360  info(
    361    `conflict ${UrlbarTokenizer.RESTRICT.TITLE} ${UrlbarTokenizer.RESTRICT.URL} -> url wins`
    362  );
    363  await PlacesTestUtils.addVisits([
    364    {
    365      uri: `http://conflict.com/${UrlbarTokenizer.RESTRICT.TITLE}`,
    366      title: "test",
    367    },
    368    {
    369      uri: "http://conflict.com/",
    370      title: `test${UrlbarTokenizer.RESTRICT.TITLE}`,
    371    },
    372  ]);
    373  context = createContext(
    374    `conflict ${UrlbarTokenizer.RESTRICT.TITLE} ${UrlbarTokenizer.RESTRICT.URL}`,
    375    { isPrivate: false }
    376  );
    377  await check_results({
    378    context,
    379    matches: [
    380      makeSearchResult(context, {
    381        engineName: SUGGESTIONS_ENGINE_NAME,
    382        heuristic: true,
    383      }),
    384      makeVisitResult(context, {
    385        uri: `http://conflict.com/${UrlbarTokenizer.RESTRICT.TITLE}`,
    386        title: "test",
    387      }),
    388    ],
    389  });
    390 
    391  info(
    392    `conflict ${UrlbarTokenizer.RESTRICT.HISTORY} ${UrlbarTokenizer.RESTRICT.BOOKMARK} -> bookmark wins`
    393  );
    394  await PlacesTestUtils.addBookmarkWithDetails({
    395    uri: "http://bookmark.conflict.com/",
    396    title: `conflict ${UrlbarTokenizer.RESTRICT.HISTORY}`,
    397  });
    398  await PlacesFrecencyRecalculator.recalculateAnyOutdatedFrecencies();
    399  context = createContext(
    400    `conflict ${UrlbarTokenizer.RESTRICT.HISTORY} ${UrlbarTokenizer.RESTRICT.BOOKMARK}`,
    401    { isPrivate: false }
    402  );
    403  await check_results({
    404    context,
    405    matches: [
    406      makeSearchResult(context, {
    407        engineName: SUGGESTIONS_ENGINE_NAME,
    408        heuristic: true,
    409      }),
    410      makeBookmarkResult(context, {
    411        uri: "http://bookmark.conflict.com/",
    412        title: `conflict ${UrlbarTokenizer.RESTRICT.HISTORY}`,
    413      }),
    414    ],
    415  });
    416 
    417  info(
    418    `conflict ${UrlbarTokenizer.RESTRICT.BOOKMARK} ${UrlbarTokenizer.RESTRICT.TAG} -> tag wins`
    419  );
    420  await PlacesTestUtils.addBookmarkWithDetails({
    421    uri: "http://tag.conflict.com/",
    422    title: `conflict ${UrlbarTokenizer.RESTRICT.BOOKMARK}`,
    423    tags: ["one"],
    424  });
    425  await PlacesTestUtils.addBookmarkWithDetails({
    426    uri: "http://nontag.conflict.com/",
    427    title: `conflict ${UrlbarTokenizer.RESTRICT.BOOKMARK}`,
    428  });
    429  await PlacesFrecencyRecalculator.recalculateAnyOutdatedFrecencies();
    430  context = createContext(
    431    `conflict ${UrlbarTokenizer.RESTRICT.BOOKMARK} ${UrlbarTokenizer.RESTRICT.TAG}`,
    432    { isPrivate: false }
    433  );
    434  await check_results({
    435    context,
    436    matches: [
    437      makeSearchResult(context, {
    438        engineName: SUGGESTIONS_ENGINE_NAME,
    439        heuristic: true,
    440      }),
    441      makeBookmarkResult(context, {
    442        uri: "http://tag.conflict.com/",
    443        title: `conflict ${UrlbarTokenizer.RESTRICT.BOOKMARK}`,
    444      }),
    445    ],
    446  });
    447 
    448  // Disable autoFill for the next tests, see test_autoFill_default_behavior.js
    449  // for specific tests.
    450  Services.prefs.setBoolPref("browser.urlbar.autoFill", false);
    451 
    452  // Test default usage by setting certain browser.urlbar.suggest.* prefs
    453  info("foo -> default history");
    454  setSuggestPrefsToFalse();
    455  Services.prefs.setBoolPref("browser.urlbar.suggest.history", true);
    456  context = createContext("foo", { isPrivate: false });
    457  await check_results({
    458    context,
    459    matches: [
    460      makeSearchResult(context, {
    461        engineName: SUGGESTIONS_ENGINE_NAME,
    462        heuristic: true,
    463      }),
    464      makeVisitResult(context, { uri: uri4.spec, title: "foo.bar" }),
    465      makeVisitResult(context, { uri: uri6.spec, title: "foo.bar" }),
    466      makeVisitResult(context, { uri: uri11.spec, title: "title" }),
    467      makeVisitResult(context, { uri: uri2.spec, title: "foo.bar" }),
    468      makeVisitResult(context, { uri: uri3.spec, title: "title" }),
    469    ],
    470  });
    471 
    472  info("foo -> default history, is star");
    473  setSuggestPrefsToFalse();
    474  Services.prefs.setBoolPref("browser.urlbar.suggest.history", true);
    475  Services.prefs.setBoolPref("browser.urlbar.suggest.bookmark", true);
    476  // The purpose of this test is to verify what is being sent by ProviderPlaces.
    477  // It will send 10 results, but the heuristic result pushes the last result
    478  // out of the panel. We set maxRichResults to a high value to test the full
    479  // output of ProviderPlaces.
    480  Services.prefs.setIntPref("browser.urlbar.maxRichResults", 20);
    481  context = createContext("foo", { isPrivate: false });
    482  await check_results({
    483    context,
    484    matches: [
    485      makeSearchResult(context, {
    486        engineName: SUGGESTIONS_ENGINE_NAME,
    487        heuristic: true,
    488      }),
    489      makeVisitResult(context, { uri: uri4.spec, title: "foo.bar" }),
    490      makeBookmarkResult(context, { uri: uri6.spec, title: "foo.bar" }),
    491      makeBookmarkResult(context, { uri: uri7.spec, title: "title" }),
    492      makeBookmarkResult(context, { uri: uri8.spec, title: "foo.bar" }),
    493      makeBookmarkResult(context, {
    494        uri: uri9.spec,
    495        title: "title",
    496        tags: ["foo.bar"],
    497      }),
    498      makeBookmarkResult(context, {
    499        uri: uri10.spec,
    500        title: "foo.bar",
    501        tags: ["foo.bar"],
    502      }),
    503      makeBookmarkResult(context, {
    504        uri: uri11.spec,
    505        title: "title",
    506        tags: ["foo.bar"],
    507      }),
    508      makeBookmarkResult(context, {
    509        uri: uri12.spec,
    510        title: "foo.bar",
    511        tags: ["foo.bar"],
    512      }),
    513      makeVisitResult(context, { uri: uri2.spec, title: "foo.bar" }),
    514      makeVisitResult(context, { uri: uri3.spec, title: "title" }),
    515    ],
    516  });
    517  Services.prefs.clearUserPref("browser.urlbar.maxRichResults");
    518 
    519  info("foo -> is star");
    520  setSuggestPrefsToFalse();
    521  Services.prefs.setBoolPref("browser.urlbar.suggest.history", false);
    522  Services.prefs.setBoolPref("browser.urlbar.suggest.bookmark", true);
    523  context = createContext("foo", { isPrivate: false });
    524  await check_results({
    525    context,
    526    matches: [
    527      makeSearchResult(context, {
    528        engineName: SUGGESTIONS_ENGINE_NAME,
    529        heuristic: true,
    530      }),
    531      makeBookmarkResult(context, { uri: uri6.spec, title: "foo.bar" }),
    532      makeBookmarkResult(context, { uri: uri7.spec, title: "title" }),
    533      makeBookmarkResult(context, { uri: uri8.spec, title: "foo.bar" }),
    534      makeBookmarkResult(context, {
    535        uri: uri9.spec,
    536        title: "title",
    537        tags: ["foo.bar"],
    538      }),
    539      makeBookmarkResult(context, {
    540        uri: uri10.spec,
    541        title: "foo.bar",
    542        tags: ["foo.bar"],
    543      }),
    544      makeBookmarkResult(context, {
    545        uri: uri11.spec,
    546        title: "title",
    547        tags: ["foo.bar"],
    548      }),
    549      makeBookmarkResult(context, {
    550        uri: uri12.spec,
    551        title: "foo.bar",
    552        tags: ["foo.bar"],
    553      }),
    554    ],
    555  });
    556 
    557  await cleanupPlaces();
    558 });