michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: "use strict"; michael@0: michael@0: function test() { michael@0: requestLongerTimeout(2); michael@0: waitForExplicitFinish(); michael@0: michael@0: try { michael@0: let cm = Components.classes["@mozilla.org/categorymanager;1"] michael@0: .getService(Components.interfaces.nsICategoryManager); michael@0: cm.getCategoryEntry("healthreport-js-provider-default", "SearchesProvider"); michael@0: } catch (ex) { michael@0: // Health Report disabled, or no SearchesProvider. michael@0: // We need a test or else we'll be marked as failure. michael@0: ok(true, "Firefox Health Report is not enabled."); michael@0: finish(); michael@0: return; michael@0: } michael@0: michael@0: function testFHR() { michael@0: let reporter = Components.classes["@mozilla.org/datareporting/service;1"] michael@0: .getService() michael@0: .wrappedJSObject michael@0: .healthReporter; michael@0: ok(reporter, "Health Reporter available."); michael@0: reporter.onInit().then(function onInit() { michael@0: let provider = reporter.getProvider("org.mozilla.searches"); michael@0: let m = provider.getMeasurement("counts", 3); michael@0: michael@0: m.getValues().then(function onData(data) { michael@0: let now = new Date(); michael@0: let oldCount = 0; michael@0: michael@0: // Find the right bucket for the "Foo" engine. michael@0: let engine = Services.search.getEngineByName("Foo"); michael@0: let field = (engine.identifier || "other-Foo") + ".searchbar"; michael@0: michael@0: if (data.days.hasDay(now)) { michael@0: let day = data.days.getDay(now); michael@0: if (day.has(field)) { michael@0: oldCount = day.get(field); michael@0: } michael@0: } michael@0: michael@0: // Now perform a search and ensure the count is incremented. michael@0: let tab = gBrowser.addTab(); michael@0: gBrowser.selectedTab = tab; michael@0: let searchBar = BrowserSearch.searchBar; michael@0: michael@0: searchBar.value = "firefox health report"; michael@0: searchBar.focus(); michael@0: michael@0: function afterSearch() { michael@0: searchBar.value = ""; michael@0: gBrowser.removeTab(tab); michael@0: michael@0: m.getValues().then(function onData(data) { michael@0: ok(data.days.hasDay(now), "Have data for today."); michael@0: let day = data.days.getDay(now); michael@0: michael@0: is(day.get(field), oldCount + 1, "Performing a search increments FHR count by 1."); michael@0: michael@0: let engine = Services.search.getEngineByName("Foo"); michael@0: Services.search.removeEngine(engine); michael@0: }); michael@0: } michael@0: michael@0: EventUtils.synthesizeKey("VK_RETURN", {}); michael@0: executeSoon(() => executeSoon(afterSearch)); michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: function observer(subject, topic, data) { michael@0: switch (data) { michael@0: case "engine-added": michael@0: let engine = Services.search.getEngineByName("Foo"); michael@0: ok(engine, "Engine was added."); michael@0: Services.search.currentEngine = engine; michael@0: break; michael@0: michael@0: case "engine-current": michael@0: is(Services.search.currentEngine.name, "Foo", "Current engine is Foo"); michael@0: testFHR(); michael@0: break; michael@0: michael@0: case "engine-removed": michael@0: Services.obs.removeObserver(observer, "browser-search-engine-modified"); michael@0: finish(); michael@0: break; michael@0: } michael@0: } michael@0: michael@0: Services.obs.addObserver(observer, "browser-search-engine-modified", false); michael@0: Services.search.addEngine("http://mochi.test:8888/browser/browser/components/search/test/testEngine.xml", michael@0: Ci.nsISearchEngine.DATA_XML, michael@0: "data:image/x-icon,%00", michael@0: false); michael@0: michael@0: } michael@0: