From e1308f27fe564d736c9916beac5e34559ea90ece Mon Sep 17 00:00:00 2001 From: "waterson%netscape.com" Date: Tue, 27 Apr 1999 04:17:17 +0000 Subject: [PATCH] Added nsJSUtils::nsConvertJSValtoXPCObject to handle 'in xpidl' parameters. git-svn-id: svn://10.0.0.236/trunk@29380 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/dom/src/base/nsJSUtils.cpp | 36 ++++++++++++++++++++++++++++++ mozilla/dom/src/base/nsJSUtils.h | 5 +++++ 2 files changed, 41 insertions(+) diff --git a/mozilla/dom/src/base/nsJSUtils.cpp b/mozilla/dom/src/base/nsJSUtils.cpp index bb2a51f5fbd..ad91ba8c3ee 100644 --- a/mozilla/dom/src/base/nsJSUtils.cpp +++ b/mozilla/dom/src/base/nsJSUtils.cpp @@ -219,6 +219,42 @@ nsJSUtils::nsConvertJSValToObject(nsISupports** aSupports, return JS_TRUE; } +NS_EXPORT PRBool +nsJSUtils::nsConvertJSValToXPCObject(nsISupports** aSupports, + REFNSIID aIID, + JSContext* aContext, + jsval aValue) +{ + *aSupports = nsnull; + if (JSVAL_IS_NULL(aValue)) { + return JS_TRUE; + } + else if (JSVAL_IS_OBJECT(aValue)) { + nsresult rv; + NS_WITH_SERVICE(nsIXPConnect, xpc, kXPConnectCID, &rv); + if (NS_FAILED(rv)) return JS_FALSE; + + nsIXPConnectWrappedNative* wrapper; + rv = xpc->GetWrappedNativeOfJSObject(aContext, JSVAL_TO_OBJECT(aValue), &wrapper); + if (NS_FAILED(rv)) return JS_FALSE; + + nsISupports* native; + rv = wrapper->GetNative(&native); + NS_RELEASE(wrapper); + if (NS_FAILED(rv)) return JS_FALSE; + + rv = native->QueryInterface(aIID, (void**) aSupports); + NS_RELEASE(native); + if (NS_FAILED(rv)) return JS_FALSE; + + return JS_TRUE; + } + else { + return JS_FALSE; + } +} + + NS_EXPORT void nsJSUtils::nsConvertJSValToString(nsString& aString, JSContext* aContext, diff --git a/mozilla/dom/src/base/nsJSUtils.h b/mozilla/dom/src/base/nsJSUtils.h index 57bc7bef984..adf149d5911 100644 --- a/mozilla/dom/src/base/nsJSUtils.h +++ b/mozilla/dom/src/base/nsJSUtils.h @@ -68,6 +68,11 @@ public: JSContext* aContext, jsval aValue); + static NS_EXPORT PRBool nsConvertJSValToXPCObject(nsISupports** aSupports, + REFNSIID aIID, + JSContext* aContext, + jsval aValue); + static NS_EXPORT void nsConvertJSValToString(nsString& aString, JSContext* aContext, jsval aValue);