Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
*/
/**
* This file tests telemetry for tabtosearch results.
* NB: This file does not test the search mode `entry` field for tab-to-search
* results. That is tested in browser_UsageTelemetry_urlbar_searchmode.js.
*/
"use strict";
const ENGINE_NAME = "MozSearch";
const ENGINE_DOMAIN = "example.com";
/**
* Checks to see if the second result in the Urlbar is a tab-to-search result
* with the correct engine.
*
* @param {string} engineName
* The expected engine name.
* @param {boolean} [isOnboarding]
* If true, expects the tab-to-search result to be an onbarding result.
*/
async function checkForTabToSearchResult(engineName, isOnboarding) {
Assert.ok(UrlbarTestUtils.isPopupOpen(window), "Popup should be open.");
let tabToSearchResult = (
await UrlbarTestUtils.waitForAutocompleteResultAt(window, 1)
).result;
Assert.equal(
tabToSearchResult.providerName,
"UrlbarProviderTabToSearch",
"The second result is a tab-to-search result."
);
Assert.equal(
tabToSearchResult.payload.engine,
engineName,
"The tab-to-search result is for the first engine."
);
if (isOnboarding) {
Assert.equal(
tabToSearchResult.payload.dynamicType,
"onboardTabToSearch",
"The tab-to-search result is an onboarding result."
);
} else {
Assert.ok(
!tabToSearchResult.payload.dynamicType,
"The tab-to-search result should not be an onboarding result."
);
}
}
add_setup(async function () {
await SpecialPowers.pushPrefEnv({
set: [
["browser.urlbar.tabToSearch.onboard.interactionsLeft", 0],
["browser.urlbar.scotchBonnet.enableOverride", false],
],
});
await SearchTestUtils.installSearchExtension({
name: ENGINE_NAME,
search_url: `https://${ENGINE_DOMAIN}/`,
});
// Enable local telemetry recording for the duration of the tests.
let oldCanRecord = Services.telemetry.canRecordExtended;
Services.telemetry.canRecordExtended = true;
registerCleanupFunction(async () => {
Services.telemetry.canRecordExtended = oldCanRecord;
});
});
add_task(async function test() {
await BrowserTestUtils.withNewTab("about:blank", async () => {
for (let i = 0; i < 3; i++) {
await PlacesTestUtils.addVisits([`https://${ENGINE_DOMAIN}/`]);
}
await PlacesFrecencyRecalculator.recalculateAnyOutdatedFrecencies();
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: ENGINE_DOMAIN.slice(0, 4),
fireInputEvent: true,
});
let tabToSearchResult = (
await UrlbarTestUtils.waitForAutocompleteResultAt(window, 1)
).result;
Assert.equal(
tabToSearchResult.providerName,
"UrlbarProviderTabToSearch",
"The second result is a tab-to-search result."
);
Assert.equal(
tabToSearchResult.payload.engine,
ENGINE_NAME,
"The tab-to-search result is for the correct engine."
);
EventUtils.synthesizeKey("KEY_ArrowDown");
Assert.equal(
UrlbarTestUtils.getSelectedRowIndex(window),
1,
"Sanity check: The second result is selected."
);
// Select the tab-to-search result.
let searchPromise = UrlbarTestUtils.promiseSearchComplete(window);
EventUtils.synthesizeKey("KEY_Enter");
await searchPromise;
await UrlbarTestUtils.assertSearchMode(window, {
engineName: ENGINE_NAME,
entry: "tabtosearch",
});
await UrlbarTestUtils.exitSearchMode(window);
await UrlbarTestUtils.promisePopupClose(window, () => {
gURLBar.blur();
});
await PlacesUtils.history.clear();
});
Services.telemetry.clearScalars();
Services.telemetry.clearEvents();
});