summaryrefslogtreecommitdiffstats
path: root/browser/components/search/test/browser_healthreport.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/search/test/browser_healthreport.js')
-rw-r--r--browser/components/search/test/browser_healthreport.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/browser/components/search/test/browser_healthreport.js b/browser/components/search/test/browser_healthreport.js
new file mode 100644
index 000000000..c68ad174c
--- /dev/null
+++ b/browser/components/search/test/browser_healthreport.js
@@ -0,0 +1,82 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+var Preferences = Cu.import("resource://gre/modules/Preferences.jsm", {}).Preferences;
+
+function test() {
+ waitForExplicitFinish();
+ resetPreferences();
+
+ function testTelemetry() {
+ // Find the right bucket for the "Foo" engine.
+ let engine = Services.search.getEngineByName("Foo");
+ let histogramKey = (engine.identifier || "other-Foo") + ".searchbar";
+ 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.
+ }
+
+ // Now perform a search and ensure the count is incremented.
+ let tab = gBrowser.addTab();
+ gBrowser.selectedTab = tab;
+ let searchBar = BrowserSearch.searchBar;
+
+ searchBar.value = "firefox health report";
+ searchBar.focus();
+
+ function afterSearch() {
+ searchBar.value = "";
+ gBrowser.removeTab(tab);
+
+ // 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 + 1,
+ "Performing a search increments the related SEARCH_COUNTS key by 1.");
+
+ let engine = Services.search.getEngineByName("Foo");
+ Services.search.removeEngine(engine);
+ }
+
+ EventUtils.synthesizeKey("VK_RETURN", {});
+ executeSoon(() => executeSoon(afterSearch));
+ }
+
+ function observer(subject, topic, data) {
+ switch (data) {
+ case "engine-added":
+ let engine = Services.search.getEngineByName("Foo");
+ ok(engine, "Engine was added.");
+ Services.search.currentEngine = engine;
+ break;
+
+ case "engine-current":
+ is(Services.search.currentEngine.name, "Foo", "Current engine is Foo");
+ testTelemetry();
+ break;
+
+ case "engine-removed":
+ Services.obs.removeObserver(observer, "browser-search-engine-modified");
+ finish();
+ break;
+ }
+ }
+
+ Services.obs.addObserver(observer, "browser-search-engine-modified", false);
+ SpecialPowers.pushPrefEnv({set: [["toolkit.telemetry.enabled", true]]}).then(function() {
+ Services.search.addEngine("http://mochi.test:8888/browser/browser/components/search/test/testEngine.xml",
+ null, "data:image/x-icon,%00", false);
+ });
+}
+
+function resetPreferences() {
+ Preferences.resetBranch("datareporting.policy.");
+ Preferences.set("datareporting.policy.dataSubmissionPolicyBypassNotification", true);
+}