| |
1 /* Any copyright is dedicated to the Public Domain. |
| |
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
| |
3 |
| |
4 let normalURLs = []; |
| |
5 let pbTabURL = "about:privatebrowsing"; |
| |
6 let groupTitles = []; |
| |
7 let normalIteration = 0; |
| |
8 |
| |
9 function test() { |
| |
10 waitForExplicitFinish(); |
| |
11 |
| |
12 testOnWindow(false, function(win) { |
| |
13 showTabView(function() { |
| |
14 onTabViewLoadedAndShown(win); |
| |
15 }, win); |
| |
16 }); |
| |
17 } |
| |
18 |
| |
19 function testOnWindow(aIsPrivate, aCallback) { |
| |
20 let win = OpenBrowserWindow({private: aIsPrivate}); |
| |
21 win.addEventListener("load", function onLoad() { |
| |
22 win.removeEventListener("load", onLoad, false); |
| |
23 executeSoon(function() { aCallback(win); }); |
| |
24 }, false); |
| |
25 } |
| |
26 |
| |
27 function onTabViewLoadedAndShown(aWindow) { |
| |
28 ok(aWindow.TabView.isVisible(), "Tab View is visible"); |
| |
29 |
| |
30 // Establish initial state |
| |
31 let contentWindow = aWindow.TabView.getContentWindow(); |
| |
32 verifyCleanState(aWindow, "start", contentWindow); |
| |
33 |
| |
34 // create a group |
| |
35 let box = new contentWindow.Rect(20, 20, 180, 180); |
| |
36 let groupItem = new contentWindow.GroupItem([], {bounds: box, title: "test1"}); |
| |
37 let id = groupItem.id; |
| |
38 is(contentWindow.GroupItems.groupItems.length, 2, "we now have two groups"); |
| |
39 registerCleanupFunction(function() { |
| |
40 contentWindow.GroupItems.groupItem(id).close(); |
| |
41 }); |
| |
42 |
| |
43 // make it the active group so new tabs will be added to it |
| |
44 contentWindow.UI.setActive(groupItem); |
| |
45 |
| |
46 // collect the group titles |
| |
47 let count = contentWindow.GroupItems.groupItems.length; |
| |
48 for (let a = 0; a < count; a++) { |
| |
49 let gi = contentWindow.GroupItems.groupItems[a]; |
| |
50 groupTitles[a] = gi.getTitle(); |
| |
51 } |
| |
52 |
| |
53 contentWindow.gPrefBranch.setBoolPref("animate_zoom", false); |
| |
54 |
| |
55 // Create a second tab |
| |
56 aWindow.gBrowser.addTab("about:mozilla"); |
| |
57 is(aWindow.gBrowser.tabs.length, 2, "we now have 2 tabs"); |
| |
58 |
| |
59 registerCleanupFunction(function() { |
| |
60 aWindow.gBrowser.removeTab(aWindow.gBrowser.tabs[1]); |
| |
61 contentWindow.gPrefBranch.clearUserPref("animate_zoom"); |
| |
62 }); |
| |
63 |
| |
64 afterAllTabsLoaded(function() { |
| |
65 // Get normal tab urls |
| |
66 for (let a = 0; a < aWindow.gBrowser.tabs.length; a++) |
| |
67 normalURLs.push(aWindow.gBrowser.tabs[a].linkedBrowser.currentURI.spec); |
| |
68 |
| |
69 // verify that we're all set up for our test |
| |
70 verifyNormal(aWindow); |
| |
71 |
| |
72 // Open private window and make sure Tab View becomes hidden |
| |
73 testOnWindow(true, function(privateWin) { |
| |
74 whenTabViewIsHidden(function() { |
| |
75 ok(!privateWin.TabView.isVisible(), "Tab View is no longer visible"); |
| |
76 verifyPB(privateWin); |
| |
77 // Close private window |
| |
78 privateWin.close(); |
| |
79 // Get back to normal window, make sure Tab View is shown again |
| |
80 whenTabViewIsShown(function() { |
| |
81 ok(aWindow.TabView.isVisible(), "Tab View is visible again"); |
| |
82 verifyNormal(aWindow); |
| |
83 |
| |
84 hideTabView(function() { |
| |
85 onTabViewHidden(aWindow, contentWindow); |
| |
86 }, aWindow); |
| |
87 }, aWindow); |
| |
88 }, privateWin); |
| |
89 }); |
| |
90 }, aWindow); |
| |
91 } |
| |
92 |
| |
93 function onTabViewHidden(aWindow, aContentWindow) { |
| |
94 ok(!aWindow.TabView.isVisible(), "Tab View is not visible"); |
| |
95 |
| |
96 // Open private window and make sure Tab View is hidden |
| |
97 testOnWindow(true, function(privateWin) { |
| |
98 ok(!privateWin.TabView.isVisible(), "Tab View is still not visible"); |
| |
99 verifyPB(privateWin); |
| |
100 // Close private window |
| |
101 privateWin.close(); |
| |
102 |
| |
103 // Get back to normal window |
| |
104 verifyNormal(aWindow); |
| |
105 |
| |
106 // end game |
| |
107 ok(!aWindow.TabView.isVisible(), "we finish with Tab View not visible"); |
| |
108 |
| |
109 // verify after all cleanups |
| |
110 registerCleanupFunction(function() { |
| |
111 verifyCleanState(aWindow, "finish", aContentWindow); |
| |
112 aWindow.close(); |
| |
113 }); |
| |
114 |
| |
115 finish(); |
| |
116 }); |
| |
117 } |
| |
118 |
| |
119 function verifyCleanState(aWindow, aMode, aContentWindow) { |
| |
120 let prefix = "we " + aMode + " with "; |
| |
121 is(aWindow.gBrowser.tabs.length, 1, prefix + "one tab"); |
| |
122 is(aContentWindow.GroupItems.groupItems.length, 1, prefix + "1 group"); |
| |
123 ok(aWindow.gBrowser.tabs[0]._tabViewTabItem.parent == aContentWindow.GroupItems.groupItems[0], |
| |
124 "the tab is in the group"); |
| |
125 ok(!PrivateBrowsingUtils.isWindowPrivate(aWindow), prefix + "private browsing off"); |
| |
126 } |
| |
127 |
| |
128 function verifyPB(aWindow) { |
| |
129 showTabView(function() { |
| |
130 let cw = aWindow.TabView.getContentWindow(); |
| |
131 ok(PrivateBrowsingUtils.isWindowPrivate(aWindow), "window is private"); |
| |
132 is(aWindow.gBrowser.tabs.length, 1, "we have 1 tab in private window"); |
| |
133 is(cw.GroupItems.groupItems.length, 1, "we have 1 group in private window"); |
| |
134 ok(aWindow.gBrowser.tabs[0]._tabViewTabItem.parent == cw.GroupItems.groupItems[0], |
| |
135 "the tab is in the group"); |
| |
136 let browser = aWindow.gBrowser.tabs[0].linkedBrowser; |
| |
137 browser.addEventListener("load", function onLoad() { |
| |
138 browser.removeEventListener("load", onLoad, true); |
| |
139 is(browser.currentURI.spec, pbTabURL, "correct URL for private browsing"); |
| |
140 }, true); |
| |
141 }, aWindow); |
| |
142 } |
| |
143 |
| |
144 function verifyNormal(aWindow) { |
| |
145 let contentWindow = aWindow.TabView.getContentWindow(); |
| |
146 let prefix = "verify normal " + normalIteration + ": "; |
| |
147 normalIteration++; |
| |
148 |
| |
149 ok(!PrivateBrowsingUtils.isWindowPrivate(aWindow), prefix + "private browsing off"); |
| |
150 |
| |
151 let tabCount = aWindow.gBrowser.tabs.length; |
| |
152 let groupCount = contentWindow.GroupItems.groupItems.length; |
| |
153 is(tabCount, 2, prefix + "we have 2 tabs"); |
| |
154 is(groupCount, 2, prefix + "we have 2 groups"); |
| |
155 ok(tabCount == groupCount, prefix + "same number of tabs as groups"); |
| |
156 for (let a = 0; a < tabCount; a++) { |
| |
157 let tab = aWindow.gBrowser.tabs[a]; |
| |
158 is(tab.linkedBrowser.currentURI.spec, normalURLs[a], |
| |
159 prefix + "correct URL"); |
| |
160 |
| |
161 let groupItem = contentWindow.GroupItems.groupItems[a]; |
| |
162 is(groupItem.getTitle(), groupTitles[a], prefix + "correct group title"); |
| |
163 |
| |
164 ok(tab._tabViewTabItem.parent == groupItem, |
| |
165 prefix + "tab " + a + " is in group " + a); |
| |
166 } |
| |
167 } |