本文整理汇总了C++中XPCJSContextStack类的典型用法代码示例。如果您正苦于以下问题:C++ XPCJSContextStack类的具体用法?C++ XPCJSContextStack怎么用?C++ XPCJSContextStack使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了XPCJSContextStack类的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: MOZ_ASSERT_IF
danger::AutoCxPusher::AutoCxPusher(JSContext* cx, bool allowNull)
{
MOZ_ASSERT_IF(!allowNull, cx);
// Hold a strong ref to the nsIScriptContext, if any. This ensures that we
// only destroy the mContext of an nsJSContext when it is not on the cx stack
// (and therefore not in use). See nsJSContext::DestroyJSContext().
if (cx)
mScx = GetScriptContextFromJSContext(cx);
XPCJSContextStack *stack = XPCJSRuntime::Get()->GetJSContextStack();
if (!stack->Push(cx)) {
MOZ_CRASH();
}
mStackDepthAfterPush = stack->Count();
#ifdef DEBUG
mPushedContext = cx;
mCompartmentDepthOnEntry = cx ? js::GetEnterCompartmentDepth(cx) : 0;
#endif
// Enter a request and a compartment for the duration that the cx is on the
// stack if non-null.
if (cx) {
mAutoRequest.emplace(cx);
}
}
开发者ID:benfrancis,项目名称:gecko-tablet,代码行数:27,代码来源:ScriptSettings.cpp
示例2: MOZ_ASSERT_IF
AutoCxPusher::AutoCxPusher(JSContext* cx, bool allowNull)
{
MOZ_ASSERT_IF(!allowNull, cx);
// Hold a strong ref to the nsIScriptContext, if any. This ensures that we
// only destroy the mContext of an nsJSContext when it is not on the cx stack
// (and therefore not in use). See nsJSContext::DestroyJSContext().
if (cx)
mScx = GetScriptContextFromJSContext(cx);
XPCJSContextStack *stack = XPCJSRuntime::Get()->GetJSContextStack();
if (!stack->Push(cx)) {
MOZ_CRASH();
}
mStackDepthAfterPush = stack->Count();
#ifdef DEBUG
mPushedContext = cx;
mCompartmentDepthOnEntry = cx ? js::GetEnterCompartmentDepth(cx) : 0;
#endif
// Enter a request and a compartment for the duration that the cx is on the
// stack if non-null.
if (cx) {
mAutoRequest.construct(cx);
// DOM JSContexts don't store their default compartment object on the cx.
JSObject *compartmentObject = mScx ? mScx->GetWindowProxy()
: js::DefaultObjectForContextOrNull(cx);
if (compartmentObject)
mAutoCompartment.construct(cx, compartmentObject);
}
}
开发者ID:jrmuizel,项目名称:mozilla-central-skia,代码行数:33,代码来源:nsCxPusher.cpp
示例3: xpc_qsAssertContextOK
void
xpc_qsAssertContextOK(JSContext *cx)
{
XPCJSContextStack* stack = XPCJSRuntime::Get()->GetJSContextStack();
JSContext *topJSContext = stack->Peek();
// This is what we're actually trying to assert here.
MOZ_ASSERT(cx == topJSContext, "wrong context on XPCJSContextStack!");
}
开发者ID:chenghuk,项目名称:mozilla-central,代码行数:10,代码来源:XPCQuickStubs.cpp
示例4: NS_ASSERTION
// static
void
XPCLazyCallContext::AssertContextIsTopOfStack(JSContext* cx)
{
XPCPerThreadData* tls = XPCPerThreadData::GetData(cx);
XPCJSContextStack* stack = tls->GetJSContextStack();
JSContext* topJSContext;
nsresult rv = stack->Peek(&topJSContext);
NS_ASSERTION(NS_SUCCEEDED(rv), "XPCJSContextStack::Peek failed");
NS_ASSERTION(cx == topJSContext, "wrong context on XPCJSContextStack!");
}
开发者ID:rfk,项目名称:services-central,代码行数:13,代码来源:XPCCallContext.cpp
示例5: xpc_qsAssertContextOK
void
xpc_qsAssertContextOK(JSContext *cx)
{
XPCPerThreadData *thread = XPCPerThreadData::GetData(cx);
XPCJSContextStack* stack = thread->GetJSContextStack();
JSContext* topJSContext = nsnull;
nsresult rv = stack->Peek(&topJSContext);
NS_ASSERTION(NS_SUCCEEDED(rv), "XPCJSContextStack::Peek failed");
// This is what we're actually trying to assert here.
NS_ASSERTION(cx == topJSContext, "wrong context on XPCJSContextStack!");
NS_ASSERTION(XPCPerThreadData::IsMainThread(cx),
"XPConnect quick stub called on non-main thread");
}
开发者ID:amyvmiwei,项目名称:firefox,代码行数:16,代码来源:xpcquickstubs.cpp
示例6: mScriptIsRunning
AutoCxPusher::AutoCxPusher(JSContext* cx, bool allowNull) : mScriptIsRunning(false)
{
MOZ_ASSERT_IF(!allowNull, cx);
// Hold a strong ref to the nsIScriptContext, if any. This ensures that we
// only destroy the mContext of an nsJSContext when it is not on the cx stack
// (and therefore not in use). See nsJSContext::DestroyJSContext().
if (cx)
mScx = GetScriptContextFromJSContext(cx);
// NB: The GetDynamicScriptContext is historical and might not be sane.
XPCJSContextStack *stack = XPCJSRuntime::Get()->GetJSContextStack();
if (cx && nsJSUtils::GetDynamicScriptContext(cx) && stack->HasJSContext(cx))
{
// If the context is on the stack, that means that a script
// is running at the moment in the context.
mScriptIsRunning = true;
}
if (!stack->Push(cx)) {
MOZ_CRASH();
}
#ifdef DEBUG
mPushedContext = cx;
mCompartmentDepthOnEntry = cx ? js::GetEnterCompartmentDepth(cx) : 0;
#endif
// Enter a request and a compartment for the duration that the cx is on the
// stack if non-null.
//
// NB: We call UnmarkGrayContext so that this can obsolete the need for the
// old XPCAutoRequest as well.
if (cx) {
mAutoRequest.construct(cx);
if (js::DefaultObjectForContextOrNull(cx))
mAutoCompartment.construct(cx, js::DefaultObjectForContextOrNull(cx));
xpc_UnmarkGrayContext(cx);
}
}
开发者ID:hahajung,项目名称:mozilla-central,代码行数:40,代码来源:nsCxPusher.cpp
示例7: if
void
XPCCallContext::Init(XPCContext::LangType callerLanguage,
JSBool callBeginRequest,
JSObject* obj,
JSObject* funobj,
WrapperInitOptions wrapperInitOptions,
jsid name,
uintN argc,
jsval *argv,
jsval *rval)
{
if (!mXPC)
return;
mThreadData = XPCPerThreadData::GetData(mJSContext);
if (!mThreadData)
return;
XPCJSContextStack* stack = mThreadData->GetJSContextStack();
JSContext* topJSContext;
if (!stack || NS_FAILED(stack->Peek(&topJSContext))) {
// If we don't have a stack we're probably in shutdown.
NS_ASSERTION(!stack, "Bad, Peek failed!");
mJSContext = nsnull;
return;
}
if (!mJSContext) {
// This is slightly questionable. If called without an explicit
// JSContext (generally a call to a wrappedJS) we will use the JSContext
// on the top of the JSContext stack - if there is one - *before*
// falling back on the safe JSContext.
// This is good AND bad because it makes calls from JS -> native -> JS
// have JS stack 'continuity' for purposes of stack traces etc.
// Note: this *is* what the pre-XPCCallContext xpconnect did too.
if (topJSContext)
mJSContext = topJSContext;
else if (NS_FAILED(stack->GetSafeJSContext(&mJSContext)) || !mJSContext)
return;
}
if (topJSContext != mJSContext) {
if (NS_FAILED(stack->Push(mJSContext))) {
NS_ERROR("bad!");
return;
}
mContextPopRequired = true;
}
// Get into the request as early as we can to avoid problems with scanning
// callcontexts on other threads from within the gc callbacks.
NS_ASSERTION(!callBeginRequest || mCallerLanguage == NATIVE_CALLER,
"Don't call JS_BeginRequest unless the caller is native.");
if (callBeginRequest)
JS_BeginRequest(mJSContext);
mXPCContext = XPCContext::GetXPCContext(mJSContext);
mPrevCallerLanguage = mXPCContext->SetCallingLangType(mCallerLanguage);
// hook into call context chain for our thread
mPrevCallContext = mThreadData->SetCallContext(this);
// We only need to addref xpconnect once so only do it if this is the first
// context in the chain.
if (!mPrevCallContext)
NS_ADDREF(mXPC);
mState = HAVE_CONTEXT;
if (!obj)
return;
mScopeForNewJSObjects = obj;
mState = HAVE_SCOPE;
mMethodIndex = 0xDEAD;
mState = HAVE_OBJECT;
mTearOff = nsnull;
if (wrapperInitOptions == INIT_SHOULD_LOOKUP_WRAPPER) {
mWrapper = XPCWrappedNative::GetWrappedNativeOfJSObject(mJSContext, obj,
funobj,
&mFlattenedJSObject,
&mTearOff);
if (mWrapper) {
DEBUG_CheckWrapperThreadSafety(mWrapper);
mFlattenedJSObject = mWrapper->GetFlatJSObject();
if (mTearOff)
mScriptableInfo = nsnull;
else
mScriptableInfo = mWrapper->GetScriptableInfo();
} else {
//.........这里部分代码省略.........
开发者ID:rfk,项目名称:services-central,代码行数:101,代码来源:XPCCallContext.cpp
示例8: mState
XPCCallContext::XPCCallContext(XPCContext::LangType callerLanguage,
JSContext* cx /* = nsnull */,
JSObject* obj /* = nsnull */,
JSObject* funobj /* = nsnull */,
jsval name /* = 0 */,
uintN argc /* = NO_ARGS */,
jsval *argv /* = nsnull */,
jsval *rval /* = nsnull */)
: mState(INIT_FAILED),
mXPC(nsXPConnect::GetXPConnect()),
mThreadData(nsnull),
mXPCContext(nsnull),
mJSContext(cx),
mContextPopRequired(JS_FALSE),
mDestroyJSContextInDestructor(JS_FALSE),
mCallerLanguage(callerLanguage),
mCallee(nsnull)
{
// Mark our internal string wrappers as not used. Make sure we do
// this before any early returns, as the destructor will assert
// based on this.
StringWrapperEntry *se =
reinterpret_cast<StringWrapperEntry*>(&mStringWrapperData);
PRUint32 i;
for(i = 0; i < XPCCCX_STRING_CACHE_SIZE; ++i)
{
se[i].mInUse = PR_FALSE;
}
if(!mXPC)
return;
mThreadData = XPCPerThreadData::GetData(mJSContext);
if(!mThreadData)
return;
XPCJSContextStack* stack = mThreadData->GetJSContextStack();
JSContext* topJSContext;
if(!stack || NS_FAILED(stack->Peek(&topJSContext)))
{
// If we don't have a stack we're probably in shutdown.
NS_ASSERTION(!stack, "Bad, Peek failed!");
mJSContext = nsnull;
return;
}
if(!mJSContext)
{
// This is slightly questionable. If called without an explicit
// JSContext (generally a call to a wrappedJS) we will use the JSContext
// on the top of the JSContext stack - if there is one - *before*
// falling back on the safe JSContext.
// This is good AND bad because it makes calls from JS -> native -> JS
// have JS stack 'continuity' for purposes of stack traces etc.
// Note: this *is* what the pre-XPCCallContext xpconnect did too.
if(topJSContext)
mJSContext = topJSContext;
else if(NS_FAILED(stack->GetSafeJSContext(&mJSContext)) || !mJSContext)
return;
}
// Get into the request as early as we can to avoid problems with scanning
// callcontexts on other threads from within the gc callbacks.
if(mCallerLanguage == NATIVE_CALLER)
JS_BeginRequest(mJSContext);
if(topJSContext != mJSContext)
{
if(NS_FAILED(stack->Push(mJSContext)))
{
NS_ERROR("bad!");
return;
}
mContextPopRequired = JS_TRUE;
}
mXPCContext = XPCContext::GetXPCContext(mJSContext);
mPrevCallerLanguage = mXPCContext->SetCallingLangType(mCallerLanguage);
// hook into call context chain for our thread
mPrevCallContext = mThreadData->SetCallContext(this);
// We only need to addref xpconnect once so only do it if this is the first
// context in the chain.
if(!mPrevCallContext)
NS_ADDREF(mXPC);
mState = HAVE_CONTEXT;
if(!obj)
return;
mMethodIndex = 0xDEAD;
mOperandJSObject = obj;
//.........这里部分代码省略.........
开发者ID:jdahlin,项目名称:jslint,代码行数:101,代码来源:xpccallcontext.cpp
示例9: NS_ASSERTION
XPCCallContext::~XPCCallContext()
{
// do cleanup...
PRBool shouldReleaseXPC = PR_FALSE;
if(mXPCContext)
{
mXPCContext->SetCallingLangType(mPrevCallerLanguage);
#ifdef DEBUG
XPCCallContext* old = mThreadData->SetCallContext(mPrevCallContext);
NS_ASSERTION(old == this, "bad pop from per thread data");
#else
(void) mThreadData->SetCallContext(mPrevCallContext);
#endif
shouldReleaseXPC = mPrevCallContext == nsnull;
}
if(mContextPopRequired)
{
XPCJSContextStack* stack = mThreadData->GetJSContextStack();
NS_ASSERTION(stack, "bad!");
if(stack)
{
#ifdef DEBUG
JSContext* poppedCX;
nsresult rv = stack->Pop(&poppedCX);
NS_ASSERTION(NS_SUCCEEDED(rv) && poppedCX == mJSContext, "bad pop");
#else
(void) stack->Pop(nsnull);
#endif
}
}
if(mJSContext)
{
if(mCallerLanguage == NATIVE_CALLER)
JS_EndRequest(mJSContext);
if(mDestroyJSContextInDestructor)
{
#ifdef DEBUG_xpc_hacker
printf("!xpc - doing deferred destruction of JSContext @ %0x\n",
mJSContext);
#endif
NS_ASSERTION(!mThreadData->GetJSContextStack() ||
!mThreadData->GetJSContextStack()->
DEBUG_StackHasJSContext(mJSContext),
"JSContext still in threadjscontextstack!");
JS_DestroyContext(mJSContext);
}
else
{
// Don't clear newborns if JS frames (compilation or execution)
// are active! Doing so violates ancient invariants in the JS
// engine, and it's not necessary to fix JS component leaks.
if(!JS_IsRunning(mJSContext))
JS_ClearNewbornRoots(mJSContext);
}
}
#ifdef DEBUG
{
StringWrapperEntry *se =
reinterpret_cast<StringWrapperEntry*>(&mStringWrapperData);
PRUint32 i;
for(i = 0; i < XPCCCX_STRING_CACHE_SIZE; ++i)
{
NS_ASSERTION(!se[i].mInUse, "Uh, string wrapper still in use!");
}
}
#endif
if(shouldReleaseXPC && mXPC)
NS_RELEASE(mXPC);
}
开发者ID:jdahlin,项目名称:jslint,代码行数:80,代码来源:xpccallcontext.cpp
注:本文中的XPCJSContextStack类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论