diff --git a/caps/idl/nsIPrincipal.idl b/caps/idl/nsIPrincipal.idl index 44cfbc47514..97d4449ad14 100644 --- a/caps/idl/nsIPrincipal.idl +++ b/caps/idl/nsIPrincipal.idl @@ -43,11 +43,13 @@ #include "nsISerializable.idl" %{C++ +struct JSContext; struct JSPrincipals; %} interface nsIURI; +[ptr] native JSContext(JSContext); [ptr] native JSPrincipals(JSPrincipals); [uuid(ff9313d0-25e1-11d2-8160-006008119d7a)] @@ -90,7 +92,7 @@ interface nsIPrincipal : nsISerializable * Returns the JS equivalent of the principal. * @see JSPrincipals.h */ - readonly attribute JSPrincipals jsPrincipals; + JSPrincipals getJSPrincipals(in JSContext cx); /** * The domain security policy of the principal. diff --git a/caps/src/nsJSPrincipals.cpp b/caps/src/nsJSPrincipals.cpp index 81f64dd3e82..bc74ea21dc6 100644 --- a/caps/src/nsJSPrincipals.cpp +++ b/caps/src/nsJSPrincipals.cpp @@ -141,7 +141,7 @@ nsTranscodeJSPrincipals(JSXDRState *xdr, JSPrincipals **jsprinp) nsMemory::Free(olddata); ::JS_XDRMemSetData(xdr, data, size); - prin->GetJsPrincipals(jsprinp); + prin->GetJSPrincipals(xdr->cx, jsprinp); } } } diff --git a/caps/src/nsPrincipal.cpp b/caps/src/nsPrincipal.cpp index 0e06a14b056..98def0efefe 100755 --- a/caps/src/nsPrincipal.cpp +++ b/caps/src/nsPrincipal.cpp @@ -141,16 +141,12 @@ nsPrincipal::~nsPrincipal(void) } NS_IMETHODIMP -nsPrincipal::GetJsPrincipals(JSPrincipals **jsprin) +nsPrincipal::GetJSPrincipals(JSContext *cx, JSPrincipals **jsprin) { NS_PRECONDITION(mJSPrincipals.nsIPrincipalPtr, "mJSPrincipals is uninitalized!"); + JSPRINCIPALS_HOLD(cx, &mJSPrincipals); *jsprin = &mJSPrincipals; - - // JSPRINCIPALS_HOLD does not use its first argument. - // Just use a dummy cx to save the codesize. - JSPRINCIPALS_HOLD(nsnull, *jsprin); - return NS_OK; } diff --git a/caps/src/nsSystemPrincipal.cpp b/caps/src/nsSystemPrincipal.cpp index 85284ee4d18..9d268a82bd5 100644 --- a/caps/src/nsSystemPrincipal.cpp +++ b/caps/src/nsSystemPrincipal.cpp @@ -228,12 +228,12 @@ nsSystemPrincipal::SetSecurityPolicy(void* aSecurityPolicy) } NS_IMETHODIMP -nsSystemPrincipal::GetJsPrincipals(JSPrincipals **jsprin) +nsSystemPrincipal::GetJSPrincipals(JSContext *cx, JSPrincipals **jsprin) { NS_PRECONDITION(mJSPrincipals.nsIPrincipalPtr, "mJSPrincipals is uninitalized!"); + JSPRINCIPALS_HOLD(cx, &mJSPrincipals); *jsprin = &mJSPrincipals; - JSPRINCIPALS_HOLD(nsnull, *jsprin); return NS_OK; } diff --git a/dom/src/base/nsJSEnvironment.cpp b/dom/src/base/nsJSEnvironment.cpp index 18d99776a85..24648166265 100644 --- a/dom/src/base/nsJSEnvironment.cpp +++ b/dom/src/base/nsJSEnvironment.cpp @@ -628,7 +628,7 @@ nsJSContext::EvaluateStringWithValue(const nsAString& aScript, JSPrincipals *jsprin; nsCOMPtr principal = aPrincipal; if (aPrincipal) { - aPrincipal->GetJsPrincipals(&jsprin); + aPrincipal->GetJSPrincipals(mContext, &jsprin); } else { nsCOMPtr global; @@ -641,7 +641,7 @@ nsJSContext::EvaluateStringWithValue(const nsAString& aScript, rv = objPrincipal->GetPrincipal(getter_AddRefs(principal)); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; - principal->GetJsPrincipals(&jsprin); + principal->GetJSPrincipals(mContext, &jsprin); } // From here on, we must JSPRINCIPALS_DROP(jsprin) before returning... @@ -806,7 +806,7 @@ nsJSContext::EvaluateString(const nsAString& aScript, JSPrincipals *jsprin; nsCOMPtr principal = aPrincipal; if (aPrincipal) { - aPrincipal->GetJsPrincipals(&jsprin); + aPrincipal->GetJSPrincipals(mContext, &jsprin); } else { nsCOMPtr global; @@ -819,7 +819,7 @@ nsJSContext::EvaluateString(const nsAString& aScript, rv = objPrincipal->GetPrincipal(getter_AddRefs(principal)); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; - principal->GetJsPrincipals(&jsprin); + principal->GetJSPrincipals(mContext, &jsprin); } // From here on, we must JSPRINCIPALS_DROP(jsprin) before returning... @@ -919,7 +919,7 @@ nsJSContext::CompileScript(const PRUnichar* aText, aScopeObject = ::JS_GetGlobalObject(mContext); JSPrincipals *jsprin; - aPrincipal->GetJsPrincipals(&jsprin); + aPrincipal->GetJSPrincipals(mContext, &jsprin); // From here on, we must JSPRINCIPALS_DROP(jsprin) before returning... PRBool ok = PR_FALSE; @@ -1093,7 +1093,7 @@ nsJSContext::CompileEventHandler(void *aTarget, nsIAtom *aName, getter_AddRefs(prin)); NS_ENSURE_SUCCESS(rv, rv); - prin->GetJsPrincipals(&jsprin); + prin->GetJSPrincipals(mContext, &jsprin); NS_ENSURE_TRUE(jsprin, NS_ERROR_NOT_AVAILABLE); } @@ -1146,7 +1146,7 @@ nsJSContext::CompileFunction(void* aTarget, nsCOMPtr prin; if (NS_FAILED(globalData->GetPrincipal(getter_AddRefs(prin)))) return NS_ERROR_FAILURE; - prin->GetJsPrincipals(&jsprin); + prin->GetJSPrincipals(mContext, &jsprin); } } diff --git a/embedding/browser/activex/src/plugin/LegacyPlugin.cpp b/embedding/browser/activex/src/plugin/LegacyPlugin.cpp index 7057e27f766..013b19b7efd 100644 --- a/embedding/browser/activex/src/plugin/LegacyPlugin.cpp +++ b/embedding/browser/activex/src/plugin/LegacyPlugin.cpp @@ -404,7 +404,7 @@ MozAxAutoPushJSContext::MozAxAutoPushJSContext(JSContext *cx, if (NS_SUCCEEDED(mPushResult)) { JSPrincipals* jsprinc; - principal->GetJsPrincipals(&jsprinc); + principal->GetJSPrincipals(cx, &jsprinc); mFrame.script = JS_CompileScriptForPrincipals(cx, JS_GetGlobalObject(cx), jsprinc, "", 0, "", 1); diff --git a/js/src/liveconnect/nsCLiveconnect.cpp b/js/src/liveconnect/nsCLiveconnect.cpp index a1e54eb2701..c52a02b37d2 100644 --- a/js/src/liveconnect/nsCLiveconnect.cpp +++ b/js/src/liveconnect/nsCLiveconnect.cpp @@ -210,7 +210,7 @@ AutoPushJSContext::AutoPushJSContext(nsISupports* aSecuritySupports, if (!hasScript) { JSPrincipals* jsprinc; - principal->GetJsPrincipals(&jsprinc); + principal->GetJSPrincipals(cx, &jsprinc); mFrame.script = JS_CompileScriptForPrincipals(cx, JS_GetGlobalObject(cx), jsprinc, "", 0, "", 1); diff --git a/js/src/xpconnect/loader/mozJSComponentLoader.cpp b/js/src/xpconnect/loader/mozJSComponentLoader.cpp index 47749187b47..e67953465de 100644 --- a/js/src/xpconnect/loader/mozJSComponentLoader.cpp +++ b/js/src/xpconnect/loader/mozJSComponentLoader.cpp @@ -269,7 +269,7 @@ EvalInSandbox(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, NS_FAILED(secman->GetCodebasePrincipal(iURL, getter_AddRefs(principal))) || !principal || - NS_FAILED(principal->GetJsPrincipals(&jsPrincipals)) || + NS_FAILED(principal->GetJSPrincipals(cx, &jsPrincipals)) || !jsPrincipals) { JS_ReportError(cx, "Can't get principals for evalInSandbox"); return JS_FALSE; @@ -997,7 +997,7 @@ mozJSComponentLoader::GlobalForLocation(const char *aLocation, nsCOMPtr backstagePass = new BackstagePass(mSystemPrincipal); - rv = mSystemPrincipal->GetJsPrincipals(&jsPrincipals); + rv = mSystemPrincipal->GetJSPrincipals(cx, &jsPrincipals); if (NS_FAILED(rv) || !jsPrincipals) return nsnull; diff --git a/js/src/xpconnect/loader/mozJSSubScriptLoader.cpp b/js/src/xpconnect/loader/mozJSSubScriptLoader.cpp index 4ba3cb45874..4d9bed854d0 100644 --- a/js/src/xpconnect/loader/mozJSSubScriptLoader.cpp +++ b/js/src/xpconnect/loader/mozJSSubScriptLoader.cpp @@ -299,7 +299,7 @@ mozJSSubScriptLoader::LoadSubScript (const PRUnichar * /*url*/ /* we can't hold onto jsPrincipals as a module var because the * JSPRINCIPALS_DROP macro takes a JSContext, which we won't have in the * destructor */ - rv = mSystemPrincipal->GetJsPrincipals(&jsPrincipals); + rv = mSystemPrincipal->GetJSPrincipals(cx, &jsPrincipals); if (NS_FAILED(rv) || !jsPrincipals) { delete[] buf; return rv; diff --git a/modules/oji/src/lcglue.cpp b/modules/oji/src/lcglue.cpp index b29ccb557ba..51a6cf39d34 100644 --- a/modules/oji/src/lcglue.cpp +++ b/modules/oji/src/lcglue.cpp @@ -352,7 +352,7 @@ get_JSPrincipals_from_java_caller_impl(JNIEnv *pJNIEnv, JSContext *pJSContext, v rv = ssm->GetCodebasePrincipal(codebaseURI, getter_AddRefs(principal)); if (NS_SUCCEEDED(rv)) { JSPrincipals* jsprincipals; - principal->GetJsPrincipals(&jsprincipals); + principal->GetJSPrincipals(pJSContext, &jsprincipals); return jsprincipals; } } @@ -362,7 +362,7 @@ get_JSPrincipals_from_java_caller_impl(JNIEnv *pJNIEnv, JSContext *pJSContext, v nsCOMPtr principal = do_QueryInterface(credentials); if (principal) { JSPrincipals* jsprincipals; - principal->GetJsPrincipals(&jsprincipals); + principal->GetJSPrincipals(pJSContext, &jsprincipals); return jsprincipals; } } diff --git a/security/manager/ssl/src/nsCrypto.cpp b/security/manager/ssl/src/nsCrypto.cpp index 415f0ca6ec0..a0b451cfdef 100644 --- a/security/manager/ssl/src/nsCrypto.cpp +++ b/security/manager/ssl/src/nsCrypto.cpp @@ -1787,13 +1787,14 @@ nsCryptoRunnable::Run() { nsNSSShutDownPreventionLock locker; JSPrincipals *principals; + JSContext *cx = m_args->m_cx; - nsresult rv = m_args->m_principals->GetJsPrincipals(&principals); + nsresult rv = m_args->m_principals->GetJSPrincipals(cx, &principals); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; jsval retval; - if (JS_EvaluateScriptForPrincipals(m_args->m_cx, m_args->m_scope, principals, + if (JS_EvaluateScriptForPrincipals(cx, m_args->m_scope, principals, m_args->m_jsCallback, strlen(m_args->m_jsCallback), nsnull, 0,