tor-browser

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

browser_1161838_inserted_new_default_buttons.js (3672B)


      1 "use strict";
      2 
      3 // NB: This uses some ugly hacks to get into the CUI module from elsewhere...
      4 // don't try this at home, kids.
      5 function test() {
      6  // Customize something to make sure stuff changed:
      7  CustomizableUI.addWidgetToArea(
      8    "save-page-button",
      9    CustomizableUI.AREA_NAVBAR
     10  );
     11 
     12  let gFuturePlacements =
     13    CustomizableUI.getTestOnlyInternalProp("gFuturePlacements");
     14  is(
     15    gFuturePlacements.size,
     16    0,
     17    "All future placements should be dealt with by now."
     18  );
     19 
     20  let CustomizableUIInternal = CustomizableUI.getTestOnlyInternalProp(
     21    "CustomizableUIInternal"
     22  );
     23 
     24  // Force us to have a saved state:
     25  CustomizableUIInternal.saveState();
     26  CustomizableUIInternal.loadSavedState();
     27 
     28  CustomizableUIInternal.updateForNewVersion();
     29  // New version will include sidebar button if sidebar.revamp is true
     30  let includesSidebarButton =
     31    Services.prefs.getBoolPref("sidebar.revamp", false) &&
     32    gFuturePlacements.get("nav-bar")?.has("sidebar-button");
     33  is(
     34    gFuturePlacements.size,
     35    includesSidebarButton ? 1 : 0,
     36    "No unexpected future placements initially."
     37  );
     38  // Add our widget to the defaults:
     39  let testWidgetNew = {
     40    id: "test-messing-with-default-placements-new-pref",
     41    label: "Test messing with default placements - pref-based",
     42    defaultArea: CustomizableUI.AREA_NAVBAR,
     43    introducedInVersion: "pref",
     44  };
     45 
     46  let normalizedWidget = CustomizableUIInternal.normalizeWidget(
     47    testWidgetNew,
     48    CustomizableUI.SOURCE_BUILTIN
     49  );
     50  ok(normalizedWidget, "Widget should be normalizable");
     51  if (!normalizedWidget) {
     52    return;
     53  }
     54  let gPalette = CustomizableUI.getTestOnlyInternalProp("gPalette");
     55  gPalette.set(testWidgetNew.id, normalizedWidget);
     56 
     57  // Now adjust default placements for area:
     58  let navbarArea = CustomizableUI.getTestOnlyInternalProp("gAreas").get(
     59    CustomizableUI.AREA_NAVBAR
     60  );
     61  let navbarPlacements = navbarArea.get("defaultPlacements");
     62  navbarPlacements.splice(
     63    navbarPlacements.indexOf("bookmarks-menu-button") + 1,
     64    0,
     65    testWidgetNew.id
     66  );
     67 
     68  let savedPlacements =
     69    CustomizableUI.getTestOnlyInternalProp("gSavedState").placements[
     70      CustomizableUI.AREA_NAVBAR
     71    ];
     72  // Then call the re-init routine so we re-add the builtin widgets
     73  CustomizableUIInternal.updateForNewVersion();
     74  is(gFuturePlacements.size, 1, "Should have 1 more future placement");
     75  let futureNavbarPlacements = gFuturePlacements.get(
     76    CustomizableUI.AREA_NAVBAR
     77  );
     78  ok(futureNavbarPlacements, "Should have placements for nav-bar");
     79  if (futureNavbarPlacements) {
     80    ok(
     81      futureNavbarPlacements.has(testWidgetNew.id),
     82      "widget should be in future placements"
     83    );
     84  }
     85  CustomizableUIInternal.placeNewDefaultWidgetsInArea(
     86    CustomizableUI.AREA_NAVBAR
     87  );
     88 
     89  let indexInSavedPlacements = savedPlacements.indexOf(testWidgetNew.id);
     90  info("Saved placements: " + savedPlacements.join(", "));
     91  isnot(indexInSavedPlacements, -1, "Widget should have been inserted");
     92  is(
     93    indexInSavedPlacements,
     94    savedPlacements.indexOf("bookmarks-menu-button") + 1,
     95    "Widget should be in the right place."
     96  );
     97 
     98  if (futureNavbarPlacements) {
     99    ok(
    100      !futureNavbarPlacements.has(testWidgetNew.id),
    101      "widget should be out of future placements"
    102    );
    103  }
    104 
    105  if (indexInSavedPlacements != -1) {
    106    savedPlacements.splice(indexInSavedPlacements, 1);
    107  }
    108 
    109  gFuturePlacements.delete(CustomizableUI.AREA_NAVBAR);
    110  let indexInDefaultPlacements = navbarPlacements.indexOf(testWidgetNew.id);
    111  if (indexInDefaultPlacements != -1) {
    112    navbarPlacements.splice(indexInDefaultPlacements, 1);
    113  }
    114  gPalette.delete(testWidgetNew.id);
    115  CustomizableUI.reset();
    116 }