Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
ChromeUtils.defineESModuleGetters(this, {
});
const kPrefHomePage = "browser.startup.homepage";
const kPrefExtensionControlled =
"browser.startup.homepage_override.extensionControlled";
const kPrefHomeButtonRemoved = "browser.engagement.home-button.has-removed";
const kHomeButtonId = "home-button";
const kUrlbarWidgetId = "urlbar-container";
// eslint-disable-next-line no-empty-pattern
async function withTestSetup({} = {}, testFn) {
CustomizableUI.removeWidgetFromArea(kHomeButtonId);
await SpecialPowers.pushPrefEnv({
set: [
[kPrefHomeButtonRemoved, false],
[kPrefHomePage, "about:home"],
[kPrefExtensionControlled, false],
],
});
HomePage._addCustomizableUiListener();
try {
await testFn();
} finally {
await SpecialPowers.popPrefEnv();
await CustomizableUI.reset();
}
}
function assertHomeButtonInArea(area) {
let placement = CustomizableUI.getPlacementOfWidget(kHomeButtonId);
is(placement.area, area, "home button in area");
}
function assertHomeButtonNotPlaced() {
ok(
!CustomizableUI.getPlacementOfWidget(kHomeButtonId),
"home button not placed"
);
}
function assertHasRemovedPref(val) {
is(
Services.prefs.getBoolPref(kPrefHomeButtonRemoved),
val,
"Expected removed pref value"
);
}
async function runAddButtonTest() {
await withTestSetup({}, async () => {
// Setting the homepage once should add to the toolbar.
assertHasRemovedPref(false);
assertHomeButtonNotPlaced();
await HomePage.set("https://example.com/");
assertHomeButtonInArea("nav-bar");
assertHasRemovedPref(false);
// After removing the home button, a new homepage shouldn't add it.
CustomizableUI.removeWidgetFromArea(kHomeButtonId);
await HomePage.set("https://mozilla.org/");
assertHomeButtonNotPlaced();
});
}
add_task(async function testAddHomeButtonOnSet() {
await runAddButtonTest();
});
add_task(async function testHomeButtonDoesNotMove() {
await withTestSetup({}, async () => {
// Setting the homepage should not move the home button.
CustomizableUI.addWidgetToArea(kHomeButtonId, "TabsToolbar");
assertHasRemovedPref(false);
assertHomeButtonInArea("TabsToolbar");
await HomePage.set("https://example.com/");
assertHasRemovedPref(false);
assertHomeButtonInArea("TabsToolbar");
});
});
add_task(async function testHomeButtonNotAddedBlank() {
await withTestSetup({}, async () => {
assertHomeButtonNotPlaced();
assertHasRemovedPref(false);
await HomePage.set("about:blank");
assertHasRemovedPref(false);
assertHomeButtonNotPlaced();
await HomePage.set("about:home");
assertHasRemovedPref(false);
assertHomeButtonNotPlaced();
});
});
add_task(async function testHomeButtonNotAddedExtensionControlled() {
await withTestSetup({}, async () => {
assertHomeButtonNotPlaced();
assertHasRemovedPref(false);
Services.prefs.setBoolPref(kPrefExtensionControlled, true);
await HomePage.set("https://search.example.com/?q=%s");
assertHomeButtonNotPlaced();
});
});
add_task(async function testHomeButtonPlacement() {
await withTestSetup({}, async () => {
assertHomeButtonNotPlaced();
HomePage._maybeAddHomeButtonToToolbar("https://example.com");
let homePlacement = CustomizableUI.getPlacementOfWidget(kHomeButtonId);
is(homePlacement.area, "nav-bar", "Home button is in the nav-bar");
is(homePlacement.position, 3, "Home button is after stop/refresh");
let addressBarPlacement =
CustomizableUI.getPlacementOfWidget(kUrlbarWidgetId);
is(
addressBarPlacement.position,
5,
"There's a space between home and urlbar"
);
CustomizableUI.removeWidgetFromArea(kHomeButtonId);
Services.prefs.setBoolPref(kPrefHomeButtonRemoved, false);
try {
CustomizableUI.addWidgetToArea(kUrlbarWidgetId, "nav-bar", 1);
HomePage._maybeAddHomeButtonToToolbar("https://example.com");
homePlacement = CustomizableUI.getPlacementOfWidget(kHomeButtonId);
is(homePlacement.area, "nav-bar", "Home button is in the nav-bar");
is(homePlacement.position, 1, "Home button is right before the urlbar");
} finally {
CustomizableUI.addWidgetToArea(
kUrlbarWidgetId,
addressBarPlacement.area,
addressBarPlacement.position
);
}
});
});