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 const TEST_VALUE = "example.com";
5 const START_VALUE = "example.org";
7 let gFocusManager = Cc["@mozilla.org/focus-manager;1"].
8 getService(Ci.nsIFocusManager);
10 function test() {
11 waitForExplicitFinish();
13 registerCleanupFunction(function () {
14 Services.prefs.clearUserPref("browser.altClickSave");
15 });
16 Services.prefs.setBoolPref("browser.altClickSave", true);
18 runAltLeftClickTest();
19 }
21 // Monkey patch saveURL to avoid dealing with file save code paths
22 var oldSaveURL = saveURL;
23 saveURL = function() {
24 ok(true, "SaveURL was called");
25 is(gURLBar.value, "", "Urlbar reverted to original value");
26 saveURL = oldSaveURL;
27 runShiftLeftClickTest();
28 }
29 function runAltLeftClickTest() {
30 info("Running test: Alt left click");
31 triggerCommand(true, { altKey: true });
32 }
34 function runShiftLeftClickTest() {
35 let listener = new BrowserWindowListener(getBrowserURL(), function(aWindow) {
36 Services.wm.removeListener(listener);
37 addPageShowListener(aWindow.gBrowser.selectedBrowser, function() {
38 executeSoon(function () {
39 info("URL should be loaded in a new window");
40 is(gURLBar.value, "", "Urlbar reverted to original value");
41 is(gFocusManager.focusedElement, null, "There should be no focused element");
42 is(gFocusManager.focusedWindow, aWindow.gBrowser.contentWindow, "Content window should be focused");
43 is(aWindow.gURLBar.value, TEST_VALUE, "New URL is loaded in new window");
45 aWindow.close();
47 // Continue testing when the original window has focus again.
48 whenWindowActivated(window, runNextTest);
49 });
50 }, "http://example.com/");
51 });
52 Services.wm.addListener(listener);
54 info("Running test: Shift left click");
55 triggerCommand(true, { shiftKey: true });
56 }
58 function runNextTest() {
59 let test = gTests.shift();
60 if (!test) {
61 finish();
62 return;
63 }
65 info("Running test: " + test.desc);
66 // Tab will be blank if test.startValue is null
67 let tab = gBrowser.selectedTab = gBrowser.addTab(test.startValue);
68 addPageShowListener(gBrowser.selectedBrowser, function() {
69 triggerCommand(test.click, test.event);
70 test.check(tab);
72 // Clean up
73 while (gBrowser.tabs.length > 1)
74 gBrowser.removeTab(gBrowser.selectedTab)
75 runNextTest();
76 });
77 }
79 let gTests = [
80 { desc: "Right click on go button",
81 click: true,
82 event: { button: 2 },
83 check: function(aTab) {
84 // Right click should do nothing (context menu will be shown)
85 is(gURLBar.value, TEST_VALUE, "Urlbar still has the value we entered");
86 }
87 },
89 { desc: "Left click on go button",
90 click: true,
91 event: {},
92 check: checkCurrent
93 },
95 { desc: "Ctrl/Cmd left click on go button",
96 click: true,
97 event: { accelKey: true },
98 check: checkNewTab
99 },
101 { desc: "Shift+Ctrl/Cmd left click on go button",
102 click: true,
103 event: { accelKey: true, shiftKey: true },
104 check: function(aTab) {
105 info("URL should be loaded in a new background tab");
106 is(gURLBar.value, "", "Urlbar reverted to original value");
107 ok(!gURLBar.focused, "Urlbar is no longer focused after urlbar command");
108 is(gBrowser.selectedTab, aTab, "Focus did not change to the new tab");
110 // Select the new background tab
111 gBrowser.selectedTab = gBrowser.selectedTab.nextSibling;
112 is(gURLBar.value, TEST_VALUE, "New URL is loaded in new tab");
113 }
114 },
116 { desc: "Simple return keypress",
117 event: {},
118 check: checkCurrent
119 },
121 { desc: "Alt+Return keypress in a blank tab",
122 event: { altKey: true },
123 check: checkCurrent
124 },
126 { desc: "Alt+Return keypress in a dirty tab",
127 event: { altKey: true },
128 check: checkNewTab,
129 startValue: START_VALUE
130 },
132 { desc: "Ctrl/Cmd+Return keypress",
133 event: { accelKey: true },
134 check: checkCurrent
135 }
136 ]
138 let gGoButton = document.getElementById("urlbar-go-button");
139 function triggerCommand(aClick, aEvent) {
140 gURLBar.value = TEST_VALUE;
141 gURLBar.focus();
143 if (aClick) {
144 is(gURLBar.getAttribute("pageproxystate"), "invalid",
145 "page proxy state must be invalid for go button to be visible");
146 EventUtils.synthesizeMouseAtCenter(gGoButton, aEvent);
147 }
148 else
149 EventUtils.synthesizeKey("VK_RETURN", aEvent);
150 }
152 /* Checks that the URL was loaded in the current tab */
153 function checkCurrent(aTab) {
154 info("URL should be loaded in the current tab");
155 is(gURLBar.value, TEST_VALUE, "Urlbar still has the value we entered");
156 is(gFocusManager.focusedElement, null, "There should be no focused element");
157 is(gFocusManager.focusedWindow, gBrowser.contentWindow, "Content window should be focused");
158 is(gBrowser.selectedTab, aTab, "New URL was loaded in the current tab");
159 }
161 /* Checks that the URL was loaded in a new focused tab */
162 function checkNewTab(aTab) {
163 info("URL should be loaded in a new focused tab");
164 is(gURLBar.value, TEST_VALUE, "Urlbar still has the value we entered");
165 is(gFocusManager.focusedElement, null, "There should be no focused element");
166 is(gFocusManager.focusedWindow, gBrowser.contentWindow, "Content window should be focused");
167 isnot(gBrowser.selectedTab, aTab, "New URL was loaded in a new tab");
168 }
170 function addPageShowListener(browser, cb, expectedURL) {
171 browser.addEventListener("pageshow", function pageShowListener() {
172 info("pageshow: " + browser.currentURI.spec);
173 if (expectedURL && browser.currentURI.spec != expectedURL)
174 return; // ignore pageshows for non-expected URLs
175 browser.removeEventListener("pageshow", pageShowListener, false);
176 cb();
177 });
178 }
180 function whenWindowActivated(win, cb) {
181 if (Services.focus.activeWindow == win) {
182 executeSoon(cb);
183 return;
184 }
186 win.addEventListener("activate", function onActivate() {
187 win.removeEventListener("activate", onActivate);
188 executeSoon(cb);
189 });
190 }
192 function BrowserWindowListener(aURL, aCallback) {
193 this.callback = aCallback;
194 this.url = aURL;
195 }
196 BrowserWindowListener.prototype = {
197 onOpenWindow: function(aXULWindow) {
198 let cb = () => this.callback(domwindow);
199 let domwindow = aXULWindow.QueryInterface(Ci.nsIInterfaceRequestor)
200 .getInterface(Ci.nsIDOMWindow);
202 let numWait = 2;
203 function maybeRunCallback() {
204 if (--numWait == 0)
205 cb();
206 }
208 whenWindowActivated(domwindow, maybeRunCallback);
209 whenDelayedStartupFinished(domwindow, maybeRunCallback);
210 },
211 onCloseWindow: function(aXULWindow) {},
212 onWindowTitleChange: function(aXULWindow, aNewTitle) {}
213 }