summaryrefslogtreecommitdiffstats
path: root/dom/plugins/test/mochitest/test_crash_notify_no_report.xul
diff options
context:
space:
mode:
Diffstat (limited to 'dom/plugins/test/mochitest/test_crash_notify_no_report.xul')
-rw-r--r--dom/plugins/test/mochitest/test_crash_notify_no_report.xul116
1 files changed, 116 insertions, 0 deletions
diff --git a/dom/plugins/test/mochitest/test_crash_notify_no_report.xul b/dom/plugins/test/mochitest/test_crash_notify_no_report.xul
new file mode 100644
index 000000000..a1344bf0f
--- /dev/null
+++ b/dom/plugins/test/mochitest/test_crash_notify_no_report.xul
@@ -0,0 +1,116 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
+ type="text/css"?>
+<window title="Basic Plugin Tests"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+ <script type="application/javascript"
+ src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
+ <script type="application/javascript" src="plugin-utils.js"></script>
+ <script type="application/javascript">
+ setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED);
+ </script>
+<body xmlns="http://www.w3.org/1999/xhtml" onload="runTests()">
+<embed id="plugin1" type="application/x-test" width="200" height="200"></embed>
+</body>
+<script class="testbody" type="application/javascript">
+<![CDATA[
+SimpleTest.waitForExplicitFinish();
+
+var success = false;
+
+var observerFired = false;
+
+var testObserver = {
+ observe: function(subject, topic, data) {
+ observerFired = true;
+ ok(true, "Observer fired");
+ is(topic, "plugin-crashed", "Checking correct topic");
+ is(data, null, "Checking null data");
+ ok((subject instanceof Components.interfaces.nsIPropertyBag2), "got Propbag");
+ ok((subject instanceof Components.interfaces.nsIWritablePropertyBag2),
+"got writable Propbag");
+
+ var id = subject.getPropertyAsAString("pluginDumpID");
+ isnot(id, "", "got a non-empty crash id");
+ let directoryService =
+ Components.classes["@mozilla.org/file/directory_service;1"].
+ getService(Components.interfaces.nsIProperties);
+ let pendingD = directoryService.get("UAppData",
+ Components.interfaces.nsIFile);
+ pendingD.append("Crash Reports");
+ pendingD.append("pending");
+ let dumpFile = pendingD.clone();
+ dumpFile.append(id + ".dmp");
+ ok(dumpFile.exists(), "minidump exists");
+ let extraFile = pendingD.clone();
+ extraFile.append(id + ".extra");
+ ok(extraFile.exists(), "extra file exists");
+ // cleanup, to be nice
+ dumpFile.remove(false);
+ extraFile.remove(false);
+ },
+
+ QueryInterface: function(iid) {
+ if (iid.equals(Components.interfaces.nsIObserver) ||
+ iid.equals(Components.interfaces.nsISupportsWeakReference) ||
+ iid.equals(Components.interfaces.nsISupports))
+ return this;
+ throw Components.results.NS_NOINTERFACE;
+ }
+};
+
+
+function onPluginCrashed(aEvent) {
+ ok(true, "Plugin crashed notification received");
+ ok(observerFired, "Observer should have fired first");
+ is(aEvent.type, "PluginCrashed", "event is correct type");
+
+ var pluginElement = document.getElementById("plugin1");
+ is (pluginElement, aEvent.target, "Plugin crashed event target is plugin element");
+
+ ok(aEvent instanceof PluginCrashedEvent,
+ "plugin crashed event has the right interface");
+
+ is(typeof aEvent.pluginName, "string", "pluginName is correct type");
+ is(aEvent.pluginName, "Test Plug-in");
+ // The app itself may or may not have decided to submit the report, so
+ // allow either true or false here.
+ ok("submittedCrashReport" in aEvent, "submittedCrashReport is a property of event");
+ is(typeof aEvent.submittedCrashReport, "boolean", "submittedCrashReport is correct type");
+
+ var os = Components.classes["@mozilla.org/observer-service;1"].
+ getService(Components.interfaces.nsIObserverService);
+ os.removeObserver(testObserver, "plugin-crashed");
+
+ // re-set MOZ_CRASHREPORTER_NO_REPORT
+ let env = Components.classes["@mozilla.org/process/environment;1"]
+ .getService(Components.interfaces.nsIEnvironment);
+ env.set("MOZ_CRASHREPORTER_NO_REPORT", "1");
+ SimpleTest.finish();
+}
+
+function runTests() {
+ // the test harness will have set MOZ_CRASHREPORTER_NO_REPORT,
+ // ensure that we can change the setting and have our minidumps
+ // wind up in Crash Reports/pending
+ let env = Components.classes["@mozilla.org/process/environment;1"]
+ .getService(Components.interfaces.nsIEnvironment);
+ env.set("MOZ_CRASHREPORTER_NO_REPORT", "");
+
+ var os = Components.classes["@mozilla.org/observer-service;1"].
+ getService(Components.interfaces.nsIObserverService);
+ os.addObserver(testObserver, "plugin-crashed", true);
+
+ document.addEventListener("PluginCrashed", onPluginCrashed, false);
+
+ var pluginElement = document.getElementById("plugin1");
+ try {
+ pluginElement.crash();
+ } catch (e) {
+ }
+}
+]]>
+</script>
+</window>
+