Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
ChromeUtils.defineESModuleGetters(this, {
setTimeout: "resource://gre/modules/Timer.sys.mjs",
});
const TEST_URL = `${TEST_BASE_URL}has-a-link.html`;
add_setup(async function setup() {
await SpecialPowers.pushPrefEnv({
set: [["browser.urlbar.scotchBonnet.enableOverride", true]],
});
});
add_task(async function test_button_visibility_by_escape() {
info("Open pageproxystate valid page");
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
);
await assertState(false, "valid");
info("Open the result panel and select the first item");
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: "",
});
EventUtils.synthesizeKey("KEY_ArrowDown");
await assertState(true, "invalid");
info("Escape to close the result panel");
await UrlbarTestUtils.promisePopupClose(window, () =>
EventUtils.synthesizeKey("KEY_Escape")
);
await assertState(true, "invalid");
info("Escape to revert");
EventUtils.synthesizeKey("KEY_Escape");
await assertState(false, "valid");
BrowserTestUtils.removeTab(tab);
});
add_task(async function test_button_visibility_by_loaded_on_background() {
info("Open valid page that loads slow");
let tab1 = await BrowserTestUtils.openNewForegroundTab({
gBrowser,
opening:
getRootDirectory(gTestPath).replace(
) + "slow-page.sjs",
waitForLoad: false,
});
await assertState(true, "invalid");
info("Open a new tab");
let tab2 = await BrowserTestUtils.openNewForegroundTab(gBrowser);
await assertState(true, "invalid");
info("Wait until loading the slow page on background");
// eslint-disable-next-line mozilla/no-arbitrary-setTimeout
await new Promise(r => setTimeout(r, 5000));
await TestUtils.waitForCondition(
() =>
!gURLBar.getBrowserState(tab1.linkedBrowser)
.isUnifiedSearchButtonAvailable
);
info("Select the previous tab");
gBrowser.selectedTab = tab1;
await assertState(false, "valid");
info("Clean up");
BrowserTestUtils.removeTab(tab2);
BrowserTestUtils.removeTab(tab1);
});
add_task(async function test_button_visibility_by_pageproxystate() {
info("Open pageproxystate valid page");
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
);
await assertState(false, "valid");
info("Click on browser element");
await clickOnBrowserElement();
await assertState(false, "valid");
info("Click on urlbar");
EventUtils.synthesizeMouseAtCenter(gURLBar.inputField, {});
await assertState(false, "valid");
info("Start to edit");
EventUtils.synthesizeKey("a");
await assertState(true, "invalid");
info("Click on browser element");
await clickOnBrowserElement();
await assertState(true, "invalid");
BrowserTestUtils.removeTab(tab);
});
add_task(async function test_button_visibility_by_tab_switching() {
info("Open pageproxystate valid page");
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
);
await assertState(false, "valid");
info("Focus on Unified Search Mode by key");
gURLBar.focus();
EventUtils.synthesizeKey("KEY_Tab", { shiftKey: true });
await assertState(true, "valid");
info("Open a new tab and select it");
let newtab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
);
await assertState(false, "valid");
info("Select the previous tab that enables Unified Search Button");
gBrowser.selectedTab = tab;
await assertState(true, "valid");
info("Clean up");
BrowserTestUtils.removeTab(newtab);
BrowserTestUtils.removeTab(tab);
});
add_task(async function test_button_visibility_by_navigate_blank_page() {
const BLANK_PAGE_URLS = [
"about:blank",
"about:home",
"about:newtab",
"about:privatebrowsing",
];
for (let isPrivateMode of [false, true]) {
for (let url of BLANK_PAGE_URLS) {
info(`Test for ${url} in private mode: ${isPrivateMode}`);
info("Open pageproxystate valid page");
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
);
await assertState(false, "valid");
info("Navigate to blank page");
let onLocationChange = BrowserTestUtils.waitForLocationChange(
gBrowser,
url
);
gURLBar.value = url;
gURLBar.focus();
EventUtils.synthesizeKey("KEY_Enter");
await onLocationChange;
await assertState(true, "invalid");
BrowserTestUtils.removeTab(tab);
}
}
});
async function assertState(expectedVisible, expectedProxyPageState) {
let switcher = gURLBar.querySelector(".searchmode-switcher");
await BrowserTestUtils.waitForCondition(() => {
// If Unified Search Button is displayed as off-screen, the position should
// be 'fixed'.
let isVisible = window.getComputedStyle(switcher).position != "fixed";
return isVisible == expectedVisible;
}, `Wait until Unified Search Button visibility will be changed to ${expectedVisible}`);
Assert.ok(true, "Unified Search Button visibility is correct");
Assert.equal(gURLBar.getAttribute("pageproxystate"), expectedProxyPageState);
Assert.equal(
switcher.getAttribute("aria-hidden"),
expectedVisible ? null : "true",
"aria-hidden should be set when the switcher is hidden so screen readers do not announce"
);
}
async function clickOnBrowserElement() {
// We intentionally turn off this a11y check, because the following click is
// purposefully targeting a non-interactive element.
AccessibilityUtils.setEnv({ mustHaveAccessibleRule: false });
EventUtils.synthesizeMouseAtCenter(document.getElementById("browser"), {});
AccessibilityUtils.resetEnv();
await BrowserTestUtils.waitForCondition(() =>
document.activeElement.closest("#browser")
);
}