author | Bobby Holley <bobbyholley@gmail.com> |
Tue, 26 Jun 2012 22:54:18 +0200 | |
changeset 97723 | 17a545fb6702c85e69a2801d8e1e4b7ace1a7383 |
parent 97722 | c7b0713958d6dbcb7fd4b8c2c17c8f6b939d99aa |
child 97724 | 651035b940af0e52815e6689ce5e3e2bdeccc8c6 |
push id | 22993 |
push user | emorley@mozilla.com |
push date | Wed, 27 Jun 2012 10:31:27 +0000 |
treeherder | mozilla-central@1a56f1f011c9 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | mrbkap |
bugs | 758344 |
milestone | 16.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/js/xpconnect/src/XPCComponents.cpp +++ b/js/xpconnect/src/XPCComponents.cpp @@ -3625,45 +3625,55 @@ nsXPCComponents_utils_Sandbox::CallOrCon if (NS_FAILED(rv)) return ThrowAndFail(rv, cx, _retval); *_retval = true; return rv; } -class ContextHolder : public nsISupports +class ContextHolder : public nsIScriptObjectPrincipal + , public nsIScriptContextPrincipal { public: - ContextHolder(JSContext *aOuterCx, JSObject *aSandbox, bool isChrome); + ContextHolder(JSContext *aOuterCx, JSObject *aSandbox, nsIPrincipal *aPrincipal); virtual ~ContextHolder(); JSContext * GetJSContext() { return mJSContext; } + nsIScriptObjectPrincipal * GetObjectPrincipal() { return this; } + nsIPrincipal * GetPrincipal() { return mPrincipal; } + NS_DECL_ISUPPORTS private: static JSBool ContextHolderOperationCallback(JSContext *cx); JSContext* mJSContext; JSContext* mOrigCx; + nsCOMPtr<nsIPrincipal> mPrincipal; }; -NS_IMPL_ISUPPORTS0(ContextHolder) +NS_IMPL_ISUPPORTS2(ContextHolder, nsIScriptObjectPrincipal, nsIScriptContextPrincipal) ContextHolder::ContextHolder(JSContext *aOuterCx, JSObject *aSandbox, - bool isChrome) + nsIPrincipal *aPrincipal) : mJSContext(JS_NewContext(JS_GetRuntime(aOuterCx), 1024)), - mOrigCx(aOuterCx) + mOrigCx(aOuterCx), + mPrincipal(aPrincipal) { if (mJSContext) { + bool isChrome; + DebugOnly<nsresult> rv = XPCWrapper::GetSecurityManager()-> + IsSystemPrincipal(mPrincipal, &isChrome); + MOZ_ASSERT(NS_SUCCEEDED(rv)); bool allowXML = Preferences::GetBool(isChrome ? "javascript.options.xml.chrome" : "javascript.options.xml.content"); JSAutoRequest ar(mJSContext); JS_SetOptions(mJSContext, JS_GetOptions(mJSContext) | JSOPTION_DONT_REPORT_UNCAUGHT | @@ -3811,36 +3821,33 @@ xpc_EvalInSandbox(JSContext *cx, JSObjec JSAutoRequest req(cx); callingScope = JS_GetGlobalForScopeChain(cx); if (!callingScope) { return NS_ERROR_FAILURE; } } - bool isChrome; - nsresult rv = XPCWrapper::GetSecurityManager()->IsSystemPrincipal(prin, &isChrome); - NS_ENSURE_SUCCESS(rv, rv); - nsRefPtr<ContextHolder> sandcx = new ContextHolder(cx, sandbox, isChrome); + nsRefPtr<ContextHolder> sandcx = new ContextHolder(cx, sandbox, prin); if (!sandcx || !sandcx->GetJSContext()) { JS_ReportError(cx, "Can't prepare context for evalInSandbox"); return NS_ERROR_OUT_OF_MEMORY; } if (jsVersion != JSVERSION_DEFAULT) JS_SetVersion(sandcx->GetJSContext(), jsVersion); XPCJSContextStack *stack = XPCJSRuntime::Get()->GetJSContextStack(); MOZ_ASSERT(stack); if (!stack->Push(sandcx->GetJSContext())) { JS_ReportError(cx, "Unable to initialize XPConnect with the sandbox context"); return NS_ERROR_FAILURE; } - rv = NS_OK; + nsresult rv = NS_OK; { JSAutoRequest req(sandcx->GetJSContext()); JSAutoEnterCompartment ac; if (!ac.enter(sandcx->GetJSContext(), sandbox)) { if (stack) unused << stack->Pop();