|
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 } |