- Keep a running count of the next integer value for splitview ids - Examine previous session state for maxSplitViewId at startup to avoid id conflicts - Migrate string ids in saved session data at startup - Define the new properties on the session restore JSON schema, fix closed tabs subschema and update test data - Add JSDoc to clarify that setBrowserState is a test-only API - Update JSDoc to hint splitView IDs as numbers not strings Differential Revision: https://phabricator.services.mozilla.com/D282238
179 lines
4.5 KiB
JavaScript
179 lines
4.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
https://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"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);
|
|
});
|