browser_970511_undo_restore_default.js (7847B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 "use strict"; 6 7 requestLongerTimeout(2); 8 9 // Restoring default should reset density and show an "undo" option which undoes 10 // the restoring operation. 11 add_task(async function () { 12 await SpecialPowers.pushPrefEnv({ 13 set: [["browser.compactmode.show", true]], 14 }); 15 let stopReloadButtonId = "stop-reload-button"; 16 CustomizableUI.removeWidgetFromArea(stopReloadButtonId); 17 await startCustomizing(); 18 ok(!CustomizableUI.inDefaultState, "Not in default state to begin with"); 19 is( 20 CustomizableUI.getPlacementOfWidget(stopReloadButtonId), 21 null, 22 "Stop/reload button is in palette" 23 ); 24 let undoResetButton = document.getElementById( 25 "customization-undo-reset-button" 26 ); 27 is(undoResetButton.hidden, true, "The undo button is hidden before reset"); 28 29 let densityButton = document.getElementById("customization-uidensity-button"); 30 let popup = document.getElementById("customization-uidensity-menu"); 31 let popupShownPromise = popupShown(popup); 32 EventUtils.synthesizeMouseAtCenter(densityButton, {}); 33 info("Clicked on density button"); 34 await popupShownPromise; 35 36 let compactModeItem = document.getElementById( 37 "customization-uidensity-menuitem-compact" 38 ); 39 let win = document.getElementById("main-window"); 40 let densityChangedPromise = new Promise(resolve => { 41 let observer = new MutationObserver(() => { 42 if (win.getAttribute("uidensity") == "compact") { 43 resolve(); 44 observer.disconnect(); 45 } 46 }); 47 observer.observe(win, { 48 attributes: true, 49 attributeFilter: ["uidensity"], 50 }); 51 }); 52 53 compactModeItem.doCommand(); 54 info("Clicked on compact density"); 55 await densityChangedPromise; 56 57 await gCustomizeMode.reset(); 58 59 ok(CustomizableUI.inDefaultState, "In default state after reset"); 60 is(undoResetButton.hidden, false, "The undo button is visible after reset"); 61 is( 62 win.hasAttribute("uidensity"), 63 false, 64 "The window has been restored to normal density." 65 ); 66 67 await gCustomizeMode.undoReset(); 68 69 is( 70 win.getAttribute("uidensity"), 71 "compact", 72 "Density has been reset to compact." 73 ); 74 ok(!CustomizableUI.inDefaultState, "Not in default state after undo-reset"); 75 is( 76 undoResetButton.hidden, 77 true, 78 "The undo button is hidden after clicking on the undo button" 79 ); 80 is( 81 CustomizableUI.getPlacementOfWidget(stopReloadButtonId), 82 null, 83 "Stop/reload button is in palette" 84 ); 85 86 await gCustomizeMode.reset(); 87 await SpecialPowers.popPrefEnv(); 88 }); 89 90 // Performing an action after a reset will hide the undo button. 91 add_task(async function action_after_reset_hides_undo() { 92 let stopReloadButtonId = "stop-reload-button"; 93 CustomizableUI.removeWidgetFromArea(stopReloadButtonId); 94 ok(!CustomizableUI.inDefaultState, "Not in default state to begin with"); 95 is( 96 CustomizableUI.getPlacementOfWidget(stopReloadButtonId), 97 null, 98 "Stop/reload button is in palette" 99 ); 100 let undoResetButton = document.getElementById( 101 "customization-undo-reset-button" 102 ); 103 is(undoResetButton.hidden, true, "The undo button is hidden before reset"); 104 105 await gCustomizeMode.reset(); 106 107 ok(CustomizableUI.inDefaultState, "In default state after reset"); 108 is(undoResetButton.hidden, false, "The undo button is visible after reset"); 109 110 CustomizableUI.addWidgetToArea( 111 stopReloadButtonId, 112 CustomizableUI.AREA_FIXED_OVERFLOW_PANEL 113 ); 114 is( 115 undoResetButton.hidden, 116 true, 117 "The undo button is hidden after another change" 118 ); 119 }); 120 121 // "Restore defaults", exiting customize, and re-entering shouldn't show the Undo button 122 add_task(async function () { 123 let undoResetButton = document.getElementById( 124 "customization-undo-reset-button" 125 ); 126 is(undoResetButton.hidden, true, "The undo button is hidden before a reset"); 127 ok( 128 !CustomizableUI.inDefaultState, 129 "The browser should not be in default state" 130 ); 131 await gCustomizeMode.reset(); 132 133 is(undoResetButton.hidden, false, "The undo button is visible after a reset"); 134 await endCustomizing(); 135 await startCustomizing(); 136 is( 137 undoResetButton.hidden, 138 true, 139 "The undo reset button should be hidden after entering customization mode" 140 ); 141 }); 142 143 // Bug 971626 - Restore Defaults should collapse the Title Bar 144 add_task(async function () { 145 { 146 const supported = CustomTitlebar.systemSupported; 147 is(typeof supported, "boolean"); 148 info("CustomTitlebar support: " + supported); 149 if (!supported) { 150 return; 151 } 152 } 153 154 const kDefaultValue = Services.appinfo.drawInTitlebar; 155 let restoreDefaultsButton = document.getElementById( 156 "customization-reset-button" 157 ); 158 let titlebarCheckbox = document.getElementById( 159 "customization-titlebar-visibility-checkbox" 160 ); 161 let undoResetButton = document.getElementById( 162 "customization-undo-reset-button" 163 ); 164 ok( 165 CustomizableUI.inDefaultState, 166 "Should be in default state at start of test" 167 ); 168 ok( 169 restoreDefaultsButton.disabled, 170 "Restore defaults button should be disabled when in default state" 171 ); 172 is( 173 titlebarCheckbox.hasAttribute("checked"), 174 !kDefaultValue, 175 "Title bar checkbox should reflect pref value" 176 ); 177 is( 178 undoResetButton.hidden, 179 true, 180 "Undo reset button should be hidden at start of test" 181 ); 182 183 let prefName = "browser.tabs.inTitlebar"; 184 Services.prefs.setIntPref(prefName, !kDefaultValue); 185 ok( 186 !restoreDefaultsButton.disabled, 187 "Restore defaults button should be enabled when pref changed" 188 ); 189 is( 190 Services.appinfo.drawInTitlebar, 191 !kDefaultValue, 192 "Title bar checkbox should reflect changed pref value" 193 ); 194 is( 195 titlebarCheckbox.hasAttribute("checked"), 196 kDefaultValue, 197 "Title bar checkbox should reflect changed pref value" 198 ); 199 ok( 200 !CustomizableUI.inDefaultState, 201 "With titlebar flipped, no longer default" 202 ); 203 is( 204 undoResetButton.hidden, 205 true, 206 "Undo reset button should be hidden after pref change" 207 ); 208 209 await gCustomizeMode.reset(); 210 ok( 211 restoreDefaultsButton.disabled, 212 "Restore defaults button should be disabled after reset" 213 ); 214 is( 215 titlebarCheckbox.hasAttribute("checked"), 216 !kDefaultValue, 217 "Title bar checkbox should reflect default value after reset" 218 ); 219 is( 220 Services.prefs.getIntPref(prefName), 221 2, 222 "Reset should reset drawInTitlebar" 223 ); 224 is( 225 Services.appinfo.drawInTitlebar, 226 kDefaultValue, 227 "Default state should be restored" 228 ); 229 ok(CustomizableUI.inDefaultState, "In default state after titlebar reset"); 230 is( 231 undoResetButton.hidden, 232 false, 233 "Undo reset button should be visible after reset" 234 ); 235 ok( 236 !undoResetButton.disabled, 237 "Undo reset button should be enabled after reset" 238 ); 239 240 await gCustomizeMode.undoReset(); 241 ok( 242 !restoreDefaultsButton.disabled, 243 "Restore defaults button should be enabled after undo-reset" 244 ); 245 is( 246 titlebarCheckbox.hasAttribute("checked"), 247 kDefaultValue, 248 "Title bar checkbox should reflect undo-reset value" 249 ); 250 ok(!CustomizableUI.inDefaultState, "No longer in default state after undo"); 251 is( 252 Services.prefs.getIntPref(prefName), 253 kDefaultValue ? 0 : 1, 254 "Undo-reset goes back to previous pref value" 255 ); 256 is( 257 undoResetButton.hidden, 258 true, 259 "Undo reset button should be hidden after undo-reset clicked" 260 ); 261 262 Services.prefs.clearUserPref(prefName); 263 ok(CustomizableUI.inDefaultState, "In default state after pref cleared"); 264 is( 265 undoResetButton.hidden, 266 true, 267 "Undo reset button should be hidden at end of test" 268 ); 269 }); 270 271 add_task(async function asyncCleanup() { 272 await gCustomizeMode.reset(); 273 await endCustomizing(); 274 });