Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
const ORIG_STATE = SessionStore.getBrowserState();
registerCleanupFunction(async () => {
await SessionStoreTestUtils.promiseBrowserState(ORIG_STATE);
});
add_task(async function test_fresh_session_sequential_integer_ids() {
SessionStore.resetNextClosedId();
let tab1 = gBrowser.tabs[0];
let tab2 = BrowserTestUtils.addTab(gBrowser, "about:robots");
await BrowserTestUtils.browserLoaded(tab2.linkedBrowser);
let splitview1 = gBrowser.addTabSplitView([tab1, tab2]);
Assert.strictEqual(
typeof splitview1.splitViewId,
"number",
"splitViewId should be a number"
);
Assert.strictEqual(
splitview1.splitViewId,
1,
"First split view ID should be 1"
);
let tab3 = BrowserTestUtils.addTab(gBrowser, "about:mozilla");
let tab4 = BrowserTestUtils.addTab(gBrowser, "about:about");
await Promise.all([
BrowserTestUtils.browserLoaded(tab3.linkedBrowser),
BrowserTestUtils.browserLoaded(tab4.linkedBrowser),
]);
let splitview2 = gBrowser.addTabSplitView([tab3, tab4]);
Assert.strictEqual(
typeof splitview2.splitViewId,
"number",
"splitViewId should be a number"
);
Assert.strictEqual(
splitview2.splitViewId,
2,
"Second split view ID should be 2"
);
Assert.notEqual(
splitview1.splitViewId,
splitview2.splitViewId,
"Split view IDs should be unique"
);
gBrowser.removeTab(tab4);
gBrowser.removeTab(tab3);
gBrowser.removeTab(tab2);
});
add_task(async function test_counter_persists_across_sessions() {
let tab1 = gBrowser.tabs[0];
let tab2 = BrowserTestUtils.addTab(gBrowser, "about:robots");
await BrowserTestUtils.browserLoaded(tab2.linkedBrowser);
gBrowser.addTabSplitView([tab1, tab2]);
let tab3 = BrowserTestUtils.addTab(gBrowser, "about:mozilla");
let tab4 = BrowserTestUtils.addTab(gBrowser, "about:about");
await Promise.all([
BrowserTestUtils.browserLoaded(tab3.linkedBrowser),
BrowserTestUtils.browserLoaded(tab4.linkedBrowser),
]);
let splitview2 = gBrowser.addTabSplitView([tab3, tab4]);
let secondId = splitview2.splitViewId;
await TabStateFlusher.flushWindow(window);
let state = JSON.parse(SessionStore.getBrowserState());
Assert.ok(state.maxSplitViewId, "maxSplitViewId should be in saved state");
Assert.strictEqual(
state.maxSplitViewId,
secondId,
"maxSplitViewId should match the highest ID used"
);
await SessionStoreTestUtils.promiseBrowserState(state);
let tab5 = BrowserTestUtils.addTab(gBrowser, "about:config");
let tab6 = BrowserTestUtils.addTab(gBrowser, "about:support");
await Promise.all([
BrowserTestUtils.browserLoaded(tab5.linkedBrowser),
BrowserTestUtils.browserLoaded(tab6.linkedBrowser),
]);
let splitview3 = gBrowser.addTabSplitView([tab5, tab6]);
Assert.strictEqual(
typeof splitview3.splitViewId,
"number",
"New splitViewId should be a number"
);
Assert.strictEqual(
splitview3.splitViewId,
secondId + 1,
"New split view ID should be one more than persisted counter"
);
gBrowser.removeTab(tab6);
gBrowser.removeTab(tab5);
});
add_task(async function test_counter_initialized_from_persisted_value() {
let state = {
windows: [
{
tabs: [
{
entries: [
{
url: "about:mozilla",
triggeringPrincipal_base64,
},
],
splitViewId: 42,
},
{
entries: [
{
url: "about:robots",
triggeringPrincipal_base64,
},
],
splitViewId: 42,
},
],
selected: 1,
splitViews: [
{
id: 42,
numberOfTabs: 2,
},
],
},
],
maxSplitViewId: 42,
};
await SessionStoreTestUtils.promiseBrowserState(state);
Assert.strictEqual(
gBrowser.tabs[0].splitview.splitViewId,
42,
"Restored split view should have ID 42"
);
let tab3 = BrowserTestUtils.addTab(gBrowser, "about:config");
let tab4 = BrowserTestUtils.addTab(gBrowser, "about:support");
await Promise.all([
BrowserTestUtils.browserLoaded(tab3.linkedBrowser),
BrowserTestUtils.browserLoaded(tab4.linkedBrowser),
]);
let newSplitview = gBrowser.addTabSplitView([tab3, tab4]);
Assert.strictEqual(
newSplitview.splitViewId,
43,
"New split view ID should be maxSplitViewId + 1"
);
gBrowser.removeTab(tab4);
gBrowser.removeTab(tab3);
});