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/
3 */
5 let tabs = [];
7 function addTab(aURL) {
8 tabs.push(gBrowser.addTab(aURL, {skipAnimation: true}));
9 }
11 function testAttrib(elem, attrib, attribValue, msg) {
12 is(elem.hasAttribute(attrib), attribValue, msg);
13 }
15 function test() {
16 waitForExplicitFinish();
17 is(gBrowser.tabs.length, 1, "one tab is open initially");
19 // Add several new tabs in sequence, hiding some, to ensure that the
20 // correct attributes get set
22 addTab("http://mochi.test:8888/#0");
23 addTab("http://mochi.test:8888/#1");
24 addTab("http://mochi.test:8888/#2");
25 addTab("http://mochi.test:8888/#3");
27 gBrowser.selectedTab = gBrowser.tabs[0];
28 testAttrib(gBrowser.tabs[0], "first-visible-tab", true,
29 "First tab marked first-visible-tab!");
30 testAttrib(gBrowser.tabs[4], "last-visible-tab", true,
31 "Fifth tab marked last-visible-tab!");
32 testAttrib(gBrowser.tabs[0], "selected", true, "First tab marked selected!");
33 testAttrib(gBrowser.tabs[0], "afterselected-visible", false,
34 "First tab not marked afterselected-visible!");
35 testAttrib(gBrowser.tabs[1], "afterselected-visible", true,
36 "Second tab marked afterselected-visible!");
37 gBrowser.hideTab(gBrowser.tabs[1]);
38 executeSoon(test_hideSecond);
39 }
41 function test_hideSecond() {
42 testAttrib(gBrowser.tabs[2], "afterselected-visible", true,
43 "Third tab marked afterselected-visible!");
44 gBrowser.showTab(gBrowser.tabs[1])
45 executeSoon(test_showSecond);
46 }
48 function test_showSecond() {
49 testAttrib(gBrowser.tabs[1], "afterselected-visible", true,
50 "Second tab marked afterselected-visible!");
51 testAttrib(gBrowser.tabs[2], "afterselected-visible", false,
52 "Third tab not marked as afterselected-visible!");
53 gBrowser.selectedTab = gBrowser.tabs[1];
54 gBrowser.hideTab(gBrowser.tabs[0]);
55 executeSoon(test_hideFirst);
56 }
58 function test_hideFirst() {
59 testAttrib(gBrowser.tabs[0], "first-visible-tab", false,
60 "Hidden first tab not marked first-visible-tab!");
61 testAttrib(gBrowser.tabs[1], "first-visible-tab", true,
62 "Second tab marked first-visible-tab!");
63 gBrowser.showTab(gBrowser.tabs[0]);
64 executeSoon(test_showFirst);
65 }
67 function test_showFirst() {
68 testAttrib(gBrowser.tabs[0], "first-visible-tab", true,
69 "First tab marked first-visible-tab!");
70 gBrowser.selectedTab = gBrowser.tabs[2];
71 testAttrib(gBrowser.tabs[3], "afterselected-visible", true,
72 "Fourth tab marked afterselected-visible!");
74 gBrowser.moveTabTo(gBrowser.selectedTab, 1);
75 executeSoon(test_movedLower);
76 }
78 function test_movedLower() {
79 testAttrib(gBrowser.tabs[2], "afterselected-visible", true,
80 "Third tab marked afterselected-visible!");
81 test_hoverOne();
82 }
84 function test_hoverOne() {
85 EventUtils.synthesizeMouseAtCenter(gBrowser.tabs[4], { type: "mousemove" });
86 testAttrib(gBrowser.tabs[3], "beforehovered", true, "Fourth tab marked beforehovered");
87 EventUtils.synthesizeMouseAtCenter(gBrowser.tabs[3], { type: "mousemove" });
88 testAttrib(gBrowser.tabs[2], "beforehovered", true, "Third tab marked beforehovered!");
89 testAttrib(gBrowser.tabs[2], "afterhovered", false, "Third tab not marked afterhovered!");
90 testAttrib(gBrowser.tabs[4], "afterhovered", true, "Fifth tab marked afterhovered!");
91 testAttrib(gBrowser.tabs[4], "beforehovered", false, "Fifth tab not marked beforehovered!");
92 testAttrib(gBrowser.tabs[0], "beforehovered", false, "First tab not marked beforehovered!");
93 testAttrib(gBrowser.tabs[0], "afterhovered", false, "First tab not marked afterhovered!");
94 testAttrib(gBrowser.tabs[1], "beforehovered", false, "Second tab not marked beforehovered!");
95 testAttrib(gBrowser.tabs[1], "afterhovered", false, "Second tab not marked afterhovered!");
96 testAttrib(gBrowser.tabs[3], "beforehovered", false, "Fourth tab not marked beforehovered!");
97 testAttrib(gBrowser.tabs[3], "afterhovered", false, "Fourth tab not marked afterhovered!");
98 gBrowser.removeTab(tabs.pop());
99 executeSoon(test_hoverStatePersistence);
100 }
102 function test_hoverStatePersistence() {
103 // Test that the afterhovered and beforehovered attributes are still there when
104 // a tab is selected and then unselected again. See bug 856107.
106 function assertState() {
107 testAttrib(gBrowser.tabs[0], "beforehovered", true, "First tab still marked beforehovered!");
108 testAttrib(gBrowser.tabs[0], "afterhovered", false, "First tab not marked afterhovered!");
109 testAttrib(gBrowser.tabs[2], "afterhovered", true, "Third tab still marked afterhovered!");
110 testAttrib(gBrowser.tabs[2], "beforehovered", false, "Third tab not marked afterhovered!");
111 testAttrib(gBrowser.tabs[1], "beforehovered", false, "Second tab not marked beforehovered!");
112 testAttrib(gBrowser.tabs[1], "afterhovered", false, "Second tab not marked afterhovered!");
113 testAttrib(gBrowser.tabs[3], "beforehovered", false, "Fourth tab not marked beforehovered!");
114 testAttrib(gBrowser.tabs[3], "afterhovered", false, "Fourth tab not marked afterhovered!");
115 }
117 gBrowser.selectedTab = gBrowser.tabs[3];
118 EventUtils.synthesizeMouseAtCenter(gBrowser.tabs[1], { type: "mousemove" });
119 assertState();
120 gBrowser.selectedTab = gBrowser.tabs[1];
121 assertState();
122 gBrowser.selectedTab = gBrowser.tabs[3];
123 assertState();
124 executeSoon(test_pinning);
125 }
127 function test_pinning() {
128 gBrowser.selectedTab = gBrowser.tabs[3];
129 testAttrib(gBrowser.tabs[3], "last-visible-tab", true,
130 "Fourth tab marked last-visible-tab!");
131 testAttrib(gBrowser.tabs[3], "selected", true, "Fourth tab marked selected!");
132 testAttrib(gBrowser.tabs[3], "afterselected-visible", false,
133 "Fourth tab not marked afterselected-visible!");
134 // Causes gBrowser.tabs to change indices
135 gBrowser.pinTab(gBrowser.tabs[3]);
136 testAttrib(gBrowser.tabs[3], "last-visible-tab", true,
137 "Fourth tab marked last-visible-tab!");
138 testAttrib(gBrowser.tabs[1], "afterselected-visible", true,
139 "Second tab marked afterselected-visible!");
140 testAttrib(gBrowser.tabs[0], "first-visible-tab", true,
141 "First tab marked first-visible-tab!");
142 testAttrib(gBrowser.tabs[0], "selected", true, "First tab marked selected!");
143 gBrowser.selectedTab = gBrowser.tabs[1];
144 testAttrib(gBrowser.tabs[2], "afterselected-visible", true,
145 "Third tab marked afterselected-visible!");
146 test_cleanUp();
147 }
149 function test_cleanUp() {
150 tabs.forEach(gBrowser.removeTab, gBrowser);
151 finish();
152 }