Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
// `UrlbarResult`s without titles should be shown with proper titles in the
// view, especially results with URLs.
const NO_TITLE_URL =
ChromeUtils.defineESModuleGetters(this, {
UrlbarProviderInputHistory:
"moz-src:///browser/components/urlbar/UrlbarProviderInputHistory.sys.mjs",
UrlbarProviderPlaces:
"moz-src:///browser/components/urlbar/UrlbarProviderPlaces.sys.mjs",
});
add_setup(async function () {
registerCleanupFunction(async () => {
await PlacesTestUtils.clearInputHistory();
await PlacesUtils.history.clear();
});
});
add_task(async function places_history() {
await PlacesTestUtils.addVisits({
url: NO_TITLE_URL,
title: "",
});
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: "mochi",
});
await checkTitleElement({
target: {
type: UrlbarShared.RESULT_TYPE.URL,
url: NO_TITLE_URL,
providerName: UrlbarProviderPlaces.name,
},
expected: {
title: "mochi.test:8888",
highlightedText: "mochi",
},
});
await UrlbarTestUtils.promisePopupClose(window);
await PlacesUtils.history.clear();
});
add_task(async function places_switchToTab() {
await doSwitchToTabTest({
target: {
url: NO_TITLE_URL,
providerName: UrlbarProviderPlaces.name,
},
searchString: "mochi",
expected: {
title: "mochi.test:8888",
highlightedText: "mochi",
},
});
await PlacesUtils.history.clear();
});
add_task(async function places_bookmark() {
let bookmark = await PlacesUtils.bookmarks.insert({
url: NO_TITLE_URL,
title: "",
parentGuid: PlacesUtils.bookmarks.toolbarGuid,
});
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: "mochi",
});
await checkTitleElement({
target: {
type: UrlbarShared.RESULT_TYPE.URL,
url: NO_TITLE_URL,
providerName: UrlbarProviderPlaces.name,
},
expected: {
title: "mochi.test:8888",
highlightedText: "mochi",
},
});
await UrlbarTestUtils.promisePopupClose(window);
await PlacesUtils.bookmarks.remove(bookmark);
});
add_task(async function inputHistory() {
await PlacesTestUtils.addVisits({
url: NO_TITLE_URL,
title: "",
});
await UrlbarUtils.addToInputHistory(NO_TITLE_URL, "inputhistory");
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: "inputhistory",
});
await checkTitleElement({
target: {
type: UrlbarShared.RESULT_TYPE.URL,
url: NO_TITLE_URL,
providerName: UrlbarProviderInputHistory.name,
},
expected: {
title: "mochi.test:8888",
},
});
await UrlbarTestUtils.promisePopupClose(window);
await PlacesTestUtils.clearInputHistory();
await PlacesUtils.history.clear();
});
add_task(async function inputHistory_switchToTab() {
await PlacesTestUtils.addVisits({
url: NO_TITLE_URL,
title: "",
});
await UrlbarUtils.addToInputHistory(NO_TITLE_URL, "inputhistory");
await doSwitchToTabTest({
target: {
url: NO_TITLE_URL,
providerName: UrlbarProviderInputHistory.name,
},
searchString: "inputhistory",
expected: {
title: "mochi.test:8888",
},
});
await PlacesTestUtils.clearInputHistory();
await PlacesUtils.history.clear();
});
add_task(async function genericUrlResult_domain_noTitle() {
await doGenericUrlResultTest({
payload: {
},
searchString: "with-domain",
expected: {
title: "example-with-domain.com",
highlightedText: "with-domain",
},
});
});
add_task(async function genericUrlResult_domain_title() {
await doGenericUrlResultTest({
},
searchString: "with-domain",
expected: {
title: "Title for URL with domain",
},
});
});
add_task(async function genericUrlResult_noDomain_noTitle() {
await doGenericUrlResultTest({
payload: {
// URL without a domain that should be unescaped for display
},
searchString: "baz.txt",
},
});
});
add_task(async function genericUrlResult_noDomain_title() {
await doGenericUrlResultTest({
},
searchString: "baz.txt",
expected: {
title: "Title for URL without domain",
},
});
});
add_task(async function genericUrlResult_invalid_noTitle() {
await doGenericUrlResultTest({
payload: {
url: "this is not a valid URL",
},
searchString: "valid",
expected: {
title: "this is not a valid URL",
highlightedText: "valid",
},
});
});
add_task(async function genericUrlResult_invalid_title() {
await doGenericUrlResultTest({
payload: {
url: "this is not a valid URL",
title: "Title for invalid URL",
},
searchString: "valid",
expected: {
title: "Title for invalid URL",
},
});
});
async function doSwitchToTabTest({ target, searchString, expected }) {
await BrowserTestUtils.withNewTab({ gBrowser, url: target.url }, async () => {
await BrowserTestUtils.withNewTab({ gBrowser }, async () => {
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: searchString,
});
await checkTitleElement({
expected,
target: {
...target,
type: UrlbarShared.RESULT_TYPE.TAB_SWITCH,
},
});
await UrlbarTestUtils.promisePopupClose(window);
});
});
}
async function doGenericUrlResultTest({ payload, searchString, expected }) {
let provider = new UrlbarTestUtils.TestProvider({
priority: Infinity,
results: [
new UrlbarResult({
type: UrlbarShared.RESULT_TYPE.URL,
source: UrlbarShared.RESULT_SOURCE.OTHER_NETWORK,
payload,
}),
],
});
let providersManager = ProvidersManager.getInstanceForSap("urlbar");
providersManager.registerProvider(provider);
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: searchString,
});
await checkTitleElement({
expected,
target: {
type: UrlbarShared.RESULT_TYPE.URL,
url: payload.url,
providerName: provider.name,
},
});
await UrlbarTestUtils.promisePopupClose(window);
providersManager.unregisterProvider(provider);
}
async function checkTitleElement({ target, expected }) {
let row;
for (let i = 0; i < UrlbarTestUtils.getResultCount(window); i++) {
let details = await UrlbarTestUtils.getDetailsOfResultAt(window, i);
if (
details.url == target.url &&
details.type == target.type &&
details.result.providerName == target.providerName
) {
row = details.element.row;
break;
}
}
Assert.ok(!!row, "Row should have been found");
let titleElement = row.querySelector(".urlbarView-title");
Assert.ok(!!titleElement, "Title element should exist");
Assert.equal(
titleElement.textContent,
expected.title,
"Title element text content should be correct"
);
let strong = titleElement.querySelector("strong");
Assert.equal(
!!strong,
!!expected.highlightedText,
"Title element should have `strong` text iff highlights are expectd"
);
if (expected.highlightedText) {
Assert.equal(
strong.textContent,
expected.highlightedText,
"Highlighted text should be correct"
);
}
}