mirror of
https://github.com/Feodor2/Mypal68.git
synced 2025-06-19 07:15:36 -04:00
141 lines
3.0 KiB
JavaScript
141 lines
3.0 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());
|
|
}
|
|
},
|
|
};
|