XPCContext::~XPCContext() { MOZ_COUNT_DTOR(XPCContext); MOZ_ASSERT(JS_GetSecondContextPrivate(mJSContext) == this, "Must match this"); JS_SetSecondContextPrivate(mJSContext, nullptr); // Iterate over our scopes and tell them that we have been destroyed for (PRCList *scopeptr = PR_NEXT_LINK(&mScopes); scopeptr != &mScopes; scopeptr = PR_NEXT_LINK(scopeptr)) { XPCWrappedNativeScope *scope = static_cast<XPCWrappedNativeScope*>(scopeptr); scope->ClearContext(); } }
XPCContext::XPCContext(XPCJSRuntime* aRuntime, JSContext* aJSContext) : mRuntime(aRuntime), mJSContext(aJSContext), mLastResult(NS_OK), mPendingResult(NS_OK), mCallingLangType(LANG_UNKNOWN) { MOZ_COUNT_CTOR(XPCContext); PR_INIT_CLIST(&mScopes); MOZ_ASSERT(!JS_GetSecondContextPrivate(mJSContext), "Must be null"); JS_SetSecondContextPrivate(mJSContext, this); }
XPCContext::XPCContext(XPCJSRuntime* aRuntime, JSContext* aJSContext) : mRuntime(aRuntime), mJSContext(aJSContext), mLastResult(NS_OK), mPendingResult(NS_OK), mSecurityManager(nsnull), mException(nsnull), mCallingLangType(LANG_UNKNOWN), mSecurityManagerFlags(0) { MOZ_COUNT_CTOR(XPCContext); PR_INIT_CLIST(&mScopes); NS_ASSERTION(!JS_GetSecondContextPrivate(mJSContext), "Must be null"); JS_SetSecondContextPrivate(mJSContext, this); }
XPCContext::~XPCContext() { MOZ_COUNT_DTOR(XPCContext); NS_ASSERTION(JS_GetSecondContextPrivate(mJSContext) == this, "Must match this"); JS_SetSecondContextPrivate(mJSContext, nsnull); NS_IF_RELEASE(mException); NS_IF_RELEASE(mSecurityManager); // Iterate over our scopes and tell them that we have been destroyed for (PRCList *scopeptr = PR_NEXT_LINK(&mScopes); scopeptr != &mScopes; scopeptr = PR_NEXT_LINK(scopeptr)) { XPCWrappedNativeScope *scope = static_cast<XPCWrappedNativeScope*>(scopeptr); scope->ClearContext(); } // we do not call JS_RemoveArgumentFormatter because we now only // delete XPCContext *after* the underlying JSContext is dead }