diff --git a/caps/include/nsScriptSecurityManager.h b/caps/include/nsScriptSecurityManager.h index a0b897eeb96e..14d7f0a75a79 100644 --- a/caps/include/nsScriptSecurityManager.h +++ b/caps/include/nsScriptSecurityManager.h @@ -426,7 +426,7 @@ private: nsresult CheckPropertyAccessImpl(PRUint32 aAction, - nsIXPCNativeCallContext* aCallContext, + nsAXPCNativeCallContext* aCallContext, JSContext* cx, JSObject* aJSObject, nsISupports* aObj, nsIURI* aTargetURI, nsIClassInfo* aClassInfo, diff --git a/caps/src/nsScriptSecurityManager.cpp b/caps/src/nsScriptSecurityManager.cpp index 0b02129b41f5..ca0cf69543c6 100644 --- a/caps/src/nsScriptSecurityManager.cpp +++ b/caps/src/nsScriptSecurityManager.cpp @@ -726,7 +726,7 @@ nsScriptSecurityManager::CheckSameOriginPrincipal(nsIPrincipal* aSourcePrincipal nsresult nsScriptSecurityManager::CheckPropertyAccessImpl(PRUint32 aAction, - nsIXPCNativeCallContext* aCallContext, + nsAXPCNativeCallContext* aCallContext, JSContext* cx, JSObject* aJSObject, nsISupports* aObj, nsIURI* aTargetURI, nsIClassInfo* aClassInfo, @@ -939,8 +939,8 @@ nsScriptSecurityManager::CheckPropertyAccessImpl(PRUint32 aAction, if (sXPConnect) { - nsCOMPtr xpcCallContext; - sXPConnect->GetCurrentNativeCallContext(getter_AddRefs(xpcCallContext)); + nsAXPCNativeCallContext *xpcCallContext = nsnull; + sXPConnect->GetCurrentNativeCallContext(&xpcCallContext); if (xpcCallContext) xpcCallContext->SetExceptionWasThrown(PR_TRUE); } @@ -1545,8 +1545,8 @@ nsScriptSecurityManager::ReportError(JSContext* cx, const nsAString& messageTag, // Tell XPConnect that an exception was thrown, if appropriate if (sXPConnect) { - nsCOMPtr xpcCallContext; - sXPConnect->GetCurrentNativeCallContext(getter_AddRefs(xpcCallContext)); + nsAXPCNativeCallContext* xpcCallContext = nsnull; + sXPConnect->GetCurrentNativeCallContext(&xpcCallContext); if (xpcCallContext) xpcCallContext->SetExceptionWasThrown(PR_TRUE); } @@ -3123,7 +3123,7 @@ nsScriptSecurityManager::CanGetService(JSContext *cx, NS_IMETHODIMP nsScriptSecurityManager::CanAccess(PRUint32 aAction, - nsIXPCNativeCallContext* aCallContext, + nsAXPCNativeCallContext* aCallContext, JSContext* cx, JSObject* aJSObject, nsISupports* aObj, diff --git a/content/base/src/nsContentUtils.cpp b/content/base/src/nsContentUtils.cpp index 25ad6c9872b4..01b70ca956b4 100644 --- a/content/base/src/nsContentUtils.cpp +++ b/content/base/src/nsContentUtils.cpp @@ -2669,8 +2669,8 @@ nsContentUtils::NotifyXPCIfExceptionPending(JSContext* aCx) return; } - nsCOMPtr nccx; - XPConnect()->GetCurrentNativeCallContext(getter_AddRefs(nccx)); + nsAXPCNativeCallContext *nccx = nsnull; + XPConnect()->GetCurrentNativeCallContext(&nccx); if (nccx) { // Check to make sure that the JSContext that nccx will mess with is the // same as the JSContext we've set an exception on. If they're not the diff --git a/content/base/src/nsDOMParser.cpp b/content/base/src/nsDOMParser.cpp index e38dd0a09d58..81a418a9f5ae 100644 --- a/content/base/src/nsDOMParser.cpp +++ b/content/base/src/nsDOMParser.cpp @@ -490,10 +490,10 @@ nsDOMParser::Init() { AttemptedInitMarker marker(&mAttemptedInit); - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; nsresult rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_TRUE(ncc, NS_ERROR_UNEXPECTED); diff --git a/content/base/src/nsScriptLoader.cpp b/content/base/src/nsScriptLoader.cpp index 61d3faf120ea..f7caf28a4c54 100644 --- a/content/base/src/nsScriptLoader.cpp +++ b/content/base/src/nsScriptLoader.cpp @@ -628,9 +628,9 @@ nsScriptLoader::EvaluateScript(nsScriptLoadRequest* aRequest, context->SetProcessingScriptTag(oldProcessingScriptTag); if (stid == nsIProgrammingLanguage::JAVASCRIPT) { - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); if (ncc) { NS_ASSERTION(!::JS_IsExceptionPending(cx), diff --git a/content/base/src/nsXMLHttpRequest.cpp b/content/base/src/nsXMLHttpRequest.cpp index 4444c187aa15..b84253328cf3 100644 --- a/content/base/src/nsXMLHttpRequest.cpp +++ b/content/base/src/nsXMLHttpRequest.cpp @@ -1373,10 +1373,10 @@ nsXMLHttpRequest::Open(const nsACString& method, const nsACString& url) PRBool async = PR_TRUE; nsAutoString user, password; - nsCOMPtr cc; + nsAXPCNativeCallContext *cc = nsnull; nsIXPConnect *xpc = nsContentUtils::XPConnect(); if (xpc) { - rv = xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)); + rv = xpc->GetCurrentNativeCallContext(&cc); } if (NS_SUCCEEDED(rv) && cc) { diff --git a/content/canvas/src/nsCanvasRenderingContext2D.cpp b/content/canvas/src/nsCanvasRenderingContext2D.cpp index bf2fc52da2b8..550f31cd6d01 100644 --- a/content/canvas/src/nsCanvasRenderingContext2D.cpp +++ b/content/canvas/src/nsCanvasRenderingContext2D.cpp @@ -1853,9 +1853,9 @@ nsCanvasRenderingContext2D::DrawImage() { nsresult rv; - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (!ncc) @@ -2379,9 +2379,9 @@ nsCanvasRenderingContext2D::GetImageData() return NS_ERROR_DOM_SECURITY_ERR; } - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; nsresult rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (!ncc) @@ -2504,9 +2504,9 @@ nsCanvasRenderingContext2D::PutImageData() { nsresult rv; - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (!ncc) diff --git a/content/html/content/src/nsHTMLCanvasElement.cpp b/content/html/content/src/nsHTMLCanvasElement.cpp index 5d833cea83c1..42a6160e9c8b 100644 --- a/content/html/content/src/nsHTMLCanvasElement.cpp +++ b/content/html/content/src/nsHTMLCanvasElement.cpp @@ -287,9 +287,9 @@ nsHTMLCanvasElement::ToDataURL(nsAString& aDataURL) { nsresult rv; - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (!ncc) diff --git a/content/html/document/src/nsHTMLDocument.cpp b/content/html/document/src/nsHTMLDocument.cpp index 0dd6808f745c..35482a9012c1 100644 --- a/content/html/document/src/nsHTMLDocument.cpp +++ b/content/html/document/src/nsHTMLDocument.cpp @@ -2485,10 +2485,10 @@ nsHTMLDocument::Writeln(const nsAString& aText) nsresult nsHTMLDocument::ScriptWriteCommon(PRBool aNewlineTerminate) { - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; nsresult rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (ncc) { diff --git a/content/xslt/src/xslt/txMozillaXSLTProcessor.cpp b/content/xslt/src/xslt/txMozillaXSLTProcessor.cpp index 5fae537ed225..d0756d253626 100644 --- a/content/xslt/src/xslt/txMozillaXSLTProcessor.cpp +++ b/content/xslt/src/xslt/txMozillaXSLTProcessor.cpp @@ -1450,8 +1450,8 @@ txVariable::Convert(nsIVariant *aValue, txAExprResult** aResult) do_GetService(nsIXPConnect::GetCID(), &rv); NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr cc; - rv = xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)); + nsAXPCNativeCallContext *cc = nsnull; + rv = xpc->GetCurrentNativeCallContext(&cc); NS_ENSURE_SUCCESS(rv, rv); JSContext* cx; diff --git a/dom/src/base/nsGlobalWindow.cpp b/dom/src/base/nsGlobalWindow.cpp index 0c2e6307afe8..a792d227b667 100644 --- a/dom/src/base/nsGlobalWindow.cpp +++ b/dom/src/base/nsGlobalWindow.cpp @@ -3917,10 +3917,10 @@ nsGlobalWindow::Prompt(nsAString& aReturn) NS_ENSURE_STATE(mDocShell); nsresult rv = NS_OK; - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (!ncc) @@ -4785,10 +4785,10 @@ nsGlobalWindow::Open(nsIDOMWindow **_retval) { *_retval = nsnull; - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; nsresult rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (!ncc) @@ -4857,9 +4857,9 @@ nsGlobalWindow::OpenDialog(nsIDOMWindow** _retval) return NS_ERROR_DOM_SECURITY_ERR; } - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; nsresult rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (!ncc) @@ -5666,10 +5666,10 @@ nsGlobalWindow::Find(PRBool *aDidFind) // We get the arguments passed to the function using the XPConnect native // call context. - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); NS_ASSERTION(ncc, "No Native Call Context." @@ -7141,9 +7141,9 @@ nsGlobalWindow::SetTimeoutOrInterval(PRBool aIsInterval, PRInt32 *aReturn) // inner window that's calling window.setTimeout(). if (IsOuterWindow()) { - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; nsresult rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (!ncc) { @@ -7584,10 +7584,10 @@ nsGlobalWindow::ClearTimeoutOrInterval() FORWARD_TO_INNER(ClearTimeoutOrInterval, (), NS_ERROR_NOT_INITIALIZED); nsresult rv = NS_OK; - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (!ncc) @@ -8854,9 +8854,9 @@ nsNavigator::sPrefInternal_id = JSVAL_VOID; NS_IMETHODIMP nsNavigator::Preference() { - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; nsresult rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (!ncc) diff --git a/dom/src/base/nsHistory.cpp b/dom/src/base/nsHistory.cpp index 2efa1c491f33..c39c480954b9 100644 --- a/dom/src/base/nsHistory.cpp +++ b/dom/src/base/nsHistory.cpp @@ -248,9 +248,9 @@ nsHistory::Go(PRInt32 aDelta) NS_IMETHODIMP nsHistory::Go() { - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; nsresult rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (!ncc) diff --git a/dom/src/base/nsJSTimeoutHandler.cpp b/dom/src/base/nsJSTimeoutHandler.cpp index 989f4dd3c0cb..775a207f4cb1 100644 --- a/dom/src/base/nsJSTimeoutHandler.cpp +++ b/dom/src/base/nsJSTimeoutHandler.cpp @@ -176,9 +176,9 @@ nsJSScriptTimeoutHandler::Init(nsIScriptContext *aContext, PRBool *aIsInterval, mContext = aContext; - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; nsresult rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (!ncc) diff --git a/dom/src/base/nsLocation.cpp b/dom/src/base/nsLocation.cpp index 8945b0278f95..8f9758f711b1 100644 --- a/dom/src/base/nsLocation.cpp +++ b/dom/src/base/nsLocation.cpp @@ -867,9 +867,9 @@ nsLocation::Reload(PRBool aForceget) NS_IMETHODIMP nsLocation::Reload() { - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; nsresult rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (!ncc) diff --git a/dom/src/base/nsPluginArray.cpp b/dom/src/base/nsPluginArray.cpp index 6b80b1025daf..e05dbb0d1c54 100644 --- a/dom/src/base/nsPluginArray.cpp +++ b/dom/src/base/nsPluginArray.cpp @@ -245,9 +245,9 @@ nsPluginArray::Refresh(PRBool aReloadDocuments) NS_IMETHODIMP nsPluginArray::Refresh() { - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; nsresult rv = nsContentUtils::XPConnect()-> - GetCurrentNativeCallContext(getter_AddRefs(ncc)); + GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, rv); if (!ncc) diff --git a/dom/src/json/nsJSON.cpp b/dom/src/json/nsJSON.cpp index ea1c58ad0599..02a410554b84 100644 --- a/dom/src/json/nsJSON.cpp +++ b/dom/src/json/nsJSON.cpp @@ -193,8 +193,8 @@ nsJSON::EncodeInternal(nsJSONWriter *writer) if (!xpc) return NS_ERROR_FAILURE; - nsCOMPtr cc; - rv = xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)); + nsAXPCNativeCallContext *cc = nsnull; + rv = xpc->GetCurrentNativeCallContext(&cc); NS_ENSURE_SUCCESS(rv, rv); JSContext *cx = nsnull; @@ -581,8 +581,8 @@ nsJSON::DecodeInternal(nsIInputStream *aStream, if (!xpc) return NS_ERROR_FAILURE; - nsCOMPtr cc; - rv = xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)); + nsAXPCNativeCallContext *cc = nsnull; + rv = xpc->GetCurrentNativeCallContext(&cc); NS_ENSURE_SUCCESS(rv, rv); jsval *retvalPtr; diff --git a/extensions/canvas3d/src/nsCanvasRenderingContextGL.h b/extensions/canvas3d/src/nsCanvasRenderingContextGL.h index 7928ead51f28..efcd47e46773 100644 --- a/extensions/canvas3d/src/nsCanvasRenderingContextGL.h +++ b/extensions/canvas3d/src/nsCanvasRenderingContextGL.h @@ -272,7 +272,7 @@ protected: class NativeJSContext { public: NativeJSContext() { - error = gXPConnect->GetCurrentNativeCallContext(getter_AddRefs(ncc)); + error = gXPConnect->GetCurrentNativeCallContext(&ncc); if (NS_FAILED(error)) return; @@ -361,7 +361,7 @@ public: ncc->SetReturnValueWasSet(PR_TRUE); } - nsCOMPtr ncc; + nsAXPCNativeCallContext ncc; nsresult error; JSContext *ctx; PRUint32 argc; diff --git a/extensions/pref/autoconfig/src/nsJSConfigTriggers.cpp b/extensions/pref/autoconfig/src/nsJSConfigTriggers.cpp index 029196468e56..7454eeeafc89 100644 --- a/extensions/pref/autoconfig/src/nsJSConfigTriggers.cpp +++ b/extensions/pref/autoconfig/src/nsJSConfigTriggers.cpp @@ -94,7 +94,7 @@ AutoConfigSecMan::CanGetService(JSContext *aJSContext, const nsCID & aCID) NS_IMETHODIMP AutoConfigSecMan::CanAccess(PRUint32 aAction, - nsIXPCNativeCallContext *aCallContext, + nsAXPCNativeCallContext *aCallContext, JSContext *aJSContext, JSObject *aJSObject, nsISupports *aObj, nsIClassInfo *aClassInfo, jsval aName, void **aPolicy) diff --git a/js/jsd/jsd_xpc.cpp b/js/jsd/jsd_xpc.cpp index 6f236bf5eb4f..97db7016e79c 100644 --- a/js/jsd/jsd_xpc.cpp +++ b/js/jsd/jsd_xpc.cpp @@ -2267,8 +2267,8 @@ jsdValue::GetWrappedValue() if (NS_FAILED(rv)) return rv; - nsCOMPtr cc; - rv = xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)); + nsAXPCNativeCallContext *cc = nsnull; + rv = xpc->GetCurrentNativeCallContext(&cc); if (NS_FAILED(rv)) return rv; @@ -2468,8 +2468,8 @@ jsdService::On (void) nsCOMPtr xpc = do_GetService(nsIXPConnect::GetCID(), &rv); if (NS_FAILED(rv)) return rv; - nsCOMPtr cc; - rv = xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)); + nsAXPCNativeCallContext *cc = nsnull; + rv = xpc->GetCurrentNativeCallContext(&cc); if (NS_FAILED(rv)) return rv; JSContext *cx; @@ -2938,8 +2938,8 @@ jsdService::WrapValue(jsdIValue **_rval) if (NS_FAILED(rv)) return rv; - nsCOMPtr cc; - rv = xpc->GetCurrentNativeCallContext (getter_AddRefs(cc)); + nsAXPCNativeCallContext *cc = nsnull; + rv = xpc->GetCurrentNativeCallContext (&cc); if (NS_FAILED(rv)) return rv; diff --git a/js/src/xpconnect/idl/nsIXPCSecurityManager.idl b/js/src/xpconnect/idl/nsIXPCSecurityManager.idl index 781b8e02ba9f..afe7122813da 100644 --- a/js/src/xpconnect/idl/nsIXPCSecurityManager.idl +++ b/js/src/xpconnect/idl/nsIXPCSecurityManager.idl @@ -40,12 +40,15 @@ #include "nsISupports.idl" +[ptr] native nsAXPCNativeCallContextPtr(nsAXPCNativeCallContext); + %{ C++ #include "jspubtd.h" + +class nsAXPCNativeCallContext; %} interface nsIClassInfo; -interface nsIXPCNativeCallContext; [ptr] native JSContextPtr(JSContext); [ptr] native JSObjectPtr(JSObject); @@ -100,7 +103,7 @@ interface nsIXPCSecurityManager : nsISupports const PRUint32 ACCESS_SET_PROPERTY = 2; void CanAccess(in PRUint32 aAction, - in nsIXPCNativeCallContext aCallContext, + in nsAXPCNativeCallContextPtr aCallContext, in JSContextPtr aJSContext, in JSObjectPtr aJSObject, in nsISupports aObj, diff --git a/js/src/xpconnect/idl/nsIXPConnect.idl b/js/src/xpconnect/idl/nsIXPConnect.idl index f8bed33f559a..100f0b57ae73 100644 --- a/js/src/xpconnect/idl/nsIXPConnect.idl +++ b/js/src/xpconnect/idl/nsIXPConnect.idl @@ -1,4 +1,4 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- +/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 @@ -54,6 +54,7 @@ %{ C++ #include "jspubtd.h" #include "xptinfo.h" +#include "nsAXPCNativeCallContext.h" %} /***************************************************************************/ @@ -68,6 +69,7 @@ [ptr] native voidPtrPtr(void*); [ptr] native nsScriptObjectTracerPtr(nsScriptObjectTracer); [ref] native nsCCTraversalCallbackRef(nsCycleCollectionTraversalCallback); +[ptr] native nsAXPCNativeCallContextPtr(nsAXPCNativeCallContext); /***************************************************************************/ @@ -254,50 +256,6 @@ interface nsIXPConnectWrappedJS : nsIXPConnectJSObjectHolder /***************************************************************************/ -/** -* This is a somewhat special interface. It is available from the global -* nsIXPConnect object when native methods have been called. It is only relevant -* to the currently called native method on the given JSContext/thread. Holding -* a reference past that time (or while other native methods are being called) -* will not assure access to this data. -*/ - -[uuid(0FA68A60-8289-11d3-BB1A-00805F8A5DD7)] -interface nsIXPCNativeCallContext : nsISupports -{ - - readonly attribute nsISupports Callee; - readonly attribute PRUint16 CalleeMethodIndex; - readonly attribute nsIXPConnectWrappedNative CalleeWrapper; - readonly attribute JSContextPtr JSContext; - readonly attribute PRUint32 Argc; - readonly attribute JSValPtr ArgvPtr; - /** - * This may be NULL if the JS caller is ignoring the result of the call. - */ - readonly attribute JSValPtr RetValPtr; - /** - * Set this if JS_SetPendingException has been called. Return NS_OK or - * else this will be ignored and the native method's nsresult will be - * converted into an exception and thrown into JS as is the normal case. - */ - attribute PRBool ExceptionWasThrown; - - /** - * Set this to indicate that the callee has directly set the return value - * (using RetValPtr and the JSAPI). If set then xpconnect will not attempt - * to overwrite it with the converted retval from the C++ callee. - */ - attribute PRBool ReturnValueWasSet; - - // Methods added since mozilla 0.6.... - - readonly attribute nsIInterfaceInfo CalleeInterface; - readonly attribute nsIClassInfo CalleeClassInfo; -}; - -/***************************************************************************/ - /** * This is a sort of a placeholder interface. It is not intended to be * implemented. It exists to give the nsIXPCSecurityManager an iid on @@ -581,7 +539,7 @@ interface nsIXPConnect : nsISupports void syncJSContexts(); readonly attribute nsIStackFrame CurrentJSStack; - readonly attribute nsIXPCNativeCallContext CurrentNativeCallContext; + readonly attribute nsAXPCNativeCallContextPtr CurrentNativeCallContext; /* pass nsnull to clear pending exception */ attribute nsIException PendingException; diff --git a/js/src/xpconnect/idl/xpcIJSModuleLoader.idl b/js/src/xpconnect/idl/xpcIJSModuleLoader.idl index 0f250ec706c2..926f36afaeea 100644 --- a/js/src/xpconnect/idl/xpcIJSModuleLoader.idl +++ b/js/src/xpconnect/idl/xpcIJSModuleLoader.idl @@ -40,7 +40,7 @@ #include "nsISupports.idl" -interface nsIXPCNativeCallContext; +[ptr] native nsAXPCNativeCallContextPtr(nsAXPCNativeCallContext); %{C++ struct JSObject; @@ -91,5 +91,5 @@ interface xpcIJSModuleLoader : nsISupports */ [noscript] JSObjectPtr importInto(in AUTF8String aResourceURI, in JSObjectPtr targetObj, - in nsIXPCNativeCallContext cc); + in nsAXPCNativeCallContextPtr cc); }; diff --git a/js/src/xpconnect/loader/mozJSComponentLoader.cpp b/js/src/xpconnect/loader/mozJSComponentLoader.cpp index a92ec93edcd9..7afbb0d42d4f 100644 --- a/js/src/xpconnect/loader/mozJSComponentLoader.cpp +++ b/js/src/xpconnect/loader/mozJSComponentLoader.cpp @@ -1310,8 +1310,8 @@ mozJSComponentLoader::Import(const nsACString & registryLocation) do_GetService(kXPConnectServiceContractID, &rv); NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr cc; - rv = xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)); + nsAXPCNativeCallContext *cc = nsnull; + rv = xpc->GetCurrentNativeCallContext(&cc); NS_ENSURE_SUCCESS(rv, rv); #ifdef DEBUG @@ -1392,7 +1392,7 @@ mozJSComponentLoader::Import(const nsACString & registryLocation) NS_IMETHODIMP mozJSComponentLoader::ImportInto(const nsACString & aLocation, JSObject * targetObj, - nsIXPCNativeCallContext * cc, + nsAXPCNativeCallContext * cc, JSObject * *_retval) { nsresult rv; @@ -1528,7 +1528,7 @@ mozJSComponentLoader::ImportInto(const nsACString & aLocation, } nsresult -mozJSComponentLoader::ReportOnCaller(nsIXPCNativeCallContext *cc, +mozJSComponentLoader::ReportOnCaller(nsAXPCNativeCallContext *cc, const char *format, ...) { if (!cc) { return NS_ERROR_FAILURE; diff --git a/js/src/xpconnect/loader/mozJSComponentLoader.h b/js/src/xpconnect/loader/mozJSComponentLoader.h index a0361a9689e2..9ea6e2ac183e 100644 --- a/js/src/xpconnect/loader/mozJSComponentLoader.h +++ b/js/src/xpconnect/loader/mozJSComponentLoader.h @@ -119,7 +119,7 @@ class mozJSComponentLoader : public nsIModuleLoader, nsIURI *uri, JSContext *cx); static void CloseFastLoad(nsITimer *timer, void *closure); void CloseFastLoad(); - nsresult ReportOnCaller(nsIXPCNativeCallContext *cc, + nsresult ReportOnCaller(nsAXPCNativeCallContext *cc, const char *format, ...); nsCOMPtr mCompMgr; diff --git a/js/src/xpconnect/loader/mozJSSubScriptLoader.cpp b/js/src/xpconnect/loader/mozJSSubScriptLoader.cpp index a52c6874302f..2c771e447747 100644 --- a/js/src/xpconnect/loader/mozJSSubScriptLoader.cpp +++ b/js/src/xpconnect/loader/mozJSSubScriptLoader.cpp @@ -102,8 +102,8 @@ mozJSSubScriptLoader::LoadSubScript (const PRUnichar * /*url*/ nsCOMPtr xpc = do_GetService(nsIXPConnect::GetCID()); if (!xpc) return NS_ERROR_FAILURE; - nsCOMPtr cc; - rv = xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)); + nsAXPCNativeCallContext *cc = nsnull; + rv = xpc->GetCurrentNativeCallContext(&cc); if (NS_FAILED(rv)) return NS_ERROR_FAILURE; JSContext *cx; diff --git a/js/src/xpconnect/public/Makefile.in b/js/src/xpconnect/public/Makefile.in index ae126d0cbe6e..213b7903d169 100644 --- a/js/src/xpconnect/public/Makefile.in +++ b/js/src/xpconnect/public/Makefile.in @@ -46,6 +46,7 @@ include $(DEPTH)/config/autoconf.mk MODULE = xpconnect EXPORTS = \ + nsAXPCNativeCallContext.h \ xpc_map_end.h \ $(NULL) diff --git a/js/src/xpconnect/shell/xpcshell.cpp b/js/src/xpconnect/shell/xpcshell.cpp index c88782a3a9b3..5f950c19e265 100644 --- a/js/src/xpconnect/shell/xpcshell.cpp +++ b/js/src/xpconnect/shell/xpcshell.cpp @@ -970,7 +970,7 @@ FullTrustSecMan::CanGetService(JSContext * aJSContext, const nsCID & aCID) /* void CanAccess (in PRUint32 aAction, in nsIXPCNativeCallContext aCallContext, in JSContextPtr aJSContext, in JSObjectPtr aJSObject, in nsISupports aObj, in nsIClassInfo aClassInfo, in JSVal aName, inout voidPtr aPolicy); */ NS_IMETHODIMP FullTrustSecMan::CanAccess(PRUint32 aAction, - nsIXPCNativeCallContext *aCallContext, + nsAXPCNativeCallContext *aCallContext, JSContext * aJSContext, JSObject * aJSObject, nsISupports *aObj, nsIClassInfo *aClassInfo, jsval aName, void * *aPolicy) diff --git a/js/src/xpconnect/src/nsXPConnect.cpp b/js/src/xpconnect/src/nsXPConnect.cpp index 46eed6e00ef1..c165a6bcda3d 100644 --- a/js/src/xpconnect/src/nsXPConnect.cpp +++ b/js/src/xpconnect/src/nsXPConnect.cpp @@ -1609,16 +1609,14 @@ nsXPConnect::GetCurrentJSStack(nsIStackFrame * *aCurrentJSStack) /* readonly attribute nsIXPCNativeCallContext CurrentNativeCallContext; */ NS_IMETHODIMP -nsXPConnect::GetCurrentNativeCallContext(nsIXPCNativeCallContext * *aCurrentNativeCallContext) +nsXPConnect::GetCurrentNativeCallContext(nsAXPCNativeCallContext * *aCurrentNativeCallContext) { NS_ASSERTION(aCurrentNativeCallContext, "bad param"); XPCPerThreadData* data = XPCPerThreadData::GetData(); if(data) { - nsIXPCNativeCallContext* temp = data->GetCallContext(); - NS_IF_ADDREF(temp); - *aCurrentNativeCallContext = temp; + *aCurrentNativeCallContext = data->GetCallContext(); return NS_OK; } //else... diff --git a/js/src/xpconnect/src/xpcJSWeakReference.cpp b/js/src/xpconnect/src/xpcJSWeakReference.cpp index 175308308c77..54e7f13a21c9 100755 --- a/js/src/xpconnect/src/xpcJSWeakReference.cpp +++ b/js/src/xpconnect/src/xpcJSWeakReference.cpp @@ -50,8 +50,8 @@ nsresult xpcJSWeakReference::Init() nsXPConnect* xpc = nsXPConnect::GetXPConnect(); if (!xpc) return NS_ERROR_UNEXPECTED; - nsCOMPtr cc; - rv = xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)); + nsAXPCNativeCallContext *cc = nsnull; + rv = xpc->GetCurrentNativeCallContext(&cc); NS_ENSURE_SUCCESS(rv, rv); JSContext *cx = nsnull; @@ -103,8 +103,8 @@ xpcJSWeakReference::Get() nsXPConnect* xpc = nsXPConnect::GetXPConnect(); if (!xpc) return NS_ERROR_UNEXPECTED; - nsCOMPtr cc; - rv = xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)); + nsAXPCNativeCallContext* cc = nsnull; + rv = xpc->GetCurrentNativeCallContext(&cc); NS_ENSURE_SUCCESS(rv, rv); jsval *retval = nsnull; diff --git a/js/src/xpconnect/src/xpccallcontext.cpp b/js/src/xpconnect/src/xpccallcontext.cpp index ddb457dd0251..b43cd2a5fa70 100644 --- a/js/src/xpconnect/src/xpccallcontext.cpp +++ b/js/src/xpconnect/src/xpccallcontext.cpp @@ -303,8 +303,6 @@ XPCCallContext::SystemIsBeingShutDown() XPCCallContext::~XPCCallContext() { - NS_ASSERTION(mRefCnt == 0, "Someone is holding a bad reference to a XPCCallContext"); - // do cleanup... if(mXPCContext) @@ -432,21 +430,6 @@ XPCCallContext::DeleteString(nsAString *string) delete string; } - -NS_IMPL_QUERY_INTERFACE1(XPCCallContext, nsIXPCNativeCallContext) -NS_IMPL_ADDREF(XPCCallContext) - -NS_IMETHODIMP_(nsrefcnt) -XPCCallContext::Release(void) -{ - NS_PRECONDITION(0 != mRefCnt, "dup release"); - NS_ASSERT_OWNINGTHREAD(XPCCallContext); - --mRefCnt; - NS_LOG_RELEASE(this, mRefCnt, "XPCCallContext"); - // no delete this! - return mRefCnt; -} - /* readonly attribute nsISupports Callee; */ NS_IMETHODIMP XPCCallContext::GetCallee(nsISupports * *aCallee) diff --git a/js/src/xpconnect/src/xpccomponents.cpp b/js/src/xpconnect/src/xpccomponents.cpp index f83bdba1b4b6..82545728723b 100644 --- a/js/src/xpconnect/src/xpccomponents.cpp +++ b/js/src/xpconnect/src/xpccomponents.cpp @@ -2736,8 +2736,8 @@ nsXPCComponents_Utils::LookupMethod() return NS_ERROR_FAILURE; // get the xpconnect native call context - nsCOMPtr cc; - xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)); + nsAXPCNativeCallContext *cc = nsnull; + xpc->GetCurrentNativeCallContext(&cc); if(!cc) return NS_ERROR_FAILURE; @@ -2864,8 +2864,8 @@ nsXPCComponents_Utils::ReportError() return NS_OK; // get the xpconnect native call context - nsCOMPtr cc; - xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)); + nsAXPCNativeCallContext *cc = nsnull; + xpc->GetCurrentNativeCallContext(&cc); if(!cc) return NS_OK; @@ -3424,8 +3424,8 @@ nsXPCComponents_Utils::EvalInSandbox(const nsAString &source) return rv; // get the xpconnect native call context - nsCOMPtr cc; - xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)); + nsAXPCNativeCallContext *cc = nsnull; + xpc->GetCurrentNativeCallContext(&cc); if(!cc) return NS_ERROR_FAILURE; @@ -3634,8 +3634,8 @@ nsXPCComponents_Utils::ForceGC() return NS_ERROR_FAILURE; // get the xpconnect native call context - nsCOMPtr cc; - nsresult rv = xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)); + nsAXPCNativeCallContext *cc = nsnull; + nsresult rv = xpc->GetCurrentNativeCallContext(&cc); if (!cc) return rv; diff --git a/js/src/xpconnect/src/xpcjsid.cpp b/js/src/xpconnect/src/xpcjsid.cpp index b9c9cabdb79b..174426583d92 100644 --- a/js/src/xpconnect/src/xpcjsid.cpp +++ b/js/src/xpconnect/src/xpcjsid.cpp @@ -773,8 +773,8 @@ nsJSCID::CreateInstance(nsISupports **_retval) if(!xpc) return NS_ERROR_UNEXPECTED; - nsCOMPtr ccxp; - xpc->GetCurrentNativeCallContext(getter_AddRefs(ccxp)); + nsAXPCNativeCallContext *ccxp = nsnull; + xpc->GetCurrentNativeCallContext(&ccxp); if(!ccxp) return NS_ERROR_UNEXPECTED; @@ -846,8 +846,8 @@ nsJSCID::GetService(nsISupports **_retval) if(!xpc) return NS_ERROR_UNEXPECTED; - nsCOMPtr ccxp; - xpc->GetCurrentNativeCallContext(getter_AddRefs(ccxp)); + nsAXPCNativeCallContext *ccxp = nsnull; + xpc->GetCurrentNativeCallContext(&ccxp); if(!ccxp) return NS_ERROR_UNEXPECTED; diff --git a/js/src/xpconnect/src/xpcprivate.h b/js/src/xpconnect/src/xpcprivate.h index 55ab453a9697..14e610f733e5 100644 --- a/js/src/xpconnect/src/xpcprivate.h +++ b/js/src/xpconnect/src/xpcprivate.h @@ -938,11 +938,22 @@ public: // // Note that most accessors are inlined. -class XPCCallContext : public nsIXPCNativeCallContext +class XPCCallContext : public nsAXPCNativeCallContext { public: - NS_DECL_ISUPPORTS - NS_DECL_NSIXPCNATIVECALLCONTEXT + NS_IMETHOD GetCallee(nsISupports **aResult); + NS_IMETHOD GetCalleeMethodIndex(PRUint16 *aResult); + NS_IMETHOD GetCalleeWrapper(nsIXPConnectWrappedNative **aResult); + NS_IMETHOD GetJSContext(JSContext **aResult); + NS_IMETHOD GetArgc(PRUint32 *aResult); + NS_IMETHOD GetArgvPtr(jsval **aResult); + NS_IMETHOD GetRetValPtr(jsval **aResult); + NS_IMETHOD GetExceptionWasThrown(PRBool *aResult); + NS_IMETHOD SetExceptionWasThrown(PRBool aValue); + NS_IMETHOD GetReturnValueWasSet(PRBool *aResult); + NS_IMETHOD SetReturnValueWasSet(PRBool aValue); + NS_IMETHOD GetCalleeInterface(nsIInterfaceInfo **aResult); + NS_IMETHOD GetCalleeClassInfo(nsIClassInfo **aResult); enum {NO_ARGS = (uintN) -1}; diff --git a/js/src/xpconnect/tests/TestXPC.cpp b/js/src/xpconnect/tests/TestXPC.cpp index 3d540276b518..a56b0fa47538 100644 --- a/js/src/xpconnect/tests/TestXPC.cpp +++ b/js/src/xpconnect/tests/TestXPC.cpp @@ -282,7 +282,7 @@ MySecMan::CanGetService(JSContext * aJSContext, const nsCID & aCID) /* void CanAccess (in PRUint32 aAction, in nsIXPCNativeCallContext aCallContext, in JSContextPtr aJSContext, in JSObjectPtr aJSObject, in nsISupports aObj, in nsIClassInfo aClassInfo, in JSVal aName, inout voidPtr aPolicy); */ NS_IMETHODIMP -MySecMan::CanAccess(PRUint32 aAction, nsIXPCNativeCallContext *aCallContext, JSContext * aJSContext, JSObject * aJSObject, nsISupports *aObj, nsIClassInfo *aClassInfo, jsval aName, void * *aPolicy) +MySecMan::CanAccess(PRUint32 aAction, nsAXPCNativeCallContext *aCallContext, JSContext * aJSContext, JSObject * aJSObject, nsISupports *aObj, nsIClassInfo *aClassInfo, jsval aName, void * *aPolicy) { switch(mMode) { diff --git a/js/src/xpconnect/tests/components/xpctest_echo.cpp b/js/src/xpconnect/tests/components/xpctest_echo.cpp index 15e4aba49836..fcd5030429bd 100644 --- a/js/src/xpconnect/tests/components/xpctest_echo.cpp +++ b/js/src/xpconnect/tests/components/xpctest_echo.cpp @@ -432,10 +432,10 @@ xpctestEcho::SetAString(const char * aAString) #define GET_CALL_CONTEXT \ nsresult rv; \ - nsCOMPtr cc; \ + nsAXPCNativeCallContext *cc = nsnull; \ nsCOMPtr xpc(do_GetService(nsIXPConnect::GetCID(), &rv)); \ if(NS_SUCCEEDED(rv)) \ - rv = xpc->GetCurrentNativeCallContext(getter_AddRefs(cc)) /* no ';' */ + rv = xpc->GetCurrentNativeCallContext(&cc) /* no ';' */ /* void printArgTypes (); */ NS_IMETHODIMP diff --git a/security/manager/ssl/src/nsCrypto.cpp b/security/manager/ssl/src/nsCrypto.cpp index d2f85d1bd0b9..7faeaee4910e 100644 --- a/security/manager/ssl/src/nsCrypto.cpp +++ b/security/manager/ssl/src/nsCrypto.cpp @@ -1802,9 +1802,9 @@ nsCrypto::GenerateCRMFRequest(nsIDOMCRMFObject** aReturn) nsCOMPtr xpc(do_GetService(nsIXPConnect::GetCID(), &nrv)); NS_ENSURE_SUCCESS(nrv, nrv); - nsCOMPtr ncc; + nsAXPCNativeCallContext *ncc = nsnull; - nrv = xpc->GetCurrentNativeCallContext(getter_AddRefs(ncc)); + nrv = xpc->GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(nrv, nrv); if (!ncc) @@ -2483,10 +2483,10 @@ nsCrypto::SignText(const nsAString& aStringToSign, const nsAString& aCaOption, aResult.Truncate(); - nsCOMPtr ncc; + nsAXPCNativeCallContext* ncc = nsnull; nsCOMPtr xpc(do_GetService(nsIXPConnect::GetCID())); if (xpc) { - xpc->GetCurrentNativeCallContext(getter_AddRefs(ncc)); + xpc->GetCurrentNativeCallContext(&ncc); } if (!ncc) {