summaryrefslogtreecommitdiffstats
path: root/toolkit/crashreporter/test/unit_ipc
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/crashreporter/test/unit_ipc')
-rw-r--r--toolkit/crashreporter/test/unit_ipc/test_content_annotation.js33
-rw-r--r--toolkit/crashreporter/test/unit_ipc/test_content_exception_time_annotation.js21
-rw-r--r--toolkit/crashreporter/test/unit_ipc/test_content_large_annotation.js25
-rw-r--r--toolkit/crashreporter/test/unit_ipc/test_content_memory_list.js33
-rw-r--r--toolkit/crashreporter/test/unit_ipc/test_content_oom_annotation.js33
-rw-r--r--toolkit/crashreporter/test/unit_ipc/test_content_phc.js31
-rw-r--r--toolkit/crashreporter/test/unit_ipc/test_content_phc2.js34
-rw-r--r--toolkit/crashreporter/test/unit_ipc/test_content_phc3.js35
-rw-r--r--toolkit/crashreporter/test/unit_ipc/test_content_rust_panic.js23
-rw-r--r--toolkit/crashreporter/test/unit_ipc/test_content_rust_panic_multiline.js23
-rw-r--r--toolkit/crashreporter/test/unit_ipc/xpcshell-phc.ini11
-rw-r--r--toolkit/crashreporter/test/unit_ipc/xpcshell.ini17
12 files changed, 319 insertions, 0 deletions
diff --git a/toolkit/crashreporter/test/unit_ipc/test_content_annotation.js b/toolkit/crashreporter/test/unit_ipc/test_content_annotation.js
new file mode 100644
index 0000000000..badc15c27d
--- /dev/null
+++ b/toolkit/crashreporter/test/unit_ipc/test_content_annotation.js
@@ -0,0 +1,33 @@
+/* import-globals-from ../unit/head_crashreporter.js */
+load("../unit/head_crashreporter.js");
+
+add_task(async function run_test() {
+ if (!("@mozilla.org/toolkit/crash-reporter;1" in Cc)) {
+ dump(
+ "INFO | test_content_annotation.js | Can't test crashreporter in a non-libxul build.\n"
+ );
+ return;
+ }
+
+ // TelemetrySession setup will trigger the session annotation
+ let { TelemetryController } = ChromeUtils.importESModule(
+ "resource://gre/modules/TelemetryController.sys.mjs"
+ );
+ TelemetryController.testSetup();
+
+ // Try crashing with a runtime abort
+ await do_content_crash(
+ function () {
+ crashType = CrashTestUtils.CRASH_MOZ_CRASH;
+ crashReporter.annotateCrashReport("TestKey", "TestValue");
+ crashReporter.appendAppNotesToCrashReport("!!!foo!!!");
+ },
+ function (mdump, extra) {
+ Assert.equal(extra.TestKey, "TestValue");
+ Assert.ok("ProcessType" in extra);
+ Assert.ok("StartupTime" in extra);
+ Assert.ok("TelemetrySessionId" in extra);
+ Assert.notEqual(extra.Notes.indexOf("!!!foo!!!"), -1);
+ }
+ );
+});
diff --git a/toolkit/crashreporter/test/unit_ipc/test_content_exception_time_annotation.js b/toolkit/crashreporter/test/unit_ipc/test_content_exception_time_annotation.js
new file mode 100644
index 0000000000..95205a6017
--- /dev/null
+++ b/toolkit/crashreporter/test/unit_ipc/test_content_exception_time_annotation.js
@@ -0,0 +1,21 @@
+/* import-globals-from ../unit/head_crashreporter.js */
+load("../unit/head_crashreporter.js");
+
+add_task(async function run_test() {
+ if (!("@mozilla.org/toolkit/crash-reporter;1" in Cc)) {
+ dump(
+ "INFO | test_content_annotation.js | Can't test crashreporter in a non-libxul build.\n"
+ );
+ return;
+ }
+
+ // Try crashing with an OOM
+ await do_content_crash(
+ function () {
+ crashType = CrashTestUtils.CRASH_OOM;
+ },
+ function (mdump, extra) {
+ Assert.ok("OOMAllocationSize" in extra);
+ }
+ );
+});
diff --git a/toolkit/crashreporter/test/unit_ipc/test_content_large_annotation.js b/toolkit/crashreporter/test/unit_ipc/test_content_large_annotation.js
new file mode 100644
index 0000000000..92875ccd99
--- /dev/null
+++ b/toolkit/crashreporter/test/unit_ipc/test_content_large_annotation.js
@@ -0,0 +1,25 @@
+/* import-globals-from ../unit/head_crashreporter.js */
+load("../unit/head_crashreporter.js");
+
+add_task(async function run_test() {
+ if (!("@mozilla.org/toolkit/crash-reporter;1" in Cc)) {
+ dump(
+ "INFO | test_content_large_annotation.js | Can't test crashreporter in a non-libxul build.\n"
+ );
+ return;
+ }
+
+ // Try crashing with a runtime abort
+ await do_content_crash(
+ function () {
+ crashType = CrashTestUtils.CRASH_MOZ_CRASH;
+ crashReporter.annotateCrashReport("TestKey", "a".repeat(65536));
+ },
+ function (mdump, extra) {
+ Assert.ok(
+ extra.TestKey == "a".repeat(65536),
+ "The TestKey annotation matches the expected value"
+ );
+ }
+ );
+});
diff --git a/toolkit/crashreporter/test/unit_ipc/test_content_memory_list.js b/toolkit/crashreporter/test/unit_ipc/test_content_memory_list.js
new file mode 100644
index 0000000000..733d224160
--- /dev/null
+++ b/toolkit/crashreporter/test/unit_ipc/test_content_memory_list.js
@@ -0,0 +1,33 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/publicdomain/zero/1.0/
+
+/* import-globals-from ../unit/head_crashreporter.js */
+load("../unit/head_crashreporter.js");
+
+add_task(async function run_test() {
+ var is_win7_or_newer = false;
+ var ph = Cc["@mozilla.org/network/protocol;1?name=http"].getService(
+ Ci.nsIHttpProtocolHandler
+ );
+ var match = ph.userAgent.match(/Windows NT (\d+).(\d+)/);
+ if (
+ match &&
+ (parseInt(match[1]) > 6 ||
+ (parseInt(match[1]) == 6 && parseInt(match[2]) >= 1))
+ ) {
+ is_win7_or_newer = true;
+ }
+
+ await do_content_crash(null, function (mdump, extra) {
+ Assert.ok(mdump.exists());
+ Assert.ok(mdump.fileSize > 0);
+ if (is_win7_or_newer) {
+ Assert.ok(
+ CrashTestUtils.dumpHasStream(
+ mdump.path,
+ CrashTestUtils.MD_MEMORY_INFO_LIST_STREAM
+ )
+ );
+ }
+ });
+});
diff --git a/toolkit/crashreporter/test/unit_ipc/test_content_oom_annotation.js b/toolkit/crashreporter/test/unit_ipc/test_content_oom_annotation.js
new file mode 100644
index 0000000000..d17e01f5f5
--- /dev/null
+++ b/toolkit/crashreporter/test/unit_ipc/test_content_oom_annotation.js
@@ -0,0 +1,33 @@
+/* import-globals-from ../unit/head_crashreporter.js */
+load("../unit/head_crashreporter.js");
+
+add_task(async function run_test() {
+ if (!("@mozilla.org/toolkit/crash-reporter;1" in Cc)) {
+ dump(
+ "INFO | test_content_annotation.js | Can't test crashreporter in a non-libxul build.\n"
+ );
+ return;
+ }
+
+ // Try crashing with an OOM
+ await do_content_crash(
+ function () {
+ crashType = CrashTestUtils.CRASH_OOM;
+ },
+ function (mdump, extra) {
+ Assert.ok("TotalPhysicalMemory" in extra);
+ Assert.ok("AvailablePhysicalMemory" in extra);
+
+ if (mozinfo.os == "win") {
+ Assert.ok("SystemMemoryUsePercentage" in extra);
+ Assert.ok("TotalVirtualMemory" in extra);
+ Assert.ok("AvailableVirtualMemory" in extra);
+ Assert.ok("TotalPageFile" in extra);
+ Assert.ok("AvailablePageFile" in extra);
+ } else if (mozinfo.os == "linux") {
+ Assert.ok("TotalPageFile" in extra);
+ Assert.ok("AvailablePageFile" in extra);
+ }
+ }
+ );
+});
diff --git a/toolkit/crashreporter/test/unit_ipc/test_content_phc.js b/toolkit/crashreporter/test/unit_ipc/test_content_phc.js
new file mode 100644
index 0000000000..1b54448135
--- /dev/null
+++ b/toolkit/crashreporter/test/unit_ipc/test_content_phc.js
@@ -0,0 +1,31 @@
+/* import-globals-from ../unit/head_crashreporter.js */
+load("../unit/head_crashreporter.js");
+
+add_task(async function run_test() {
+ if (!("@mozilla.org/toolkit/crash-reporter;1" in Cc)) {
+ dump(
+ "INFO | test_content_phc.js | Can't test crashreporter in a non-libxul build.\n"
+ );
+ return;
+ }
+
+ await do_content_crash(
+ function () {
+ crashType = CrashTestUtils.CRASH_PHC_USE_AFTER_FREE;
+ },
+ function (mdump, extra) {
+ Assert.equal(extra.PHCKind, "FreedPage");
+
+ // This is a string holding a decimal address.
+ Assert.ok(/^\d+$/.test(extra.PHCBaseAddress));
+
+ // CRASH_PHC_USE_AFTER_FREE uses 32 for the size.
+ Assert.equal(extra.PHCUsableSize, 32);
+
+ // These are strings holding comma-separated lists of decimal addresses.
+ // Sometimes on Mac they have a single entry.
+ Assert.ok(/^(\d+,)*\d+$/.test(extra.PHCAllocStack));
+ Assert.ok(/^(\d+,)*\d+$/.test(extra.PHCFreeStack));
+ }
+ );
+});
diff --git a/toolkit/crashreporter/test/unit_ipc/test_content_phc2.js b/toolkit/crashreporter/test/unit_ipc/test_content_phc2.js
new file mode 100644
index 0000000000..0db9165b14
--- /dev/null
+++ b/toolkit/crashreporter/test/unit_ipc/test_content_phc2.js
@@ -0,0 +1,34 @@
+/* import-globals-from ../unit/head_crashreporter.js */
+load("../unit/head_crashreporter.js");
+
+add_task(async function run_test() {
+ if (!("@mozilla.org/toolkit/crash-reporter;1" in Cc)) {
+ dump(
+ "INFO | test_content_phc.js | Can't test crashreporter in a non-libxul build.\n"
+ );
+ return;
+ }
+
+ // For some unknown reason, having multiple do_content_crash() calls in a
+ // single test doesn't work. That explains why this test exists separately
+ // from test_content_phc.js.
+ await do_content_crash(
+ function () {
+ crashType = CrashTestUtils.CRASH_PHC_DOUBLE_FREE;
+ },
+ function (mdump, extra) {
+ Assert.equal(extra.PHCKind, "FreedPage");
+
+ // This is a string holding a decimal address.
+ Assert.ok(/^\d+$/.test(extra.PHCBaseAddress));
+
+ // CRASH_PHC_DOUBLE_FREE uses 64 for the size.
+ Assert.equal(extra.PHCUsableSize, 64);
+
+ // These are strings holding comma-separated lists of decimal addresses.
+ // Sometimes on Mac they have a single entry.
+ Assert.ok(/^(\d+,)*\d+$/.test(extra.PHCAllocStack));
+ Assert.ok(/^(\d+,)*\d+$/.test(extra.PHCFreeStack));
+ }
+ );
+});
diff --git a/toolkit/crashreporter/test/unit_ipc/test_content_phc3.js b/toolkit/crashreporter/test/unit_ipc/test_content_phc3.js
new file mode 100644
index 0000000000..ab6b81f834
--- /dev/null
+++ b/toolkit/crashreporter/test/unit_ipc/test_content_phc3.js
@@ -0,0 +1,35 @@
+/* import-globals-from ../unit/head_crashreporter.js */
+load("../unit/head_crashreporter.js");
+
+add_task(async function run_test() {
+ if (!("@mozilla.org/toolkit/crash-reporter;1" in Cc)) {
+ dump(
+ "INFO | test_content_phc.js | Can't test crashreporter in a non-libxul build.\n"
+ );
+ return;
+ }
+
+ // For some unknown reason, having multiple do_content_crash() calls in a
+ // single test doesn't work. That explains why this test exists separately
+ // from test_content_phc.js.
+ await do_content_crash(
+ function () {
+ crashType = CrashTestUtils.CRASH_PHC_BOUNDS_VIOLATION;
+ },
+ function (mdump, extra) {
+ Assert.equal(extra.PHCKind, "GuardPage");
+
+ // This is a string holding a decimal address.
+ Assert.ok(/^\d+$/.test(extra.PHCBaseAddress));
+
+ // CRASH_PHC_BOUNDS_VIOLATION uses 96 for the size.
+ Assert.equal(extra.PHCUsableSize, 96);
+
+ // This is a string holding a comma-separated list of decimal addresses.
+ // Sometimes on Mac it has a single entry.
+ Assert.ok(/^(\d+,)*\d+$/.test(extra.PHCAllocStack));
+
+ Assert.ok(!extra.hasOwnProperty("PHCFreeStack"));
+ }
+ );
+});
diff --git a/toolkit/crashreporter/test/unit_ipc/test_content_rust_panic.js b/toolkit/crashreporter/test/unit_ipc/test_content_rust_panic.js
new file mode 100644
index 0000000000..91b9b86bb6
--- /dev/null
+++ b/toolkit/crashreporter/test/unit_ipc/test_content_rust_panic.js
@@ -0,0 +1,23 @@
+/* import-globals-from ../unit/head_crashreporter.js */
+load("../unit/head_crashreporter.js");
+
+add_task(async function run_test() {
+ if (!("@mozilla.org/toolkit/crash-reporter;1" in Cc)) {
+ dump(
+ "INFO | test_content_rust_panic.js | Can't test crashreporter in a non-libxul build.\n"
+ );
+ return;
+ }
+
+ // Try crashing with a Rust panic
+ await do_triggered_content_crash(
+ function () {
+ Cc["@mozilla.org/xpcom/debug;1"]
+ .getService(Ci.nsIDebug2)
+ .rustPanic("OH NO");
+ },
+ function (mdump, extra) {
+ Assert.equal(extra.MozCrashReason, "OH NO");
+ }
+ );
+});
diff --git a/toolkit/crashreporter/test/unit_ipc/test_content_rust_panic_multiline.js b/toolkit/crashreporter/test/unit_ipc/test_content_rust_panic_multiline.js
new file mode 100644
index 0000000000..393afa42ab
--- /dev/null
+++ b/toolkit/crashreporter/test/unit_ipc/test_content_rust_panic_multiline.js
@@ -0,0 +1,23 @@
+/* import-globals-from ../unit/head_crashreporter.js */
+load("../unit/head_crashreporter.js");
+
+add_task(async function run_test() {
+ if (!("@mozilla.org/toolkit/crash-reporter;1" in Cc)) {
+ dump(
+ "INFO | test_content_rust_panic.js | Can't test crashreporter in a non-libxul build.\n"
+ );
+ return;
+ }
+
+ // Try crashing with a Rust panic
+ await do_triggered_content_crash(
+ function () {
+ Cc["@mozilla.org/xpcom/debug;1"]
+ .getService(Ci.nsIDebug2)
+ .rustPanic("OH NO\nOH NOES!");
+ },
+ function (mdump, extra) {
+ Assert.equal(extra.MozCrashReason, "OH NO\nOH NOES!");
+ }
+ );
+});
diff --git a/toolkit/crashreporter/test/unit_ipc/xpcshell-phc.ini b/toolkit/crashreporter/test/unit_ipc/xpcshell-phc.ini
new file mode 100644
index 0000000000..45a5b1108d
--- /dev/null
+++ b/toolkit/crashreporter/test/unit_ipc/xpcshell-phc.ini
@@ -0,0 +1,11 @@
+[DEFAULT]
+head =
+skip-if = toolkit == "android" # 1536217
+support-files =
+ !/toolkit/crashreporter/test/unit/crasher_subprocess_head.js
+ !/toolkit/crashreporter/test/unit/crasher_subprocess_tail.js
+ !/toolkit/crashreporter/test/unit/head_crashreporter.js
+
+[test_content_phc.js]
+[test_content_phc2.js]
+[test_content_phc3.js]
diff --git a/toolkit/crashreporter/test/unit_ipc/xpcshell.ini b/toolkit/crashreporter/test/unit_ipc/xpcshell.ini
new file mode 100644
index 0000000000..af8d1c21c4
--- /dev/null
+++ b/toolkit/crashreporter/test/unit_ipc/xpcshell.ini
@@ -0,0 +1,17 @@
+[DEFAULT]
+run-sequentially = very high failure rate in parallel
+head =
+skip-if = toolkit == 'android'
+support-files =
+ !/toolkit/crashreporter/test/unit/crasher_subprocess_head.js
+ !/toolkit/crashreporter/test/unit/crasher_subprocess_tail.js
+ !/toolkit/crashreporter/test/unit/head_crashreporter.js
+
+[test_content_annotation.js]
+[test_content_large_annotation.js]
+[test_content_exception_time_annotation.js]
+[test_content_oom_annotation.js]
+[test_content_memory_list.js]
+skip-if = os != 'win'
+[test_content_rust_panic.js]
+[test_content_rust_panic_multiline.js]