Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
const HOMEPAGE_PREF = "browser.startup.homepage";
const DEFAULT_HOMEPAGE_URL = "about:home";
add_setup(async function () {
await SpecialPowers.pushPrefEnv({
set: [
["browser.settings-redesign.enabled", true],
["identity.fxaccounts.account.device.name", ""],
// Pinning a tab during the test triggers the sidebar promo check,
// which sets this pref. Track it to avoid test warnings.
["sidebar.verticalTabs.dragToPinPromo.dismissed", false],
],
});
});
add_task(async function test_replace_with_current_pages() {
await SpecialPowers.pushPrefEnv({
set: [[HOMEPAGE_PREF, "https://old-url.com"]],
});
let initialTab = gBrowser.tabs[0];
gBrowser.pinTab(initialTab);
registerCleanupFunction(() => {
if (initialTab.pinned) {
gBrowser.unpinTab(initialTab);
}
});
// Use local chrome URLs rather than external HTTPS URLs to avoid timeouts.
// openNewForegroundTab ensures the tab URL is set before the action reads it.
let testTab1 = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
"about:home"
);
let testTab2 = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
"about:blank"
);
let { win, tab } = await openCustomHomepageSubpage();
let replaceButtonControl = await settingControlRenders(
"customHomepageReplaceWithCurrentPagesButton",
win
);
let replaceButton = replaceButtonControl.controlEl;
replaceButton.click();
await TestUtils.waitForCondition(() => {
let pref = Services.prefs.getStringPref(HOMEPAGE_PREF);
return pref.includes("about:home") && pref.includes("about:blank");
}, "Pref updated with current tab URLs");
is(
Services.prefs.getStringPref(HOMEPAGE_PREF),
"about:home|about:blank",
"Pref contains exactly the current tab URLs and nothing else"
);
gBrowser.unpinTab(initialTab);
await Promise.all([
BrowserTestUtils.removeTab(testTab1),
BrowserTestUtils.removeTab(testTab2),
BrowserTestUtils.removeTab(tab),
]);
});
add_task(async function test_replace_with_current_pages_disabled_state() {
await SpecialPowers.pushPrefEnv({
set: [[HOMEPAGE_PREF, DEFAULT_HOMEPAGE_URL]],
});
// Pin the initial browser tab so getTabsForCustomHomepage() excludes it
// (it slices off pinned tabs), leaving no valid non-preferences tabs open.
let initialTab = gBrowser.tabs[0];
gBrowser.pinTab(initialTab);
registerCleanupFunction(() => {
if (initialTab.pinned) {
gBrowser.unpinTab(initialTab);
}
});
let { win, tab } = await openCustomHomepageSubpage();
let replaceButtonControl = await settingControlRenders(
"customHomepageReplaceWithCurrentPagesButton",
win
);
let replaceButton = replaceButtonControl.controlEl;
ok(
replaceButton.disabled,
"Button is disabled when only about:preferences is open"
);
// Use a local URL to avoid network dependency.
let testTab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
"about:home"
);
await TestUtils.waitForCondition(
() => !replaceButton.disabled,
"Button becomes enabled when valid tab is opened"
);
await BrowserTestUtils.removeTab(testTab);
await TestUtils.waitForCondition(
() => replaceButton.disabled,
"Button becomes disabled again when the valid tab is closed"
);
gBrowser.unpinTab(initialTab);
await TestUtils.waitForCondition(
() => !replaceButton.disabled,
"Button becomes enabled again when the initial tab is unpinned"
);
await BrowserTestUtils.removeTab(tab);
});