Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
add_setup(async function setup() {
let providersManager = ProvidersManager.getInstanceForSap("urlbar");
let originals = providersManager.providers;
providersManager.providers = [];
registerCleanupFunction(() => {
providersManager.providers = originals;
});
});
add_task(async function overflow() {
let row = await openAndGetTargetRow({ title: "0123457890".repeat(50) });
await assertOverflow(row.querySelector(".urlbarView-title"), true);
await UrlbarTestUtils.promisePopupClose(window);
});
add_task(async function reuse() {
let firstRow = await openAndGetTargetRow({ title: "short" });
await assertOverflow(firstRow.querySelector(".urlbarView-title"), false);
let secondRow = await openAndGetTargetRow({ title: "0123457890".repeat(50) });
Assert.equal(firstRow, secondRow, "The row should be reused");
await assertOverflow(secondRow.querySelector(".urlbarView-title"), true);
let thirdRow = await openAndGetTargetRow({ title: "short" });
Assert.equal(firstRow, thirdRow, "The row should be reused");
await assertOverflow(thirdRow.querySelector(".urlbarView-title"), false);
await UrlbarTestUtils.promisePopupClose(window);
});
add_task(async function hideAndShow() {
let row = await openAndGetTargetRow({ title: "0123457890".repeat(50) });
let title = row.querySelector(".urlbarView-title");
await assertOverflow(title, true);
// Hide the row.
row.toggleAttribute("hidden", true);
await TestUtils.waitForCondition(
() => !title.hasAttribute("overflow"),
"Waiting for the overflow attribute to be dropped while hidden"
);
// Show it again.
row.toggleAttribute("hidden", false);
await TestUtils.waitForCondition(
() => title.hasAttribute("overflow"),
"Waiting for the overflow attribute to be added again"
);
await assertOverflow(title, true);
await UrlbarTestUtils.promisePopupClose(window);
});
async function openAndGetTargetRow({
title,
}) {
let providersManager = ProvidersManager.getInstanceForSap("urlbar");
let provider = new UrlbarTestUtils.TestProvider({
name: "OverflowTestProvider",
results: [
new UrlbarResult({
type: UrlbarShared.RESULT_TYPE.URL,
source: UrlbarShared.RESULT_SOURCE.OTHER_LOCAL,
suggestedIndex: 0,
payload: { url, title },
}),
],
});
providersManager.registerProvider(provider);
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: "any",
});
providersManager.unregisterProvider(provider);
for (let i = 0; i < UrlbarTestUtils.getResultCount(window); i++) {
let details = await UrlbarTestUtils.getDetailsOfResultAt(window, i);
if (details.url == url) {
return details.element.row;
}
}
throw new Error("Result not found unexpectedly");
}
async function assertOverflow(element, expected) {
await TestUtils.waitForCondition(
() => element.hasAttribute("overflow") == expected,
`Waiting for the overflow attribute to be ${expected}`
);
if (expected) {
Assert.greater(element.scrollWidth, element.clientWidth);
} else {
Assert.lessOrEqual(element.scrollWidth, element.clientWidth);
}
}