diff --git a/dom/src/html/nsJSHTMLFormElement.cpp b/dom/src/html/nsJSHTMLFormElement.cpp index eff7a2d88da..fd4e9fe4273 100644 --- a/dom/src/html/nsJSHTMLFormElement.cpp +++ b/dom/src/html/nsJSHTMLFormElement.cpp @@ -240,9 +240,26 @@ GetHTMLFormElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) break; } default: - checkNamedItem = PR_TRUE; + { + nsIDOMElement* prop; + nsIDOMNSHTMLFormElement* b; + if (NS_OK == a->QueryInterface(kINSHTMLFormElementIID, (void **)&b)) { + if (NS_OK == b->Item(JSVAL_TO_INT(id), &prop)) { + // get the js object + nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp); + NS_RELEASE(b); + } + else { + NS_RELEASE(b); + return JS_FALSE; + } + } + else { + JS_ReportError(cx, "Object must be of type NSHTMLFormElement"); + return JS_FALSE; + } + } } - NS_RELEASE(secMan); } if (checkNamedItem) { @@ -580,6 +597,66 @@ NSHTMLFormElementNamedItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv } +// +// Native method Item +// +PR_STATIC_CALLBACK(JSBool) +NSHTMLFormElementItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + nsIDOMHTMLFormElement *privateThis = (nsIDOMHTMLFormElement*)nsJSUtils::nsGetNativeThis(cx, obj); + nsIDOMNSHTMLFormElement *nativeThis = nsnull; + if (NS_OK != privateThis->QueryInterface(kINSHTMLFormElementIID, (void **)&nativeThis)) { + JS_ReportError(cx, "Object must be of type NSHTMLFormElement"); + return JS_FALSE; + } + + nsIDOMElement* nativeRet; + PRUint32 b0; + + *rval = JSVAL_NULL; + + nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx); + nsIScriptSecurityManager *secMan; + if (NS_OK != scriptCX->GetSecurityManager(&secMan)) { + return JS_FALSE; + } + { + PRBool ok; + secMan->CheckScriptAccess(scriptCX, obj, "nshtmlformelement.item", &ok); + if (!ok) { + //Need to throw error here + return JS_FALSE; + } + NS_RELEASE(secMan); + } + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == nativeThis) { + return JS_TRUE; + } + + { + if (argc < 1) { + JS_ReportError(cx, "Function item requires 1 parameter"); + return JS_FALSE; + } + + if (!JS_ValueToInt32(cx, argv[0], (int32 *)&b0)) { + JS_ReportError(cx, "Parameter must be a number"); + return JS_FALSE; + } + + if (NS_OK != nativeThis->Item(b0, &nativeRet)) { + return JS_FALSE; + } + + nsJSUtils::nsConvertObjectToJSVal(nativeRet, cx, rval); + } + + return JS_TRUE; +} + + /***********************************************************************/ // // class for HTMLFormElement @@ -624,6 +701,7 @@ static JSFunctionSpec HTMLFormElementMethods[] = {"submit", HTMLFormElementSubmit, 0}, {"reset", HTMLFormElementReset, 0}, {"namedItem", NSHTMLFormElementNamedItem, 1}, + {"item", NSHTMLFormElementItem, 1}, {0} }; diff --git a/dom/src/html/nsJSHTMLSelectElement.cpp b/dom/src/html/nsJSHTMLSelectElement.cpp index 50a981e722a..b8a0c1048ac 100644 --- a/dom/src/html/nsJSHTMLSelectElement.cpp +++ b/dom/src/html/nsJSHTMLSelectElement.cpp @@ -28,9 +28,9 @@ #include "nsIPtr.h" #include "nsString.h" #include "nsIDOMHTMLSelectElement.h" +#include "nsIDOMElement.h" #include "nsIDOMHTMLElement.h" #include "nsIDOMHTMLFormElement.h" -#include "nsIDOMNode.h" #include "nsIDOMNSHTMLSelectElement.h" #include "nsIDOMHTMLCollection.h" @@ -39,16 +39,16 @@ static NS_DEFINE_IID(kIScriptObjectOwnerIID, NS_ISCRIPTOBJECTOWNER_IID); static NS_DEFINE_IID(kIJSScriptObjectIID, NS_IJSSCRIPTOBJECT_IID); static NS_DEFINE_IID(kIScriptGlobalObjectIID, NS_ISCRIPTGLOBALOBJECT_IID); static NS_DEFINE_IID(kIHTMLSelectElementIID, NS_IDOMHTMLSELECTELEMENT_IID); +static NS_DEFINE_IID(kIElementIID, NS_IDOMELEMENT_IID); static NS_DEFINE_IID(kIHTMLElementIID, NS_IDOMHTMLELEMENT_IID); static NS_DEFINE_IID(kIHTMLFormElementIID, NS_IDOMHTMLFORMELEMENT_IID); -static NS_DEFINE_IID(kINodeIID, NS_IDOMNODE_IID); static NS_DEFINE_IID(kINSHTMLSelectElementIID, NS_IDOMNSHTMLSELECTELEMENT_IID); static NS_DEFINE_IID(kIHTMLCollectionIID, NS_IDOMHTMLCOLLECTION_IID); NS_DEF_PTR(nsIDOMHTMLSelectElement); +NS_DEF_PTR(nsIDOMElement); NS_DEF_PTR(nsIDOMHTMLElement); NS_DEF_PTR(nsIDOMHTMLFormElement); -NS_DEF_PTR(nsIDOMNode); NS_DEF_PTR(nsIDOMNSHTMLSelectElement); NS_DEF_PTR(nsIDOMHTMLCollection); @@ -271,7 +271,7 @@ GetHTMLSelectElementProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) } default: { - nsIDOMNode* prop; + nsIDOMElement* prop; nsIDOMNSHTMLSelectElement* b; if (NS_OK == a->QueryInterface(kINSHTMLSelectElementIID, (void **)&b)) { if (NS_OK == b->Item(JSVAL_TO_INT(id), &prop)) { @@ -702,7 +702,7 @@ NSHTMLSelectElementItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, j return JS_FALSE; } - nsIDOMNode* nativeRet; + nsIDOMElement* nativeRet; PRUint32 b0; *rval = JSVAL_NULL;