tor-browser

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

browser_async_duplicate_tab.js (2492B)


      1 "use strict";
      2 
      3 const PATH = getRootDirectory(gTestPath).replace(
      4  "chrome://mochitests/content/",
      5  "http://example.com/"
      6 );
      7 const URL = PATH + "file_async_duplicate_tab.html";
      8 
      9 add_task(async function test_duplicate() {
     10  // Create new tab.
     11  let tab = BrowserTestUtils.addTab(gBrowser, URL);
     12  let browser = tab.linkedBrowser;
     13  await promiseBrowserLoaded(browser);
     14 
     15  // Flush to empty any queued update messages.
     16  await TabStateFlusher.flush(browser);
     17 
     18  // Click the link to navigate, this will add second shistory entry.
     19  await SpecialPowers.spawn(browser, [], async function () {
     20    return new Promise(resolve => {
     21      docShell.chromeEventHandler.addEventListener(
     22        "hashchange",
     23        () => resolve(),
     24        { once: true, capture: true }
     25      );
     26 
     27      // Click the link.
     28      content.document.querySelector("a").click();
     29    });
     30  });
     31 
     32  // Duplicate the tab.
     33  let tab2 = ss.duplicateTab(window, tab);
     34 
     35  // Wait until the tab has fully restored.
     36  await promiseTabRestored(tab2);
     37  await TabStateFlusher.flush(tab2.linkedBrowser);
     38 
     39  // There should be two history entries now.
     40  let { entries } = JSON.parse(ss.getTabState(tab2));
     41  is(entries.length, 2, "there are two shistory entries");
     42 
     43  // Cleanup.
     44  BrowserTestUtils.removeTab(tab2);
     45  BrowserTestUtils.removeTab(tab);
     46 });
     47 
     48 add_task(async function test_duplicate_remove() {
     49  // Create new tab.
     50  let tab = BrowserTestUtils.addTab(gBrowser, URL);
     51  let browser = tab.linkedBrowser;
     52  await promiseBrowserLoaded(browser);
     53 
     54  // Flush to empty any queued update messages.
     55  await TabStateFlusher.flush(browser);
     56 
     57  // Click the link to navigate, this will add second shistory entry.
     58  await SpecialPowers.spawn(browser, [], async function () {
     59    return new Promise(resolve => {
     60      docShell.chromeEventHandler.addEventListener(
     61        "hashchange",
     62        () => resolve(),
     63        { once: true, capture: true }
     64      );
     65 
     66      // Click the link.
     67      content.document.querySelector("a").click();
     68    });
     69  });
     70 
     71  // Duplicate the tab.
     72  let tab2 = ss.duplicateTab(window, tab);
     73 
     74  // Before the duplication finished, remove the tab.
     75  await Promise.all([
     76    promiseRemoveTabAndSessionState(tab),
     77    promiseTabRestored(tab2),
     78  ]);
     79  await TabStateFlusher.flush(tab2.linkedBrowser);
     80 
     81  // There should be two history entries now.
     82  let { entries } = JSON.parse(ss.getTabState(tab2));
     83  is(entries.length, 2, "there are two shistory entries");
     84 
     85  // Cleanup.
     86  BrowserTestUtils.removeTab(tab2);
     87 });