browser/base/content/test/general/browser_aboutHealthReport.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/browser/base/content/test/general/browser_aboutHealthReport.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,105 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 + * http://creativecommons.org/publicdomain/zero/1.0/
     1.6 + */
     1.7 +
     1.8 +XPCOMUtils.defineLazyModuleGetter(this, "Promise",
     1.9 +  "resource://gre/modules/Promise.jsm");
    1.10 +XPCOMUtils.defineLazyModuleGetter(this, "Task",
    1.11 +  "resource://gre/modules/Task.jsm");
    1.12 +
    1.13 +registerCleanupFunction(function() {
    1.14 +  // Ensure we don't pollute prefs for next tests.
    1.15 +  try {
    1.16 +    Services.prefs.clearUserPref("datareporting.healthreport.about.reportUrl");
    1.17 +    let policy = Cc["@mozilla.org/datareporting/service;1"]
    1.18 +                 .getService(Ci.nsISupports)
    1.19 +                 .wrappedJSObject
    1.20 +                 .policy;
    1.21 +        policy.recordHealthReportUploadEnabled(true,
    1.22 +                                           "Resetting after tests.");
    1.23 +  } catch (ex) {}
    1.24 +});
    1.25 +
    1.26 +let gTests = [
    1.27 +
    1.28 +{
    1.29 +  desc: "Test the remote commands",
    1.30 +  setup: function ()
    1.31 +  {
    1.32 +    Services.prefs.setCharPref("datareporting.healthreport.about.reportUrl",
    1.33 +                               "https://example.com/browser/browser/base/content/test/general/healthreport_testRemoteCommands.html");
    1.34 +  },
    1.35 +  run: function ()
    1.36 +  {
    1.37 +    let deferred = Promise.defer();
    1.38 +
    1.39 +    let policy = Cc["@mozilla.org/datareporting/service;1"]
    1.40 +                 .getService(Ci.nsISupports)
    1.41 +                 .wrappedJSObject
    1.42 +                 .policy;
    1.43 +
    1.44 +    let results = 0;
    1.45 +    try {
    1.46 +      let win = gBrowser.contentWindow;
    1.47 +      win.addEventListener("message", function testLoad(e) {
    1.48 +        if (e.data.type == "testResult") {
    1.49 +          ok(e.data.pass, e.data.info);
    1.50 +          results++;
    1.51 +        }
    1.52 +        else if (e.data.type == "testsComplete") {
    1.53 +          is(results, e.data.count, "Checking number of results received matches the number of tests that should have run");
    1.54 +          win.removeEventListener("message", testLoad, false, true);
    1.55 +          deferred.resolve();
    1.56 +        }
    1.57 +
    1.58 +      }, false, true);
    1.59 +
    1.60 +    } catch(e) {
    1.61 +      ok(false, "Failed to get all commands");
    1.62 +      deferred.reject();
    1.63 +    }
    1.64 +    return deferred.promise;
    1.65 +  }
    1.66 +},
    1.67 +
    1.68 +
    1.69 +]; // gTests
    1.70 +
    1.71 +function test()
    1.72 +{
    1.73 +  waitForExplicitFinish();
    1.74 +
    1.75 +  // xxxmpc leaving this here until we resolve bug 854038 and bug 854060
    1.76 +  requestLongerTimeout(10);
    1.77 +
    1.78 +  Task.spawn(function () {
    1.79 +    for (let test of gTests) {
    1.80 +      info(test.desc);
    1.81 +      test.setup();
    1.82 +
    1.83 +      yield promiseNewTabLoadEvent("about:healthreport");
    1.84 +
    1.85 +      yield test.run();
    1.86 +
    1.87 +      gBrowser.removeCurrentTab();
    1.88 +    }
    1.89 +
    1.90 +    finish();
    1.91 +  });
    1.92 +}
    1.93 +
    1.94 +function promiseNewTabLoadEvent(aUrl, aEventType="load")
    1.95 +{
    1.96 +  let deferred = Promise.defer();
    1.97 +  let tab = gBrowser.selectedTab = gBrowser.addTab(aUrl);
    1.98 +  tab.linkedBrowser.addEventListener(aEventType, function load(event) {
    1.99 +    tab.linkedBrowser.removeEventListener(aEventType, load, true);
   1.100 +    let iframe = tab.linkedBrowser.contentDocument.getElementById("remote-report");
   1.101 +      iframe.addEventListener("load", function frameLoad(e) {
   1.102 +        iframe.removeEventListener("load", frameLoad, false);
   1.103 +        deferred.resolve();
   1.104 +      }, false);
   1.105 +    }, true);
   1.106 +  return deferred.promise;
   1.107 +}
   1.108 +

mercurial