<?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>