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 }