mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 860085 - Rename xpc::{Push,Pop}JSContext and make them assert against DOM JSContexts. r=gabor
This commit is contained in:
parent
5ba2509426
commit
0886018b66
@ -1106,10 +1106,10 @@ void
|
|||||||
XPCJSRuntime::CTypesActivityCallback(JSContext *cx, js::CTypesActivityType type)
|
XPCJSRuntime::CTypesActivityCallback(JSContext *cx, js::CTypesActivityType type)
|
||||||
{
|
{
|
||||||
if (type == js::CTYPES_CALLBACK_BEGIN) {
|
if (type == js::CTYPES_CALLBACK_BEGIN) {
|
||||||
if (!Get()->GetJSContextStack()->Push(cx))
|
if (!xpc::PushJSContextNoScriptContext(cx))
|
||||||
MOZ_CRASH();
|
MOZ_CRASH();
|
||||||
} else if (type == js::CTYPES_CALLBACK_END) {
|
} else if (type == js::CTYPES_CALLBACK_END) {
|
||||||
Get()->GetJSContextStack()->Pop();
|
xpc::PopJSContextNoScriptContext();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,15 +113,15 @@ AutoCxPusher::AutoCxPusher(JSContext* cx, bool allowNull) : mScriptIsRunning(fal
|
|||||||
mScx = GetScriptContextFromJSContext(cx);
|
mScx = GetScriptContextFromJSContext(cx);
|
||||||
|
|
||||||
// NB: The GetDynamicScriptContext is historical and might not be sane.
|
// NB: The GetDynamicScriptContext is historical and might not be sane.
|
||||||
if (cx && nsJSUtils::GetDynamicScriptContext(cx) &&
|
XPCJSContextStack *stack = XPCJSRuntime::Get()->GetJSContextStack();
|
||||||
xpc::IsJSContextOnStack(cx))
|
if (cx && nsJSUtils::GetDynamicScriptContext(cx) && stack->HasJSContext(cx))
|
||||||
{
|
{
|
||||||
// If the context is on the stack, that means that a script
|
// If the context is on the stack, that means that a script
|
||||||
// is running at the moment in the context.
|
// is running at the moment in the context.
|
||||||
mScriptIsRunning = true;
|
mScriptIsRunning = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!xpc::PushJSContext(cx)) {
|
if (!stack->Push(cx)) {
|
||||||
MOZ_CRASH();
|
MOZ_CRASH();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,7 +154,7 @@ AutoCxPusher::~AutoCxPusher()
|
|||||||
js::GetEnterCompartmentDepth(mPushedContext));
|
js::GetEnterCompartmentDepth(mPushedContext));
|
||||||
DebugOnly<JSContext*> stackTop;
|
DebugOnly<JSContext*> stackTop;
|
||||||
MOZ_ASSERT(mPushedContext == nsXPConnect::XPConnect()->GetCurrentJSContext());
|
MOZ_ASSERT(mPushedContext == nsXPConnect::XPConnect()->GetCurrentJSContext());
|
||||||
xpc::PopJSContext();
|
XPCJSRuntime::Get()->GetJSContextStack()->Pop();
|
||||||
|
|
||||||
if (!mScriptIsRunning && mScx) {
|
if (!mScriptIsRunning && mScx) {
|
||||||
// No JS is running in the context, but executing the event handler might have
|
// No JS is running in the context, but executing the event handler might have
|
||||||
|
@ -1129,7 +1129,7 @@ nsXPConnect::OnProcessNextEvent(nsIThreadInternal *aThread, bool aMayWait,
|
|||||||
// Push a null JSContext so that we don't see any script during
|
// Push a null JSContext so that we don't see any script during
|
||||||
// event processing.
|
// event processing.
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
bool ok = PushJSContext(nullptr);
|
bool ok = PushJSContextNoScriptContext(nullptr);
|
||||||
NS_ENSURE_TRUE(ok, NS_ERROR_FAILURE);
|
NS_ENSURE_TRUE(ok, NS_ERROR_FAILURE);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
@ -1148,7 +1148,7 @@ nsXPConnect::AfterProcessNextEvent(nsIThreadInternal *aThread,
|
|||||||
nsJSContext::MaybePokeCC();
|
nsJSContext::MaybePokeCC();
|
||||||
nsDOMMutationObserver::HandleMutations();
|
nsDOMMutationObserver::HandleMutations();
|
||||||
|
|
||||||
PopJSContext();
|
PopJSContextNoScriptContext();
|
||||||
|
|
||||||
// If the cx stack is empty, that means we're at the an un-nested event
|
// If the cx stack is empty, that means we're at the an un-nested event
|
||||||
// loop. This is a good time to make changes to debug mode.
|
// loop. This is a good time to make changes to debug mode.
|
||||||
@ -1284,13 +1284,14 @@ nsXPConnect::GetSafeJSContext()
|
|||||||
namespace xpc {
|
namespace xpc {
|
||||||
|
|
||||||
bool
|
bool
|
||||||
PushJSContext(JSContext *aCx)
|
PushJSContextNoScriptContext(JSContext *aCx)
|
||||||
{
|
{
|
||||||
|
MOZ_ASSERT_IF(aCx, !GetScriptContextFromJSContext(aCx));
|
||||||
return XPCJSRuntime::Get()->GetJSContextStack()->Push(aCx);
|
return XPCJSRuntime::Get()->GetJSContextStack()->Push(aCx);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
PopJSContext()
|
PopJSContextNoScriptContext()
|
||||||
{
|
{
|
||||||
XPCJSRuntime::Get()->GetJSContextStack()->Pop();
|
XPCJSRuntime::Get()->GetJSContextStack()->Pop();
|
||||||
}
|
}
|
||||||
|
@ -3225,6 +3225,18 @@ struct XPCJSContextInfo {
|
|||||||
bool savedFrameChain;
|
bool savedFrameChain;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace xpc {
|
||||||
|
|
||||||
|
// These functions are used in a few places where a callback model makes it
|
||||||
|
// impossible to push a JSContext using one of our stack-scoped classes. We
|
||||||
|
// depend on those stack-scoped classes to maintain nsIScriptContext
|
||||||
|
// invariants, so these functions may only be used of the context is not
|
||||||
|
// associated with an nsJSContext/nsIScriptContext.
|
||||||
|
bool PushJSContextNoScriptContext(JSContext *aCx);
|
||||||
|
void PopJSContextNoScriptContext();
|
||||||
|
|
||||||
|
} /* namespace xpc */
|
||||||
|
|
||||||
class XPCJSContextStack
|
class XPCJSContextStack
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -3870,11 +3882,6 @@ bool IsOutObject(JSContext* cx, JSObject* obj);
|
|||||||
|
|
||||||
nsresult HasInstance(JSContext *cx, JS::HandleObject objArg, const nsID *iid, bool *bp);
|
nsresult HasInstance(JSContext *cx, JS::HandleObject objArg, const nsID *iid, bool *bp);
|
||||||
|
|
||||||
// Internal use only.
|
|
||||||
bool PushJSContext(JSContext *aCx);
|
|
||||||
void PopJSContext();
|
|
||||||
bool IsJSContextOnStack(JSContext *aCx);
|
|
||||||
|
|
||||||
} // namespace xpc
|
} // namespace xpc
|
||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
Loading…
Reference in New Issue
Block a user