michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: XPCOMUtils.defineLazyModuleGetter(this, "Promise", michael@0: "resource://gre/modules/Promise.jsm"); michael@0: XPCOMUtils.defineLazyModuleGetter(this, "Task", michael@0: "resource://gre/modules/Task.jsm"); michael@0: michael@0: registerCleanupFunction(function() { michael@0: // Ensure we don't pollute prefs for next tests. michael@0: try { michael@0: Services.prefs.clearUserPref("datareporting.healthreport.about.reportUrl"); michael@0: let policy = Cc["@mozilla.org/datareporting/service;1"] michael@0: .getService(Ci.nsISupports) michael@0: .wrappedJSObject michael@0: .policy; michael@0: policy.recordHealthReportUploadEnabled(true, michael@0: "Resetting after tests."); michael@0: } catch (ex) {} michael@0: }); michael@0: michael@0: let gTests = [ michael@0: michael@0: { michael@0: desc: "Test the remote commands", michael@0: setup: function () michael@0: { michael@0: Services.prefs.setCharPref("datareporting.healthreport.about.reportUrl", michael@0: "https://example.com/browser/browser/base/content/test/general/healthreport_testRemoteCommands.html"); michael@0: }, michael@0: run: function () michael@0: { michael@0: let deferred = Promise.defer(); michael@0: michael@0: let policy = Cc["@mozilla.org/datareporting/service;1"] michael@0: .getService(Ci.nsISupports) michael@0: .wrappedJSObject michael@0: .policy; michael@0: michael@0: let results = 0; michael@0: try { michael@0: let win = gBrowser.contentWindow; michael@0: win.addEventListener("message", function testLoad(e) { michael@0: if (e.data.type == "testResult") { michael@0: ok(e.data.pass, e.data.info); michael@0: results++; michael@0: } michael@0: else if (e.data.type == "testsComplete") { michael@0: is(results, e.data.count, "Checking number of results received matches the number of tests that should have run"); michael@0: win.removeEventListener("message", testLoad, false, true); michael@0: deferred.resolve(); michael@0: } michael@0: michael@0: }, false, true); michael@0: michael@0: } catch(e) { michael@0: ok(false, "Failed to get all commands"); michael@0: deferred.reject(); michael@0: } michael@0: return deferred.promise; michael@0: } michael@0: }, michael@0: michael@0: michael@0: ]; // gTests michael@0: michael@0: function test() michael@0: { michael@0: waitForExplicitFinish(); michael@0: michael@0: // xxxmpc leaving this here until we resolve bug 854038 and bug 854060 michael@0: requestLongerTimeout(10); michael@0: michael@0: Task.spawn(function () { michael@0: for (let test of gTests) { michael@0: info(test.desc); michael@0: test.setup(); michael@0: michael@0: yield promiseNewTabLoadEvent("about:healthreport"); michael@0: michael@0: yield test.run(); michael@0: michael@0: gBrowser.removeCurrentTab(); michael@0: } michael@0: michael@0: finish(); michael@0: }); michael@0: } michael@0: michael@0: function promiseNewTabLoadEvent(aUrl, aEventType="load") michael@0: { michael@0: let deferred = Promise.defer(); michael@0: let tab = gBrowser.selectedTab = gBrowser.addTab(aUrl); michael@0: tab.linkedBrowser.addEventListener(aEventType, function load(event) { michael@0: tab.linkedBrowser.removeEventListener(aEventType, load, true); michael@0: let iframe = tab.linkedBrowser.contentDocument.getElementById("remote-report"); michael@0: iframe.addEventListener("load", function frameLoad(e) { michael@0: iframe.removeEventListener("load", frameLoad, false); michael@0: deferred.resolve(); michael@0: }, false); michael@0: }, true); michael@0: return deferred.promise; michael@0: } michael@0: