summaryrefslogtreecommitdiffstats
path: root/browser/components/search/test/browser_contextSearchTabPosition.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/search/test/browser_contextSearchTabPosition.js')
-rw-r--r--browser/components/search/test/browser_contextSearchTabPosition.js62
1 files changed, 62 insertions, 0 deletions
diff --git a/browser/components/search/test/browser_contextSearchTabPosition.js b/browser/components/search/test/browser_contextSearchTabPosition.js
new file mode 100644
index 000000000..21a8c1130
--- /dev/null
+++ b/browser/components/search/test/browser_contextSearchTabPosition.js
@@ -0,0 +1,62 @@
+/* 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/. */
+
+add_task(function* test() {
+ yield SpecialPowers.pushPrefEnv({set: [["toolkit.telemetry.enabled", true]]});
+ let engine = yield promiseNewEngine("testEngine.xml");
+ 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, false);
+
+ gBrowser.addTab("about:blank");
+ BrowserSearch.loadSearchFromContext("mozilla");
+ BrowserSearch.loadSearchFromContext("firefox");
+
+ // Wait for all the tabs to open.
+ yield 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, false);
+ tabs.forEach(gBrowser.removeTab, gBrowser);
+
+ // Make sure that the context searches are correctly recorded.
+ let hs = Services.telemetry.getKeyedHistogramById("SEARCH_COUNTS").snapshot();
+ Assert.ok(histogramKey in hs, "The histogram must contain the correct key");
+ Assert.equal(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;
+ });
+}