Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
*/
/**
* This file tests urlbar telemetry with extension actions.
*/
"use strict";
const SCALAR_URLBAR = "browser.engagement.navigation.urlbar";
ChromeUtils.defineESModuleGetters(this, {
});
function assertSearchTelemetryEmpty(search_hist) {
const scalars = TelemetryTestUtils.getProcessScalars("parent", true, false);
Assert.ok(
!(SCALAR_URLBAR in scalars),
`Should not have recorded ${SCALAR_URLBAR}`
);
// Make sure SEARCH_COUNTS contains identical values.
TelemetryTestUtils.assertKeyedHistogramSum(
search_hist,
"other-MozSearch.urlbar",
undefined
);
TelemetryTestUtils.assertKeyedHistogramSum(
search_hist,
"other-MozSearch.alias",
undefined
);
// Also check events.
let events = Services.telemetry.snapshotEvents(
Ci.nsITelemetry.DATASET_PRERELEASE_CHANNELS,
false
);
events = (events.parent || []).filter(
e => e[1] == "navigation" && e[2] == "search"
);
Assert.deepEqual(
events,
[],
"Should not have recorded any navigation search events"
);
}
function snapshotHistograms() {
Services.telemetry.clearScalars();
Services.telemetry.clearEvents();
return {
resultMethodHist: TelemetryTestUtils.getAndClearHistogram(
"FX_URLBAR_SELECTED_RESULT_METHOD"
),
search_hist: TelemetryTestUtils.getAndClearKeyedHistogram("SEARCH_COUNTS"),
};
}
function assertTelemetryResults(histograms, type, index, method) {
TelemetryTestUtils.assertHistogram(histograms.resultMethodHist, method, 1);
TelemetryTestUtils.assertKeyedScalar(
TelemetryTestUtils.getProcessScalars("parent", true, true),
`urlbar.picked.${type}`,
index,
1
);
}
add_setup(async function () {
await SpecialPowers.pushPrefEnv({
set: [
// Disable search suggestions in the urlbar.
["browser.urlbar.suggest.searches", false],
// Clear historical search suggestions to avoid interference from previous
// tests.
["browser.urlbar.maxHistoricalSearchSuggestions", 0],
// Turn autofill off.
["browser.urlbar.autoFill", false],
],
});
// Enable local telemetry recording for the duration of the tests.
let oldCanRecord = Services.telemetry.canRecordExtended;
Services.telemetry.canRecordExtended = true;
// Enable event recording for the events tested here.
Services.telemetry.setEventRecordingEnabled("navigation", true);
// Clear history so that history added by previous tests doesn't mess up this
// test when it selects results in the urlbar.
await PlacesUtils.history.clear();
await PlacesUtils.bookmarks.eraseEverything();
// Make sure to restore the engine once we're done.
registerCleanupFunction(async function () {
Services.telemetry.canRecordExtended = oldCanRecord;
await PlacesUtils.history.clear();
await PlacesUtils.bookmarks.eraseEverything();
Services.telemetry.setEventRecordingEnabled("navigation", false);
});
});
add_task(async function test_extension() {
let extension = ExtensionTestUtils.loadExtension({
manifest: {
omnibox: {
keyword: "omniboxtest",
},
background() {
/* global browser */
browser.omnibox.setDefaultSuggestion({
description: "doit",
});
// Just do nothing for this test.
browser.omnibox.onInputEntered.addListener(() => {});
browser.omnibox.onInputChanged.addListener((text, suggest) => {
suggest([]);
});
},
},
});
await extension.startup();
const histograms = snapshotHistograms();
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
"about:blank"
);
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
waitForFocus,
value: "omniboxtest ",
fireInputEvent: true,
});
EventUtils.synthesizeKey("KEY_Enter");
assertSearchTelemetryEmpty(histograms.search_hist);
assertTelemetryResults(
histograms,
"extension",
0,
UrlbarTestUtils.SELECTED_RESULT_METHODS.enter
);
await extension.unload();
BrowserTestUtils.removeTab(tab);
});