fune/browser/components/sessionstore/test/browser_636279.js
Kris Maglione 80327d3561 Bug 1484496: Part 5a - Convert browser/ nsISimpleEnumerator users to use JS iteration. r=Gijs
Differential Revision: https://phabricator.services.mozilla.com/D3729

--HG--
extra : rebase_source : e187b8e9a6b6db7ebc762adda5e489b25c7a7e43
extra : histedit_source : 868cb99d09954a51d6be321fcb516475ef70eb33
2018-08-18 19:27:33 -07:00

96 lines
2.5 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
var stateBackup = ss.getBrowserState();
var statePinned = {windows: [{tabs: [
{entries: [{url: "http://example.com#1", triggeringPrincipal_base64}], pinned: true}
]}]};
var state = {windows: [{tabs: [
{entries: [{url: "http://example.com#1", triggeringPrincipal_base64}]},
{entries: [{url: "http://example.com#2", triggeringPrincipal_base64}]},
{entries: [{url: "http://example.com#3", triggeringPrincipal_base64}]},
{entries: [{url: "http://example.com#4", triggeringPrincipal_base64}]},
]}]};
function test() {
waitForExplicitFinish();
registerCleanupFunction(function() {
TabsProgressListener.uninit();
ss.setBrowserState(stateBackup);
});
TabsProgressListener.init();
window.addEventListener("SSWindowStateReady", function() {
let firstProgress = true;
TabsProgressListener.setCallback(function(needsRestore, isRestoring) {
if (firstProgress) {
firstProgress = false;
is(isRestoring, 3, "restoring 3 tabs concurrently");
} else {
ok(isRestoring <= 3, "restoring max. 2 tabs concurrently");
}
if (0 == needsRestore) {
TabsProgressListener.unsetCallback();
waitForFocus(finish);
}
});
ss.setBrowserState(JSON.stringify(state));
}, {once: true});
ss.setBrowserState(JSON.stringify(statePinned));
}
function countTabs() {
let needsRestore = 0, isRestoring = 0;
for (let window of Services.wm.getEnumerator("navigator:browser")) {
if (window.closed)
continue;
for (let i = 0; i < window.gBrowser.tabs.length; i++) {
let browserState = ss.getInternalObjectState(window.gBrowser.tabs[i].linkedBrowser);
if (browserState == TAB_STATE_RESTORING)
isRestoring++;
else if (browserState == TAB_STATE_NEEDS_RESTORE)
needsRestore++;
}
}
return [needsRestore, isRestoring];
}
var TabsProgressListener = {
init() {
Services.obs.addObserver(this, "sessionstore-debug-tab-restored");
},
uninit() {
Services.obs.removeObserver(this, "sessionstore-debug-tab-restored");
this.unsetCallback();
},
setCallback(callback) {
this.callback = callback;
},
unsetCallback() {
delete this.callback;
},
observe(browser, topic, data) {
TabsProgressListener.onRestored(browser);
},
onRestored(browser) {
if (this.callback && ss.getInternalObjectState(browser) == TAB_STATE_RESTORING) {
this.callback.apply(null, countTabs());
}
}
};