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 doc = null, toolbox = null, panelWin = null, modifiedPrefs = [];
6 function test() {
7 waitForExplicitFinish();
9 gBrowser.selectedTab = gBrowser.addTab();
10 let target = TargetFactory.forTab(gBrowser.selectedTab);
12 gBrowser.selectedBrowser.addEventListener("load", function onLoad(evt) {
13 gBrowser.selectedBrowser.removeEventListener(evt.type, onLoad, true);
14 gDevTools.showToolbox(target)
15 .then(testSelectTool)
16 .then(testToggleToolboxButtons)
17 .then(testPrefsAreRespectedWhenReopeningToolbox)
18 .then(cleanup, errorHandler);
19 }, true);
21 content.location = "data:text/html;charset=utf8,test for dynamically registering and unregistering tools";
22 }
24 function testPrefsAreRespectedWhenReopeningToolbox() {
25 let deferred = promise.defer();
26 let target = TargetFactory.forTab(gBrowser.selectedTab);
28 info ("Closing toolbox to test after reopening");
29 gDevTools.closeToolbox(target).then(() => {
30 let target = TargetFactory.forTab(gBrowser.selectedTab);
31 gDevTools.showToolbox(target)
32 .then(testSelectTool)
33 .then(() => {
34 info ("Toolbox has been reopened. Checking UI state.");
35 testPreferenceAndUIStateIsConsistent();
36 deferred.resolve();
37 });
38 });
40 return deferred.promise;
41 }
43 function testSelectTool(aToolbox) {
44 let deferred = promise.defer();
45 info ("Selecting the options panel");
47 toolbox = aToolbox;
48 doc = toolbox.doc;
49 toolbox.once("options-selected", (event, tool) => {
50 ok(true, "Options panel selected via selectTool method");
51 panelWin = tool.panelWin;
52 deferred.resolve();
53 });
54 toolbox.selectTool("options");
56 return deferred.promise;
57 }
59 function testPreferenceAndUIStateIsConsistent() {
60 let checkNodes = [...panelWin.document.querySelectorAll("#enabled-toolbox-buttons-box > checkbox")];
61 let toolboxButtonNodes = [...doc.querySelectorAll("#toolbox-buttons > toolbarbutton")];
62 let toggleableTools = toolbox.toolboxButtons;
64 for (let tool of toggleableTools) {
65 let isVisible = getBoolPref(tool.visibilityswitch);
67 let button = toolboxButtonNodes.filter(button=>button.id === tool.id)[0];
68 is (!button.hasAttribute("hidden"), isVisible, "Button visibility matches pref for " + tool.id);
70 let check = checkNodes.filter(node=>node.id === tool.id)[0];
71 is (check.checked, isVisible, "Checkbox should be selected based on current pref for " + tool.id);
72 }
73 }
75 function testToggleToolboxButtons() {
76 let checkNodes = [...panelWin.document.querySelectorAll("#enabled-toolbox-buttons-box > checkbox")];
77 let toolboxButtonNodes = [...doc.querySelectorAll("#toolbox-buttons > toolbarbutton")];
78 let visibleButtons = toolboxButtonNodes.filter(button=>!button.hasAttribute("hidden"));
79 let toggleableTools = toolbox.toolboxButtons;
81 is (checkNodes.length, toggleableTools.length, "All of the buttons are toggleable." );
82 is (checkNodes.length, toolboxButtonNodes.length, "All of the DOM buttons are toggleable." );
84 for (let tool of toggleableTools) {
85 let id = tool.id;
86 let matchedCheckboxes = checkNodes.filter(node=>node.id === id);
87 let matchedButtons = toolboxButtonNodes.filter(button=>button.id === id);
88 ok (matchedCheckboxes.length === 1,
89 "There should be a single toggle checkbox for: " + id);
90 ok (matchedButtons.length === 1,
91 "There should be a DOM button for: " + id);
92 is (matchedButtons[0], tool.button,
93 "DOM buttons should match for: " + id);
95 is (matchedCheckboxes[0].getAttribute("label"), tool.label,
96 "The label for checkbox matches the tool definition.")
97 is (matchedButtons[0].getAttribute("tooltiptext"), tool.label,
98 "The tooltip for button matches the tool definition.")
99 }
101 // Store modified pref names so that they can be cleared on error.
102 for (let tool of toggleableTools) {
103 let pref = tool.visibilityswitch;
104 modifiedPrefs.push(pref);
105 }
107 // Try checking each checkbox, making sure that it changes the preference
108 for (let node of checkNodes) {
109 let tool = toggleableTools.filter(tool=>tool.id === node.id)[0];
110 let isVisible = getBoolPref(tool.visibilityswitch);
112 testPreferenceAndUIStateIsConsistent();
113 toggleButton(node);
114 testPreferenceAndUIStateIsConsistent();
116 let isVisibleAfterClick = getBoolPref(tool.visibilityswitch);
118 is (isVisible, !isVisibleAfterClick,
119 "Clicking on the node should have toggled visibility preference for " + tool.visibilityswitch);
120 }
122 return promise.resolve();
123 }
125 function getBoolPref(key) {
126 return Services.prefs.getBoolPref(key);
127 }
129 function toggleButton(node) {
130 node.scrollIntoView();
131 EventUtils.synthesizeMouseAtCenter(node, {}, panelWin);
132 }
134 function cleanup() {
135 toolbox.destroy().then(function() {
136 gBrowser.removeCurrentTab();
137 for (let pref of modifiedPrefs) {
138 Services.prefs.clearUserPref(pref);
139 }
140 toolbox = doc = panelWin = modifiedPrefs = null;
141 finish();
142 });
143 }
145 function errorHandler(error) {
146 ok(false, "Unexpected error: " + error);
147 cleanup();
148 }