2010-01-13 08:42:41 -08:00
|
|
|
<?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:html="http://www.w3.org/1999/xhtml"
|
|
|
|
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
|
|
|
<title>Plugin Crash Notification Test</title>
|
|
|
|
<script type="application/javascript"
|
|
|
|
src="chrome://mochikit/content/MochiKit/packed.js"></script>
|
|
|
|
<script type="application/javascript"
|
|
|
|
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
|
|
|
|
<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;
|
|
|
|
|
2010-02-09 17:05:31 -08:00
|
|
|
var observerFired = false;
|
|
|
|
|
|
|
|
var testObserver = {
|
|
|
|
observe: function(subject, topic, data) {
|
|
|
|
observerFired = true;
|
|
|
|
ok(true, "Observer fired");
|
|
|
|
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
|
|
|
|
is(topic, "plugin-crashed", "Checking correct topic");
|
|
|
|
is(data, null, "Checking null data");
|
|
|
|
ok((subject instanceof Components.interfaces.nsIPropertyBag2), "got Propbag");
|
2010-04-08 00:45:00 -07:00
|
|
|
ok((subject instanceof Components.interfaces.nsIWritablePropertyBag2), "got writable Propbag");
|
2010-02-09 17:05:31 -08:00
|
|
|
|
2010-03-24 14:22:04 -07:00
|
|
|
var id = subject.getPropertyAsAString("pluginDumpID");
|
2010-02-09 17:05:31 -08:00
|
|
|
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) {
|
|
|
|
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
|
|
|
|
if (iid.equals(Components.interfaces.nsIObserver) ||
|
|
|
|
iid.equals(Components.interfaces.nsISupportsWeakReference) ||
|
|
|
|
iid.equals(Components.interfaces.nsISupports))
|
|
|
|
return this;
|
|
|
|
throw Components.results.NS_NOINTERFACE;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2010-01-13 08:42:41 -08:00
|
|
|
function onPluginCrashed(aEvent) {
|
|
|
|
ok(true, "Plugin crashed notification received");
|
2010-02-09 17:05:31 -08:00
|
|
|
ok(observerFired, "Observer should have fired first");
|
|
|
|
is(aEvent.type, "PluginCrashed", "event is correct type");
|
2010-01-13 08:42:41 -08:00
|
|
|
|
|
|
|
var pluginElement = document.getElementById("plugin1");
|
|
|
|
is (pluginElement, aEvent.target, "Plugin crashed event target is plugin element");
|
|
|
|
|
2010-02-09 17:05:31 -08:00
|
|
|
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
|
|
|
|
|
|
|
|
ok(aEvent instanceof Components.interfaces.nsIDOMDataContainerEvent,
|
|
|
|
"plugin crashed event has the right interface");
|
2010-04-08 00:45:00 -07:00
|
|
|
|
|
|
|
var minidumpID = aEvent.getData("minidumpID");
|
|
|
|
isnot(minidumpID, "", "got a non-empty dump ID");
|
2010-02-09 17:05:31 -08:00
|
|
|
var pluginName = aEvent.getData("pluginName");
|
2010-04-08 00:45:00 -07:00
|
|
|
is(pluginName, "Test Plug-in", "got correct plugin name");
|
|
|
|
var pluginFilename = aEvent.getData("pluginFilename");
|
|
|
|
isnot(pluginFilename, "", "got a non-empty filename");
|
2010-02-09 17:05:31 -08:00
|
|
|
var didReport = aEvent.getData("submittedCrashReport");
|
|
|
|
// The app itself may or may not have decided to submit the report, so
|
|
|
|
// allow either true or false here.
|
|
|
|
ok((didReport == true || didReport == false), "event said crash report was submitted");
|
|
|
|
|
|
|
|
var os = Components.classes["@mozilla.org/observer-service;1"].
|
|
|
|
getService(Components.interfaces.nsIObserverService);
|
|
|
|
os.removeObserver(testObserver, "plugin-crashed");
|
|
|
|
|
2010-01-13 08:42:41 -08:00
|
|
|
SimpleTest.finish();
|
|
|
|
}
|
|
|
|
|
|
|
|
function runTests() {
|
2010-09-27 13:42:43 -07:00
|
|
|
if (!SimpleTest.testPluginIsOOP()) {
|
|
|
|
ok(true, "Skipping this test when test plugin is not OOP.");
|
2010-01-13 08:42:41 -08:00
|
|
|
SimpleTest.finish();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2010-02-09 17:05:31 -08:00
|
|
|
var os = Components.classes["@mozilla.org/observer-service;1"].
|
|
|
|
getService(Components.interfaces.nsIObserverService);
|
|
|
|
os.addObserver(testObserver, "plugin-crashed", true);
|
|
|
|
|
2010-01-13 08:42:41 -08:00
|
|
|
document.addEventListener("PluginCrashed", onPluginCrashed, false);
|
|
|
|
|
|
|
|
var pluginElement = document.getElementById("plugin1");
|
|
|
|
try {
|
|
|
|
pluginElement.crash();
|
|
|
|
} catch (e) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]]>
|
|
|
|
</script>
|
|
|
|
</window>
|
|
|
|
|