Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
let engine;
add_setup(async function () {
engine = await SearchTestUtils.promiseNewSearchEngine({
url: getRootDirectory(gTestPath) + "testEngine.xml",
setAsDefault: true,
});
});
add_task(async function test() {
let histogramKey = "other-" + engine.name + ".contextmenu";
let numSearchesBefore = 0;
try {
let hs = Services.telemetry
.getKeyedHistogramById("SEARCH_COUNTS")
.snapshot();
if (histogramKey in hs) {
numSearchesBefore = hs[histogramKey].sum;
}
} catch (ex) {
// No searches performed yet, not a problem, |numSearchesBefore| is 0.
}
let tabs = [];
let tabsLoadedDeferred = new Deferred();
function tabAdded(event) {
let tab = event.target;
tabs.push(tab);
// We wait for the blank tab and the two context searches tabs to open.
if (tabs.length == 3) {
tabsLoadedDeferred.resolve();
}
}
let container = gBrowser.tabContainer;
container.addEventListener("TabOpen", tabAdded);
BrowserTestUtils.addTab(gBrowser, "about:blank");
BrowserSearch.loadSearchFromContext(
"mozilla",
false,
Services.scriptSecurityManager.getSystemPrincipal(),
Services.scriptSecurityManager.getSystemPrincipal().csp,
new MouseEvent("click")
);
BrowserSearch.loadSearchFromContext(
"firefox",
false,
Services.scriptSecurityManager.getSystemPrincipal(),
Services.scriptSecurityManager.getSystemPrincipal().csp,
new MouseEvent("click")
);
// Wait for all the tabs to open.
await tabsLoadedDeferred.promise;
is(tabs[0], gBrowser.tabs[3], "blank tab has been pushed to the end");
is(
tabs[1],
gBrowser.tabs[1],
"first search tab opens next to the current tab"
);
is(
tabs[2],
gBrowser.tabs[2],
"second search tab opens next to the first search tab"
);
container.removeEventListener("TabOpen", tabAdded);
tabs.forEach(gBrowser.removeTab, gBrowser);
// Make sure that the context searches are correctly recorded in telemetry.
// Telemetry is not updated synchronously here, we must wait for it.
await TestUtils.waitForCondition(() => {
let hs = Services.telemetry
.getKeyedHistogramById("SEARCH_COUNTS")
.snapshot();
return histogramKey in hs && hs[histogramKey].sum == numSearchesBefore + 2;
}, "The histogram must contain the correct search count");
});
function Deferred() {
this.promise = new Promise((resolve, reject) => {
this.resolve = resolve;
this.reject = reject;
});
}