Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* Tests disable event telemetry.
*/
let currentTime;
const DISABLE_SUGGEST_EVENT_MAX_SECONDS = 300;
const ENGINE_ID =
"other-browser_searchSuggestionEngine searchSuggestionEngine.xml";
ChromeUtils.defineESModuleGetters(lazy, {
QuickSuggestTestUtils:
});
add_setup(async function () {
Services.prefs.setBoolPref("browser.search.suggest.enabled", false);
await lazy.QuickSuggestTestUtils.ensureQuickSuggestInit({
remoteSettingsRecords: [
{
collection: lazy.QuickSuggestTestUtils.RS_COLLECTION.AMP,
type: lazy.QuickSuggestTestUtils.RS_TYPE.AMP,
attachment: [lazy.QuickSuggestTestUtils.ampRemoteSettings()],
},
{
collection: lazy.QuickSuggestTestUtils.RS_COLLECTION.OTHER,
type: lazy.QuickSuggestTestUtils.RS_TYPE.WIKIPEDIA,
attachment: [lazy.QuickSuggestTestUtils.wikipediaRemoteSettings()],
},
],
prefs: [["suggest.quicksuggest.sponsored", true]],
});
UrlbarPrefs.set(
"events.disableSuggest.maxSecondsFromLastSearch",
DISABLE_SUGGEST_EVENT_MAX_SECONDS
);
let oldDefaultEngine = await SearchService.getDefault();
let root = gTestPath;
let engineURL = new URL("../browser/searchSuggestionEngine.xml", root).href;
await SearchTestUtils.installOpenSearchEngine({
url: engineURL,
setAsDefault: true,
});
sinon
.stub(window.gURLBar.controller.engagementEvent, "getCurrentTime")
.callsFake(() => {
return currentTime;
});
await SpecialPowers.pushPrefEnv({
set: [["browser.urlbar.scotchBonnet.enableOverride", true]],
});
registerCleanupFunction(async function () {
await SearchService.setDefault(
oldDefaultEngine,
SearchService.CHANGE_REASON.UNKNOWN
);
sinon.restore();
Services.prefs.clearUserPref("browser.search.suggest.enabled");
});
});
function resetClock() {
currentTime = 0;
}
function advanceClock(ms) {
currentTime += ms;
}
function getSuggestPref(type) {
if (type == "sponsored") {
return "suggest.quicksuggest.sponsored";
} else if (type == "nonsponsored") {
return "suggest.quicksuggest.all";
} else if (type == "suggest") {
return "quicksuggest.enabled";
}
return null;
}
const TESTS = [
{
input: "amp",
expectedResults: "search_engine,rust_adm_sponsored",
expectedNumResults: 2,
expectedSelectedResult: "rust_adm_sponsored",
pref: "sponsored",
time: 5000,
},
{
input: "amp",
expectedResults: "search_engine,rust_adm_sponsored",
expectedNumResults: 2,
expectedSelectedResult: "rust_adm_sponsored",
pref: "sponsored",
time: 500000,
},
{
input: "wikipedia",
expectedResults: "search_engine,action,rust_adm_nonsponsored",
expectedNumResults: 3,
expectedSelectedResult: "rust_adm_nonsponsored",
pref: "nonsponsored",
time: 10000,
},
{
input: "amp",
expectedResults: "search_engine,rust_adm_sponsored",
expectedNumResults: 2,
expectedSelectedResult: "rust_adm_sponsored",
pref: "suggest",
time: 5000,
},
{
input: "wikipedia",
expectedResults: "search_engine,action,rust_adm_nonsponsored",
expectedNumResults: 3,
expectedSelectedResult: "rust_adm_nonsponsored",
pref: "suggest",
time: 10000,
},
];
add_task(async function test_disable_suggest_after_engagement() {
for (const test of TESTS) {
for (let engagedWithSuggest of [true, false]) {
await doTest(async () => {
resetClock();
let tab = await BrowserTestUtils.openNewForegroundTab(window.gBrowser);
await openPopup(test.input);
if (engagedWithSuggest) {
EventUtils.synthesizeKey("KEY_ArrowDown");
}
let selected_result = engagedWithSuggest
? test.expectedSelectedResult
: "search_engine";
await doClick();
assertEngagementTelemetry([
{
results: test.expectedResults,
n_results: test.expectedNumResults,
selected_result,
},
]);
advanceClock(test.time);
UrlbarPrefs.set(getSuggestPref(test.pref), false);
if (test.time < DISABLE_SUGGEST_EVENT_MAX_SECONDS * 1000) {
assertDisableTelemetry([
{
feature: "suggest",
selected_result,
results: test.expectedResults,
n_results: test.expectedNumResults,
sap: "urlbar",
interaction: "typed",
search_mode: "",
search_engine_default_id: ENGINE_ID,
n_chars: test.input.length,
n_words: "1",
window_mode: "classic",
},
]);
} else {
assertDisableTelemetry([]);
}
UrlbarPrefs.set(getSuggestPref(test.pref), true);
BrowserTestUtils.removeTab(tab);
});
}
}
});
add_task(async function test_disable_suggest_after_abandonment() {
for (const test of TESTS) {
await doTest(async () => {
resetClock();
let tab = await BrowserTestUtils.openNewForegroundTab(window.gBrowser);
await openPopup(test.input);
await doBlur();
assertAbandonmentTelemetry([
{
selectedResult: null,
results: test.expectedResults,
n_results: test.expectedNumResults,
},
]);
advanceClock(test.time);
UrlbarPrefs.set(getSuggestPref(test.pref), false);
if (test.time < DISABLE_SUGGEST_EVENT_MAX_SECONDS * 1000) {
assertDisableTelemetry([
{
feature: "suggest",
selected_result: "none",
results: test.expectedResults,
n_results: test.expectedNumResults,
sap: "urlbar_newtab",
interaction: "typed",
search_mode: "",
search_engine_default_id: ENGINE_ID,
n_chars: test.input.length,
n_words: "1",
window_mode: "classic",
},
]);
} else {
assertDisableTelemetry([]);
}
UrlbarPrefs.set(getSuggestPref(test.pref), true);
BrowserTestUtils.removeTab(tab);
});
}
});