tor-browser

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

browser_revive_crashed_bg_tabs.js (1917B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 /**
      5 * Tests that even if the user has set their tabs to restore
      6 * immediately on session start, that background tabs after a
      7 * content process crash restore on demand.
      8 */
      9 
     10 "use strict";
     11 
     12 const PAGE_1 =
     13  "data:text/html,<html><body>A%20regular,%20everyday,%20normal%20page.";
     14 const PAGE_2 =
     15  "data:text/html,<html><body>Another%20regular,%20everyday,%20normal%20page.";
     16 
     17 add_setup(async function () {
     18  await pushPrefs(
     19    ["dom.ipc.processCount", 1],
     20    ["browser.sessionstore.restore_on_demand", false]
     21  );
     22 });
     23 
     24 add_task(async function test_revive_bg_tabs_on_demand() {
     25  let newTab1 = BrowserTestUtils.addTab(gBrowser, PAGE_1);
     26  let browser1 = newTab1.linkedBrowser;
     27  await BrowserTestUtils.browserLoaded(browser1);
     28 
     29  gBrowser.selectedTab = newTab1;
     30 
     31  let newTab2 = BrowserTestUtils.addTab(gBrowser, PAGE_2);
     32  let browser2 = newTab2.linkedBrowser;
     33  await BrowserTestUtils.browserLoaded(browser2);
     34 
     35  await TabStateFlusher.flush(browser2);
     36 
     37  // Now crash the selected tab
     38  let windowReady = BrowserTestUtils.waitForEvent(window, "SSWindowStateReady");
     39  await BrowserTestUtils.crashFrame(browser1);
     40 
     41  ok(newTab1.hasAttribute("crashed"), "Selected tab should be crashed");
     42  ok(!newTab2.hasAttribute("crashed"), "Background tab should not be crashed");
     43 
     44  // Wait until we've had a chance to restore all tabs immediately
     45  await windowReady;
     46 
     47  // But we should not have restored the background tab
     48  ok(newTab2.hasAttribute("pending"), "Background tab should be pending");
     49 
     50  // Now select newTab2 to make sure it restores.
     51  let newTab2Restored = promiseTabRestored(newTab2);
     52  gBrowser.selectedTab = newTab2;
     53  await newTab2Restored;
     54 
     55  ok(browser2.isRemoteBrowser, "Restored browser should be remote");
     56 
     57  BrowserTestUtils.removeTab(newTab1);
     58  BrowserTestUtils.removeTab(newTab2);
     59 });