From 6fde017dec497982e57c758eba2f07b3a5c6d786 Mon Sep 17 00:00:00 2001 From: "beard%netscape.com" Date: Thu, 15 Apr 1999 01:50:53 +0000 Subject: [PATCH] First Checked In. --- dom/src/base/nsJSMimeType.cpp | 328 +++++++++++++++++++++ dom/src/base/nsJSMimeTypeArray.cpp | 401 ++++++++++++++++++++++++++ dom/src/base/nsJSPlugin.cpp | 440 +++++++++++++++++++++++++++++ dom/src/base/nsJSPluginArray.cpp | 440 +++++++++++++++++++++++++++++ 4 files changed, 1609 insertions(+) create mode 100644 dom/src/base/nsJSMimeType.cpp create mode 100644 dom/src/base/nsJSMimeTypeArray.cpp create mode 100644 dom/src/base/nsJSPlugin.cpp create mode 100644 dom/src/base/nsJSPluginArray.cpp diff --git a/dom/src/base/nsJSMimeType.cpp b/dom/src/base/nsJSMimeType.cpp new file mode 100644 index 000000000000..1dfbad6f912d --- /dev/null +++ b/dom/src/base/nsJSMimeType.cpp @@ -0,0 +1,328 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ +/* AUTO-GENERATED. DO NOT EDIT!!! */ + +#include "jsapi.h" +#include "nsJSUtils.h" +#include "nscore.h" +#include "nsIScriptContext.h" +#include "nsIJSScriptObject.h" +#include "nsIScriptObjectOwner.h" +#include "nsIScriptGlobalObject.h" +#include "nsIPtr.h" +#include "nsString.h" +#include "nsIDOMMimeType.h" +#include "nsIDOMPlugin.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); +static NS_DEFINE_IID(kIMimeTypeIID, NS_IDOMMIMETYPE_IID); +static NS_DEFINE_IID(kIPluginIID, NS_IDOMPLUGIN_IID); + +NS_DEF_PTR(nsIDOMMimeType); +NS_DEF_PTR(nsIDOMPlugin); + +// +// MimeType property ids +// +enum MimeType_slots { + MIMETYPE_DESCRIPTION = -1, + MIMETYPE_ENABLEDPLUGIN = -2, + MIMETYPE_SUFFIXES = -3, + MIMETYPE_TYPE = -4 +}; + +/***********************************************************************/ +// +// MimeType Properties Getter +// +PR_STATIC_CALLBACK(JSBool) +GetMimeTypeProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) +{ + nsIDOMMimeType *a = (nsIDOMMimeType*)JS_GetPrivate(cx, obj); + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == a) { + return JS_TRUE; + } + + if (JSVAL_IS_INT(id)) { + switch(JSVAL_TO_INT(id)) { + case MIMETYPE_DESCRIPTION: + { + nsAutoString prop; + if (NS_OK == a->GetDescription(prop)) { + nsJSUtils::nsConvertStringToJSVal(prop, cx, vp); + } + else { + return JS_FALSE; + } + break; + } + case MIMETYPE_ENABLEDPLUGIN: + { + nsIDOMPlugin* prop; + if (NS_OK == a->GetEnabledPlugin(&prop)) { + // get the js object + nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp); + } + else { + return JS_FALSE; + } + break; + } + case MIMETYPE_SUFFIXES: + { + nsAutoString prop; + if (NS_OK == a->GetSuffixes(prop)) { + nsJSUtils::nsConvertStringToJSVal(prop, cx, vp); + } + else { + return JS_FALSE; + } + break; + } + case MIMETYPE_TYPE: + { + nsAutoString prop; + if (NS_OK == a->GetType(prop)) { + nsJSUtils::nsConvertStringToJSVal(prop, cx, vp); + } + else { + return JS_FALSE; + } + break; + } + default: + return nsJSUtils::nsCallJSScriptObjectGetProperty(a, cx, id, vp); + } + } + else { + return nsJSUtils::nsCallJSScriptObjectGetProperty(a, cx, id, vp); + } + + return PR_TRUE; +} + +/***********************************************************************/ +// +// MimeType Properties Setter +// +PR_STATIC_CALLBACK(JSBool) +SetMimeTypeProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) +{ + nsIDOMMimeType *a = (nsIDOMMimeType*)JS_GetPrivate(cx, obj); + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == a) { + return JS_TRUE; + } + + if (JSVAL_IS_INT(id)) { + switch(JSVAL_TO_INT(id)) { + case 0: + default: + return nsJSUtils::nsCallJSScriptObjectSetProperty(a, cx, id, vp); + } + } + else { + return nsJSUtils::nsCallJSScriptObjectSetProperty(a, cx, id, vp); + } + + return PR_TRUE; +} + + +// +// MimeType finalizer +// +PR_STATIC_CALLBACK(void) +FinalizeMimeType(JSContext *cx, JSObject *obj) +{ + nsJSUtils::nsGenericFinalize(cx, obj); +} + + +// +// MimeType enumerate +// +PR_STATIC_CALLBACK(JSBool) +EnumerateMimeType(JSContext *cx, JSObject *obj) +{ + return nsJSUtils::nsGenericEnumerate(cx, obj); +} + + +// +// MimeType resolve +// +PR_STATIC_CALLBACK(JSBool) +ResolveMimeType(JSContext *cx, JSObject *obj, jsval id) +{ + return nsJSUtils::nsGenericResolve(cx, obj, id); +} + + +/***********************************************************************/ +// +// class for MimeType +// +JSClass MimeTypeClass = { + "MimeType", + JSCLASS_HAS_PRIVATE, + JS_PropertyStub, + JS_PropertyStub, + GetMimeTypeProperty, + SetMimeTypeProperty, + EnumerateMimeType, + ResolveMimeType, + JS_ConvertStub, + FinalizeMimeType +}; + + +// +// MimeType class properties +// +static JSPropertySpec MimeTypeProperties[] = +{ + {"description", MIMETYPE_DESCRIPTION, JSPROP_ENUMERATE | JSPROP_READONLY}, + {"enabledPlugin", MIMETYPE_ENABLEDPLUGIN, JSPROP_ENUMERATE | JSPROP_READONLY}, + {"suffixes", MIMETYPE_SUFFIXES, JSPROP_ENUMERATE | JSPROP_READONLY}, + {"type", MIMETYPE_TYPE, JSPROP_ENUMERATE | JSPROP_READONLY}, + {0} +}; + + +// +// MimeType class methods +// +static JSFunctionSpec MimeTypeMethods[] = +{ + {0} +}; + + +// +// MimeType constructor +// +PR_STATIC_CALLBACK(JSBool) +MimeType(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + return JS_FALSE; +} + + +// +// MimeType class initialization +// +extern "C" NS_DOM nsresult NS_InitMimeTypeClass(nsIScriptContext *aContext, void **aPrototype) +{ + JSContext *jscontext = (JSContext *)aContext->GetNativeContext(); + JSObject *proto = nsnull; + JSObject *constructor = nsnull; + JSObject *parent_proto = nsnull; + JSObject *global = JS_GetGlobalObject(jscontext); + jsval vp; + + if ((PR_TRUE != JS_LookupProperty(jscontext, global, "MimeType", &vp)) || + !JSVAL_IS_OBJECT(vp) || + ((constructor = JSVAL_TO_OBJECT(vp)) == nsnull) || + (PR_TRUE != JS_LookupProperty(jscontext, JSVAL_TO_OBJECT(vp), "prototype", &vp)) || + !JSVAL_IS_OBJECT(vp)) { + + proto = JS_InitClass(jscontext, // context + global, // global object + parent_proto, // parent proto + &MimeTypeClass, // JSClass + MimeType, // JSNative ctor + 0, // ctor args + MimeTypeProperties, // proto props + MimeTypeMethods, // proto funcs + nsnull, // ctor props (static) + nsnull); // ctor funcs (static) + if (nsnull == proto) { + return NS_ERROR_FAILURE; + } + + } + else if ((nsnull != constructor) && JSVAL_IS_OBJECT(vp)) { + proto = JSVAL_TO_OBJECT(vp); + } + else { + return NS_ERROR_FAILURE; + } + + if (aPrototype) { + *aPrototype = proto; + } + return NS_OK; +} + + +// +// Method for creating a new MimeType JavaScript object +// +extern "C" NS_DOM nsresult NS_NewScriptMimeType(nsIScriptContext *aContext, nsISupports *aSupports, nsISupports *aParent, void **aReturn) +{ + NS_PRECONDITION(nsnull != aContext && nsnull != aSupports && nsnull != aReturn, "null argument to NS_NewScriptMimeType"); + JSObject *proto; + JSObject *parent; + nsIScriptObjectOwner *owner; + JSContext *jscontext = (JSContext *)aContext->GetNativeContext(); + nsresult result = NS_OK; + nsIDOMMimeType *aMimeType; + + if (nsnull == aParent) { + parent = nsnull; + } + else if (NS_OK == aParent->QueryInterface(kIScriptObjectOwnerIID, (void**)&owner)) { + if (NS_OK != owner->GetScriptObject(aContext, (void **)&parent)) { + NS_RELEASE(owner); + return NS_ERROR_FAILURE; + } + NS_RELEASE(owner); + } + else { + return NS_ERROR_FAILURE; + } + + if (NS_OK != NS_InitMimeTypeClass(aContext, (void **)&proto)) { + return NS_ERROR_FAILURE; + } + + result = aSupports->QueryInterface(kIMimeTypeIID, (void **)&aMimeType); + if (NS_OK != result) { + return result; + } + + // create a js object for this class + *aReturn = JS_NewObject(jscontext, &MimeTypeClass, proto, parent); + if (nsnull != *aReturn) { + // connect the native object to the js object + JS_SetPrivate(jscontext, (JSObject *)*aReturn, aMimeType); + } + else { + NS_RELEASE(aMimeType); + return NS_ERROR_FAILURE; + } + + return NS_OK; +} diff --git a/dom/src/base/nsJSMimeTypeArray.cpp b/dom/src/base/nsJSMimeTypeArray.cpp new file mode 100644 index 000000000000..818452f1df60 --- /dev/null +++ b/dom/src/base/nsJSMimeTypeArray.cpp @@ -0,0 +1,401 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ +/* AUTO-GENERATED. DO NOT EDIT!!! */ + +#include "jsapi.h" +#include "nsJSUtils.h" +#include "nscore.h" +#include "nsIScriptContext.h" +#include "nsIJSScriptObject.h" +#include "nsIScriptObjectOwner.h" +#include "nsIScriptGlobalObject.h" +#include "nsIPtr.h" +#include "nsString.h" +#include "nsIDOMMimeType.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); +static NS_DEFINE_IID(kIMimeTypeIID, NS_IDOMMIMETYPE_IID); +static NS_DEFINE_IID(kIMimeTypeArrayIID, NS_IDOMMIMETYPEARRAY_IID); + +NS_DEF_PTR(nsIDOMMimeType); +NS_DEF_PTR(nsIDOMMimeTypeArray); + +// +// MimeTypeArray property ids +// +enum MimeTypeArray_slots { + MIMETYPEARRAY_LENGTH = -1 +}; + +/***********************************************************************/ +// +// MimeTypeArray Properties Getter +// +PR_STATIC_CALLBACK(JSBool) +GetMimeTypeArrayProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) +{ + nsIDOMMimeTypeArray *a = (nsIDOMMimeTypeArray*)JS_GetPrivate(cx, obj); + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == a) { + return JS_TRUE; + } + + if (JSVAL_IS_INT(id)) { + switch(JSVAL_TO_INT(id)) { + case MIMETYPEARRAY_LENGTH: + { + PRUint32 prop; + if (NS_OK == a->GetLength(&prop)) { + *vp = INT_TO_JSVAL(prop); + } + else { + return JS_FALSE; + } + break; + } + default: + { + nsIDOMMimeType* prop; + if (NS_OK == a->Item(JSVAL_TO_INT(id), &prop)) { + // get the js object + nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp); + } + else { + return JS_FALSE; + } + } + } + } + else if (JSVAL_IS_STRING(id)) { + nsIDOMMimeType* prop; + nsAutoString name; + + JSString *jsstring = JS_ValueToString(cx, id); + if (nsnull != jsstring) { + name.SetString(JS_GetStringChars(jsstring)); + } + else { + name.SetString(""); + } + + if (NS_OK == a->NamedItem(name, &prop)) { + if (NULL != prop) { + // get the js object + nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp); + } + else { + return nsJSUtils::nsCallJSScriptObjectGetProperty(a, cx, id, vp); + } + } + else { + return JS_FALSE; + } + } + else { + return nsJSUtils::nsCallJSScriptObjectGetProperty(a, cx, id, vp); + } + + return PR_TRUE; +} + +/***********************************************************************/ +// +// MimeTypeArray Properties Setter +// +PR_STATIC_CALLBACK(JSBool) +SetMimeTypeArrayProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) +{ + nsIDOMMimeTypeArray *a = (nsIDOMMimeTypeArray*)JS_GetPrivate(cx, obj); + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == a) { + return JS_TRUE; + } + + if (JSVAL_IS_INT(id)) { + switch(JSVAL_TO_INT(id)) { + case 0: + default: + return nsJSUtils::nsCallJSScriptObjectSetProperty(a, cx, id, vp); + } + } + else { + return nsJSUtils::nsCallJSScriptObjectSetProperty(a, cx, id, vp); + } + + return PR_TRUE; +} + + +// +// MimeTypeArray finalizer +// +PR_STATIC_CALLBACK(void) +FinalizeMimeTypeArray(JSContext *cx, JSObject *obj) +{ + nsJSUtils::nsGenericFinalize(cx, obj); +} + + +// +// MimeTypeArray enumerate +// +PR_STATIC_CALLBACK(JSBool) +EnumerateMimeTypeArray(JSContext *cx, JSObject *obj) +{ + return nsJSUtils::nsGenericEnumerate(cx, obj); +} + + +// +// MimeTypeArray resolve +// +PR_STATIC_CALLBACK(JSBool) +ResolveMimeTypeArray(JSContext *cx, JSObject *obj, jsval id) +{ + return nsJSUtils::nsGenericResolve(cx, obj, id); +} + + +// +// Native method Item +// +PR_STATIC_CALLBACK(JSBool) +MimeTypeArrayItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + nsIDOMMimeTypeArray *nativeThis = (nsIDOMMimeTypeArray*)JS_GetPrivate(cx, obj); + JSBool rBool = JS_FALSE; + nsIDOMMimeType* nativeRet; + PRUint32 b0; + + *rval = JSVAL_NULL; + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == nativeThis) { + return JS_TRUE; + } + + if (argc >= 1) { + + 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); + } + else { + JS_ReportError(cx, "Function item requires 1 parameters"); + return JS_FALSE; + } + + return JS_TRUE; +} + + +// +// Native method NamedItem +// +PR_STATIC_CALLBACK(JSBool) +MimeTypeArrayNamedItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + nsIDOMMimeTypeArray *nativeThis = (nsIDOMMimeTypeArray*)JS_GetPrivate(cx, obj); + JSBool rBool = JS_FALSE; + nsIDOMMimeType* nativeRet; + nsAutoString b0; + + *rval = JSVAL_NULL; + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == nativeThis) { + return JS_TRUE; + } + + if (argc >= 1) { + + nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]); + + if (NS_OK != nativeThis->NamedItem(b0, &nativeRet)) { + return JS_FALSE; + } + + nsJSUtils::nsConvertObjectToJSVal(nativeRet, cx, rval); + } + else { + JS_ReportError(cx, "Function namedItem requires 1 parameters"); + return JS_FALSE; + } + + return JS_TRUE; +} + + +/***********************************************************************/ +// +// class for MimeTypeArray +// +JSClass MimeTypeArrayClass = { + "MimeTypeArray", + JSCLASS_HAS_PRIVATE, + JS_PropertyStub, + JS_PropertyStub, + GetMimeTypeArrayProperty, + SetMimeTypeArrayProperty, + EnumerateMimeTypeArray, + ResolveMimeTypeArray, + JS_ConvertStub, + FinalizeMimeTypeArray +}; + + +// +// MimeTypeArray class properties +// +static JSPropertySpec MimeTypeArrayProperties[] = +{ + {"length", MIMETYPEARRAY_LENGTH, JSPROP_ENUMERATE | JSPROP_READONLY}, + {0} +}; + + +// +// MimeTypeArray class methods +// +static JSFunctionSpec MimeTypeArrayMethods[] = +{ + {"item", MimeTypeArrayItem, 1}, + {"namedItem", MimeTypeArrayNamedItem, 1}, + {0} +}; + + +// +// MimeTypeArray constructor +// +PR_STATIC_CALLBACK(JSBool) +MimeTypeArray(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + return JS_FALSE; +} + + +// +// MimeTypeArray class initialization +// +extern "C" NS_DOM nsresult NS_InitMimeTypeArrayClass(nsIScriptContext *aContext, void **aPrototype) +{ + JSContext *jscontext = (JSContext *)aContext->GetNativeContext(); + JSObject *proto = nsnull; + JSObject *constructor = nsnull; + JSObject *parent_proto = nsnull; + JSObject *global = JS_GetGlobalObject(jscontext); + jsval vp; + + if ((PR_TRUE != JS_LookupProperty(jscontext, global, "MimeTypeArray", &vp)) || + !JSVAL_IS_OBJECT(vp) || + ((constructor = JSVAL_TO_OBJECT(vp)) == nsnull) || + (PR_TRUE != JS_LookupProperty(jscontext, JSVAL_TO_OBJECT(vp), "prototype", &vp)) || + !JSVAL_IS_OBJECT(vp)) { + + proto = JS_InitClass(jscontext, // context + global, // global object + parent_proto, // parent proto + &MimeTypeArrayClass, // JSClass + MimeTypeArray, // JSNative ctor + 0, // ctor args + MimeTypeArrayProperties, // proto props + MimeTypeArrayMethods, // proto funcs + nsnull, // ctor props (static) + nsnull); // ctor funcs (static) + if (nsnull == proto) { + return NS_ERROR_FAILURE; + } + + } + else if ((nsnull != constructor) && JSVAL_IS_OBJECT(vp)) { + proto = JSVAL_TO_OBJECT(vp); + } + else { + return NS_ERROR_FAILURE; + } + + if (aPrototype) { + *aPrototype = proto; + } + return NS_OK; +} + + +// +// Method for creating a new MimeTypeArray JavaScript object +// +extern "C" NS_DOM nsresult NS_NewScriptMimeTypeArray(nsIScriptContext *aContext, nsISupports *aSupports, nsISupports *aParent, void **aReturn) +{ + NS_PRECONDITION(nsnull != aContext && nsnull != aSupports && nsnull != aReturn, "null argument to NS_NewScriptMimeTypeArray"); + JSObject *proto; + JSObject *parent; + nsIScriptObjectOwner *owner; + JSContext *jscontext = (JSContext *)aContext->GetNativeContext(); + nsresult result = NS_OK; + nsIDOMMimeTypeArray *aMimeTypeArray; + + if (nsnull == aParent) { + parent = nsnull; + } + else if (NS_OK == aParent->QueryInterface(kIScriptObjectOwnerIID, (void**)&owner)) { + if (NS_OK != owner->GetScriptObject(aContext, (void **)&parent)) { + NS_RELEASE(owner); + return NS_ERROR_FAILURE; + } + NS_RELEASE(owner); + } + else { + return NS_ERROR_FAILURE; + } + + if (NS_OK != NS_InitMimeTypeArrayClass(aContext, (void **)&proto)) { + return NS_ERROR_FAILURE; + } + + result = aSupports->QueryInterface(kIMimeTypeArrayIID, (void **)&aMimeTypeArray); + if (NS_OK != result) { + return result; + } + + // create a js object for this class + *aReturn = JS_NewObject(jscontext, &MimeTypeArrayClass, proto, parent); + if (nsnull != *aReturn) { + // connect the native object to the js object + JS_SetPrivate(jscontext, (JSObject *)*aReturn, aMimeTypeArray); + } + else { + NS_RELEASE(aMimeTypeArray); + return NS_ERROR_FAILURE; + } + + return NS_OK; +} diff --git a/dom/src/base/nsJSPlugin.cpp b/dom/src/base/nsJSPlugin.cpp new file mode 100644 index 000000000000..1b104746f07c --- /dev/null +++ b/dom/src/base/nsJSPlugin.cpp @@ -0,0 +1,440 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ +/* AUTO-GENERATED. DO NOT EDIT!!! */ + +#include "jsapi.h" +#include "nsJSUtils.h" +#include "nscore.h" +#include "nsIScriptContext.h" +#include "nsIJSScriptObject.h" +#include "nsIScriptObjectOwner.h" +#include "nsIScriptGlobalObject.h" +#include "nsIPtr.h" +#include "nsString.h" +#include "nsIDOMMimeType.h" +#include "nsIDOMPlugin.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); +static NS_DEFINE_IID(kIMimeTypeIID, NS_IDOMMIMETYPE_IID); +static NS_DEFINE_IID(kIPluginIID, NS_IDOMPLUGIN_IID); + +NS_DEF_PTR(nsIDOMMimeType); +NS_DEF_PTR(nsIDOMPlugin); + +// +// Plugin property ids +// +enum Plugin_slots { + PLUGIN_DESCRIPTION = -1, + PLUGIN_FILENAME = -2, + PLUGIN_NAME = -3, + PLUGIN_LENGTH = -4 +}; + +/***********************************************************************/ +// +// Plugin Properties Getter +// +PR_STATIC_CALLBACK(JSBool) +GetPluginProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) +{ + nsIDOMPlugin *a = (nsIDOMPlugin*)JS_GetPrivate(cx, obj); + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == a) { + return JS_TRUE; + } + + if (JSVAL_IS_INT(id)) { + switch(JSVAL_TO_INT(id)) { + case PLUGIN_DESCRIPTION: + { + nsAutoString prop; + if (NS_OK == a->GetDescription(prop)) { + nsJSUtils::nsConvertStringToJSVal(prop, cx, vp); + } + else { + return JS_FALSE; + } + break; + } + case PLUGIN_FILENAME: + { + nsAutoString prop; + if (NS_OK == a->GetFilename(prop)) { + nsJSUtils::nsConvertStringToJSVal(prop, cx, vp); + } + else { + return JS_FALSE; + } + break; + } + case PLUGIN_NAME: + { + nsAutoString prop; + if (NS_OK == a->GetName(prop)) { + nsJSUtils::nsConvertStringToJSVal(prop, cx, vp); + } + else { + return JS_FALSE; + } + break; + } + case PLUGIN_LENGTH: + { + PRUint32 prop; + if (NS_OK == a->GetLength(&prop)) { + *vp = INT_TO_JSVAL(prop); + } + else { + return JS_FALSE; + } + break; + } + default: + { + nsIDOMMimeType* prop; + if (NS_OK == a->Item(JSVAL_TO_INT(id), &prop)) { + // get the js object + nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp); + } + else { + return JS_FALSE; + } + } + } + } + else if (JSVAL_IS_STRING(id)) { + nsIDOMMimeType* prop; + nsAutoString name; + + JSString *jsstring = JS_ValueToString(cx, id); + if (nsnull != jsstring) { + name.SetString(JS_GetStringChars(jsstring)); + } + else { + name.SetString(""); + } + + if (NS_OK == a->NamedItem(name, &prop)) { + if (NULL != prop) { + // get the js object + nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp); + } + else { + return nsJSUtils::nsCallJSScriptObjectGetProperty(a, cx, id, vp); + } + } + else { + return JS_FALSE; + } + } + else { + return nsJSUtils::nsCallJSScriptObjectGetProperty(a, cx, id, vp); + } + + return PR_TRUE; +} + +/***********************************************************************/ +// +// Plugin Properties Setter +// +PR_STATIC_CALLBACK(JSBool) +SetPluginProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) +{ + nsIDOMPlugin *a = (nsIDOMPlugin*)JS_GetPrivate(cx, obj); + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == a) { + return JS_TRUE; + } + + if (JSVAL_IS_INT(id)) { + switch(JSVAL_TO_INT(id)) { + case 0: + default: + return nsJSUtils::nsCallJSScriptObjectSetProperty(a, cx, id, vp); + } + } + else { + return nsJSUtils::nsCallJSScriptObjectSetProperty(a, cx, id, vp); + } + + return PR_TRUE; +} + + +// +// Plugin finalizer +// +PR_STATIC_CALLBACK(void) +FinalizePlugin(JSContext *cx, JSObject *obj) +{ + nsJSUtils::nsGenericFinalize(cx, obj); +} + + +// +// Plugin enumerate +// +PR_STATIC_CALLBACK(JSBool) +EnumeratePlugin(JSContext *cx, JSObject *obj) +{ + return nsJSUtils::nsGenericEnumerate(cx, obj); +} + + +// +// Plugin resolve +// +PR_STATIC_CALLBACK(JSBool) +ResolvePlugin(JSContext *cx, JSObject *obj, jsval id) +{ + return nsJSUtils::nsGenericResolve(cx, obj, id); +} + + +// +// Native method Item +// +PR_STATIC_CALLBACK(JSBool) +PluginItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + nsIDOMPlugin *nativeThis = (nsIDOMPlugin*)JS_GetPrivate(cx, obj); + JSBool rBool = JS_FALSE; + nsIDOMMimeType* nativeRet; + PRUint32 b0; + + *rval = JSVAL_NULL; + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == nativeThis) { + return JS_TRUE; + } + + if (argc >= 1) { + + 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); + } + else { + JS_ReportError(cx, "Function item requires 1 parameters"); + return JS_FALSE; + } + + return JS_TRUE; +} + + +// +// Native method NamedItem +// +PR_STATIC_CALLBACK(JSBool) +PluginNamedItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + nsIDOMPlugin *nativeThis = (nsIDOMPlugin*)JS_GetPrivate(cx, obj); + JSBool rBool = JS_FALSE; + nsIDOMMimeType* nativeRet; + nsAutoString b0; + + *rval = JSVAL_NULL; + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == nativeThis) { + return JS_TRUE; + } + + if (argc >= 1) { + + nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]); + + if (NS_OK != nativeThis->NamedItem(b0, &nativeRet)) { + return JS_FALSE; + } + + nsJSUtils::nsConvertObjectToJSVal(nativeRet, cx, rval); + } + else { + JS_ReportError(cx, "Function namedItem requires 1 parameters"); + return JS_FALSE; + } + + return JS_TRUE; +} + + +/***********************************************************************/ +// +// class for Plugin +// +JSClass PluginClass = { + "Plugin", + JSCLASS_HAS_PRIVATE, + JS_PropertyStub, + JS_PropertyStub, + GetPluginProperty, + SetPluginProperty, + EnumeratePlugin, + ResolvePlugin, + JS_ConvertStub, + FinalizePlugin +}; + + +// +// Plugin class properties +// +static JSPropertySpec PluginProperties[] = +{ + {"description", PLUGIN_DESCRIPTION, JSPROP_ENUMERATE | JSPROP_READONLY}, + {"filename", PLUGIN_FILENAME, JSPROP_ENUMERATE | JSPROP_READONLY}, + {"name", PLUGIN_NAME, JSPROP_ENUMERATE | JSPROP_READONLY}, + {"length", PLUGIN_LENGTH, JSPROP_ENUMERATE | JSPROP_READONLY}, + {0} +}; + + +// +// Plugin class methods +// +static JSFunctionSpec PluginMethods[] = +{ + {"item", PluginItem, 1}, + {"namedItem", PluginNamedItem, 1}, + {0} +}; + + +// +// Plugin constructor +// +PR_STATIC_CALLBACK(JSBool) +Plugin(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + return JS_FALSE; +} + + +// +// Plugin class initialization +// +extern "C" NS_DOM nsresult NS_InitPluginClass(nsIScriptContext *aContext, void **aPrototype) +{ + JSContext *jscontext = (JSContext *)aContext->GetNativeContext(); + JSObject *proto = nsnull; + JSObject *constructor = nsnull; + JSObject *parent_proto = nsnull; + JSObject *global = JS_GetGlobalObject(jscontext); + jsval vp; + + if ((PR_TRUE != JS_LookupProperty(jscontext, global, "Plugin", &vp)) || + !JSVAL_IS_OBJECT(vp) || + ((constructor = JSVAL_TO_OBJECT(vp)) == nsnull) || + (PR_TRUE != JS_LookupProperty(jscontext, JSVAL_TO_OBJECT(vp), "prototype", &vp)) || + !JSVAL_IS_OBJECT(vp)) { + + proto = JS_InitClass(jscontext, // context + global, // global object + parent_proto, // parent proto + &PluginClass, // JSClass + Plugin, // JSNative ctor + 0, // ctor args + PluginProperties, // proto props + PluginMethods, // proto funcs + nsnull, // ctor props (static) + nsnull); // ctor funcs (static) + if (nsnull == proto) { + return NS_ERROR_FAILURE; + } + + } + else if ((nsnull != constructor) && JSVAL_IS_OBJECT(vp)) { + proto = JSVAL_TO_OBJECT(vp); + } + else { + return NS_ERROR_FAILURE; + } + + if (aPrototype) { + *aPrototype = proto; + } + return NS_OK; +} + + +// +// Method for creating a new Plugin JavaScript object +// +extern "C" NS_DOM nsresult NS_NewScriptPlugin(nsIScriptContext *aContext, nsISupports *aSupports, nsISupports *aParent, void **aReturn) +{ + NS_PRECONDITION(nsnull != aContext && nsnull != aSupports && nsnull != aReturn, "null argument to NS_NewScriptPlugin"); + JSObject *proto; + JSObject *parent; + nsIScriptObjectOwner *owner; + JSContext *jscontext = (JSContext *)aContext->GetNativeContext(); + nsresult result = NS_OK; + nsIDOMPlugin *aPlugin; + + if (nsnull == aParent) { + parent = nsnull; + } + else if (NS_OK == aParent->QueryInterface(kIScriptObjectOwnerIID, (void**)&owner)) { + if (NS_OK != owner->GetScriptObject(aContext, (void **)&parent)) { + NS_RELEASE(owner); + return NS_ERROR_FAILURE; + } + NS_RELEASE(owner); + } + else { + return NS_ERROR_FAILURE; + } + + if (NS_OK != NS_InitPluginClass(aContext, (void **)&proto)) { + return NS_ERROR_FAILURE; + } + + result = aSupports->QueryInterface(kIPluginIID, (void **)&aPlugin); + if (NS_OK != result) { + return result; + } + + // create a js object for this class + *aReturn = JS_NewObject(jscontext, &PluginClass, proto, parent); + if (nsnull != *aReturn) { + // connect the native object to the js object + JS_SetPrivate(jscontext, (JSObject *)*aReturn, aPlugin); + } + else { + NS_RELEASE(aPlugin); + return NS_ERROR_FAILURE; + } + + return NS_OK; +} diff --git a/dom/src/base/nsJSPluginArray.cpp b/dom/src/base/nsJSPluginArray.cpp new file mode 100644 index 000000000000..b8f7b142360b --- /dev/null +++ b/dom/src/base/nsJSPluginArray.cpp @@ -0,0 +1,440 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ +/* AUTO-GENERATED. DO NOT EDIT!!! */ + +#include "jsapi.h" +#include "nsJSUtils.h" +#include "nscore.h" +#include "nsIScriptContext.h" +#include "nsIJSScriptObject.h" +#include "nsIScriptObjectOwner.h" +#include "nsIScriptGlobalObject.h" +#include "nsIPtr.h" +#include "nsString.h" +#include "nsIDOMPlugin.h" +#include "nsIDOMPluginArray.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); +static NS_DEFINE_IID(kIPluginIID, NS_IDOMPLUGIN_IID); +static NS_DEFINE_IID(kIPluginArrayIID, NS_IDOMPLUGINARRAY_IID); + +NS_DEF_PTR(nsIDOMPlugin); +NS_DEF_PTR(nsIDOMPluginArray); + +// +// PluginArray property ids +// +enum PluginArray_slots { + PLUGINARRAY_LENGTH = -1 +}; + +/***********************************************************************/ +// +// PluginArray Properties Getter +// +PR_STATIC_CALLBACK(JSBool) +GetPluginArrayProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) +{ + nsIDOMPluginArray *a = (nsIDOMPluginArray*)JS_GetPrivate(cx, obj); + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == a) { + return JS_TRUE; + } + + if (JSVAL_IS_INT(id)) { + switch(JSVAL_TO_INT(id)) { + case PLUGINARRAY_LENGTH: + { + PRUint32 prop; + if (NS_OK == a->GetLength(&prop)) { + *vp = INT_TO_JSVAL(prop); + } + else { + return JS_FALSE; + } + break; + } + default: + { + nsIDOMPlugin* prop; + if (NS_OK == a->Item(JSVAL_TO_INT(id), &prop)) { + // get the js object + nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp); + } + else { + return JS_FALSE; + } + } + } + } + else if (JSVAL_IS_STRING(id)) { + nsIDOMPlugin* prop; + nsAutoString name; + + JSString *jsstring = JS_ValueToString(cx, id); + if (nsnull != jsstring) { + name.SetString(JS_GetStringChars(jsstring)); + } + else { + name.SetString(""); + } + + if (NS_OK == a->NamedItem(name, &prop)) { + if (NULL != prop) { + // get the js object + nsJSUtils::nsConvertObjectToJSVal((nsISupports *)prop, cx, vp); + } + else { + return nsJSUtils::nsCallJSScriptObjectGetProperty(a, cx, id, vp); + } + } + else { + return JS_FALSE; + } + } + else { + return nsJSUtils::nsCallJSScriptObjectGetProperty(a, cx, id, vp); + } + + return PR_TRUE; +} + +/***********************************************************************/ +// +// PluginArray Properties Setter +// +PR_STATIC_CALLBACK(JSBool) +SetPluginArrayProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) +{ + nsIDOMPluginArray *a = (nsIDOMPluginArray*)JS_GetPrivate(cx, obj); + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == a) { + return JS_TRUE; + } + + if (JSVAL_IS_INT(id)) { + switch(JSVAL_TO_INT(id)) { + case 0: + default: + return nsJSUtils::nsCallJSScriptObjectSetProperty(a, cx, id, vp); + } + } + else { + return nsJSUtils::nsCallJSScriptObjectSetProperty(a, cx, id, vp); + } + + return PR_TRUE; +} + + +// +// PluginArray finalizer +// +PR_STATIC_CALLBACK(void) +FinalizePluginArray(JSContext *cx, JSObject *obj) +{ + nsJSUtils::nsGenericFinalize(cx, obj); +} + + +// +// PluginArray enumerate +// +PR_STATIC_CALLBACK(JSBool) +EnumeratePluginArray(JSContext *cx, JSObject *obj) +{ + return nsJSUtils::nsGenericEnumerate(cx, obj); +} + + +// +// PluginArray resolve +// +PR_STATIC_CALLBACK(JSBool) +ResolvePluginArray(JSContext *cx, JSObject *obj, jsval id) +{ + return nsJSUtils::nsGenericResolve(cx, obj, id); +} + + +// +// Native method Item +// +PR_STATIC_CALLBACK(JSBool) +PluginArrayItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + nsIDOMPluginArray *nativeThis = (nsIDOMPluginArray*)JS_GetPrivate(cx, obj); + JSBool rBool = JS_FALSE; + nsIDOMPlugin* nativeRet; + PRUint32 b0; + + *rval = JSVAL_NULL; + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == nativeThis) { + return JS_TRUE; + } + + if (argc >= 1) { + + 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); + } + else { + JS_ReportError(cx, "Function item requires 1 parameters"); + return JS_FALSE; + } + + return JS_TRUE; +} + + +// +// Native method NamedItem +// +PR_STATIC_CALLBACK(JSBool) +PluginArrayNamedItem(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + nsIDOMPluginArray *nativeThis = (nsIDOMPluginArray*)JS_GetPrivate(cx, obj); + JSBool rBool = JS_FALSE; + nsIDOMPlugin* nativeRet; + nsAutoString b0; + + *rval = JSVAL_NULL; + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == nativeThis) { + return JS_TRUE; + } + + if (argc >= 1) { + + nsJSUtils::nsConvertJSValToString(b0, cx, argv[0]); + + if (NS_OK != nativeThis->NamedItem(b0, &nativeRet)) { + return JS_FALSE; + } + + nsJSUtils::nsConvertObjectToJSVal(nativeRet, cx, rval); + } + else { + JS_ReportError(cx, "Function namedItem requires 1 parameters"); + return JS_FALSE; + } + + return JS_TRUE; +} + + +// +// Native method Refresh +// +PR_STATIC_CALLBACK(JSBool) +PluginArrayRefresh(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + nsIDOMPluginArray *nativeThis = (nsIDOMPluginArray*)JS_GetPrivate(cx, obj); + JSBool rBool = JS_FALSE; + PRBool b0; + + *rval = JSVAL_NULL; + + // If there's no private data, this must be the prototype, so ignore + if (nsnull == nativeThis) { + return JS_TRUE; + } + + if (argc >= 1) { + + if (!nsJSUtils::nsConvertJSValToBool(&b0, cx, argv[0])) { + return JS_FALSE; + } + + if (NS_OK != nativeThis->Refresh(b0)) { + return JS_FALSE; + } + + *rval = JSVAL_VOID; + } + else { + JS_ReportError(cx, "Function refresh requires 1 parameters"); + return JS_FALSE; + } + + return JS_TRUE; +} + + +/***********************************************************************/ +// +// class for PluginArray +// +JSClass PluginArrayClass = { + "PluginArray", + JSCLASS_HAS_PRIVATE, + JS_PropertyStub, + JS_PropertyStub, + GetPluginArrayProperty, + SetPluginArrayProperty, + EnumeratePluginArray, + ResolvePluginArray, + JS_ConvertStub, + FinalizePluginArray +}; + + +// +// PluginArray class properties +// +static JSPropertySpec PluginArrayProperties[] = +{ + {"length", PLUGINARRAY_LENGTH, JSPROP_ENUMERATE | JSPROP_READONLY}, + {0} +}; + + +// +// PluginArray class methods +// +static JSFunctionSpec PluginArrayMethods[] = +{ + {"item", PluginArrayItem, 1}, + {"namedItem", PluginArrayNamedItem, 1}, + {"refresh", PluginArrayRefresh, 1}, + {0} +}; + + +// +// PluginArray constructor +// +PR_STATIC_CALLBACK(JSBool) +PluginArray(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + return JS_FALSE; +} + + +// +// PluginArray class initialization +// +extern "C" NS_DOM nsresult NS_InitPluginArrayClass(nsIScriptContext *aContext, void **aPrototype) +{ + JSContext *jscontext = (JSContext *)aContext->GetNativeContext(); + JSObject *proto = nsnull; + JSObject *constructor = nsnull; + JSObject *parent_proto = nsnull; + JSObject *global = JS_GetGlobalObject(jscontext); + jsval vp; + + if ((PR_TRUE != JS_LookupProperty(jscontext, global, "PluginArray", &vp)) || + !JSVAL_IS_OBJECT(vp) || + ((constructor = JSVAL_TO_OBJECT(vp)) == nsnull) || + (PR_TRUE != JS_LookupProperty(jscontext, JSVAL_TO_OBJECT(vp), "prototype", &vp)) || + !JSVAL_IS_OBJECT(vp)) { + + proto = JS_InitClass(jscontext, // context + global, // global object + parent_proto, // parent proto + &PluginArrayClass, // JSClass + PluginArray, // JSNative ctor + 0, // ctor args + PluginArrayProperties, // proto props + PluginArrayMethods, // proto funcs + nsnull, // ctor props (static) + nsnull); // ctor funcs (static) + if (nsnull == proto) { + return NS_ERROR_FAILURE; + } + + } + else if ((nsnull != constructor) && JSVAL_IS_OBJECT(vp)) { + proto = JSVAL_TO_OBJECT(vp); + } + else { + return NS_ERROR_FAILURE; + } + + if (aPrototype) { + *aPrototype = proto; + } + return NS_OK; +} + + +// +// Method for creating a new PluginArray JavaScript object +// +extern "C" NS_DOM nsresult NS_NewScriptPluginArray(nsIScriptContext *aContext, nsISupports *aSupports, nsISupports *aParent, void **aReturn) +{ + NS_PRECONDITION(nsnull != aContext && nsnull != aSupports && nsnull != aReturn, "null argument to NS_NewScriptPluginArray"); + JSObject *proto; + JSObject *parent; + nsIScriptObjectOwner *owner; + JSContext *jscontext = (JSContext *)aContext->GetNativeContext(); + nsresult result = NS_OK; + nsIDOMPluginArray *aPluginArray; + + if (nsnull == aParent) { + parent = nsnull; + } + else if (NS_OK == aParent->QueryInterface(kIScriptObjectOwnerIID, (void**)&owner)) { + if (NS_OK != owner->GetScriptObject(aContext, (void **)&parent)) { + NS_RELEASE(owner); + return NS_ERROR_FAILURE; + } + NS_RELEASE(owner); + } + else { + return NS_ERROR_FAILURE; + } + + if (NS_OK != NS_InitPluginArrayClass(aContext, (void **)&proto)) { + return NS_ERROR_FAILURE; + } + + result = aSupports->QueryInterface(kIPluginArrayIID, (void **)&aPluginArray); + if (NS_OK != result) { + return result; + } + + // create a js object for this class + *aReturn = JS_NewObject(jscontext, &PluginArrayClass, proto, parent); + if (nsnull != *aReturn) { + // connect the native object to the js object + JS_SetPrivate(jscontext, (JSObject *)*aReturn, aPluginArray); + } + else { + NS_RELEASE(aPluginArray); + return NS_ERROR_FAILURE; + } + + return NS_OK; +}