зеркало из https://github.com/mozilla/gecko-dev.git
Backed out 4 changesets (bug 1589493) for chrome failures at dom/ipc/tests/test_process_error_oom.xu on a CLOSED TREE
Backed out changeset 9b97128e83d8 (bug 1589493) Backed out changeset d2ed39839f83 (bug 1589493) Backed out changeset cac468582924 (bug 1589493) Backed out changeset 421b8d600806 (bug 1589493)
This commit is contained in:
Родитель
172641d0de
Коммит
8aab818cb9
|
@ -1695,10 +1695,6 @@ void ContentParent::ActorDestroy(ActorDestroyReason why) {
|
|||
dumpID = mCrashReporter->MinidumpID();
|
||||
}
|
||||
props->SetPropertyAsAString(NS_LITERAL_STRING("dumpID"), dumpID);
|
||||
|
||||
// Propagate `isLikelyOOM`.
|
||||
Unused << props->SetPropertyAsBool(NS_LITERAL_STRING("isLikelyOOM"),
|
||||
mCrashReporter->IsLikelyOOM());
|
||||
} else {
|
||||
CrashReporter::FinalizeOrphanedMinidump(OtherPid(),
|
||||
GeckoProcessType_Content);
|
||||
|
|
|
@ -5,6 +5,3 @@ support-files =
|
|||
|
||||
[test_process_error.xhtml]
|
||||
skip-if = !crashreporter || (webrender && os == 'linux' && bits == 64 && debug) # bug 1544147
|
||||
|
||||
[test_process_error_oom.xul]
|
||||
skip-if = !crashreporter || (webrender && os == 'linux' && bits == 64 && debug) # bug 1544147
|
||||
|
|
|
@ -14,10 +14,6 @@
|
|||
const done = window.arguments[0].done;
|
||||
const SimpleTest = window.arguments[0].SimpleTest;
|
||||
|
||||
// Parse test options.
|
||||
const url = new URL(document.location);
|
||||
const crashType = url.searchParams.get("crashType");
|
||||
|
||||
// Allow the browser to get connected before using the messageManager to cause
|
||||
// a crash:
|
||||
addEventListener("DOMContentLoaded", () => {
|
||||
|
@ -33,10 +29,6 @@
|
|||
if ('nsICrashReporter' in Ci) {
|
||||
dumpID = subject.getPropertyAsAString('dumpID');
|
||||
ok(dumpID, "dumpID is present and not an empty string");
|
||||
|
||||
// Let's check whether we have correctly reported OOM.
|
||||
var isLikelyOOM = subject.getPropertyAsBool('isLikelyOOM');
|
||||
is(isLikelyOOM, crashType == 'CRASH_OOM', 'isLikelyOOM is correct');
|
||||
}
|
||||
|
||||
Services.obs.removeObserver(crashObserver, 'ipc:content-shutdown');
|
||||
|
@ -54,7 +46,7 @@
|
|||
"Expected the right browsing context id on the oop-browser-crashed event.");
|
||||
})
|
||||
|
||||
BrowserTestUtils.crashFrame(browser, true, false, /* Default browsing context */ null, { crashType });
|
||||
BrowserTestUtils.crashFrame(browser, true, false);
|
||||
|
||||
Promise.all([observerPromise, eventPromise]).then(done);
|
||||
});
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
<?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 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
|
||||
|
||||
<script>
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SimpleTest.expectChildProcessCrash();
|
||||
|
||||
var w = docShell.rootTreeItem.domWindow.openDialog('process_error.xul?crashType=CRASH_OOM', '_blank', 'chrome,resizable=yes,width=400,height=600', window);
|
||||
|
||||
function done()
|
||||
{
|
||||
w.close();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
</script>
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml" style="height: 300px; overflow: auto;" />
|
||||
</window>
|
|
@ -8,7 +8,6 @@
|
|||
#include "CrashReporterMetadataShmem.h"
|
||||
#include "mozilla/dom/Promise.h"
|
||||
#include "mozilla/recordreplay/ParentIPC.h"
|
||||
#include "mozilla/EnumeratedRange.h"
|
||||
#include "mozilla/Sprintf.h"
|
||||
#include "mozilla/SyncRunnable.h"
|
||||
#include "mozilla/Telemetry.h"
|
||||
|
@ -229,21 +228,5 @@ void CrashReporterHost::AddAnnotation(CrashReporter::Annotation aKey,
|
|||
mExtraAnnotations[aKey] = aValue;
|
||||
}
|
||||
|
||||
bool CrashReporterHost::IsLikelyOOM() {
|
||||
// The data is only populated during the call to `FinalizeCrashReport()`.
|
||||
MOZ_ASSERT(mFinalized);
|
||||
if (mExtraAnnotations[CrashReporter::Annotation::OOMAllocationSize].Length() >
|
||||
0) {
|
||||
// If `OOMAllocationSize` was set, we know that the crash happened
|
||||
// because an allocation failed (`malloc` returned `nullptr`).
|
||||
//
|
||||
// As Unix systems generally allow `malloc` to return a non-null value
|
||||
// even when no virtual memory is available, this doesn't cover all
|
||||
// cases of OOM under Unix (far from it).
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace ipc
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -94,14 +94,6 @@ class CrashReporterHost {
|
|||
return mExtraAnnotations[CrashReporter::Annotation::additional_minidumps];
|
||||
}
|
||||
|
||||
// Return `true` if this crash reporter has been identified as a likely OOM.
|
||||
//
|
||||
// At the time of this writing, OOMs detection is considered reliable under
|
||||
// Windows but other platforms quite often return false negatives.
|
||||
//
|
||||
// `CrashReporterHost::FinalizeCrashReport()` MUST have been called already.
|
||||
bool IsLikelyOOM();
|
||||
|
||||
private:
|
||||
static void AsyncAddCrash(int32_t aProcessType, int32_t aCrashType,
|
||||
const nsString& aChildDumpID);
|
||||
|
|
|
@ -1629,10 +1629,6 @@ var BrowserTestUtils = {
|
|||
* @param (BrowsingContext) browsingContext
|
||||
* The context where the frame leaves. Default to
|
||||
* top level context if not supplied.
|
||||
* @param (object?) options
|
||||
* An object with any of the following fields:
|
||||
* crashType: "CRASH_INVALID_POINTER_DEREF" | "CRASH_OOM"
|
||||
* The type of crash. If unspecified, default to "CRASH_INVALID_POINTER_DEREF"
|
||||
*
|
||||
* @returns (Promise)
|
||||
* @resolves An Object with key-value pairs representing the data from the
|
||||
|
@ -1642,8 +1638,7 @@ var BrowserTestUtils = {
|
|||
browser,
|
||||
shouldShowTabCrashPage = true,
|
||||
shouldClearMinidumps = true,
|
||||
browsingContext,
|
||||
options = {}
|
||||
browsingContext
|
||||
) {
|
||||
let extra = {};
|
||||
let KeyValueParser = {};
|
||||
|
@ -1781,9 +1776,7 @@ var BrowserTestUtils = {
|
|||
this.sendAsyncMessage(
|
||||
browsingContext || browser.browsingContext,
|
||||
"BrowserTestUtils:CrashFrame",
|
||||
{
|
||||
crashType: options.crashType || "",
|
||||
}
|
||||
{}
|
||||
);
|
||||
|
||||
await Promise.all(expectedPromises);
|
||||
|
|
|
@ -210,8 +210,8 @@ class BrowserTestUtilsChild extends JSWindowActorChild {
|
|||
|
||||
case "BrowserTestUtils:CrashFrame": {
|
||||
// This is to intentionally crash the frame.
|
||||
// We crash by using js-ctypes. The crash
|
||||
// should happen immediately
|
||||
// We crash by using js-ctypes and dereferencing
|
||||
// a bad pointer. The crash should happen immediately
|
||||
// upon loading this frame script.
|
||||
|
||||
const { ctypes } = ChromeUtils.import(
|
||||
|
@ -220,38 +220,9 @@ class BrowserTestUtilsChild extends JSWindowActorChild {
|
|||
|
||||
let dies = function() {
|
||||
ChromeUtils.privateNoteIntentionalCrash();
|
||||
|
||||
switch (aMessage.data.crashType) {
|
||||
case "CRASH_OOM": {
|
||||
// Allocate waaaaaay too much memory to encourage the system
|
||||
// to crash with an OOM.
|
||||
const OS = ChromeUtils.import(
|
||||
"resource://gre/modules/osfile/osfile_shared_allthreads.jsm"
|
||||
);
|
||||
let libxul = ctypes.open(OS.Constants.Path.libxul);
|
||||
let moz_xmalloc = libxul.declare(
|
||||
"moz_xmalloc",
|
||||
ctypes.default_abi,
|
||||
/* return type */ ctypes.voidptr_t,
|
||||
/* size */ ctypes.size_t
|
||||
);
|
||||
let max_value = ctypes.cast(ctypes.ssize_t(-1), ctypes.size_t);
|
||||
moz_xmalloc(max_value);
|
||||
moz_xmalloc(max_value);
|
||||
moz_xmalloc(max_value);
|
||||
break;
|
||||
}
|
||||
case "CRASH_INVALID_POINTER_DEREF": // Fallthrough
|
||||
default: {
|
||||
// Dereference a bad pointer.
|
||||
let zero = new ctypes.intptr_t(8);
|
||||
let badptr = ctypes.cast(
|
||||
zero,
|
||||
ctypes.PointerType(ctypes.int32_t)
|
||||
);
|
||||
badptr.contents;
|
||||
}
|
||||
}
|
||||
let zero = new ctypes.intptr_t(8);
|
||||
let badptr = ctypes.cast(zero, ctypes.PointerType(ctypes.int32_t));
|
||||
badptr.contents;
|
||||
};
|
||||
|
||||
dump("\nEt tu, Brute?\n");
|
||||
|
|
Загрузка…
Ссылка в новой задаче