diff options
Diffstat (limited to 'dom/plugins/test/mochitest/test_crash_notify.xul')
-rw-r--r-- | dom/plugins/test/mochitest/test_crash_notify.xul | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/dom/plugins/test/mochitest/test_crash_notify.xul b/dom/plugins/test/mochitest/test_crash_notify.xul new file mode 100644 index 000000000..fac95b07d --- /dev/null +++ b/dom/plugins/test/mochitest/test_crash_notify.xul @@ -0,0 +1,106 @@ +<?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 profD = directoryService.get("ProfD", Components.interfaces.nsIFile); + profD.append("minidumps"); + let dumpFile = profD.clone(); + dumpFile.append(id + ".dmp"); + ok(dumpFile.exists(), "minidump exists"); + let extraFile = profD.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.pluginDumpID, "string", "pluginDumpID is correct type"); + isnot(aEvent.pluginDumpID, "", "got a non-empty dump ID"); + is(typeof aEvent.pluginName, "string", "pluginName is correct type"); + is(aEvent.pluginName, "Test Plug-in", "got correct plugin name"); + is(typeof aEvent.pluginFilename, "string", "pluginFilename is correct type"); + isnot(aEvent.pluginFilename, "", "got a non-empty filename"); + // 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"); + + SimpleTest.finish(); +} + +function runTests() { + 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> + |