diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /browser/base/content/test/general/browser_aboutHealthReport.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'browser/base/content/test/general/browser_aboutHealthReport.js')
-rw-r--r-- | browser/base/content/test/general/browser_aboutHealthReport.js | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_aboutHealthReport.js b/browser/base/content/test/general/browser_aboutHealthReport.js new file mode 100644 index 000000000..0be184fb8 --- /dev/null +++ b/browser/base/content/test/general/browser_aboutHealthReport.js @@ -0,0 +1,139 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +XPCOMUtils.defineLazyModuleGetter(this, "Promise", + "resource://gre/modules/Promise.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "Task", + "resource://gre/modules/Task.jsm"); + +const CHROME_BASE = "chrome://mochitests/content/browser/browser/base/content/test/general/"; +const HTTPS_BASE = "https://example.com/browser/browser/base/content/test/general/"; + +const TELEMETRY_LOG_PREF = "toolkit.telemetry.log.level"; +const telemetryOriginalLogPref = Preferences.get(TELEMETRY_LOG_PREF, null); + +const originalReportUrl = Services.prefs.getCharPref("datareporting.healthreport.about.reportUrl"); + +registerCleanupFunction(function() { + // Ensure we don't pollute prefs for next tests. + if (telemetryOriginalLogPref) { + Preferences.set(TELEMETRY_LOG_PREF, telemetryOriginalLogPref); + } else { + Preferences.reset(TELEMETRY_LOG_PREF); + } + + try { + Services.prefs.setCharPref("datareporting.healthreport.about.reportUrl", originalReportUrl); + Services.prefs.setBoolPref("datareporting.healthreport.uploadEnabled", true); + } catch (ex) {} +}); + +function fakeTelemetryNow(...args) { + let date = new Date(...args); + let scope = {}; + const modules = [ + Cu.import("resource://gre/modules/TelemetrySession.jsm", scope), + Cu.import("resource://gre/modules/TelemetryEnvironment.jsm", scope), + Cu.import("resource://gre/modules/TelemetryController.jsm", scope), + ]; + + for (let m of modules) { + m.Policy.now = () => new Date(date); + } + + return date; +} + +function* setupPingArchive() { + let scope = {}; + Cu.import("resource://gre/modules/TelemetryController.jsm", scope); + Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Ci.mozIJSSubScriptLoader) + .loadSubScript(CHROME_BASE + "healthreport_pingData.js", scope); + + for (let p of scope.TEST_PINGS) { + fakeTelemetryNow(p.date); + p.id = yield scope.TelemetryController.submitExternalPing(p.type, p.payload); + } +} + +var gTests = [ + +{ + desc: "Test the remote commands", + setup: Task.async(function*() + { + Preferences.set(TELEMETRY_LOG_PREF, "Trace"); + yield setupPingArchive(); + Preferences.set("datareporting.healthreport.about.reportUrl", + HTTPS_BASE + "healthreport_testRemoteCommands.html"); + }), + run: function (iframe) + { + let deferred = Promise.defer(); + let results = 0; + try { + iframe.contentWindow.addEventListener("FirefoxHealthReportTestResponse", function evtHandler(event) { + let data = event.detail.data; + if (data.type == "testResult") { + ok(data.pass, data.info); + results++; + } + else if (data.type == "testsComplete") { + is(results, data.count, "Checking number of results received matches the number of tests that should have run"); + iframe.contentWindow.removeEventListener("FirefoxHealthReportTestResponse", evtHandler, true); + deferred.resolve(); + } + }, true); + + } catch (e) { + ok(false, "Failed to get all commands"); + deferred.reject(); + } + return deferred.promise; + } +}, + +]; // gTests + +function test() +{ + waitForExplicitFinish(); + + // xxxmpc leaving this here until we resolve bug 854038 and bug 854060 + requestLongerTimeout(10); + + Task.spawn(function* () { + for (let testCase of gTests) { + info(testCase.desc); + yield testCase.setup(); + + let iframe = yield promiseNewTabLoadEvent("about:healthreport"); + + yield testCase.run(iframe); + + gBrowser.removeCurrentTab(); + } + + finish(); + }); +} + +function promiseNewTabLoadEvent(aUrl, aEventType="load") +{ + let deferred = Promise.defer(); + let tab = gBrowser.selectedTab = gBrowser.addTab(aUrl); + tab.linkedBrowser.addEventListener(aEventType, function load(event) { + tab.linkedBrowser.removeEventListener(aEventType, load, true); + let iframe = tab.linkedBrowser.contentDocument.getElementById("remote-report"); + iframe.addEventListener("load", function frameLoad(e) { + if (iframe.contentWindow.location.href == "about:blank" || + e.target != iframe) { + return; + } + iframe.removeEventListener("load", frameLoad, false); + deferred.resolve(iframe); + }, false); + }, true); + return deferred.promise; +} |