Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
4 let stateBackup = ss.getBrowserState();
6 let statePinned = {windows:[{tabs:[
7 {entries:[{url:"http://example.com#1"}], pinned: true}
8 ]}]};
10 let state = {windows:[{tabs:[
11 {entries:[{url:"http://example.com#1"}]},
12 {entries:[{url:"http://example.com#2"}]},
13 {entries:[{url:"http://example.com#3"}]},
14 {entries:[{url:"http://example.com#4"}]},
15 ]}]};
17 function test() {
18 waitForExplicitFinish();
20 registerCleanupFunction(function () {
21 TabsProgressListener.uninit();
22 ss.setBrowserState(stateBackup);
23 });
26 TabsProgressListener.init();
28 window.addEventListener("SSWindowStateReady", function onReady() {
29 window.removeEventListener("SSWindowStateReady", onReady, false);
31 let firstProgress = true;
33 TabsProgressListener.setCallback(function (needsRestore, isRestoring) {
34 if (firstProgress) {
35 firstProgress = false;
36 is(isRestoring, 3, "restoring 3 tabs concurrently");
37 } else {
38 ok(isRestoring <= 3, "restoring max. 2 tabs concurrently");
39 }
41 if (0 == needsRestore) {
42 TabsProgressListener.unsetCallback();
43 waitForFocus(finish);
44 }
45 });
47 ss.setBrowserState(JSON.stringify(state));
48 }, false);
50 ss.setBrowserState(JSON.stringify(statePinned));
51 }
53 function countTabs() {
54 let needsRestore = 0, isRestoring = 0;
55 let windowsEnum = Services.wm.getEnumerator("navigator:browser");
57 while (windowsEnum.hasMoreElements()) {
58 let window = windowsEnum.getNext();
59 if (window.closed)
60 continue;
62 for (let i = 0; i < window.gBrowser.tabs.length; i++) {
63 let browser = window.gBrowser.tabs[i].linkedBrowser;
64 if (browser.__SS_restoreState == TAB_STATE_RESTORING)
65 isRestoring++;
66 else if (browser.__SS_restoreState == TAB_STATE_NEEDS_RESTORE)
67 needsRestore++;
68 }
69 }
71 return [needsRestore, isRestoring];
72 }
74 let TabsProgressListener = {
75 init: function () {
76 Services.obs.addObserver(this, "sessionstore-debug-tab-restored", false);
77 },
79 uninit: function () {
80 Services.obs.removeObserver(this, "sessionstore-debug-tab-restored");
81 this.unsetCallback();
82 },
84 setCallback: function (callback) {
85 this.callback = callback;
86 },
88 unsetCallback: function () {
89 delete this.callback;
90 },
92 observe: function (browser, topic, data) {
93 TabsProgressListener.onRestored(browser);
94 },
96 onRestored: function (browser) {
97 if (this.callback && browser.__SS_restoreState == TAB_STATE_RESTORING) {
98 this.callback.apply(null, countTabs());
99 }
100 }
101 }