/js/jetpack/tests/test_jetpack_crash.xul

http://github.com/zpao/v8monkey · Unknown · 82 lines · 69 code · 13 blank · 0 comment · 0 complexity · 9d29b2f3d09c9946d5af4ad42962a03f MD5 · raw file

  1. <?xml version="1.0"?>
  2. <?xml-stylesheet href="chrome://global/skin/" type="text/css" ?>
  3. <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
  4. type="text/css" ?>
  5. <window title="Jetpack Crash Test"
  6. xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  7. <script type="application/javascript"
  8. src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
  9. <description id="remoteScript">
  10. <![CDATA[
  11. registerReceiver("testCTypes", function(name, libfile) {
  12. var library = ctypes.open(libfile);
  13. var zero = new ctypes.intptr_t(8);
  14. _noteIntentionalCrash();
  15. var badptr = ctypes.cast(zero, ctypes.PointerType(ctypes.int32_t));
  16. sendMessage("testCTypes:response", badptr.contents); // should crash here!
  17. });
  18. ]]>
  19. </description>
  20. <script class="testbody" type="application/javascript">
  21. <![CDATA[
  22. Components.utils.import("resource://gre/modules/ctypes.jsm");
  23. const libURL = "chrome://mochitests/content/chrome/libraries/" +
  24. ctypes.libraryName("jsctypes-test");
  25. SimpleTest.waitForExplicitFinish();
  26. var jp = Components.classes["@mozilla.org/jetpack/service;1"].
  27. getService(Components.interfaces.nsIJetpackService).
  28. createJetpack();
  29. jp.registerReceiver("core:exception", function(msgName, e) {
  30. ok(false, "Received exception from remote code: " + uneval(e));
  31. });
  32. jp.registerReceiver("testCTypes:response", function(msgName, v) {
  33. ok(false, "Should not have received testCTypes response!");
  34. jp.destroy();
  35. jp = null;
  36. SimpleTest.finish();
  37. });
  38. jp.registerReceiver("core:process-error", function(msgName, e) {
  39. ok(true, "Received process-error notification.");
  40. if ('nsICrashReporter' in Components.interfaces)
  41. ok(e.dumpID, "Process error has a dumpID");
  42. jp.destroy();
  43. jp = null;
  44. SimpleTest.executeSoon(SimpleTest.finish);
  45. });
  46. var remoteScript = document.getElementById('remoteScript').textContent;
  47. jp.evalScript(remoteScript);
  48. var downloadObserver = {
  49. onDownloadComplete: function(downloader, request, cx, status, file) {
  50. Components.utils.reportError("download status: " + status);
  51. try {
  52. file.permission = 0700;
  53. }
  54. catch (e) {
  55. Components.utils.reportError(e);
  56. }
  57. jp.sendMessage('testCTypes', file.path);
  58. }
  59. };
  60. var downloader = Components.classes["@mozilla.org/network/downloader;1"].
  61. createInstance(Components.interfaces.nsIDownloader);
  62. downloader.init(downloadObserver, null);
  63. var channel = Components.classes["@mozilla.org/network/io-service;1"].
  64. getService(Components.interfaces.nsIIOService).
  65. newChannel(libURL, null, null);
  66. channel.asyncOpen(downloader, null);
  67. ]]>
  68. </script>
  69. </window>