forked from mirrors/gecko-dev
Differential Revision: https://phabricator.services.mozilla.com/D3729 --HG-- extra : rebase_source : e187b8e9a6b6db7ebc762adda5e489b25c7a7e43 extra : histedit_source : 868cb99d09954a51d6be321fcb516475ef70eb33
96 lines
2.5 KiB
JavaScript
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());
|
|
}
|
|
}
|
|
};
|