From 9376bec6f44cd7e2e7792cf72d7c15f53fb0dbcd Mon Sep 17 00:00:00 2001 From: "vidur%netscape.com" Date: Tue, 4 May 1999 20:48:16 +0000 Subject: [PATCH] Added Option constructor and nsIJSNativeIntializer.h interface. DOM glue code now uses the nsIJSNativeIntializer interface to initialize newly constructed instances. git-svn-id: svn://10.0.0.236/trunk@30190 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/dom/src/base/nsJSEnvironment.cpp | 6 +- mozilla/dom/src/base/nsJSNavigator.cpp | 1 + mozilla/dom/src/html/nsJSHTMLImageElement.cpp | 17 ++++- .../dom/src/html/nsJSHTMLOptionElement.cpp | 65 ++++++++++++++++++- 4 files changed, 84 insertions(+), 5 deletions(-) diff --git a/mozilla/dom/src/base/nsJSEnvironment.cpp b/mozilla/dom/src/base/nsJSEnvironment.cpp index 5caef4871fe..92f88467ae5 100644 --- a/mozilla/dom/src/base/nsJSEnvironment.cpp +++ b/mozilla/dom/src/base/nsJSEnvironment.cpp @@ -28,6 +28,7 @@ #include "nsIDOMNamedNodeMap.h" #include "nsIDOMNodeList.h" #include "nsIDOMHTMLImageElement.h" +#include "nsIDOMHTMLOptionElement.h" #include "nsIScriptSecurityManager.h" #include "nsIScriptNameSetRegistry.h" #include "nsIScriptNameSpaceManager.h" @@ -243,8 +244,9 @@ nsJSContext::InitClasses() NS_OK == NS_InitNodeListClass(this, nsnull) && NS_OK == InitializeExternalClasses() && NS_OK == InitializeLiveConnectClasses() && - // XXX Temporarily here. This shouldn't be hardcoded. - NS_OK == NS_InitHTMLImageElementClass(this, nsnull)) { + // XXX Temporarily here. These shouldn't be hardcoded. + NS_OK == NS_InitHTMLImageElementClass(this, nsnull) && + NS_OK == NS_InitHTMLOptionElementClass(this, nsnull)) { res = NS_OK; } diff --git a/mozilla/dom/src/base/nsJSNavigator.cpp b/mozilla/dom/src/base/nsJSNavigator.cpp index 8d558cca400..49a109f2c2a 100644 --- a/mozilla/dom/src/base/nsJSNavigator.cpp +++ b/mozilla/dom/src/base/nsJSNavigator.cpp @@ -30,6 +30,7 @@ #include "nsIDOMPluginArray.h" #include "nsIDOMMimeTypeArray.h" + static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID); static NS_DEFINE_IID(kIJSScriptObjectIID, NS_IJSSCRIPTOBJECT_IID); static NS_DEFINE_IID(kIScriptGlobalObjectIID, NS_ISCRIPTGLOBALOBJECT_IID); diff --git a/mozilla/dom/src/html/nsJSHTMLImageElement.cpp b/mozilla/dom/src/html/nsJSHTMLImageElement.cpp index a091c19afeb..e837210a2ca 100644 --- a/mozilla/dom/src/html/nsJSHTMLImageElement.cpp +++ b/mozilla/dom/src/html/nsJSHTMLImageElement.cpp @@ -30,6 +30,7 @@ #include "nsIDOMHTMLImageElement.h" #include "nsIScriptNameSpaceManager.h" #include "nsIComponentManager.h" +#include "nsIJSNativeInitializer.h" #include "nsDOMCID.h" @@ -469,8 +470,10 @@ HTMLImageElement(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *r nsIScriptNameSpaceManager* manager; nsIDOMHTMLImageElement *nativeThis; nsIScriptObjectOwner *owner = nsnull; + nsIJSNativeInitializer* initializer = nsnull; static NS_DEFINE_IID(kIDOMHTMLImageElementIID, NS_IDOMHTMLIMAGEELEMENT_IID); + static NS_DEFINE_IID(kIJSNativeInitializerIID, NS_IJSNATIVEINITIALIZER_IID); result = context->GetNameSpaceManager(&manager); if (NS_OK != result) { @@ -491,7 +494,19 @@ HTMLImageElement(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *r return JS_FALSE; } - // XXX We should be calling Init() on the instance + result = nativeThis->QueryInterface(kIJSNativeInitializerIID, (void **)&initializer); + if (NS_OK != result) { + NS_RELEASE(nativeThis); + return JS_FALSE; + } + + result = initializer->Initialize(cx, argc, argv); + NS_RELEASE(initializer); + + if (NS_OK != result) { + NS_RELEASE(nativeThis); + return JS_FALSE; + } result = nativeThis->QueryInterface(kIScriptObjectOwnerIID, (void **)&owner); if (NS_OK != result) { diff --git a/mozilla/dom/src/html/nsJSHTMLOptionElement.cpp b/mozilla/dom/src/html/nsJSHTMLOptionElement.cpp index 6c154966d7a..8a8f035bffc 100644 --- a/mozilla/dom/src/html/nsJSHTMLOptionElement.cpp +++ b/mozilla/dom/src/html/nsJSHTMLOptionElement.cpp @@ -28,6 +28,11 @@ #include "nsString.h" #include "nsIDOMHTMLFormElement.h" #include "nsIDOMHTMLOptionElement.h" +#include "nsIDOMOption.h" +#include "nsIScriptNameSpaceManager.h" +#include "nsIComponentManager.h" +#include "nsIJSNativeInitializer.h" +#include "nsDOMCID.h" static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID); @@ -35,9 +40,11 @@ static NS_DEFINE_IID(kIJSScriptObjectIID, NS_IJSSCRIPTOBJECT_IID); static NS_DEFINE_IID(kIScriptGlobalObjectIID, NS_ISCRIPTGLOBALOBJECT_IID); static NS_DEFINE_IID(kIHTMLFormElementIID, NS_IDOMHTMLFORMELEMENT_IID); static NS_DEFINE_IID(kIHTMLOptionElementIID, NS_IDOMHTMLOPTIONELEMENT_IID); +static NS_DEFINE_IID(kIOptionIID, NS_IDOMOPTION_IID); NS_DEF_PTR(nsIDOMHTMLFormElement); NS_DEF_PTR(nsIDOMHTMLOptionElement); +NS_DEF_PTR(nsIDOMOption); // // HTMLOptionElement property ids @@ -333,9 +340,62 @@ static JSFunctionSpec HTMLOptionElementMethods[] = PR_STATIC_CALLBACK(JSBool) HTMLOptionElement(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { - return JS_FALSE; -} + nsresult result; + nsIID classID; + nsIScriptContext* context = (nsIScriptContext*)JS_GetContextPrivate(cx); + nsIScriptNameSpaceManager* manager; + nsIDOMHTMLOptionElement *nativeThis; + nsIScriptObjectOwner *owner = nsnull; + nsIJSNativeInitializer* initializer = nsnull; + static NS_DEFINE_IID(kIDOMHTMLOptionElementIID, NS_IDOMHTMLOPTIONELEMENT_IID); + static NS_DEFINE_IID(kIJSNativeInitializerIID, NS_IJSNATIVEINITIALIZER_IID); + + result = context->GetNameSpaceManager(&manager); + if (NS_OK != result) { + return JS_FALSE; + } + + result = manager->LookupName("HTMLOptionElement", PR_TRUE, classID); + NS_RELEASE(manager); + if (NS_OK != result) { + return JS_FALSE; + } + + result = nsComponentManager::CreateInstance(classID, + nsnull, + kIDOMHTMLOptionElementIID, + (void **)&nativeThis); + if (NS_OK != result) { + return JS_FALSE; + } + + result = nativeThis->QueryInterface(kIJSNativeInitializerIID, (void **)&initializer); + if (NS_OK != result) { + NS_RELEASE(nativeThis); + return JS_FALSE; + } + + result = initializer->Initialize(cx, argc, argv); + NS_RELEASE(initializer); + + if (NS_OK != result) { + NS_RELEASE(nativeThis); + return JS_FALSE; + } + + result = nativeThis->QueryInterface(kIScriptObjectOwnerIID, (void **)&owner); + if (NS_OK != result) { + NS_RELEASE(nativeThis); + return JS_FALSE; + } + + owner->SetScriptObject((void *)obj); + JS_SetPrivate(cx, obj, nativeThis); + + NS_RELEASE(owner); + return JS_TRUE; +} // // HTMLOptionElement class initialization @@ -372,6 +432,7 @@ extern "C" NS_DOM nsresult NS_InitHTMLOptionElementClass(nsIScriptContext *aCont return NS_ERROR_FAILURE; } + JS_AliasProperty(jscontext, global, "HTMLOptionElement", "Option"); } else if ((nsnull != constructor) && JSVAL_IS_OBJECT(vp)) { proto = JSVAL_TO_OBJECT(vp);