dom/plugins/test/mochitest/test_crash_submit.xul

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 <?xml version="1.0"?>
     2 <?xml-stylesheet href="chrome://global/skin" type="text/css"?>
     3 <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
     4                  type="text/css"?>
     5 <window title="Basic Plugin Tests"
     6   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
     7   <script type="application/javascript"
     8           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
     9   <script type="application/javascript"
    10           src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js" />
    11   <script type="application/javascript" src="utils.js"></script>
    12   <script type="application/javascript">
    13     setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED);
    14   </script>
    15 <body xmlns="http://www.w3.org/1999/xhtml" onload="runTests()">
    16 <embed id="plugin1" type="application/x-test" width="200" height="200"></embed>
    17 </body>
    18 <script class="testbody" type="application/javascript">
    19 <![CDATA[
    20 SimpleTest.waitForExplicitFinish();
    21 SimpleTest.ignoreAllUncaughtExceptions();
    23 Components.utils.import("resource://gre/modules/NetUtil.jsm");
    24 Components.utils.import("resource://gre/modules/Services.jsm");
    26 var crashReporter =
    27   Components.classes["@mozilla.org/toolkit/crash-reporter;1"]
    28     .getService(Components.interfaces.nsICrashReporter);
    29 var oldServerURL = crashReporter.serverURL;
    31 const SERVER_URL = "http://example.com/browser/toolkit/crashreporter/test/browser/crashreport.sjs";
    33 var testObserver = {
    34   observe: function(subject, topic, data) {
    35     if (data == "submitting") // not done yet
    36       return;
    37     is(data, "success", "report should have been submitted successfully");
    38     is(topic, "crash-report-status", "Checking correct topic");
    39     ok(subject instanceof Components.interfaces.nsIPropertyBag2,
    40        "Subject should be a property bag");
    41     ok(subject.hasKey("serverCrashID"), "Should have a server crash ID");
    42     let crashid = subject.getPropertyAsAString("serverCrashID");
    43     isnot(crashid, "", "Server crash ID should not be an empty string");
    45     // Verify the data. The SJS script will return the data that was POSTed
    46     let req = new XMLHttpRequest();
    47     req.open("GET", SERVER_URL + "?id=" + crashid, false);
    48     req.send(null);
    49     is(req.status, 200, "Server response should be 200 OK");
    50     let submitted = JSON.parse(req.responseText);
    51     ok(!("Throttleable" in submitted), "Submit request should not be Throttleable");
    52     is(submitted.ProcessType, "plugin", "Should specify ProcessType=plugin");
    54     // Cleanup
    55     // First remove our fake submitted report
    56     let file = Services.dirsvc.get("UAppData", Components.interfaces.nsILocalFile);
    57     file.append("Crash Reports");
    58     file.append("submitted");
    59     file.append(crashid + ".txt");
    60     file.remove(false);
    62     // Next unregister our observer
    63     var os = Components.classes["@mozilla.org/observer-service;1"].
    64              getService(Components.interfaces.nsIObserverService);
    65     os.removeObserver(testObserver, "crash-report-status");
    67     // Then re-set MOZ_CRASHREPORTER_NO_REPORT
    68     let env = Components.classes["@mozilla.org/process/environment;1"]
    69                         .getService(Components.interfaces.nsIEnvironment);
    70     env.set("MOZ_CRASHREPORTER_NO_REPORT", "1");
    72     // Finally re-set crashreporter URL
    73     crashReporter.serverURL = oldServerURL;
    74     SimpleTest.finish();
    75   },
    77   QueryInterface: function(iid) {
    78     if (iid.equals(Components.interfaces.nsIObserver) ||
    79         iid.equals(Components.interfaces.nsISupportsWeakReference) ||
    80         iid.equals(Components.interfaces.nsISupports))
    81       return this;
    82     throw Components.results.NS_NOINTERFACE;
    83   }
    84 };
    87 function onPluginCrashed(aEvent) {
    88   ok(true, "Plugin crashed notification received");
    89   is(aEvent.type, "PluginCrashed", "event is correct type");
    91   let submitButton = document.getAnonymousElementByAttribute(aEvent.target,
    92                                                              "class",
    93                                                              "submitButton");
    94   // try to submit this report
    95   sendMouseEvent({type:'click'}, submitButton, window);
    96 }
    98 function runTests() {
    99   if (!SimpleTest.testPluginIsOOP()) {
   100     todo(false, "Skipping this test when test plugin is not OOP.");
   101     SimpleTest.finish();
   102     return;
   103   }
   105   // the test harness will have set MOZ_CRASHREPORTER_NO_REPORT,
   106   // ensure that we can change the setting and have our minidumps
   107   // wind up in Crash Reports/pending
   108   let env = Components.classes["@mozilla.org/process/environment;1"]
   109                       .getService(Components.interfaces.nsIEnvironment);
   110   env.set("MOZ_CRASHREPORTER_NO_REPORT", "");
   112   // Override the crash reporter URL to send to our fake server
   113   crashReporter.serverURL = NetUtil.newURI(SERVER_URL);
   115   var os = Components.classes["@mozilla.org/observer-service;1"].
   116            getService(Components.interfaces.nsIObserverService);
   117   os.addObserver(testObserver, "crash-report-status", true);
   119   document.addEventListener("PluginCrashed", onPluginCrashed, false);
   121   var pluginElement = document.getElementById("plugin1");
   122   try {
   123     pluginElement.crash();
   124   } catch (e) {
   125   }
   126 }
   127 ]]>
   128 </script>
   129 </window>

mercurial