tor-browser

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

browser_backforward_userinteraction_systemprincipal.js (2875B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const TEST_PAGE =
      7  getRootDirectory(gTestPath).replace(
      8    "chrome://mochitests/content",
      9    "https://example.com"
     10  ) + "dummy_page.html";
     11 
     12 async function runTest(privilegedLoad) {
     13  for (let requireUserInteraction of [true, false]) {
     14    Services.prefs.setBoolPref(
     15      "browser.navigation.requireUserInteraction",
     16      requireUserInteraction
     17    );
     18 
     19    let tab = await BrowserTestUtils.openNewForegroundTab(
     20      gBrowser,
     21      TEST_PAGE + "?entry=0"
     22    );
     23    let browser = tab.linkedBrowser;
     24 
     25    // Add some user interaction to the initial entry
     26    await SpecialPowers.spawn(browser, [], () => {
     27      content.document.notifyUserGestureActivation();
     28    });
     29 
     30    assertBackForwardState(false, false);
     31 
     32    await followLink(TEST_PAGE + "?entry=1");
     33 
     34    assertBackForwardState(true, false);
     35 
     36    await followLink(TEST_PAGE + "?entry=2");
     37 
     38    assertBackForwardState(true, false);
     39 
     40    await followLink(TEST_PAGE + "?entry=3");
     41 
     42    assertBackForwardState(true, false);
     43 
     44    // Entry 4 will be added through a user action in browser chrome,
     45    // giving user interaction to entry 3. Entry 4 should not gain automatic
     46    // user interaction.
     47    await privilegedLoad(TEST_PAGE + "?entry=4");
     48 
     49    assertBackForwardState(true, false);
     50 
     51    await followLink(TEST_PAGE + "?entry=5");
     52 
     53    assertBackForwardState(true, false);
     54 
     55    if (!requireUserInteraction) {
     56      await goBack(TEST_PAGE + "?entry=4");
     57    }
     58    await goBack(TEST_PAGE + "?entry=3");
     59 
     60    if (!requireUserInteraction) {
     61      await goBack(TEST_PAGE + "?entry=2");
     62      await goBack(TEST_PAGE + "?entry=1");
     63    }
     64 
     65    assertBackForwardState(true, true);
     66 
     67    await goBack(TEST_PAGE + "?entry=0");
     68 
     69    assertBackForwardState(false, true);
     70 
     71    if (!requireUserInteraction) {
     72      await goForward(TEST_PAGE + "?entry=1");
     73      await goForward(TEST_PAGE + "?entry=2");
     74    }
     75 
     76    await goForward(TEST_PAGE + "?entry=3");
     77 
     78    assertBackForwardState(true, true);
     79 
     80    if (!requireUserInteraction) {
     81      await goForward(TEST_PAGE + "?entry=4");
     82    }
     83 
     84    await goForward(TEST_PAGE + "?entry=5");
     85 
     86    assertBackForwardState(true, false);
     87 
     88    BrowserTestUtils.removeTab(tab);
     89  }
     90 
     91  Services.prefs.clearUserPref("browser.navigation.requireUserInteraction");
     92 }
     93 
     94 // Test that we add a user interaction flag to the previous site when loading
     95 // a new site from user interaction with privileged UI, e.g. through the
     96 // URL bar.
     97 add_task(async function test_urlBar() {
     98  await runTest(async function (url) {
     99    info(`Loading ${url} via the URL bar.`);
    100    let browser = gBrowser.selectedBrowser;
    101    let loaded = BrowserTestUtils.browserLoaded(browser, false, url);
    102    gURLBar.focus();
    103    gURLBar.value = url;
    104    gURLBar.goButton.click();
    105    await loaded;
    106  });
    107 });