diff -r 000000000000 -r 6474c204b198 browser/components/search/test/browser_healthreport.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/components/search/test/browser_healthreport.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,103 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +function test() { + requestLongerTimeout(2); + waitForExplicitFinish(); + + 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); + +} +