mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-05 16:46:26 +00:00
113 lines
4.1 KiB
XML
113 lines
4.1 KiB
XML
<?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="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() {
|
|
if (!SimpleTest.testPluginIsOOP()) {
|
|
ok(true, "Skipping this test when test plugin is not OOP.");
|
|
SimpleTest.finish();
|
|
return;
|
|
}
|
|
|
|
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>
|
|
|