/* 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); }