/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; function test() { requestLongerTimeout(2); waitForExplicitFinish(); resetPreferences(); try { let cm = Components.classes["@mozilla.org/categorymanager;1"] .getService(Components.interfaces.nsICategoryManager); cm.getCategoryEntry("healthreport-js-provider-default", "SearchesProvider"); } catch (ex) { // Health Report disabled, or no SearchesProvider. // We need a test or else we'll be marked as failure. ok(true, "Firefox Health Report is not enabled."); finish(); return; } function testFHR() { let reporter = Components.classes["@mozilla.org/datareporting/service;1"] .getService() .wrappedJSObject .healthReporter; ok(reporter, "Health Reporter available."); reporter.onInit().then(function onInit() { let provider = reporter.getProvider("org.mozilla.searches"); let m = provider.getMeasurement("counts", 3); m.getValues().then(function onData(data) { let now = new Date(); let oldCount = 0; // Find the right bucket for the "Foo" engine. let engine = Services.search.getEngineByName("Foo"); let field = (engine.identifier || "other-Foo") + ".searchbar"; if (data.days.hasDay(now)) { let day = data.days.getDay(now); if (day.has(field)) { oldCount = day.get(field); } } // 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); m.getValues().then(function onData(data) { ok(data.days.hasDay(now), "Have data for today."); let day = data.days.getDay(now); is(day.get(field), oldCount + 1, "Performing a search increments FHR count 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"); testFHR(); break; case "engine-removed": Services.obs.removeObserver(observer, "browser-search-engine-modified"); finish(); break; } } Services.obs.addObserver(observer, "browser-search-engine-modified", false); Services.search.addEngine("http://mochi.test:8888/browser/browser/components/search/test/testEngine.xml", Ci.nsISearchEngine.DATA_XML, "data:image/x-icon,%00", false); } function resetPreferences() { let service = Components.classes["@mozilla.org/datareporting/service;1"] .getService(Components.interfaces.nsISupports) .wrappedJSObject; service.policy._prefs.resetBranch("datareporting.policy."); service.policy.dataSubmissionPolicyBypassNotification = true; }