mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 952259 - Tests for Metro SessionStore.getBrowserState [r=msamuel]
This commit is contained in:
parent
860f631f3c
commit
c3ab1bf977
55
browser/metro/base/tests/mochitest/browser_sessionstore.js
Normal file
55
browser/metro/base/tests/mochitest/browser_sessionstore.js
Normal file
@ -0,0 +1,55 @@
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
var gSessionStore = Cc["@mozilla.org/browser/sessionstore;1"]
|
||||
.getService(Ci.nsISessionStore);
|
||||
|
||||
function test() {
|
||||
runTests();
|
||||
}
|
||||
|
||||
function getState() {
|
||||
return JSON.parse(gSessionStore.getBrowserState());
|
||||
}
|
||||
|
||||
function getTabData() {
|
||||
return getState().windows[0].tabs;
|
||||
}
|
||||
|
||||
function isValidTabData(aData) {
|
||||
return aData && aData.entries && aData.entries.length &&
|
||||
typeof aData.index == "number";
|
||||
}
|
||||
|
||||
gTests.push({
|
||||
desc: "getBrowserState tests",
|
||||
run: function() {
|
||||
// Wait for Session Manager to be initialized.
|
||||
yield waitForCondition(() => window.__SSID);
|
||||
info(window.__SSID);
|
||||
let tabData1 = getTabData();
|
||||
ok(tabData1.every(isValidTabData), "Tab data starts out valid");
|
||||
|
||||
// Open a tab.
|
||||
let tab = Browser.addTab("about:mozilla");
|
||||
let tabData2 = getTabData();
|
||||
is(tabData2.length, tabData1.length, "New tab not added yet.");
|
||||
|
||||
// Wait for the tab's session data to be initialized.
|
||||
yield waitForMessage("Content:SessionHistory", tab.browser.messageManager);
|
||||
yield waitForMs(0);
|
||||
let tabData3 = getTabData();
|
||||
is(tabData3.length, tabData1.length + 1, "New tab added.");
|
||||
ok(tabData3.every(isValidTabData), "Tab data still valid");
|
||||
|
||||
// Close the tab.
|
||||
Browser.closeTab(tab, { forceClose: true } );
|
||||
let tabData4 = getTabData();
|
||||
is(tabData4.length, tabData1.length, "Closed tab removed.");
|
||||
ok(tabData4.every(isValidTabData), "Tab data valid again");
|
||||
}
|
||||
});
|
@ -56,6 +56,7 @@ support-files =
|
||||
[browser_private_browsing.js]
|
||||
[browser_prompt.js]
|
||||
[browser_remotetabs.js]
|
||||
[browser_sessionstore.js]
|
||||
[browser_snappedState.js]
|
||||
[browser_tabs.js]
|
||||
[browser_tabs_container.js]
|
||||
|
@ -338,6 +338,7 @@ SessionStore.prototype = {
|
||||
// Assign it a unique identifier and create its data object
|
||||
aWindow.__SSID = "window" + gUUIDGenerator.generateUUID().toString();
|
||||
this._windows[aWindow.__SSID] = { tabs: [], selected: 0, _closedTabs: [] };
|
||||
this._orderedWindows.push(aWindow.__SSID);
|
||||
|
||||
// Perform additional initialization when the first window is loading
|
||||
if (this._loadState == STATE_STOPPED) {
|
||||
@ -348,9 +349,6 @@ SessionStore.prototype = {
|
||||
if (!this.shouldRestore()) {
|
||||
this._clearCache();
|
||||
Services.obs.notifyObservers(null, "sessionstore-windows-restored", "");
|
||||
|
||||
// If nothing is being restored, we only have our single Metro window.
|
||||
this._orderedWindows.push(aWindow.__SSID);
|
||||
}
|
||||
}
|
||||
|
||||
@ -554,15 +552,13 @@ SessionStore.prototype = {
|
||||
|
||||
_getTabData: function(aWindow) {
|
||||
return aWindow.Browser.tabs
|
||||
.filter(tab => !tab.isPrivate)
|
||||
.filter(tab => !tab.isPrivate && tab.browser.__SS_data)
|
||||
.map(tab => {
|
||||
let browser = tab.browser;
|
||||
if (browser.__SS_data) {
|
||||
let tabData = browser.__SS_data;
|
||||
if (browser.__SS_extdata)
|
||||
tabData.extData = browser.__SS_extdata;
|
||||
return tabData;
|
||||
}
|
||||
let tabData = browser.__SS_data;
|
||||
if (browser.__SS_extdata)
|
||||
tabData.extData = browser.__SS_extdata;
|
||||
return tabData;
|
||||
});
|
||||
},
|
||||
|
||||
@ -801,6 +797,7 @@ SessionStore.prototype = {
|
||||
} catch (ex) { /* currentGroupId is undefined if user has no tab groups */ }
|
||||
|
||||
// Move all window data from sessionstore.js to this._windows.
|
||||
this._orderedWindows = [];
|
||||
for (let i = 0; i < data.windows.length; i++) {
|
||||
let SSID;
|
||||
if (i != windowIndex) {
|
||||
|
Loading…
Reference in New Issue
Block a user