summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/test/browser_async_duplicate_tab.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /browser/components/sessionstore/test/browser_async_duplicate_tab.js
parentInitial commit. (diff)
downloadthunderbird-upstream.tar.xz
thunderbird-upstream.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/components/sessionstore/test/browser_async_duplicate_tab.js')
-rw-r--r--browser/components/sessionstore/test/browser_async_duplicate_tab.js87
1 files changed, 87 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_async_duplicate_tab.js b/browser/components/sessionstore/test/browser_async_duplicate_tab.js
new file mode 100644
index 0000000000..e592df93ed
--- /dev/null
+++ b/browser/components/sessionstore/test/browser_async_duplicate_tab.js
@@ -0,0 +1,87 @@
+"use strict";
+
+const PATH = getRootDirectory(gTestPath).replace(
+ "chrome://mochitests/content/",
+ "http://example.com/"
+);
+const URL = PATH + "file_async_duplicate_tab.html";
+
+add_task(async function test_duplicate() {
+ // Create new tab.
+ let tab = BrowserTestUtils.addTab(gBrowser, URL);
+ let browser = tab.linkedBrowser;
+ await promiseBrowserLoaded(browser);
+
+ // Flush to empty any queued update messages.
+ await TabStateFlusher.flush(browser);
+
+ // Click the link to navigate, this will add second shistory entry.
+ await SpecialPowers.spawn(browser, [], async function () {
+ return new Promise(resolve => {
+ docShell.chromeEventHandler.addEventListener(
+ "hashchange",
+ () => resolve(),
+ { once: true, capture: true }
+ );
+
+ // Click the link.
+ content.document.querySelector("a").click();
+ });
+ });
+
+ // Duplicate the tab.
+ let tab2 = ss.duplicateTab(window, tab);
+
+ // Wait until the tab has fully restored.
+ await promiseTabRestored(tab2);
+ await TabStateFlusher.flush(tab2.linkedBrowser);
+
+ // There should be two history entries now.
+ let { entries } = JSON.parse(ss.getTabState(tab2));
+ is(entries.length, 2, "there are two shistory entries");
+
+ // Cleanup.
+ BrowserTestUtils.removeTab(tab2);
+ BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function test_duplicate_remove() {
+ // Create new tab.
+ let tab = BrowserTestUtils.addTab(gBrowser, URL);
+ let browser = tab.linkedBrowser;
+ await promiseBrowserLoaded(browser);
+
+ // Flush to empty any queued update messages.
+ await TabStateFlusher.flush(browser);
+
+ // Click the link to navigate, this will add second shistory entry.
+ await SpecialPowers.spawn(browser, [], async function () {
+ return new Promise(resolve => {
+ docShell.chromeEventHandler.addEventListener(
+ "hashchange",
+ () => resolve(),
+ { once: true, capture: true }
+ );
+
+ // Click the link.
+ content.document.querySelector("a").click();
+ });
+ });
+
+ // Duplicate the tab.
+ let tab2 = ss.duplicateTab(window, tab);
+
+ // Before the duplication finished, remove the tab.
+ await Promise.all([
+ promiseRemoveTabAndSessionState(tab),
+ promiseTabRestored(tab2),
+ ]);
+ await TabStateFlusher.flush(tab2.linkedBrowser);
+
+ // There should be two history entries now.
+ let { entries } = JSON.parse(ss.getTabState(tab2));
+ is(entries.length, 2, "there are two shistory entries");
+
+ // Cleanup.
+ BrowserTestUtils.removeTab(tab2);
+});