mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Backed out 2 changesets (bug 1252565) for windows build bustage CLOSED TREE
Backed out changeset 9de2c10a1cc3 (bug 1252565) Backed out changeset fc5c4cb02d24 (bug 1252565) MozReview-Commit-ID: GCQedQwqslg
This commit is contained in:
parent
a1ef121943
commit
b5c77463c0
@ -349,10 +349,9 @@ AutoJSAPI::InitInternal(JSObject* aGlobal, JSContext* aCx, bool aIsMainThread)
|
||||
mAutoNullableCompartment.emplace(mCx, aGlobal);
|
||||
}
|
||||
|
||||
if (aIsMainThread) {
|
||||
JSRuntime* rt = JS_GetRuntime(aCx);
|
||||
mOldErrorReporter.emplace(JS_GetErrorReporter(rt));
|
||||
|
||||
if (aIsMainThread) {
|
||||
JS_SetErrorReporter(rt, xpc::SystemErrorReporter);
|
||||
}
|
||||
}
|
||||
@ -466,25 +465,8 @@ AutoJSAPI::InitWithLegacyErrorReporting(nsGlobalWindow* aWindow)
|
||||
void
|
||||
WarningOnlyErrorReporter(JSContext* aCx, const char* aMessage, JSErrorReport* aRep)
|
||||
{
|
||||
if (!JSREPORT_IS_WARNING(aRep->flags)) {
|
||||
fprintf(stderr, "\n\nFAILURE: %d\n\n", getpid());
|
||||
sleep(20);
|
||||
}
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(JSREPORT_IS_WARNING(aRep->flags));
|
||||
if (!NS_IsMainThread()) {
|
||||
// Reporting a warning on workers is a bit complicated because we have to
|
||||
// climb our parent chain until we get to the main thread. So go ahead and
|
||||
// just go through the worker ReportError codepath here.
|
||||
//
|
||||
// That said, it feels like we should be able to short-circuit things a bit
|
||||
// here by posting an appropriate runnable to the main thread directly...
|
||||
// Worth looking into sometime.
|
||||
workers::WorkerPrivate* worker = workers::GetWorkerPrivateFromContext(aCx);
|
||||
MOZ_ASSERT(worker);
|
||||
|
||||
worker->ReportError(aCx, aMessage, aRep);
|
||||
return;
|
||||
}
|
||||
|
||||
RefPtr<xpc::ErrorReport> xpcReport = new xpc::ErrorReport();
|
||||
nsGlobalWindow* win = xpc::CurrentWindowOrNull(aCx);
|
||||
@ -502,8 +484,14 @@ AutoJSAPI::TakeOwnershipOfErrorReporting()
|
||||
JSRuntime *rt = JS_GetRuntime(cx());
|
||||
mOldAutoJSAPIOwnsErrorReporting = JS::ContextOptionsRef(cx()).autoJSAPIOwnsErrorReporting();
|
||||
JS::ContextOptionsRef(cx()).setAutoJSAPIOwnsErrorReporting(true);
|
||||
// Workers have their own error reporting mechanism which deals with warnings
|
||||
// as well, so don't change the worker error reporter for now. Once we switch
|
||||
// all of workers to TakeOwnershipOfErrorReporting(), we will just make the
|
||||
// default worker error reporter assert that it only sees warnings.
|
||||
if (mIsMainThread) {
|
||||
JS_SetErrorReporter(rt, WarningOnlyErrorReporter);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AutoJSAPI::ReportException()
|
||||
|
@ -559,6 +559,15 @@ LoadJSGCMemoryOptions(const char* aPrefName, void* /* aClosure */)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ErrorReporter(JSContext* aCx, const char* aMessage, JSErrorReport* aReport)
|
||||
{
|
||||
WorkerPrivate* worker = GetWorkerPrivateFromContext(aCx);
|
||||
MOZ_ASSERT(worker);
|
||||
|
||||
return worker->ReportError(aCx, aMessage, aReport);
|
||||
}
|
||||
|
||||
bool
|
||||
InterruptCallback(JSContext* aCx)
|
||||
{
|
||||
@ -803,6 +812,8 @@ CreateJSContextForWorker(WorkerPrivate* aWorkerPrivate, JSRuntime* aRuntime)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
JS_SetErrorReporter(aRuntime, ErrorReporter);
|
||||
|
||||
JS_SetInterruptCallback(aRuntime, InterruptCallback);
|
||||
|
||||
js::SetCTypesActivityCallback(aRuntime, CTypesActivityCallback);
|
||||
|
@ -1343,6 +1343,27 @@ xpc::SimulateActivityCallback(bool aActive)
|
||||
XPCJSRuntime::ActivityCallback(XPCJSRuntime::Get(), aActive);
|
||||
}
|
||||
|
||||
void
|
||||
XPCJSRuntime::EnvironmentPreparer::invoke(HandleObject scope, js::ScriptEnvironmentPreparer::Closure& closure)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
nsIGlobalObject* global = NativeGlobal(scope);
|
||||
|
||||
// Not much we can do if we simply don't have a usable global here...
|
||||
NS_ENSURE_TRUE_VOID(global && global->GetGlobalJSObject());
|
||||
AutoEntryScript aes(global, "JS-engine-initiated execution");
|
||||
aes.TakeOwnershipOfErrorReporting();
|
||||
|
||||
MOZ_ASSERT(!JS_IsExceptionPending(aes.cx()));
|
||||
|
||||
DebugOnly<bool> ok = closure(aes.cx());
|
||||
|
||||
MOZ_ASSERT_IF(ok, !JS_IsExceptionPending(aes.cx()));
|
||||
|
||||
// The AutoEntryScript will check for JS_IsExceptionPending on the
|
||||
// JSContext and report it as needed as it comes off the stack.
|
||||
}
|
||||
|
||||
// static
|
||||
void
|
||||
XPCJSRuntime::ActivityCallback(void* arg, bool active)
|
||||
@ -3484,6 +3505,7 @@ XPCJSRuntime::Initialize()
|
||||
stack->sampleRuntime(runtime);
|
||||
#endif
|
||||
JS_SetAccumulateTelemetryCallback(runtime, AccumulateTelemetryCallback);
|
||||
js::SetScriptEnvironmentPreparer(runtime, &mEnvironmentPreparer);
|
||||
js::SetActivityCallback(runtime, ActivityCallback, this);
|
||||
JS_SetInterruptCallback(runtime, InterruptCallback);
|
||||
js::SetWindowProxyClass(runtime, &OuterWindowProxyClass);
|
||||
|
@ -592,6 +592,11 @@ public:
|
||||
void AddGCCallback(xpcGCCallback cb);
|
||||
void RemoveGCCallback(xpcGCCallback cb);
|
||||
|
||||
struct EnvironmentPreparer : public js::ScriptEnvironmentPreparer {
|
||||
void invoke(JS::HandleObject scope, Closure& closure) override;
|
||||
};
|
||||
EnvironmentPreparer mEnvironmentPreparer;
|
||||
|
||||
static void ActivityCallback(void* arg, bool active);
|
||||
static bool InterruptCallback(JSContext* cx);
|
||||
|
||||
|
@ -454,12 +454,6 @@ CycleCollectedJSRuntime::~CycleCollectedJSRuntime()
|
||||
NS_RELEASE(mOwningThread);
|
||||
}
|
||||
|
||||
static void
|
||||
MozCrashErrorReporter(JSContext*, const char*, JSErrorReport*)
|
||||
{
|
||||
MOZ_CRASH("Why is someone touching JSAPI without an AutoJSAPI?");
|
||||
}
|
||||
|
||||
nsresult
|
||||
CycleCollectedJSRuntime::Initialize(JSRuntime* aParentRuntime,
|
||||
uint32_t aMaxBytes,
|
||||
@ -503,15 +497,11 @@ CycleCollectedJSRuntime::Initialize(JSRuntime* aParentRuntime,
|
||||
JS_SetContextCallback(mJSRuntime, ContextCallback, this);
|
||||
JS_SetDestroyZoneCallback(mJSRuntime, XPCStringConvert::FreeZoneCache);
|
||||
JS_SetSweepZoneCallback(mJSRuntime, XPCStringConvert::ClearZoneCache);
|
||||
// XPCJSRuntime currently overrides this because we don't
|
||||
// TakeOwnershipOfErrorReporting everwhere on the main thread yet.
|
||||
JS_SetErrorReporter(mJSRuntime, MozCrashErrorReporter);
|
||||
|
||||
static js::DOMCallbacks DOMcallbacks = {
|
||||
InstanceClassHasProtoAtDepth
|
||||
};
|
||||
SetDOMCallbacks(mJSRuntime, &DOMcallbacks);
|
||||
js::SetScriptEnvironmentPreparer(mJSRuntime, &mEnvironmentPreparer);
|
||||
|
||||
#ifdef SPIDERMONKEY_PROMISE
|
||||
JS::SetEnqueuePromiseJobCallback(mJSRuntime, EnqueuePromiseJobCallback, this);
|
||||
@ -1623,28 +1613,3 @@ CycleCollectedJSRuntime::PrepareWaitingZonesForGC()
|
||||
mZonesWaitingForGC.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CycleCollectedJSRuntime::EnvironmentPreparer::invoke(JS::HandleObject scope,
|
||||
js::ScriptEnvironmentPreparer::Closure& closure)
|
||||
{
|
||||
nsIGlobalObject* global = xpc::NativeGlobal(scope);
|
||||
|
||||
// Not much we can do if we simply don't have a usable global here...
|
||||
NS_ENSURE_TRUE_VOID(global && global->GetGlobalJSObject());
|
||||
|
||||
bool mainThread = NS_IsMainThread();
|
||||
JSContext* cx =
|
||||
mainThread ? nullptr : nsContentUtils::GetDefaultJSContextForThread();
|
||||
AutoEntryScript aes(global, "JS-engine-initiated execution", mainThread, cx);
|
||||
aes.TakeOwnershipOfErrorReporting();
|
||||
|
||||
MOZ_ASSERT(!JS_IsExceptionPending(aes.cx()));
|
||||
|
||||
DebugOnly<bool> ok = closure(aes.cx());
|
||||
|
||||
MOZ_ASSERT_IF(ok, !JS_IsExceptionPending(aes.cx()));
|
||||
|
||||
// The AutoEntryScript will check for JS_IsExceptionPending on the
|
||||
// JSContext and report it as needed as it comes off the stack.
|
||||
}
|
||||
|
@ -14,7 +14,6 @@
|
||||
#include "mozilla/MemoryReporting.h"
|
||||
#include "mozilla/SegmentedVector.h"
|
||||
#include "jsapi.h"
|
||||
#include "jsfriendapi.h"
|
||||
|
||||
#include "nsCycleCollectionParticipant.h"
|
||||
#include "nsDataHashtable.h"
|
||||
@ -402,11 +401,6 @@ private:
|
||||
mPreservedNurseryObjects;
|
||||
|
||||
nsTHashtable<nsPtrHashKey<JS::Zone>> mZonesWaitingForGC;
|
||||
|
||||
struct EnvironmentPreparer : public js::ScriptEnvironmentPreparer {
|
||||
void invoke(JS::HandleObject scope, Closure& closure) override;
|
||||
};
|
||||
EnvironmentPreparer mEnvironmentPreparer;
|
||||
};
|
||||
|
||||
void TraceScriptHolder(nsISupports* aHolder, JSTracer* aTracer);
|
||||
|
Loading…
Reference in New Issue
Block a user