tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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