tor-browser

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

browser_bug1184989_prevent_scrolling_when_preferences_flipped.js (3644B)


      1 const triggeringPrincipal_base64 = E10SUtils.SERIALIZED_SYSTEMPRINCIPAL;
      2 
      3 add_setup(async function () {
      4  await SpecialPowers.pushPrefEnv({
      5    set: [["test.wait300msAfterTabSwitch", true]],
      6  });
      7 });
      8 
      9 add_task(async function () {
     10  waitForExplicitFinish();
     11 
     12  const tabURL =
     13    getRootDirectory(gTestPath) +
     14    "browser_bug1184989_prevent_scrolling_when_preferences_flipped.xhtml";
     15 
     16  await BrowserTestUtils.withNewTab(
     17    { gBrowser, url: tabURL },
     18    async function (browser) {
     19      let doc = browser.contentDocument;
     20      let container = doc.getElementById("container");
     21 
     22      // Test button
     23      let button = doc.getElementById("button");
     24      button.focus();
     25      let initialScrollTop = container.scrollTop;
     26      EventUtils.sendString(" ");
     27      await checkPageScrolling(container, "button", initialScrollTop);
     28 
     29      // Test checkbox
     30      let checkbox = doc.getElementById("checkbox");
     31      checkbox.focus();
     32      initialScrollTop = container.scrollTop;
     33      EventUtils.sendString(" ");
     34      ok(checkbox.checked, "Checkbox is checked");
     35      await checkPageScrolling(container, "checkbox", initialScrollTop);
     36 
     37      // Test radio
     38      let radiogroup = doc.getElementById("radiogroup");
     39      radiogroup.focus();
     40      initialScrollTop = container.scrollTop;
     41      EventUtils.sendString(" ");
     42      await checkPageScrolling(container, "radio", initialScrollTop);
     43    }
     44  );
     45 
     46  await BrowserTestUtils.withNewTab(
     47    { gBrowser, url: "about:preferences#search" },
     48    async function (browser) {
     49      let doc = browser.contentDocument;
     50      let container = doc.getElementsByClassName("main-content")[0];
     51 
     52      // Test search
     53      let engineList = doc.getElementById("engineList");
     54      engineList.focus();
     55      let initialScrollTop = container.scrollTop;
     56      EventUtils.sendString(" ");
     57      is(
     58        engineList.view.selection.currentIndex,
     59        0,
     60        "Search engineList is selected"
     61      );
     62      EventUtils.sendString(" ");
     63      await checkPageScrolling(
     64        container,
     65        "search engineList",
     66        initialScrollTop
     67      );
     68    }
     69  );
     70 
     71  // Test session restore
     72  const CRASH_URL = "about:mozilla";
     73  const CRASH_FAVICON = "chrome://branding/content/icon32.png";
     74  const CRASH_SHENTRY = { url: CRASH_URL };
     75  const CRASH_TAB = { entries: [CRASH_SHENTRY], image: CRASH_FAVICON };
     76  const CRASH_STATE = { windows: [{ tabs: [CRASH_TAB] }] };
     77 
     78  const TAB_URL = "about:sessionrestore";
     79  const TAB_FORMDATA = { url: TAB_URL, id: { sessionData: CRASH_STATE } };
     80  const TAB_SHENTRY = { url: TAB_URL, triggeringPrincipal_base64 };
     81  const TAB_STATE = { entries: [TAB_SHENTRY], formdata: TAB_FORMDATA };
     82 
     83  let tab = await BrowserTestUtils.openNewForegroundTab(
     84    gBrowser,
     85    "about:blank"
     86  );
     87 
     88  // Fake a post-crash tab
     89  SessionStore.setTabState(tab, JSON.stringify(TAB_STATE));
     90 
     91  await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
     92  let doc = tab.linkedBrowser.contentDocument;
     93 
     94  // Make body scrollable
     95  doc.body.style.height = doc.body.clientHeight + 100 + "px";
     96 
     97  let tabsToggle = doc.getElementById("tabsToggle");
     98  tabsToggle.focus();
     99  let initialScrollTop = doc.documentElement.scrollTop;
    100  EventUtils.sendString(" ");
    101  await checkPageScrolling(
    102    doc.documentElement,
    103    "session restore",
    104    initialScrollTop
    105  );
    106 
    107  gBrowser.removeCurrentTab();
    108  finish();
    109 });
    110 
    111 function checkPageScrolling(container, type, initialScrollTop = 0) {
    112  return new Promise(resolve => {
    113    setTimeout(() => {
    114      is(
    115        container.scrollTop,
    116        initialScrollTop,
    117        "Page should not scroll when " + type + " flipped"
    118      );
    119      resolve();
    120    }, 0);
    121  });
    122 }