--- a/browser/base/content/test/general/browser_restore_isAppTab.js
+++ b/browser/base/content/test/general/browser_restore_isAppTab.js
@@ -2,71 +2,20 @@
* http://creativecommons.org/publicdomain/zero/1.0/ */
/* eslint-env mozilla/frame-script */
const {TabStateFlusher} = Cu.import("resource:///modules/sessionstore/TabStateFlusher.jsm", {});
const DUMMY = "http://example.com/browser/browser/base/content/test/general/dummy_page.html";
-function getMinidumpDirectory() {
- let dir = Services.dirsvc.get("ProfD", Ci.nsIFile);
- dir.append("minidumps");
- return dir;
-}
-
-// This observer is needed so we can clean up all evidence of the crash so
-// the testrunner thinks things are peachy.
-var CrashObserver = {
- observe(subject, topic, data) {
- is(topic, "ipc:content-shutdown", "Received correct observer topic.");
- ok(subject instanceof Ci.nsIPropertyBag2,
- "Subject implements nsIPropertyBag2.");
- // we might see this called as the process terminates due to previous tests.
- // We are only looking for "abnormal" exits...
- if (!subject.hasKey("abnormal")) {
- info("This is a normal termination and isn't the one we are looking for...");
- return;
- }
-
- let dumpID;
- if ("nsICrashReporter" in Ci) {
- dumpID = subject.getPropertyAsAString("dumpID");
- ok(dumpID, "dumpID is present and not an empty string");
- }
-
- if (dumpID) {
- let minidumpDirectory = getMinidumpDirectory();
- let file = minidumpDirectory.clone();
- file.append(dumpID + ".dmp");
- file.remove(true);
- file = minidumpDirectory.clone();
- file.append(dumpID + ".extra");
- file.remove(true);
- }
- }
-}
-Services.obs.addObserver(CrashObserver, "ipc:content-shutdown");
-
-registerCleanupFunction(() => {
- Services.obs.removeObserver(CrashObserver, "ipc:content-shutdown");
-});
-
function frameScript() {
addMessageListener("Test:GetIsAppTab", function() {
sendAsyncMessage("Test:IsAppTab", { isAppTab: docShell.isAppTab });
});
-
- addMessageListener("Test:Crash", function() {
- privateNoteIntentionalCrash();
- Components.utils.import("resource://gre/modules/ctypes.jsm");
- let zero = new ctypes.intptr_t(8);
- let badptr = ctypes.cast(zero, ctypes.PointerType(ctypes.int32_t));
- badptr.contents
- });
}
function loadFrameScript(browser) {
browser.messageManager.loadFrameScript("data:,(" + frameScript.toString() + ")();", true);
}
function isBrowserAppTab(browser) {
return new Promise(resolve => {
@@ -87,18 +36,17 @@ function isBrowserAppTab(browser) {
var restart = async function(browser) {
// If the tab isn't remote this would crash the main process so skip it
if (!browser.isRemoteBrowser)
return;
// Make sure the main process has all of the current tab state before crashing
await TabStateFlusher.flush(browser);
- browser.messageManager.sendAsyncMessage("Test:Crash");
- await promiseWaitForEvent(browser, "AboutTabCrashedLoad", false, true);
+ await BrowserTestUtils.crashBrowser(browser);
let tab = gBrowser.getTabForBrowser(browser);
SessionStore.reviveCrashedTab(tab);
await promiseTabLoaded(tab);
};
add_task(async function navigate() {
--- a/browser/base/content/test/plugins/browser_pluginCrashReportNonDeterminism.js
+++ b/browser/base/content/test/plugins/browser_pluginCrashReportNonDeterminism.js
@@ -88,30 +88,32 @@ add_task(async function setup() {
let crashObserver = (subject, topic, data) => {
if (topic != "plugin-crashed") {
return;
}
let propBag = subject.QueryInterface(Ci.nsIPropertyBag2);
let minidumpID = propBag.getPropertyAsAString("pluginDumpID");
- let minidumpDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
- minidumpDir.append("minidumps");
+ Services.crashmanager.ensureCrashIsPresent(minidumpID).then(() => {
+ let minidumpDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
+ minidumpDir.append("minidumps");
- let pluginDumpFile = minidumpDir.clone();
- pluginDumpFile.append(minidumpID + ".dmp");
+ let pluginDumpFile = minidumpDir.clone();
+ pluginDumpFile.append(minidumpID + ".dmp");
- let extraFile = minidumpDir.clone();
- extraFile.append(minidumpID + ".extra");
+ let extraFile = minidumpDir.clone();
+ extraFile.append(minidumpID + ".extra");
- ok(pluginDumpFile.exists(), "Found minidump");
- ok(extraFile.exists(), "Found extra file");
+ ok(pluginDumpFile.exists(), "Found minidump");
+ ok(extraFile.exists(), "Found extra file");
- pluginDumpFile.remove(false);
- extraFile.remove(false);
+ pluginDumpFile.remove(false);
+ extraFile.remove(false);
+ });
};
Services.obs.addObserver(crashObserver, "plugin-crashed");
// plugins.testmode will make BrowserPlugins:Test:ClearCrashData work.
Services.prefs.setBoolPref("plugins.testmode", true);
registerCleanupFunction(() => {
Services.prefs.clearUserPref("plugins.testmode");
Services.obs.removeObserver(crashObserver, "plugin-crashed");
--- a/dom/ipc/tests/process_error.xul
+++ b/dom/ipc/tests/process_error.xul
@@ -8,54 +8,33 @@
<script type="application/javascript"><![CDATA[
Components.utils.import("resource://gre/modules/Services.jsm");
const ok = window.opener.wrappedJSObject.ok;
const is = window.opener.wrappedJSObject.is;
const done = window.opener.wrappedJSObject.done;
const SimpleTest = window.opener.wrappedJSObject.SimpleTest;
- function getMinidumpDirectory() {
- var dir = Services.dirsvc.get('ProfD', Components.interfaces.nsIFile);
- dir.append("minidumps");
- return dir;
- }
-
- function removeFile(directory, filename) {
- var file = directory.clone();
- file.append(filename);
- if (file.exists()) {
- file.remove(false);
- }
- }
-
function crashObserver(subject, topic, data) {
is(topic, 'ipc:content-shutdown', 'Received correct observer topic.');
ok(subject instanceof Components.interfaces.nsIPropertyBag2,
'Subject implements nsIPropertyBag2.');
+ var waitCrash = Promise.resolve();
var dumpID;
if ('nsICrashReporter' in Components.interfaces) {
dumpID = subject.getPropertyAsAString('dumpID');
ok(dumpID, "dumpID is present and not an empty string");
- }
-
- let p = Promise.resolve();
-
- if (dumpID) {
- var minidumpDirectory = getMinidumpDirectory();
- p = Services.crashmanager.ensureCrashIsPresent(dumpID).then(() => {
- removeFile(minidumpDirectory, dumpID + '.dmp');
- removeFile(minidumpDirectory, dumpID + '.extra');
- });
+ waitCrash = Services.crashmanager.ensureCrashIsPresent(dumpID);
}
Services.obs.removeObserver(crashObserver, 'ipc:content-shutdown');
- p.then(done);
+ waitCrash.then(done);
}
+
Services.obs.addObserver(crashObserver, 'ipc:content-shutdown');
document.getElementById('thebrowser')
.QueryInterface(Components.interfaces.nsIFrameLoaderOwner)
.frameLoader.messageManager
.loadFrameScript('chrome://mochitests/content/chrome/dom/ipc/tests/process_error_contentscript.js', true);
]]></script>
--- a/dom/ipc/tests/test_process_error.xul
+++ b/dom/ipc/tests/test_process_error.xul
@@ -3,16 +3,17 @@
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/javascript"
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
<script>
SimpleTest.waitForExplicitFinish();
+ SimpleTest.expectChildProcessCrash();
var w = window.open('process_error.xul', '_blank', 'chrome,resizable=yes,width=400,height=600');
function done()
{
w.close();
SimpleTest.finish();
}
--- a/dom/plugins/test/mochitest/hang_test.js
+++ b/dom/plugins/test/mochitest/hang_test.js
@@ -60,23 +60,16 @@ var testObserver = {
ok(cpuUsage == 0, "plugin cpu usage is 0%");
} else {
ok(cpuUsage > 0, "plugin cpu usage is >0%");
}
// check processor count field
ok("NumberOfProcessors" in extraData, "got extra field for processor count");
ok(parseInt(extraData["NumberOfProcessors"]) > 0, "number of processors is >0");
-
- // cleanup, to be nice
- pluginDumpFile.remove(false);
- pluginExtraFile.remove(false);
- for (let file of additionalDumpFiles) {
- file.remove(false);
- }
},
QueryInterface: function(iid) {
if (iid.equals(Ci.nsIObserver) ||
iid.equals(Ci.nsISupportsWeakReference) ||
iid.equals(Ci.nsISupports))
return this;
throw Components.results.NS_NOINTERFACE;
@@ -105,10 +98,12 @@ function onPluginCrashed(aEvent) {
// 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 = Cc["@mozilla.org/observer-service;1"].
getService(Ci.nsIObserverService);
os.removeObserver(testObserver, "plugin-crashed");
- SimpleTest.finish();
+ Services.crashmanager.ensureCrashIsPresent(aEvent.pluginDumpID).then(() => {
+ SimpleTest.finish();
+ });
}
--- a/dom/plugins/test/mochitest/test_busy_hang.xul
+++ b/dom/plugins/test/mochitest/test_busy_hang.xul
@@ -14,17 +14,20 @@
<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[
+Components.utils.import("resource://gre/modules/Services.jsm");
+
SimpleTest.waitForExplicitFinish();
+SimpleTest.expectChildProcessCrash();
function runTests() {
// Default plugin hang timeout is too high for mochitests
var prefs = Cc["@mozilla.org/preferences-service;1"]
.getService(Ci.nsIPrefBranch);
var timeoutPref = "dom.ipc.plugins.timeoutSecs";
prefs.setIntPref(timeoutPref, 5);
--- a/dom/plugins/test/mochitest/test_crash_notify.xul
+++ b/dom/plugins/test/mochitest/test_crash_notify.xul
@@ -10,17 +10,20 @@
<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[
+Components.utils.import("resource://gre/modules/Services.jsm");
+
SimpleTest.waitForExplicitFinish();
+SimpleTest.expectChildProcessCrash();
var success = false;
var observerFired = false;
var testObserver = {
observe: function(subject, topic, data) {
observerFired = true;
@@ -38,19 +41,16 @@ var testObserver = {
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;
@@ -79,17 +79,19 @@ function onPluginCrashed(aEvent) {
// 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();
+ Services.crashmanager.ensureCrashIsPresent(aEvent.pluginDumpID).then(() => {
+ 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);
--- a/dom/plugins/test/mochitest/test_crash_notify_no_report.xul
+++ b/dom/plugins/test/mochitest/test_crash_notify_no_report.xul
@@ -10,16 +10,18 @@
<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[
+Components.utils.import("resource://gre/modules/Services.jsm");
+
SimpleTest.waitForExplicitFinish();
var success = false;
var observerFired = false;
var testObserver = {
observe: function(subject, topic, data) {
@@ -41,19 +43,21 @@ var testObserver = {
pendingD.append("Crash Reports");
pendingD.append("pending");
let dumpFile = pendingD.clone();
dumpFile.append(id + ".dmp");
ok(dumpFile.exists(), "minidump exists");
let extraFile = pendingD.clone();
extraFile.append(id + ".extra");
ok(extraFile.exists(), "extra file exists");
- // cleanup, to be nice
- dumpFile.remove(false);
- extraFile.remove(false);
+ Services.crashmanager.ensureCrashIsPresent(id).then(() => {
+ // cleanup, to be nice, this will execute before SimpleTest.finish()
+ 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;
@@ -82,17 +86,19 @@ function onPluginCrashed(aEvent) {
var os = Components.classes["@mozilla.org/observer-service;1"].
getService(Components.interfaces.nsIObserverService);
os.removeObserver(testObserver, "plugin-crashed");
// re-set MOZ_CRASHREPORTER_NO_REPORT
let env = Components.classes["@mozilla.org/process/environment;1"]
.getService(Components.interfaces.nsIEnvironment);
env.set("MOZ_CRASHREPORTER_NO_REPORT", "1");
- SimpleTest.finish();
+ Services.crashmanager.ensureCrashIsPresent(aEvent.pluginDumpID).then(() => {
+ SimpleTest.finish();
+ });
}
function runTests() {
// the test harness will have set MOZ_CRASHREPORTER_NO_REPORT,
// ensure that we can change the setting and have our minidumps
// wind up in Crash Reports/pending
let env = Components.classes["@mozilla.org/process/environment;1"]
.getService(Components.interfaces.nsIEnvironment);
--- a/dom/plugins/test/mochitest/test_hangui.xul
+++ b/dom/plugins/test/mochitest/test_hangui.xul
@@ -16,16 +16,17 @@
src="http://mochi.test:8888/chrome/dom/plugins/test/mochitest/hangui_common.js" />
<body xmlns="http://www.w3.org/1999/xhtml">
<iframe id="iframe1" src="hangui_subpage.html" width="400" height="400"></iframe>
</body>
<script class="testbody" type="application/javascript">
<![CDATA[
SimpleTest.waitForExplicitFinish();
+SimpleTest.expectChildProcessCrash();
setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED);
Components.utils.import("resource://gre/modules/Services.jsm");
const hangUITimeoutPref = "dom.ipc.plugins.hangUITimeoutSecs";
const hangUIMinDisplayPref = "dom.ipc.plugins.hangUIMinDisplaySecs";
const timeoutPref = "dom.ipc.plugins.timeoutSecs";
--- a/dom/plugins/test/mochitest/test_idle_hang.xul
+++ b/dom/plugins/test/mochitest/test_idle_hang.xul
@@ -14,17 +14,20 @@
<script type="application/javascript">
getTestPlugin().enabledState = 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[
+Components.utils.import("resource://gre/modules/Services.jsm");
+
SimpleTest.waitForExplicitFinish();
+SimpleTest.expectChildProcessCrash();
function runTests() {
// Default plugin hang timeout is too high for mochitests
var prefs = Cc["@mozilla.org/preferences-service;1"]
.getService(Ci.nsIPrefBranch);
var timeoutPref = "dom.ipc.plugins.timeoutSecs";
prefs.setIntPref(timeoutPref, 5);
--- a/netwerk/test/browser/browser_child_resource.js
+++ b/netwerk/test/browser/browser_child_resource.js
@@ -7,83 +7,31 @@ http://creativecommons.org/publicdomain/
const TEST_URL = "http://example.com/browser/netwerk/test/browser/dummy.html";
const expectedRemote = gMultiProcessBrowser ? "true" : "";
Components.utils.import("resource://gre/modules/Services.jsm");
const resProtocol = Cc["@mozilla.org/network/protocol;1?name=resource"]
.getService(Ci.nsIResProtocolHandler);
-function getMinidumpDirectory() {
- var dir = Services.dirsvc.get('ProfD', Ci.nsIFile);
- dir.append("minidumps");
- return dir;
-}
-
-// This observer is needed so we can clean up all evidence of the crash so
-// the testrunner thinks things are peachy.
-var CrashObserver = {
- observe: function(subject, topic, data) {
- is(topic, 'ipc:content-shutdown', 'Received correct observer topic.');
- ok(subject instanceof Ci.nsIPropertyBag2,
- 'Subject implements nsIPropertyBag2.');
- // we might see this called as the process terminates due to previous tests.
- // We are only looking for "abnormal" exits...
- if (!subject.hasKey("abnormal")) {
- info("This is a normal termination and isn't the one we are looking for...");
- return;
- }
-
- var dumpID;
- if ('nsICrashReporter' in Ci) {
- dumpID = subject.getPropertyAsAString('dumpID');
- ok(dumpID, "dumpID is present and not an empty string");
- }
-
- if (dumpID) {
- var minidumpDirectory = getMinidumpDirectory();
- let file = minidumpDirectory.clone();
- file.append(dumpID + '.dmp');
- file.remove(true);
- file = minidumpDirectory.clone();
- file.append(dumpID + '.extra');
- file.remove(true);
- }
- }
-}
-Services.obs.addObserver(CrashObserver, 'ipc:content-shutdown');
-
-registerCleanupFunction(() => {
- Services.obs.removeObserver(CrashObserver, 'ipc:content-shutdown');
-});
-
function frameScript() {
Components.utils.import("resource://gre/modules/Services.jsm");
let resProtocol = Components.classes["@mozilla.org/network/protocol;1?name=resource"]
.getService(Components.interfaces.nsIResProtocolHandler);
addMessageListener("Test:ResolveURI", function({ data: uri }) {
uri = Services.io.newURI(uri);
try {
let resolved = resProtocol.resolveURI(uri);
sendAsyncMessage("Test:ResolvedURI", resolved);
}
catch (e) {
sendAsyncMessage("Test:ResolvedURI", null);
}
});
-
- addMessageListener("Test:Crash", function() {
- dump("Crashing\n");
- privateNoteIntentionalCrash();
- Components.utils.import("resource://gre/modules/ctypes.jsm");
- let zero = new ctypes.intptr_t(8);
- let badptr = ctypes.cast(zero, ctypes.PointerType(ctypes.int32_t));
- badptr.contents
- });
}
function waitForEvent(obj, name, capturing, chromeEvent) {
info("Waiting for " + name);
return new Promise((resolve) => {
function listener(event) {
info("Saw " + name);
obj.removeEventListener(name, listener, capturing, chromeEvent);
@@ -128,18 +76,17 @@ var loadTestTab = Task.async(function*()
// Restarts the child process by crashing it then reloading the tab
var restart = Task.async(function*() {
let browser = gBrowser.selectedBrowser;
// If the tab isn't remote this would crash the main process so skip it
if (browser.getAttribute("remote") != "true")
return browser;
- browser.messageManager.sendAsyncMessage("Test:Crash");
- yield waitForEvent(browser, "AboutTabCrashedLoad", false, true);
+ yield BrowserTestUtils.crashBrowser(browser);
browser.reload();
yield BrowserTestUtils.browserLoaded(browser);
is(browser.getAttribute("remote"), expectedRemote, "Browser should be in the right process");
browser.messageManager.loadFrameScript("data:,(" + frameScript.toString() + ")();", true);
return browser;
});
--- a/netwerk/test/browser/dummy.html
+++ b/netwerk/test/browser/dummy.html
@@ -1,7 +1,11 @@
<!DOCTYPE html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+</head>
+
<html>
<body>
<p>Dummy Page</p>
</body>
</html>
--- a/toolkit/components/thumbnails/test/browser.ini
+++ b/toolkit/components/thumbnails/test/browser.ini
@@ -2,17 +2,16 @@
support-files =
authenticate.sjs
background_red.html
background_red_redirect.sjs
background_red_scroll.html
head.js
privacy_cache_control.sjs
thumbnails_background.sjs
- thumbnails_crash_content_helper.js
thumbnails_update.sjs
[browser_thumbnails_bg_bad_url.js]
[browser_thumbnails_bg_crash_during_capture.js]
skip-if = !crashreporter
[browser_thumbnails_bg_crash_while_idle.js]
skip-if = !crashreporter
[browser_thumbnails_bg_basic.js]
--- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_during_capture.js
+++ b/toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_during_capture.js
@@ -1,49 +1,45 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
function* runTests() {
- let crashObserver = bgAddCrashObserver();
-
// make a good capture first - this ensures we have the <browser>
let goodUrl = bgTestPageURL();
yield bgCapture(goodUrl);
ok(thumbnailExists(goodUrl), "Thumbnail should be cached after capture");
removeThumbnail(goodUrl);
- // inject our content script.
- let mm = bgInjectCrashContentScript();
-
// queue up 2 captures - the first has a wait, so this is the one that
// will die. The second one should immediately capture after the crash.
let waitUrl = bgTestPageURL({ wait: 30000 });
let sawWaitUrlCapture = false;
bgCapture(waitUrl, { onDone: () => {
sawWaitUrlCapture = true;
ok(!thumbnailExists(waitUrl), "Thumbnail should not have been saved due to the crash");
}});
bgCapture(goodUrl, { onDone: () => {
ok(sawWaitUrlCapture, "waitUrl capture should have finished first");
ok(thumbnailExists(goodUrl), "We should have recovered and completed the 2nd capture after the crash");
removeThumbnail(goodUrl);
// Test done.
- ok(crashObserver.crashed, "Saw a crash from this test");
next();
}});
let crashPromise = new Promise(resolve => {
bgAddPageThumbObserver(waitUrl).catch(function(err) {
ok(true, `page-thumbnail error thrown for ${waitUrl}`);
resolve();
});
});
let capturePromise = new Promise(resolve => {
bgAddPageThumbObserver(goodUrl).then(() => {
ok(true, `page-thumbnail created for ${goodUrl}`);
resolve();
});
});
info("Crashing the thumbnail content process.");
- mm.sendAsyncMessage("thumbnails-test:crash");
+ let crash = yield BrowserTestUtils.crashBrowser(BackgroundPageThumbs._thumbBrowser, false);
+ ok(crash.CrashTime, "Saw a crash from this test");
+
yield crashPromise;
yield capturePromise;
}
--- a/toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_while_idle.js
+++ b/toolkit/components/thumbnails/test/browser_thumbnails_bg_crash_while_idle.js
@@ -1,38 +1,25 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
function* runTests() {
- let crashObserver = bgAddCrashObserver();
-
// make a good capture first - this ensures we have the <browser>
let goodUrl = bgTestPageURL();
yield bgCapture(goodUrl);
ok(thumbnailExists(goodUrl), "Thumbnail should be cached after capture");
removeThumbnail(goodUrl);
- // inject our content script.
- let mm = bgInjectCrashContentScript();
-
- // the observer for the crashing process is basically async, so it's hard
- // to know when the <browser> has actually seen it. Easist is to just add
- // our own observer.
- Services.obs.addObserver(function onCrash() {
- Services.obs.removeObserver(onCrash, "oop-frameloader-crashed");
- // spin the event loop to ensure the BPT observer was called.
- executeSoon(function() {
- // Now queue another capture and ensure it recovers.
- bgCapture(goodUrl, { onDone: () => {
- ok(thumbnailExists(goodUrl), "We should have recovered and handled new capture requests");
- removeThumbnail(goodUrl);
- // Test done.
- ok(crashObserver.crashed, "Saw a crash from this test");
- next();
- }});
- });
- }, "oop-frameloader-crashed");
-
// Nothing is pending - crash the process.
info("Crashing the thumbnail content process.");
- mm.sendAsyncMessage("thumbnails-test:crash");
+ let crash = yield BrowserTestUtils.crashBrowser(BackgroundPageThumbs._thumbBrowser, false);
+ ok(crash.CrashTime, "Saw a crash from this test");
+
+ // Now queue another capture and ensure it recovers.
+ bgCapture(goodUrl, { onDone: () => {
+ ok(thumbnailExists(goodUrl), "We should have recovered and handled new capture requests");
+ removeThumbnail(goodUrl);
+ // Test done.
+ next();
+ }});
+
yield true;
}
--- a/toolkit/components/thumbnails/test/head.js
+++ b/toolkit/components/thumbnails/test/head.js
@@ -296,64 +296,8 @@ function bgAddPageThumbObserver(url) {
Services.obs.removeObserver(observe, "page-thumbnail:create");
Services.obs.removeObserver(observe, "page-thumbnail:error");
}
}
Services.obs.addObserver(observe, "page-thumbnail:create");
Services.obs.addObserver(observe, "page-thumbnail:error");
});
}
-
-function bgAddCrashObserver() {
- let crashed = false;
- Services.obs.addObserver(function crashObserver(subject, topic, data) {
- is(topic, "ipc:content-shutdown", "Received correct observer topic.");
- ok(subject instanceof Components.interfaces.nsIPropertyBag2,
- "Subject implements nsIPropertyBag2.");
- // we might see this called as the process terminates due to previous tests.
- // We are only looking for "abnormal" exits...
- if (!subject.hasKey("abnormal")) {
- info("This is a normal termination and isn't the one we are looking for...");
- return;
- }
- Services.obs.removeObserver(crashObserver, "ipc:content-shutdown");
- crashed = true;
-
- var dumpID;
- if ("nsICrashReporter" in Components.interfaces) {
- dumpID = subject.getPropertyAsAString("dumpID");
- ok(dumpID, "dumpID is present and not an empty string");
- }
-
- if (dumpID) {
- var minidumpDirectory = getMinidumpDirectory();
- removeFile(minidumpDirectory, dumpID + ".dmp");
- removeFile(minidumpDirectory, dumpID + ".extra");
- }
- }, "ipc:content-shutdown");
- return {
- get crashed() {
- return crashed;
- }
- };
-}
-
-function bgInjectCrashContentScript() {
- const TEST_CONTENT_HELPER = "chrome://mochitests/content/browser/toolkit/components/thumbnails/test/thumbnails_crash_content_helper.js";
- let thumbnailBrowser = BackgroundPageThumbs._thumbBrowser;
- let mm = thumbnailBrowser.messageManager;
- mm.loadFrameScript(TEST_CONTENT_HELPER, false);
- return mm;
-}
-
-function getMinidumpDirectory() {
- var dir = Services.dirsvc.get("ProfD", Components.interfaces.nsIFile);
- dir.append("minidumps");
- return dir;
-}
-
-function removeFile(directory, filename) {
- var file = directory.clone();
- file.append(filename);
- if (file.exists()) {
- file.remove(false);
- }
-}
--- a/toolkit/content/tests/browser/browser_crash_previous_frameloader.js
+++ b/toolkit/content/tests/browser/browser_crash_previous_frameloader.js
@@ -17,28 +17,26 @@ function getCrashDumpId(subject) {
}
/**
* Cleans up the .dmp and .extra file from a crash.
*
* @param id {String} The crash dump id.
*/
function cleanUpMinidump(id) {
- if (id) {
- let dir = Services.dirsvc.get("ProfD", Ci.nsIFile);
- dir.append("minidumps");
+ let dir = Services.dirsvc.get("ProfD", Ci.nsIFile);
+ dir.append("minidumps");
- let file = dir.clone();
- file.append(id + ".dmp");
- file.remove(true);
+ let file = dir.clone();
+ file.append(id + ".dmp");
+ file.remove(true);
- file = dir.clone();
- file.append(id + ".extra");
- file.remove(true);
- }
+ file = dir.clone();
+ file.append(id + ".extra");
+ file.remove(true);
}
/**
* This test ensures that if a remote frameloader crashes after
* the frameloader owner swaps it out for a new frameloader,
* that a oop-browser-crashed event is not sent to the new
* frameloader's browser element.
*/