1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/components/search/test/browser_healthreport.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,103 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +"use strict"; 1.8 + 1.9 +function test() { 1.10 + requestLongerTimeout(2); 1.11 + waitForExplicitFinish(); 1.12 + 1.13 + try { 1.14 + let cm = Components.classes["@mozilla.org/categorymanager;1"] 1.15 + .getService(Components.interfaces.nsICategoryManager); 1.16 + cm.getCategoryEntry("healthreport-js-provider-default", "SearchesProvider"); 1.17 + } catch (ex) { 1.18 + // Health Report disabled, or no SearchesProvider. 1.19 + // We need a test or else we'll be marked as failure. 1.20 + ok(true, "Firefox Health Report is not enabled."); 1.21 + finish(); 1.22 + return; 1.23 + } 1.24 + 1.25 + function testFHR() { 1.26 + let reporter = Components.classes["@mozilla.org/datareporting/service;1"] 1.27 + .getService() 1.28 + .wrappedJSObject 1.29 + .healthReporter; 1.30 + ok(reporter, "Health Reporter available."); 1.31 + reporter.onInit().then(function onInit() { 1.32 + let provider = reporter.getProvider("org.mozilla.searches"); 1.33 + let m = provider.getMeasurement("counts", 3); 1.34 + 1.35 + m.getValues().then(function onData(data) { 1.36 + let now = new Date(); 1.37 + let oldCount = 0; 1.38 + 1.39 + // Find the right bucket for the "Foo" engine. 1.40 + let engine = Services.search.getEngineByName("Foo"); 1.41 + let field = (engine.identifier || "other-Foo") + ".searchbar"; 1.42 + 1.43 + if (data.days.hasDay(now)) { 1.44 + let day = data.days.getDay(now); 1.45 + if (day.has(field)) { 1.46 + oldCount = day.get(field); 1.47 + } 1.48 + } 1.49 + 1.50 + // Now perform a search and ensure the count is incremented. 1.51 + let tab = gBrowser.addTab(); 1.52 + gBrowser.selectedTab = tab; 1.53 + let searchBar = BrowserSearch.searchBar; 1.54 + 1.55 + searchBar.value = "firefox health report"; 1.56 + searchBar.focus(); 1.57 + 1.58 + function afterSearch() { 1.59 + searchBar.value = ""; 1.60 + gBrowser.removeTab(tab); 1.61 + 1.62 + m.getValues().then(function onData(data) { 1.63 + ok(data.days.hasDay(now), "Have data for today."); 1.64 + let day = data.days.getDay(now); 1.65 + 1.66 + is(day.get(field), oldCount + 1, "Performing a search increments FHR count by 1."); 1.67 + 1.68 + let engine = Services.search.getEngineByName("Foo"); 1.69 + Services.search.removeEngine(engine); 1.70 + }); 1.71 + } 1.72 + 1.73 + EventUtils.synthesizeKey("VK_RETURN", {}); 1.74 + executeSoon(() => executeSoon(afterSearch)); 1.75 + }); 1.76 + }); 1.77 + } 1.78 + 1.79 + function observer(subject, topic, data) { 1.80 + switch (data) { 1.81 + case "engine-added": 1.82 + let engine = Services.search.getEngineByName("Foo"); 1.83 + ok(engine, "Engine was added."); 1.84 + Services.search.currentEngine = engine; 1.85 + break; 1.86 + 1.87 + case "engine-current": 1.88 + is(Services.search.currentEngine.name, "Foo", "Current engine is Foo"); 1.89 + testFHR(); 1.90 + break; 1.91 + 1.92 + case "engine-removed": 1.93 + Services.obs.removeObserver(observer, "browser-search-engine-modified"); 1.94 + finish(); 1.95 + break; 1.96 + } 1.97 + } 1.98 + 1.99 + Services.obs.addObserver(observer, "browser-search-engine-modified", false); 1.100 + Services.search.addEngine("http://mochi.test:8888/browser/browser/components/search/test/testEngine.xml", 1.101 + Ci.nsISearchEngine.DATA_XML, 1.102 + "data:image/x-icon,%00", 1.103 + false); 1.104 + 1.105 +} 1.106 +