Bug 1397447 - ensure the button is in the navbar by default, r=mak

MozReview-Commit-ID: H6r3dAEg4r1

--HG--
extra : rebase_source : fdb9b8d65745a57e3ac1ffa71cce10654032b177
This commit is contained in:
Gijs Kruitbosch 2017-09-08 14:07:05 +01:00
parent ecf2be01ab
commit 3f3bcb5b73
2 changed files with 88 additions and 7 deletions

View File

@ -58,7 +58,7 @@ const kSubviewEvents = [
* The current version. We can use this to auto-add new default widgets as necessary.
* (would be const but isn't because of testing purposes)
*/
var kVersion = 10;
var kVersion = 11;
/**
* Buttons removed from built-ins by version they were removed. kVersion must be
@ -318,7 +318,7 @@ var CustomizableUIInternal = {
CustomizableUI.removeWidgetFromArea("loop-button-throttled");
}
if (currentVersion < 7 && gSavedState && gSavedState.placements &&
if (currentVersion < 7 && gSavedState.placements &&
gSavedState.placements[CustomizableUI.AREA_NAVBAR]) {
let placements = gSavedState.placements[CustomizableUI.AREA_NAVBAR];
let newPlacements = ["back-button", "forward-button", "stop-reload-button", "home-button"];
@ -408,7 +408,7 @@ var CustomizableUIInternal = {
}
}
if (currentVersion < 10 && gSavedState && gSavedState.placements) {
if (currentVersion < 10 && gSavedState.placements) {
for (let placements of Object.values(gSavedState.placements)) {
if (placements.includes("webcompat-reporter-button")) {
placements.splice(placements.indexOf("webcompat-reporter-button"), 1);
@ -416,6 +416,37 @@ var CustomizableUIInternal = {
}
}
}
// Move the downloads button to the default position in the navbar if it's
// not there already.
if (currentVersion < 11 && gSavedState.placements) {
let navbarPlacements = gSavedState.placements[CustomizableUI.AREA_NAVBAR];
// First remove from wherever it currently lives, if anywhere:
for (let placements of Object.values(gSavedState.placements)) {
let existingIndex = placements.indexOf("downloads-button");
if (existingIndex != -1) {
placements.splice(existingIndex, 1);
break; // It can only be in 1 place, so no point looking elsewhere.
}
}
// Now put the button in the navbar in the correct spot:
if (navbarPlacements) {
let insertionPoint = navbarPlacements.indexOf("urlbar-container");
// Deliberately iterate to 1 past the end of the array to insert at the
// end if need be.
while (++insertionPoint < navbarPlacements.length) {
let widget = navbarPlacements[insertionPoint];
// If we find a non-searchbar, non-spacer node, break out of the loop:
if (widget != "search-container" && !this.matchingSpecials(widget, "spring")) {
break;
}
}
// We either found the right spot, or reached the end of the
// placements, so insert here:
navbarPlacements.splice(insertionPoint, 0, "downloads-button");
}
}
},
/**

View File

@ -96,9 +96,11 @@ function test() {
is(placements[0], testWidgetNew.id, "Should have our test widget to be placed in nav-bar");
}
// Now test that the builtin photon migrations work:
// Reset kVersion
CustomizableUIBSPass.kVersion--;
// Now test that the builtin photon migrations work:
CustomizableUIBSPass.gSavedState = {
currentVersion: 6,
placements: {
@ -116,13 +118,61 @@ function test() {
is(navbarPlacements[2], "stop-reload-button", "Stop/reload button is in the right place.");
is(navbarPlacements[3], "home-button", "Home button is in the right place.");
is(navbarPlacements[4], "urlbar-container", "URL bar is in the right place.");
is(navbarPlacements[5], "library-button", "Library button is in the right place.");
is(navbarPlacements[6], "sidebar-button", "Sidebar button is in the right place.");
is(navbarPlacements.length, 7, "Should have 7 items");
is(navbarPlacements[5], "downloads-button", "Downloads button is in the right place.");
is(navbarPlacements[6], "library-button", "Library button is in the right place.");
is(navbarPlacements[7], "sidebar-button", "Sidebar button is in the right place.");
is(navbarPlacements.length, 8, "Should have 8 items");
let overflowPlacements = CustomizableUIBSPass.gSavedState.placements["widget-overflow-fixed-list"];
Assert.deepEqual(overflowPlacements, ["panic-button"]);
// Finally test that the downloads migration works:
let oldNavbarPlacements = [
"urlbar-container", "customizableui-special-spring3", "search-container",
];
CustomizableUIBSPass.gSavedState = {
currentVersion: 10,
placements: {
"nav-bar": Array.from(oldNavbarPlacements),
"widget-overflow-fixed-list": ["downloads-button"],
},
};
CustomizableUIInternal._updateForNewVersion();
navbarPlacements = CustomizableUIBSPass.gSavedState.placements["nav-bar"];
Assert.deepEqual(navbarPlacements, oldNavbarPlacements.concat(["downloads-button"]),
"Downloads button inserted in navbar");
Assert.deepEqual(CustomizableUIBSPass.gSavedState.placements["widget-overflow-fixed-list"], [],
"Overflow panel is empty");
CustomizableUIBSPass.gSavedState = {
currentVersion: 10,
placements: {
"nav-bar": ["downloads-button"].concat(oldNavbarPlacements),
},
};
CustomizableUIInternal._updateForNewVersion();
navbarPlacements = CustomizableUIBSPass.gSavedState.placements["nav-bar"];
Assert.deepEqual(navbarPlacements, oldNavbarPlacements.concat(["downloads-button"]),
"Downloads button reinserted in navbar");
oldNavbarPlacements = [
"urlbar-container", "customizableui-special-spring3", "search-container", "other-widget",
];
CustomizableUIBSPass.gSavedState = {
currentVersion: 10,
placements: {
"nav-bar": Array.from(oldNavbarPlacements),
},
};
CustomizableUIInternal._updateForNewVersion();
navbarPlacements = CustomizableUIBSPass.gSavedState.placements["nav-bar"];
let expectedNavbarPlacements = [
"urlbar-container", "customizableui-special-spring3", "search-container",
"downloads-button", "other-widget",
];
Assert.deepEqual(navbarPlacements, expectedNavbarPlacements,
"Downloads button inserted in navbar before other widgets");
gFuturePlacements.delete(CustomizableUI.AREA_NAVBAR);
gPalette.delete(testWidgetNew.id);
gPalette.delete(testWidgetOld.id);