LCOV - code coverage report
Current view: directory - objdir/js/xpconnect/src - dombindings_gen.cpp (source / functions) Found Hit Coverage
Test: app.info Lines: 1515 127 8.4 %
Date: 2012-06-02 Functions: 139 12 8.6 %

       1                 : /* THIS FILE IS AUTOGENERATED - DO NOT EDIT */
       2                 : 
       3                 : #include "DOMSVGLengthList.h"
       4                 : #include "DOMSVGNumberList.h"
       5                 : #include "DOMSVGPathSegList.h"
       6                 : #include "DOMSVGPointList.h"
       7                 : #include "DOMSVGTransformList.h"
       8                 : #include "nsClientRect.h"
       9                 : #include "nsDOMFile.h"
      10                 : #include "nsDOMSettableTokenList.h"
      11                 : #include "nsDOMTokenList.h"
      12                 : #include "nsHTMLSelectElement.h"
      13                 : #include "nsIContent.h"
      14                 : #include "nsIDOMClientRect.h"
      15                 : #include "nsIDOMFile.h"
      16                 : #include "nsIDOMHTMLOptionElement.h"
      17                 : #include "nsIDOMNode.h"
      18                 : #include "nsIDOMPaintRequest.h"
      19                 : #include "nsIDOMSVGLength.h"
      20                 : #include "nsIDOMSVGMatrix.h"
      21                 : #include "nsIDOMSVGNumber.h"
      22                 : #include "nsIDOMSVGPathSeg.h"
      23                 : #include "nsIDOMSVGPoint.h"
      24                 : #include "nsIDOMSVGTransform.h"
      25                 : #include "nsIHTMLCollection.h"
      26                 : #include "nsINodeList.h"
      27                 : #include "nsISupports.h"
      28                 : #include "nsIVariant.h"
      29                 : #include "nsPaintRequest.h"
      30                 : 
      31                 : namespace mozilla {
      32                 : namespace dom {
      33                 : namespace binding {
      34                 : 
      35                 : // Property name ids
      36                 : 
      37            1464 : static jsid s_add_id = JSID_VOID;
      38            1464 : static jsid s_appendItem_id = JSID_VOID;
      39            1464 : static jsid s_clear_id = JSID_VOID;
      40            1464 : static jsid s_consolidate_id = JSID_VOID;
      41            1464 : static jsid s_contains_id = JSID_VOID;
      42            1464 : static jsid s_createSVGTransformFromMatrix_id = JSID_VOID;
      43            1464 : static jsid s_getItem_id = JSID_VOID;
      44            1464 : static jsid s_getItemAt_id = JSID_VOID;
      45            1464 : static jsid s_initialize_id = JSID_VOID;
      46            1464 : static jsid s_insertItemBefore_id = JSID_VOID;
      47            1464 : static jsid s_item_id = JSID_VOID;
      48            1464 : static jsid s_namedItem_id = JSID_VOID;
      49            1464 : static jsid s_numberOfItems_id = JSID_VOID;
      50            1464 : static jsid s_remove_id = JSID_VOID;
      51            1464 : static jsid s_removeItem_id = JSID_VOID;
      52            1464 : static jsid s_replaceItem_id = JSID_VOID;
      53            1464 : static jsid s_selectedIndex_id = JSID_VOID;
      54            1464 : static jsid s_setOption_id = JSID_VOID;
      55            1464 : static jsid s_toString_id = JSID_VOID;
      56            1464 : static jsid s_toggle_id = JSID_VOID;
      57            1464 : static jsid s_value_id = JSID_VOID;
      58                 : 
      59                 : bool
      60            1404 : DefinePropertyStaticJSVals(JSContext *cx)
      61                 : {
      62            1404 :     return SET_JSID_TO_STRING(cx, add) &&
      63            1404 :            SET_JSID_TO_STRING(cx, appendItem) &&
      64            1404 :            SET_JSID_TO_STRING(cx, clear) &&
      65            1404 :            SET_JSID_TO_STRING(cx, consolidate) &&
      66            1404 :            SET_JSID_TO_STRING(cx, contains) &&
      67            1404 :            SET_JSID_TO_STRING(cx, createSVGTransformFromMatrix) &&
      68            1404 :            SET_JSID_TO_STRING(cx, getItem) &&
      69            1404 :            SET_JSID_TO_STRING(cx, getItemAt) &&
      70            1404 :            SET_JSID_TO_STRING(cx, initialize) &&
      71            1404 :            SET_JSID_TO_STRING(cx, insertItemBefore) &&
      72            1404 :            SET_JSID_TO_STRING(cx, item) &&
      73            1404 :            SET_JSID_TO_STRING(cx, namedItem) &&
      74            1404 :            SET_JSID_TO_STRING(cx, numberOfItems) &&
      75            1404 :            SET_JSID_TO_STRING(cx, remove) &&
      76            1404 :            SET_JSID_TO_STRING(cx, removeItem) &&
      77            1404 :            SET_JSID_TO_STRING(cx, replaceItem) &&
      78            1404 :            SET_JSID_TO_STRING(cx, selectedIndex) &&
      79            1404 :            SET_JSID_TO_STRING(cx, setOption) &&
      80            1404 :            SET_JSID_TO_STRING(cx, toString) &&
      81            1404 :            SET_JSID_TO_STRING(cx, toggle) &&
      82           28080 :            SET_JSID_TO_STRING(cx, value);
      83                 : }
      84                 : 
      85                 : // Typedefs
      86                 : 
      87                 : // DOMTokenList
      88                 : 
      89                 : typedef ListClass<nsDOMTokenList, Ops<Getter<nsString> > > DOMTokenListClass;
      90                 : typedef ListBase<DOMTokenListClass> DOMTokenListWrapper;
      91                 : 
      92                 : 
      93                 : // HTMLCollection
      94                 : 
      95                 : typedef ListClass<nsIHTMLCollection, Ops<Getter<nsIContent *> >, Ops<Getter<nsISupportsResult> > > HTMLCollectionClass;
      96                 : typedef ListBase<HTMLCollectionClass> HTMLCollectionWrapper;
      97                 : 
      98                 : 
      99                 : // ClientRectList
     100                 : 
     101                 : typedef ListClass<nsClientRectList, Ops<Getter<nsIDOMClientRect *> > > ClientRectListClass;
     102                 : typedef ListBase<ClientRectListClass> ClientRectListWrapper;
     103                 : 
     104                 : 
     105                 : // DOMSettableTokenList
     106                 : 
     107                 : typedef DerivedListClass<nsDOMSettableTokenList, DOMTokenListWrapper, Ops<Getter<nsString> > > DOMSettableTokenListClass;
     108                 : typedef ListBase<DOMSettableTokenListClass> DOMSettableTokenListWrapper;
     109                 : 
     110                 : 
     111                 : // FileList
     112                 : 
     113                 : typedef ListClass<nsDOMFileList, Ops<Getter<nsIDOMFile *> > > FileListClass;
     114                 : typedef ListBase<FileListClass> FileListWrapper;
     115                 : 
     116                 : 
     117                 : // HTMLOptionsCollection
     118                 : 
     119                 : typedef DerivedListClass<nsHTMLOptionCollection, HTMLCollectionWrapper, Ops<Getter<nsIContent *>, Setter<nsIDOMHTMLOptionElement *> >, Ops<Getter<nsISupportsResult> > > HTMLOptionsCollectionClass;
     120                 : typedef ListBase<HTMLOptionsCollectionClass> HTMLOptionsCollectionWrapper;
     121                 : 
     122                 : 
     123                 : // NodeList
     124                 : 
     125                 : typedef ListClass<nsINodeList, Ops<Getter<nsIContent *> > > NodeListClass;
     126                 : typedef ListBase<NodeListClass> NodeListWrapper;
     127                 : 
     128                 : 
     129                 : // PaintRequestList
     130                 : 
     131                 : typedef ListClass<nsPaintRequestList, Ops<Getter<nsIDOMPaintRequest *> > > PaintRequestListClass;
     132                 : typedef ListBase<PaintRequestListClass> PaintRequestListWrapper;
     133                 : 
     134                 : 
     135                 : // SVGLengthList
     136                 : 
     137                 : typedef ListClass<mozilla::DOMSVGLengthList, Ops<Getter<nsIDOMSVGLength *> > > SVGLengthListClass;
     138                 : typedef ListBase<SVGLengthListClass> SVGLengthListWrapper;
     139                 : 
     140                 : 
     141                 : // SVGNumberList
     142                 : 
     143                 : typedef ListClass<mozilla::DOMSVGNumberList, Ops<Getter<nsIDOMSVGNumber *> > > SVGNumberListClass;
     144                 : typedef ListBase<SVGNumberListClass> SVGNumberListWrapper;
     145                 : 
     146                 : 
     147                 : // SVGPathSegList
     148                 : 
     149                 : typedef ListClass<mozilla::DOMSVGPathSegList, Ops<Getter<nsIDOMSVGPathSeg *> > > SVGPathSegListClass;
     150                 : typedef ListBase<SVGPathSegListClass> SVGPathSegListWrapper;
     151                 : 
     152                 : 
     153                 : // SVGPointList
     154                 : 
     155                 : typedef ListClass<mozilla::DOMSVGPointList, Ops<Getter<nsIDOMSVGPoint *> > > SVGPointListClass;
     156                 : typedef ListBase<SVGPointListClass> SVGPointListWrapper;
     157                 : 
     158                 : 
     159                 : // SVGTransformList
     160                 : 
     161                 : typedef ListClass<mozilla::DOMSVGTransformList, Ops<Getter<nsIDOMSVGTransform *> > > SVGTransformListClass;
     162                 : typedef ListBase<SVGTransformListClass> SVGTransformListWrapper;
     163                 : 
     164                 : 
     165                 : // Implementation
     166                 : 
     167                 : // DOMTokenList
     168                 : 
     169                 : template<>
     170                 : js::Class DOMTokenListWrapper::sInterfaceClass = {
     171                 :     "DOMTokenList",
     172                 :     0,
     173                 :     JS_PropertyStub,        /* addProperty */
     174                 :     JS_PropertyStub,        /* delProperty */
     175                 :     JS_PropertyStub,        /* getProperty */
     176                 :     JS_StrictPropertyStub,  /* setProperty */
     177                 :     JS_EnumerateStub,
     178                 :     JS_ResolveStub,
     179                 :     JS_ConvertStub,
     180                 :     JS_FinalizeStub,
     181                 :     NULL,                   /* checkAccess */
     182                 :     NULL,                   /* call */
     183                 :     NULL,                   /* construct */
     184                 :     interface_hasInstance
     185                 : };
     186                 : 
     187                 : template<>
     188                 : bool
     189               0 : DOMTokenListWrapper::objIsList(JSObject *obj)
     190                 : {
     191               0 :     if (!js::IsProxy(obj))
     192               0 :         return false;
     193               0 :     js::ProxyHandler *handler = js::GetProxyHandler(obj);
     194               0 :     return proxyHandlerIsList(handler) ||
     195               0 :            DOMSettableTokenListWrapper::proxyHandlerIsList(handler);
     196                 : }
     197                 : 
     198                 : template<>
     199                 : nsDOMTokenList*
     200               0 : DOMTokenListWrapper::getNative(JSObject *obj)
     201                 : {
     202               0 :     js::ProxyHandler *handler = js::GetProxyHandler(obj);
     203               0 :     if (proxyHandlerIsList(handler))
     204               0 :         return static_cast<nsDOMTokenList*>(js::GetProxyPrivate(obj).toPrivate());
     205               0 :     if (DOMSettableTokenListWrapper::proxyHandlerIsList(handler))
     206               0 :         return DOMSettableTokenListWrapper::getNative(obj);
     207                 : 
     208               0 :     NS_RUNTIMEABORT("Unknown list type!");
     209               0 :     return NULL;
     210                 : }
     211                 : 
     212                 : template<>
     213                 : JSObject *
     214               0 : DOMTokenListWrapper::getPrototype(JSContext *cx, XPCWrappedNativeScope *scope, bool *enabled)
     215                 : {
     216               0 :     if (!scope->NewDOMBindingsEnabled()) {
     217               0 :         *enabled = false;
     218               0 :         return NULL;
     219                 :     }
     220                 : 
     221               0 :     *enabled = true;
     222               0 :     return getPrototype(cx, scope);
     223                 : }
     224                 : 
     225                 : template<>
     226                 : JSString *
     227               0 : DOMTokenListWrapper::obj_toString(JSContext *cx, JSObject *proxy)
     228                 : {
     229               0 :     nsString result;
     230               0 :     nsresult rv = DOMTokenListWrapper::getListObject(proxy)->ToString(result);
     231                 :     JSString *jsresult;
     232               0 :     return NS_SUCCEEDED(rv) && xpc_qsStringToJsstring(cx, result, &jsresult) ? jsresult : NULL;
     233                 : }
     234                 : 
     235                 : template<>
     236                 : bool
     237               0 : DOMTokenListWrapper::getItemAt(nsDOMTokenList *list, uint32_t index, nsString &item)
     238                 : {
     239               0 :     list->Item(index, item);
     240               0 :     return !DOMStringIsNull(item);
     241                 : }
     242                 : 
     243                 : static JSBool
     244               0 : DOMTokenList_Add(JSContext *cx, unsigned argc, jsval *vp)
     245                 : {
     246               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     247               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
     248               0 :     if (!obj)
     249               0 :         return JS_FALSE;
     250               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
     251               0 :     if (!DOMTokenListWrapper::instanceIsListObject(cx, obj, callee))
     252               0 :         return false;
     253               0 :     if (argc < 1)
     254               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
     255               0 :     jsval *argv = JS_ARGV(cx, vp);
     256               0 :     xpc_qsDOMString arg0(cx, argv[0], &argv[0], xpc_qsDOMString::eStringify, xpc_qsDOMString::eDefaultUndefinedBehavior);
     257               0 :     if (!arg0.IsValid())
     258               0 :         return JS_FALSE;
     259                 :     nsresult rv;
     260               0 :     rv = DOMTokenListWrapper::getListObject(obj)->Add(arg0);
     261               0 :     if (NS_FAILED(rv))
     262               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "DOMTokenList", "add");
     263               0 :     *vp = JSVAL_VOID;
     264               0 :     return JS_TRUE;
     265                 : }
     266                 : 
     267                 : static JSBool
     268               0 : DOMTokenList_Contains(JSContext *cx, unsigned argc, jsval *vp)
     269                 : {
     270               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     271               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
     272               0 :     if (!obj)
     273               0 :         return JS_FALSE;
     274               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
     275               0 :     if (!DOMTokenListWrapper::instanceIsListObject(cx, obj, callee))
     276               0 :         return false;
     277               0 :     if (argc < 1)
     278               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
     279               0 :     jsval *argv = JS_ARGV(cx, vp);
     280               0 :     xpc_qsDOMString arg0(cx, argv[0], &argv[0], xpc_qsDOMString::eStringify, xpc_qsDOMString::eDefaultUndefinedBehavior);
     281               0 :     if (!arg0.IsValid())
     282               0 :         return JS_FALSE;
     283                 :     nsresult rv;
     284                 :     bool result;
     285               0 :     rv = DOMTokenListWrapper::getListObject(obj)->Contains(arg0, &result);
     286               0 :     if (NS_FAILED(rv))
     287               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "DOMTokenList", "contains");
     288               0 :     *vp = (result ? JSVAL_TRUE : JSVAL_FALSE);
     289               0 :     return JS_TRUE;
     290                 : }
     291                 : 
     292                 : static JSBool
     293               0 : DOMTokenList_Item(JSContext *cx, unsigned argc, jsval *vp)
     294                 : {
     295               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     296               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
     297               0 :     if (!obj)
     298               0 :         return JS_FALSE;
     299               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
     300               0 :     if (!DOMTokenListWrapper::instanceIsListObject(cx, obj, callee))
     301               0 :         return false;
     302               0 :     if (argc < 1)
     303               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
     304               0 :     jsval *argv = JS_ARGV(cx, vp);
     305                 :     uint32_t arg0;
     306               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
     307               0 :         return JS_FALSE;
     308                 :     nsresult rv;
     309               0 :     nsString result;
     310               0 :     rv = DOMTokenListWrapper::getListObject(obj)->Item(arg0, result);
     311               0 :     if (NS_FAILED(rv))
     312               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "DOMTokenList", "item");
     313               0 :     return xpc::StringToJsval(cx, result, vp);
     314                 : }
     315                 : 
     316                 : static JSBool
     317               0 : DOMTokenList_Remove(JSContext *cx, unsigned argc, jsval *vp)
     318                 : {
     319               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     320               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
     321               0 :     if (!obj)
     322               0 :         return JS_FALSE;
     323               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
     324               0 :     if (!DOMTokenListWrapper::instanceIsListObject(cx, obj, callee))
     325               0 :         return false;
     326               0 :     if (argc < 1)
     327               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
     328               0 :     jsval *argv = JS_ARGV(cx, vp);
     329               0 :     xpc_qsDOMString arg0(cx, argv[0], &argv[0], xpc_qsDOMString::eStringify, xpc_qsDOMString::eDefaultUndefinedBehavior);
     330               0 :     if (!arg0.IsValid())
     331               0 :         return JS_FALSE;
     332                 :     nsresult rv;
     333               0 :     rv = DOMTokenListWrapper::getListObject(obj)->Remove(arg0);
     334               0 :     if (NS_FAILED(rv))
     335               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "DOMTokenList", "remove");
     336               0 :     *vp = JSVAL_VOID;
     337               0 :     return JS_TRUE;
     338                 : }
     339                 : 
     340                 : static JSBool
     341               0 : DOMTokenList_ToString(JSContext *cx, unsigned argc, jsval *vp)
     342                 : {
     343               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     344               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
     345               0 :     if (!obj)
     346               0 :         return JS_FALSE;
     347               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
     348               0 :     if (!DOMTokenListWrapper::instanceIsListObject(cx, obj, callee))
     349               0 :         return false;
     350                 :     nsresult rv;
     351               0 :     nsString result;
     352               0 :     rv = DOMTokenListWrapper::getListObject(obj)->ToString(result);
     353               0 :     if (NS_FAILED(rv))
     354               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "DOMTokenList", "toString");
     355               0 :     return xpc::StringToJsval(cx, result, vp);
     356                 : }
     357                 : 
     358                 : static JSBool
     359               0 : DOMTokenList_Toggle(JSContext *cx, unsigned argc, jsval *vp)
     360                 : {
     361               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     362               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
     363               0 :     if (!obj)
     364               0 :         return JS_FALSE;
     365               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
     366               0 :     if (!DOMTokenListWrapper::instanceIsListObject(cx, obj, callee))
     367               0 :         return false;
     368               0 :     if (argc < 1)
     369               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
     370               0 :     jsval *argv = JS_ARGV(cx, vp);
     371               0 :     xpc_qsDOMString arg0(cx, argv[0], &argv[0], xpc_qsDOMString::eStringify, xpc_qsDOMString::eDefaultUndefinedBehavior);
     372               0 :     if (!arg0.IsValid())
     373               0 :         return JS_FALSE;
     374                 :     nsresult rv;
     375                 :     bool result;
     376               0 :     rv = DOMTokenListWrapper::getListObject(obj)->Toggle(arg0, &result);
     377               0 :     if (NS_FAILED(rv))
     378               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "DOMTokenList", "toggle");
     379               0 :     *vp = (result ? JSVAL_TRUE : JSVAL_FALSE);
     380               0 :     return JS_TRUE;
     381                 : }
     382                 : 
     383                 : template<>
     384                 : DOMTokenListWrapper::Properties DOMTokenListWrapper::sProtoProperties[] = {
     385                 :     { s_length_id, length_getter, NULL }
     386                 : };
     387                 : 
     388                 : template<>
     389            1464 : size_t DOMTokenListWrapper::sProtoPropertiesCount = ArrayLength(DOMTokenListWrapper::sProtoProperties);
     390                 : 
     391                 : template<>
     392                 : DOMTokenListWrapper::Methods DOMTokenListWrapper::sProtoMethods[] = {
     393                 :     { s_add_id, DOMTokenList_Add, 1 },
     394                 :     { s_contains_id, DOMTokenList_Contains, 1 },
     395                 :     { s_item_id, DOMTokenList_Item, 1 },
     396                 :     { s_remove_id, DOMTokenList_Remove, 1 },
     397                 :     { s_toString_id, DOMTokenList_ToString, 0 },
     398                 :     { s_toggle_id, DOMTokenList_Toggle, 1 }
     399                 : };
     400                 : 
     401                 : template<>
     402            1464 : size_t DOMTokenListWrapper::sProtoMethodsCount = ArrayLength(DOMTokenListWrapper::sProtoMethods);
     403                 : 
     404                 : template class ListBase<DOMTokenListClass>;
     405                 : 
     406                 : JSObject*
     407               0 : DOMTokenList::create(JSContext *cx, XPCWrappedNativeScope *scope, nsDOMTokenList *list, nsWrapperCache *cache, bool *triedToWrap)
     408                 : {
     409               0 :     return DOMTokenListWrapper::create(cx, scope, list, cache, triedToWrap);
     410                 : }
     411                 : 
     412                 : bool
     413               0 : DOMTokenList::objIsWrapper(JSObject *obj)
     414                 : {
     415               0 :     return DOMTokenListWrapper::objIsList(obj);
     416                 : }
     417                 : 
     418                 : nsDOMTokenList*
     419               0 : DOMTokenList::getNative(JSObject *obj)
     420                 : {
     421               0 :     return DOMTokenListWrapper::getListObject(obj);
     422                 : }
     423                 : 
     424                 : // HTMLCollection
     425                 : 
     426                 : template<>
     427                 : js::Class HTMLCollectionWrapper::sInterfaceClass = {
     428                 :     "HTMLCollection",
     429                 :     0,
     430                 :     JS_PropertyStub,        /* addProperty */
     431                 :     JS_PropertyStub,        /* delProperty */
     432                 :     JS_PropertyStub,        /* getProperty */
     433                 :     JS_StrictPropertyStub,  /* setProperty */
     434                 :     JS_EnumerateStub,
     435                 :     JS_ResolveStub,
     436                 :     JS_ConvertStub,
     437                 :     JS_FinalizeStub,
     438                 :     NULL,                   /* checkAccess */
     439                 :     NULL,                   /* call */
     440                 :     NULL,                   /* construct */
     441                 :     interface_hasInstance
     442                 : };
     443                 : 
     444                 : template<>
     445                 : bool
     446           17865 : HTMLCollectionWrapper::objIsList(JSObject *obj)
     447                 : {
     448           17865 :     if (!js::IsProxy(obj))
     449               0 :         return false;
     450           17865 :     js::ProxyHandler *handler = js::GetProxyHandler(obj);
     451           17865 :     return proxyHandlerIsList(handler) ||
     452           17865 :            HTMLOptionsCollectionWrapper::proxyHandlerIsList(handler);
     453                 : }
     454                 : 
     455                 : template<>
     456                 : nsIHTMLCollection*
     457            9103 : HTMLCollectionWrapper::getNative(JSObject *obj)
     458                 : {
     459            9103 :     js::ProxyHandler *handler = js::GetProxyHandler(obj);
     460            9103 :     if (proxyHandlerIsList(handler))
     461            9103 :         return static_cast<nsIHTMLCollection*>(js::GetProxyPrivate(obj).toPrivate());
     462               0 :     if (HTMLOptionsCollectionWrapper::proxyHandlerIsList(handler))
     463               0 :         return HTMLOptionsCollectionWrapper::getNative(obj);
     464                 : 
     465               0 :     NS_RUNTIMEABORT("Unknown list type!");
     466               0 :     return NULL;
     467                 : }
     468                 : 
     469                 : template<>
     470                 : bool
     471            3141 : HTMLCollectionWrapper::getItemAt(nsIHTMLCollection *list, uint32_t index, nsIContent * &item)
     472                 : {
     473            3141 :     item = list->GetNodeAt(index);
     474            3141 :     return !!item;
     475                 : }
     476                 : 
     477                 : template<>
     478                 : bool
     479               0 : HTMLCollectionWrapper::getNamedItem(nsIHTMLCollection *list, const nsAString& index, nsISupportsResult &item)
     480                 : {
     481               0 :     item.mResult = list->GetNamedItem(index, &item.mCache);
     482               0 :     return !!item.mResult;
     483                 : }
     484                 : 
     485                 : static JSBool
     486             111 : HTMLCollection_Item(JSContext *cx, unsigned argc, jsval *vp)
     487                 : {
     488             111 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     489             111 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
     490             111 :     if (!obj)
     491               0 :         return JS_FALSE;
     492             111 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
     493             111 :     if (!HTMLCollectionWrapper::instanceIsListObject(cx, obj, callee))
     494               0 :         return false;
     495             111 :     if (argc < 1)
     496               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
     497             111 :     jsval *argv = JS_ARGV(cx, vp);
     498                 :     uint32_t arg0;
     499             111 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
     500               0 :         return JS_FALSE;
     501                 :     nsIContent *result;
     502             111 :     result = HTMLCollectionWrapper::getListObject(obj)->GetNodeAt(arg0);
     503             111 :     if (!result) {
     504               0 :       *vp = JSVAL_NULL;
     505               0 :       return JS_TRUE;
     506                 :     }
     507             111 :     return Wrap(cx, obj, result, vp);
     508                 : }
     509                 : 
     510                 : static JSBool
     511               0 : HTMLCollection_NamedItem(JSContext *cx, unsigned argc, jsval *vp)
     512                 : {
     513               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     514               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
     515               0 :     if (!obj)
     516               0 :         return JS_FALSE;
     517               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
     518               0 :     if (!HTMLCollectionWrapper::instanceIsListObject(cx, obj, callee))
     519               0 :         return false;
     520               0 :     if (argc < 1)
     521               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
     522               0 :     jsval *argv = JS_ARGV(cx, vp);
     523               0 :     xpc_qsDOMString arg0(cx, argv[0], &argv[0], xpc_qsDOMString::eDefaultNullBehavior, xpc_qsDOMString::eDefaultUndefinedBehavior);
     524               0 :     if (!arg0.IsValid())
     525               0 :         return JS_FALSE;
     526                 :     nsWrapperCache *cache;
     527                 :     nsISupports *result;
     528               0 :     result = HTMLCollectionWrapper::getListObject(obj)->GetNamedItem(arg0, &cache);
     529               0 :     if (!result) {
     530               0 :       *vp = JSVAL_NULL;
     531               0 :       return JS_TRUE;
     532                 :     }
     533               0 :     return Wrap(cx, obj, result, cache, vp);
     534                 : }
     535                 : 
     536                 : template<>
     537                 : HTMLCollectionWrapper::Properties HTMLCollectionWrapper::sProtoProperties[] = {
     538                 :     { s_length_id, length_getter, NULL }
     539                 : };
     540                 : 
     541                 : template<>
     542            1464 : size_t HTMLCollectionWrapper::sProtoPropertiesCount = ArrayLength(HTMLCollectionWrapper::sProtoProperties);
     543                 : 
     544                 : template<>
     545                 : HTMLCollectionWrapper::Methods HTMLCollectionWrapper::sProtoMethods[] = {
     546                 :     { s_item_id, HTMLCollection_Item, 1 },
     547                 :     { s_namedItem_id, HTMLCollection_NamedItem, 1 }
     548                 : };
     549                 : 
     550                 : template<>
     551            1464 : size_t HTMLCollectionWrapper::sProtoMethodsCount = ArrayLength(HTMLCollectionWrapper::sProtoMethods);
     552                 : 
     553                 : template class ListBase<HTMLCollectionClass>;
     554                 : 
     555                 : JSObject*
     556            2684 : HTMLCollection::create(JSContext *cx, XPCWrappedNativeScope *scope, nsIHTMLCollection *list, nsWrapperCache *cache, bool *triedToWrap)
     557                 : {
     558            2684 :     return HTMLCollectionWrapper::create(cx, scope, list, cache, triedToWrap);
     559                 : }
     560                 : 
     561                 : bool
     562               0 : HTMLCollection::objIsWrapper(JSObject *obj)
     563                 : {
     564               0 :     return HTMLCollectionWrapper::objIsList(obj);
     565                 : }
     566                 : 
     567                 : nsIHTMLCollection*
     568               0 : HTMLCollection::getNative(JSObject *obj)
     569                 : {
     570               0 :     return HTMLCollectionWrapper::getListObject(obj);
     571                 : }
     572                 : 
     573                 : // ClientRectList
     574                 : 
     575                 : template<>
     576                 : js::Class ClientRectListWrapper::sInterfaceClass = {
     577                 :     "ClientRectList",
     578                 :     0,
     579                 :     JS_PropertyStub,        /* addProperty */
     580                 :     JS_PropertyStub,        /* delProperty */
     581                 :     JS_PropertyStub,        /* getProperty */
     582                 :     JS_StrictPropertyStub,  /* setProperty */
     583                 :     JS_EnumerateStub,
     584                 :     JS_ResolveStub,
     585                 :     JS_ConvertStub,
     586                 :     JS_FinalizeStub,
     587                 :     NULL,                   /* checkAccess */
     588                 :     NULL,                   /* call */
     589                 :     NULL,                   /* construct */
     590                 :     interface_hasInstance
     591                 : };
     592                 : 
     593                 : template<>
     594                 : JSObject *
     595               0 : ClientRectListWrapper::getPrototype(JSContext *cx, XPCWrappedNativeScope *scope, bool *enabled)
     596                 : {
     597               0 :     if (!scope->NewDOMBindingsEnabled()) {
     598               0 :         *enabled = false;
     599               0 :         return NULL;
     600                 :     }
     601                 : 
     602               0 :     *enabled = true;
     603               0 :     return getPrototype(cx, scope);
     604                 : }
     605                 : 
     606                 : template<>
     607                 : bool
     608               0 : ClientRectListWrapper::getItemAt(nsClientRectList *list, uint32_t index, nsIDOMClientRect * &item)
     609                 : {
     610               0 :     item = list->GetItemAt(index);
     611               0 :     return !!item;
     612                 : }
     613                 : 
     614                 : static JSBool
     615               0 : ClientRectList_Item(JSContext *cx, unsigned argc, jsval *vp)
     616                 : {
     617               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     618               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
     619               0 :     if (!obj)
     620               0 :         return JS_FALSE;
     621               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
     622               0 :     if (!ClientRectListWrapper::instanceIsListObject(cx, obj, callee))
     623               0 :         return false;
     624               0 :     if (argc < 1)
     625               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
     626               0 :     jsval *argv = JS_ARGV(cx, vp);
     627                 :     uint32_t arg0;
     628               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
     629               0 :         return JS_FALSE;
     630                 :     nsIDOMClientRect *result;
     631               0 :     result = ClientRectListWrapper::getListObject(obj)->GetItemAt(arg0);
     632               0 :     if (!result) {
     633               0 :       *vp = JSVAL_NULL;
     634               0 :       return JS_TRUE;
     635                 :     }
     636               0 :     return Wrap(cx, obj, result, vp);
     637                 : }
     638                 : 
     639                 : template<>
     640                 : ClientRectListWrapper::Properties ClientRectListWrapper::sProtoProperties[] = {
     641                 :     { s_length_id, length_getter, NULL }
     642                 : };
     643                 : 
     644                 : template<>
     645            1464 : size_t ClientRectListWrapper::sProtoPropertiesCount = ArrayLength(ClientRectListWrapper::sProtoProperties);
     646                 : 
     647                 : template<>
     648                 : ClientRectListWrapper::Methods ClientRectListWrapper::sProtoMethods[] = {
     649                 :     { s_item_id, ClientRectList_Item, 1 }
     650                 : };
     651                 : 
     652                 : template<>
     653            1464 : size_t ClientRectListWrapper::sProtoMethodsCount = ArrayLength(ClientRectListWrapper::sProtoMethods);
     654                 : 
     655                 : template class ListBase<ClientRectListClass>;
     656                 : 
     657                 : JSObject*
     658               0 : ClientRectList::create(JSContext *cx, XPCWrappedNativeScope *scope, nsClientRectList *list, nsWrapperCache *cache, bool *triedToWrap)
     659                 : {
     660               0 :     return ClientRectListWrapper::create(cx, scope, list, cache, triedToWrap);
     661                 : }
     662                 : 
     663                 : bool
     664               0 : ClientRectList::objIsWrapper(JSObject *obj)
     665                 : {
     666               0 :     return ClientRectListWrapper::objIsList(obj);
     667                 : }
     668                 : 
     669                 : nsClientRectList*
     670               0 : ClientRectList::getNative(JSObject *obj)
     671                 : {
     672               0 :     return ClientRectListWrapper::getListObject(obj);
     673                 : }
     674                 : 
     675                 : // DOMSettableTokenList
     676                 : 
     677                 : template<>
     678                 : js::Class DOMSettableTokenListWrapper::sInterfaceClass = {
     679                 :     "DOMSettableTokenList",
     680                 :     0,
     681                 :     JS_PropertyStub,        /* addProperty */
     682                 :     JS_PropertyStub,        /* delProperty */
     683                 :     JS_PropertyStub,        /* getProperty */
     684                 :     JS_StrictPropertyStub,  /* setProperty */
     685                 :     JS_EnumerateStub,
     686                 :     JS_ResolveStub,
     687                 :     JS_ConvertStub,
     688                 :     JS_FinalizeStub,
     689                 :     NULL,                   /* checkAccess */
     690                 :     NULL,                   /* call */
     691                 :     NULL,                   /* construct */
     692                 :     interface_hasInstance
     693                 : };
     694                 : 
     695                 : template<>
     696                 : JSObject *
     697               0 : DOMSettableTokenListWrapper::getPrototype(JSContext *cx, XPCWrappedNativeScope *scope, bool *enabled)
     698                 : {
     699               0 :     if (!scope->NewDOMBindingsEnabled()) {
     700               0 :         *enabled = false;
     701               0 :         return NULL;
     702                 :     }
     703                 : 
     704               0 :     *enabled = true;
     705               0 :     return getPrototype(cx, scope);
     706                 : }
     707                 : 
     708                 : template<>
     709                 : JSString *
     710               0 : DOMSettableTokenListWrapper::obj_toString(JSContext *cx, JSObject *proxy)
     711                 : {
     712               0 :     nsString result;
     713               0 :     nsresult rv = DOMSettableTokenListWrapper::getListObject(proxy)->ToString(result);
     714                 :     JSString *jsresult;
     715               0 :     return NS_SUCCEEDED(rv) && xpc_qsStringToJsstring(cx, result, &jsresult) ? jsresult : NULL;
     716                 : }
     717                 : 
     718                 : template<>
     719                 : bool
     720               0 : DOMSettableTokenListWrapper::getItemAt(nsDOMSettableTokenList *list, uint32_t index, nsString &item)
     721                 : {
     722               0 :     list->Item(index, item);
     723               0 :     return !DOMStringIsNull(item);
     724                 : }
     725                 : 
     726                 : static JSBool
     727               0 : DOMSettableTokenList_GetValue(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
     728                 : {
     729               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     730               0 :     if (!DOMSettableTokenListWrapper::instanceIsListObject(cx, obj, NULL))
     731               0 :         return false;
     732                 :     nsresult rv;
     733               0 :     nsString result;
     734               0 :     rv = DOMSettableTokenListWrapper::getListObject(obj)->GetValue(result);
     735               0 :     if (NS_FAILED(rv))
     736               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "DOMSettableTokenList", "value");
     737               0 :     return xpc::StringToJsval(cx, result, vp);
     738                 : }
     739                 : 
     740                 : static JSBool
     741               0 : DOMSettableTokenList_SetValue(JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp)
     742                 : {
     743               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     744               0 :     if (!DOMSettableTokenListWrapper::instanceIsListObject(cx, obj, NULL))
     745               0 :         return false;
     746               0 :     xpc_qsDOMString arg0(cx, *vp, vp, xpc_qsDOMString::eDefaultNullBehavior, xpc_qsDOMString::eDefaultUndefinedBehavior);
     747               0 :     if (!arg0.IsValid())
     748               0 :         return JS_FALSE;
     749                 :     nsresult rv;
     750               0 :     rv = DOMSettableTokenListWrapper::getListObject(obj)->SetValue(arg0);
     751               0 :     if (NS_FAILED(rv))
     752               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "DOMSettableTokenList", "value");
     753               0 :     return JS_TRUE;
     754                 : }
     755                 : 
     756                 : template<>
     757                 : DOMSettableTokenListWrapper::Properties DOMSettableTokenListWrapper::sProtoProperties[] = {
     758                 :     { s_value_id, DOMSettableTokenList_GetValue, DOMSettableTokenList_SetValue }
     759                 : };
     760                 : 
     761                 : template<>
     762            1464 : size_t DOMSettableTokenListWrapper::sProtoPropertiesCount = ArrayLength(DOMSettableTokenListWrapper::sProtoProperties);
     763                 : 
     764                 : template class ListBase<DOMSettableTokenListClass>;
     765                 : 
     766                 : JSObject*
     767               0 : DOMSettableTokenList::create(JSContext *cx, XPCWrappedNativeScope *scope, nsDOMSettableTokenList *list, nsWrapperCache *cache, bool *triedToWrap)
     768                 : {
     769               0 :     return DOMSettableTokenListWrapper::create(cx, scope, list, cache, triedToWrap);
     770                 : }
     771                 : 
     772                 : bool
     773               0 : DOMSettableTokenList::objIsWrapper(JSObject *obj)
     774                 : {
     775               0 :     return DOMSettableTokenListWrapper::objIsList(obj);
     776                 : }
     777                 : 
     778                 : nsDOMSettableTokenList*
     779               0 : DOMSettableTokenList::getNative(JSObject *obj)
     780                 : {
     781               0 :     return DOMSettableTokenListWrapper::getListObject(obj);
     782                 : }
     783                 : 
     784                 : // FileList
     785                 : 
     786                 : template<>
     787                 : js::Class FileListWrapper::sInterfaceClass = {
     788                 :     "FileList",
     789                 :     0,
     790                 :     JS_PropertyStub,        /* addProperty */
     791                 :     JS_PropertyStub,        /* delProperty */
     792                 :     JS_PropertyStub,        /* getProperty */
     793                 :     JS_StrictPropertyStub,  /* setProperty */
     794                 :     JS_EnumerateStub,
     795                 :     JS_ResolveStub,
     796                 :     JS_ConvertStub,
     797                 :     JS_FinalizeStub,
     798                 :     NULL,                   /* checkAccess */
     799                 :     NULL,                   /* call */
     800                 :     NULL,                   /* construct */
     801                 :     interface_hasInstance
     802                 : };
     803                 : 
     804                 : template<>
     805                 : JSObject *
     806               0 : FileListWrapper::getPrototype(JSContext *cx, XPCWrappedNativeScope *scope, bool *enabled)
     807                 : {
     808               0 :     if (!scope->NewDOMBindingsEnabled()) {
     809               0 :         *enabled = false;
     810               0 :         return NULL;
     811                 :     }
     812                 : 
     813               0 :     *enabled = true;
     814               0 :     return getPrototype(cx, scope);
     815                 : }
     816                 : 
     817                 : template<>
     818                 : bool
     819               0 : FileListWrapper::getItemAt(nsDOMFileList *list, uint32_t index, nsIDOMFile * &item)
     820                 : {
     821               0 :     item = list->GetItemAt(index);
     822               0 :     return !!item;
     823                 : }
     824                 : 
     825                 : static JSBool
     826               0 : FileList_Item(JSContext *cx, unsigned argc, jsval *vp)
     827                 : {
     828               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     829               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
     830               0 :     if (!obj)
     831               0 :         return JS_FALSE;
     832               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
     833               0 :     if (!FileListWrapper::instanceIsListObject(cx, obj, callee))
     834               0 :         return false;
     835               0 :     if (argc < 1)
     836               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
     837               0 :     jsval *argv = JS_ARGV(cx, vp);
     838                 :     uint32_t arg0;
     839               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
     840               0 :         return JS_FALSE;
     841                 :     nsIDOMFile *result;
     842               0 :     result = FileListWrapper::getListObject(obj)->GetItemAt(arg0);
     843               0 :     if (!result) {
     844               0 :       *vp = JSVAL_NULL;
     845               0 :       return JS_TRUE;
     846                 :     }
     847               0 :     return Wrap(cx, obj, result, vp);
     848                 : }
     849                 : 
     850                 : template<>
     851                 : FileListWrapper::Properties FileListWrapper::sProtoProperties[] = {
     852                 :     { s_length_id, length_getter, NULL }
     853                 : };
     854                 : 
     855                 : template<>
     856            1464 : size_t FileListWrapper::sProtoPropertiesCount = ArrayLength(FileListWrapper::sProtoProperties);
     857                 : 
     858                 : template<>
     859                 : FileListWrapper::Methods FileListWrapper::sProtoMethods[] = {
     860                 :     { s_item_id, FileList_Item, 1 }
     861                 : };
     862                 : 
     863                 : template<>
     864            1464 : size_t FileListWrapper::sProtoMethodsCount = ArrayLength(FileListWrapper::sProtoMethods);
     865                 : 
     866                 : template class ListBase<FileListClass>;
     867                 : 
     868                 : JSObject*
     869               0 : FileList::create(JSContext *cx, XPCWrappedNativeScope *scope, nsDOMFileList *list, nsWrapperCache *cache, bool *triedToWrap)
     870                 : {
     871               0 :     return FileListWrapper::create(cx, scope, list, cache, triedToWrap);
     872                 : }
     873                 : 
     874                 : bool
     875               0 : FileList::objIsWrapper(JSObject *obj)
     876                 : {
     877               0 :     return FileListWrapper::objIsList(obj);
     878                 : }
     879                 : 
     880                 : nsDOMFileList*
     881               0 : FileList::getNative(JSObject *obj)
     882                 : {
     883               0 :     return FileListWrapper::getListObject(obj);
     884                 : }
     885                 : 
     886                 : // HTMLOptionsCollection
     887                 : 
     888                 : template<>
     889                 : js::Class HTMLOptionsCollectionWrapper::sInterfaceClass = {
     890                 :     "HTMLOptionsCollection",
     891                 :     0,
     892                 :     JS_PropertyStub,        /* addProperty */
     893                 :     JS_PropertyStub,        /* delProperty */
     894                 :     JS_PropertyStub,        /* getProperty */
     895                 :     JS_StrictPropertyStub,  /* setProperty */
     896                 :     JS_EnumerateStub,
     897                 :     JS_ResolveStub,
     898                 :     JS_ConvertStub,
     899                 :     JS_FinalizeStub,
     900                 :     NULL,                   /* checkAccess */
     901                 :     NULL,                   /* call */
     902                 :     NULL,                   /* construct */
     903                 :     interface_hasInstance
     904                 : };
     905                 : 
     906                 : template<>
     907                 : bool
     908               0 : HTMLOptionsCollectionWrapper::getItemAt(nsHTMLOptionCollection *list, uint32_t index, nsIContent * &item)
     909                 : {
     910               0 :     item = list->GetNodeAt(index);
     911               0 :     return !!item;
     912                 : }
     913                 : 
     914                 : template<>
     915                 : bool
     916               0 : HTMLOptionsCollectionWrapper::setItemAt(JSContext *cx, nsHTMLOptionCollection *list, uint32_t index, nsIDOMHTMLOptionElement * item)
     917                 : {
     918               0 :     nsresult rv = list->SetOption(index, item);
     919               0 :     return NS_SUCCEEDED(rv) ? true : Throw(cx, rv);
     920                 : }
     921                 : 
     922                 : template<>
     923                 : bool
     924               0 : HTMLOptionsCollectionWrapper::getNamedItem(nsHTMLOptionCollection *list, const nsAString& index, nsISupportsResult &item)
     925                 : {
     926               0 :     item.mResult = list->GetNamedItem(index, &item.mCache);
     927               0 :     return !!item.mResult;
     928                 : }
     929                 : 
     930                 : static JSBool
     931               0 : HTMLOptionsCollection_Add(JSContext *cx, unsigned argc, jsval *vp)
     932                 : {
     933               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     934               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
     935               0 :     if (!obj)
     936               0 :         return JS_FALSE;
     937               0 :     XPCCallContext ccx(JS_CALLER, cx, obj, JSVAL_TO_OBJECT(JS_CALLEE(cx, vp)));
     938               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
     939               0 :     if (!HTMLOptionsCollectionWrapper::instanceIsListObject(cx, obj, callee))
     940               0 :         return false;
     941               0 :     if (argc < 1)
     942               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
     943               0 :     jsval *argv = JS_ARGV(cx, vp);
     944                 :     nsresult rv;
     945                 :     nsIDOMHTMLOptionElement *arg0;
     946               0 :     xpc_qsSelfRef arg0ref;
     947               0 :     rv = xpc_qsUnwrapArg<nsIDOMHTMLOptionElement>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
     948               0 :     if (NS_FAILED(rv)) {
     949               0 :         xpc_qsThrowBadArgWithCcx(ccx, rv, 0);
     950               0 :         return JS_FALSE;
     951                 :     }
     952               0 :     nsCOMPtr<nsIVariant> arg1(already_AddRefed<nsIVariant>(XPCVariant::newVariant(ccx, (1 < argc ? argv[1] : JSVAL_NULL))));
     953               0 :     if (!arg1) {
     954               0 :         xpc_qsThrowBadArgWithCcx(ccx, NS_ERROR_XPC_BAD_CONVERT_JS, 1);
     955               0 :         return JS_FALSE;
     956                 :     }
     957               0 :     rv = HTMLOptionsCollectionWrapper::getListObject(obj)->Add(arg0, arg1);
     958               0 :     if (NS_FAILED(rv))
     959               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "HTMLOptionsCollection", "add");
     960               0 :     *vp = JSVAL_VOID;
     961               0 :     return JS_TRUE;
     962                 : }
     963                 : 
     964                 : static JSBool
     965               0 : HTMLOptionsCollection_Item(JSContext *cx, unsigned argc, jsval *vp)
     966                 : {
     967               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     968               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
     969               0 :     if (!obj)
     970               0 :         return JS_FALSE;
     971               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
     972               0 :     if (!HTMLOptionsCollectionWrapper::instanceIsListObject(cx, obj, callee))
     973               0 :         return false;
     974               0 :     if (argc < 1)
     975               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
     976               0 :     jsval *argv = JS_ARGV(cx, vp);
     977                 :     uint32_t arg0;
     978               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
     979               0 :         return JS_FALSE;
     980                 :     nsresult rv;
     981               0 :     nsCOMPtr<nsIDOMNode> result;
     982               0 :     rv = HTMLOptionsCollectionWrapper::getListObject(obj)->Item(arg0, getter_AddRefs(result));
     983               0 :     if (NS_FAILED(rv))
     984               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "HTMLOptionsCollection", "item");
     985               0 :     if (!result) {
     986               0 :       *vp = JSVAL_NULL;
     987               0 :       return JS_TRUE;
     988                 :     }
     989               0 :     return Wrap(cx, obj, result, vp);
     990                 : }
     991                 : 
     992                 : static JSBool
     993               0 : HTMLOptionsCollection_SetLength(JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp)
     994                 : {
     995               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
     996               0 :     if (!HTMLOptionsCollectionWrapper::instanceIsListObject(cx, obj, NULL))
     997               0 :         return false;
     998                 :     uint32_t arg0;
     999               0 :     if (!JS_ValueToECMAUint32(cx, *vp, &arg0))
    1000               0 :         return JS_FALSE;
    1001                 :     nsresult rv;
    1002               0 :     rv = HTMLOptionsCollectionWrapper::getListObject(obj)->SetLength(arg0);
    1003               0 :     if (NS_FAILED(rv))
    1004               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "HTMLOptionsCollection", "length");
    1005               0 :     return JS_TRUE;
    1006                 : }
    1007                 : 
    1008                 : static JSBool
    1009               0 : HTMLOptionsCollection_NamedItem(JSContext *cx, unsigned argc, jsval *vp)
    1010                 : {
    1011               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1012               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1013               0 :     if (!obj)
    1014               0 :         return JS_FALSE;
    1015               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1016               0 :     if (!HTMLOptionsCollectionWrapper::instanceIsListObject(cx, obj, callee))
    1017               0 :         return false;
    1018               0 :     if (argc < 1)
    1019               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1020               0 :     jsval *argv = JS_ARGV(cx, vp);
    1021               0 :     xpc_qsDOMString arg0(cx, argv[0], &argv[0], xpc_qsDOMString::eDefaultNullBehavior, xpc_qsDOMString::eDefaultUndefinedBehavior);
    1022               0 :     if (!arg0.IsValid())
    1023               0 :         return JS_FALSE;
    1024                 :     nsWrapperCache *cache;
    1025                 :     nsISupports *result;
    1026               0 :     result = HTMLOptionsCollectionWrapper::getListObject(obj)->GetNamedItem(arg0, &cache);
    1027               0 :     if (!result) {
    1028               0 :       *vp = JSVAL_NULL;
    1029               0 :       return JS_TRUE;
    1030                 :     }
    1031               0 :     return Wrap(cx, obj, result, cache, vp);
    1032                 : }
    1033                 : 
    1034                 : static JSBool
    1035               0 : HTMLOptionsCollection_Remove(JSContext *cx, unsigned argc, jsval *vp)
    1036                 : {
    1037               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1038               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1039               0 :     if (!obj)
    1040               0 :         return JS_FALSE;
    1041               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1042               0 :     if (!HTMLOptionsCollectionWrapper::instanceIsListObject(cx, obj, callee))
    1043               0 :         return false;
    1044               0 :     if (argc < 1)
    1045               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1046               0 :     jsval *argv = JS_ARGV(cx, vp);
    1047                 :     int32_t arg0;
    1048               0 :     if (!JS_ValueToECMAInt32(cx, argv[0], &arg0))
    1049               0 :         return JS_FALSE;
    1050                 :     nsresult rv;
    1051               0 :     rv = HTMLOptionsCollectionWrapper::getListObject(obj)->Remove(arg0);
    1052               0 :     if (NS_FAILED(rv))
    1053               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "HTMLOptionsCollection", "remove");
    1054               0 :     *vp = JSVAL_VOID;
    1055               0 :     return JS_TRUE;
    1056                 : }
    1057                 : 
    1058                 : static JSBool
    1059               0 : HTMLOptionsCollection_GetSelectedIndex(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
    1060                 : {
    1061               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1062               0 :     if (!HTMLOptionsCollectionWrapper::instanceIsListObject(cx, obj, NULL))
    1063               0 :         return false;
    1064                 :     nsresult rv;
    1065                 :     PRInt32 result;
    1066               0 :     rv = HTMLOptionsCollectionWrapper::getListObject(obj)->GetSelectedIndex(&result);
    1067               0 :     if (NS_FAILED(rv))
    1068               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "HTMLOptionsCollection", "selectedIndex");
    1069               0 :     *vp = INT_TO_JSVAL(result);
    1070               0 :     return JS_TRUE;
    1071                 : }
    1072                 : 
    1073                 : static JSBool
    1074               0 : HTMLOptionsCollection_SetSelectedIndex(JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp)
    1075                 : {
    1076               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1077               0 :     if (!HTMLOptionsCollectionWrapper::instanceIsListObject(cx, obj, NULL))
    1078               0 :         return false;
    1079                 :     int32_t arg0;
    1080               0 :     if (!JS_ValueToECMAInt32(cx, *vp, &arg0))
    1081               0 :         return JS_FALSE;
    1082                 :     nsresult rv;
    1083               0 :     rv = HTMLOptionsCollectionWrapper::getListObject(obj)->SetSelectedIndex(arg0);
    1084               0 :     if (NS_FAILED(rv))
    1085               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "HTMLOptionsCollection", "selectedIndex");
    1086               0 :     return JS_TRUE;
    1087                 : }
    1088                 : 
    1089                 : template<>
    1090                 : HTMLOptionsCollectionWrapper::Properties HTMLOptionsCollectionWrapper::sProtoProperties[] = {
    1091                 :     { s_length_id, length_getter, HTMLOptionsCollection_SetLength },
    1092                 :     { s_selectedIndex_id, HTMLOptionsCollection_GetSelectedIndex, HTMLOptionsCollection_SetSelectedIndex }
    1093                 : };
    1094                 : 
    1095                 : template<>
    1096            1464 : size_t HTMLOptionsCollectionWrapper::sProtoPropertiesCount = ArrayLength(HTMLOptionsCollectionWrapper::sProtoProperties);
    1097                 : 
    1098                 : template<>
    1099                 : HTMLOptionsCollectionWrapper::Methods HTMLOptionsCollectionWrapper::sProtoMethods[] = {
    1100                 :     { s_add_id, HTMLOptionsCollection_Add, 2 },
    1101                 :     { s_item_id, HTMLOptionsCollection_Item, 1 },
    1102                 :     { s_namedItem_id, HTMLOptionsCollection_NamedItem, 1 },
    1103                 :     { s_remove_id, HTMLOptionsCollection_Remove, 1 }
    1104                 : };
    1105                 : 
    1106                 : template<>
    1107            1464 : size_t HTMLOptionsCollectionWrapper::sProtoMethodsCount = ArrayLength(HTMLOptionsCollectionWrapper::sProtoMethods);
    1108                 : 
    1109                 : template class ListBase<HTMLOptionsCollectionClass>;
    1110                 : 
    1111                 : JSObject*
    1112               0 : HTMLOptionsCollection::create(JSContext *cx, XPCWrappedNativeScope *scope, nsHTMLOptionCollection *list, nsWrapperCache *cache, bool *triedToWrap)
    1113                 : {
    1114               0 :     return HTMLOptionsCollectionWrapper::create(cx, scope, list, cache, triedToWrap);
    1115                 : }
    1116                 : 
    1117                 : bool
    1118               0 : HTMLOptionsCollection::objIsWrapper(JSObject *obj)
    1119                 : {
    1120               0 :     return HTMLOptionsCollectionWrapper::objIsList(obj);
    1121                 : }
    1122                 : 
    1123                 : nsHTMLOptionCollection*
    1124               0 : HTMLOptionsCollection::getNative(JSObject *obj)
    1125                 : {
    1126               0 :     return HTMLOptionsCollectionWrapper::getListObject(obj);
    1127                 : }
    1128                 : 
    1129                 : // NodeList
    1130                 : 
    1131                 : template<>
    1132                 : js::Class NodeListWrapper::sInterfaceClass = {
    1133                 :     "NodeList",
    1134                 :     0,
    1135                 :     JS_PropertyStub,        /* addProperty */
    1136                 :     JS_PropertyStub,        /* delProperty */
    1137                 :     JS_PropertyStub,        /* getProperty */
    1138                 :     JS_StrictPropertyStub,  /* setProperty */
    1139                 :     JS_EnumerateStub,
    1140                 :     JS_ResolveStub,
    1141                 :     JS_ConvertStub,
    1142                 :     JS_FinalizeStub,
    1143                 :     NULL,                   /* checkAccess */
    1144                 :     NULL,                   /* call */
    1145                 :     NULL,                   /* construct */
    1146                 :     interface_hasInstance
    1147                 : };
    1148                 : 
    1149                 : template<>
    1150                 : bool
    1151             793 : NodeListWrapper::getItemAt(nsINodeList *list, uint32_t index, nsIContent * &item)
    1152                 : {
    1153             793 :     item = list->GetNodeAt(index);
    1154             793 :     return !!item;
    1155                 : }
    1156                 : 
    1157                 : static JSBool
    1158            3593 : NodeList_Item(JSContext *cx, unsigned argc, jsval *vp)
    1159                 : {
    1160            3593 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1161            3593 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1162            3593 :     if (!obj)
    1163               0 :         return JS_FALSE;
    1164            3593 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1165            3593 :     if (!NodeListWrapper::instanceIsListObject(cx, obj, callee))
    1166               0 :         return false;
    1167            3593 :     if (argc < 1)
    1168               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1169            3593 :     jsval *argv = JS_ARGV(cx, vp);
    1170                 :     uint32_t arg0;
    1171            3593 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
    1172               0 :         return JS_FALSE;
    1173                 :     nsIContent *result;
    1174            3593 :     result = NodeListWrapper::getListObject(obj)->GetNodeAt(arg0);
    1175            3593 :     if (!result) {
    1176               0 :       *vp = JSVAL_NULL;
    1177               0 :       return JS_TRUE;
    1178                 :     }
    1179            3593 :     return Wrap(cx, obj, result, vp);
    1180                 : }
    1181                 : 
    1182                 : template<>
    1183                 : NodeListWrapper::Properties NodeListWrapper::sProtoProperties[] = {
    1184                 :     { s_length_id, length_getter, NULL }
    1185                 : };
    1186                 : 
    1187                 : template<>
    1188            1464 : size_t NodeListWrapper::sProtoPropertiesCount = ArrayLength(NodeListWrapper::sProtoProperties);
    1189                 : 
    1190                 : template<>
    1191                 : NodeListWrapper::Methods NodeListWrapper::sProtoMethods[] = {
    1192                 :     { s_item_id, NodeList_Item, 1 }
    1193                 : };
    1194                 : 
    1195                 : template<>
    1196            1464 : size_t NodeListWrapper::sProtoMethodsCount = ArrayLength(NodeListWrapper::sProtoMethods);
    1197                 : 
    1198                 : template class ListBase<NodeListClass>;
    1199                 : 
    1200                 : JSObject*
    1201            1637 : NodeList::create(JSContext *cx, XPCWrappedNativeScope *scope, nsINodeList *list, nsWrapperCache *cache, bool *triedToWrap)
    1202                 : {
    1203            1637 :     return NodeListWrapper::create(cx, scope, list, cache, triedToWrap);
    1204                 : }
    1205                 : 
    1206                 : bool
    1207               0 : NodeList::objIsWrapper(JSObject *obj)
    1208                 : {
    1209               0 :     return NodeListWrapper::objIsList(obj);
    1210                 : }
    1211                 : 
    1212                 : nsINodeList*
    1213               0 : NodeList::getNative(JSObject *obj)
    1214                 : {
    1215               0 :     return NodeListWrapper::getListObject(obj);
    1216                 : }
    1217                 : 
    1218                 : // PaintRequestList
    1219                 : 
    1220                 : template<>
    1221                 : js::Class PaintRequestListWrapper::sInterfaceClass = {
    1222                 :     "PaintRequestList",
    1223                 :     0,
    1224                 :     JS_PropertyStub,        /* addProperty */
    1225                 :     JS_PropertyStub,        /* delProperty */
    1226                 :     JS_PropertyStub,        /* getProperty */
    1227                 :     JS_StrictPropertyStub,  /* setProperty */
    1228                 :     JS_EnumerateStub,
    1229                 :     JS_ResolveStub,
    1230                 :     JS_ConvertStub,
    1231                 :     JS_FinalizeStub,
    1232                 :     NULL,                   /* checkAccess */
    1233                 :     NULL,                   /* call */
    1234                 :     NULL,                   /* construct */
    1235                 :     interface_hasInstance
    1236                 : };
    1237                 : 
    1238                 : template<>
    1239                 : JSObject *
    1240               0 : PaintRequestListWrapper::getPrototype(JSContext *cx, XPCWrappedNativeScope *scope, bool *enabled)
    1241                 : {
    1242               0 :     if (!scope->NewDOMBindingsEnabled()) {
    1243               0 :         *enabled = false;
    1244               0 :         return NULL;
    1245                 :     }
    1246                 : 
    1247               0 :     *enabled = true;
    1248               0 :     return getPrototype(cx, scope);
    1249                 : }
    1250                 : 
    1251                 : template<>
    1252                 : bool
    1253               0 : PaintRequestListWrapper::getItemAt(nsPaintRequestList *list, uint32_t index, nsIDOMPaintRequest * &item)
    1254                 : {
    1255               0 :     item = list->GetItemAt(index);
    1256               0 :     return !!item;
    1257                 : }
    1258                 : 
    1259                 : static JSBool
    1260               0 : PaintRequestList_Item(JSContext *cx, unsigned argc, jsval *vp)
    1261                 : {
    1262               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1263               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1264               0 :     if (!obj)
    1265               0 :         return JS_FALSE;
    1266               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1267               0 :     if (!PaintRequestListWrapper::instanceIsListObject(cx, obj, callee))
    1268               0 :         return false;
    1269               0 :     if (argc < 1)
    1270               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1271               0 :     jsval *argv = JS_ARGV(cx, vp);
    1272                 :     uint32_t arg0;
    1273               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
    1274               0 :         return JS_FALSE;
    1275                 :     nsIDOMPaintRequest *result;
    1276               0 :     result = PaintRequestListWrapper::getListObject(obj)->GetItemAt(arg0);
    1277               0 :     if (!result) {
    1278               0 :       *vp = JSVAL_NULL;
    1279               0 :       return JS_TRUE;
    1280                 :     }
    1281               0 :     return Wrap(cx, obj, result, vp);
    1282                 : }
    1283                 : 
    1284                 : template<>
    1285                 : PaintRequestListWrapper::Properties PaintRequestListWrapper::sProtoProperties[] = {
    1286                 :     { s_length_id, length_getter, NULL }
    1287                 : };
    1288                 : 
    1289                 : template<>
    1290            1464 : size_t PaintRequestListWrapper::sProtoPropertiesCount = ArrayLength(PaintRequestListWrapper::sProtoProperties);
    1291                 : 
    1292                 : template<>
    1293                 : PaintRequestListWrapper::Methods PaintRequestListWrapper::sProtoMethods[] = {
    1294                 :     { s_item_id, PaintRequestList_Item, 1 }
    1295                 : };
    1296                 : 
    1297                 : template<>
    1298            1464 : size_t PaintRequestListWrapper::sProtoMethodsCount = ArrayLength(PaintRequestListWrapper::sProtoMethods);
    1299                 : 
    1300                 : template class ListBase<PaintRequestListClass>;
    1301                 : 
    1302                 : JSObject*
    1303               0 : PaintRequestList::create(JSContext *cx, XPCWrappedNativeScope *scope, nsPaintRequestList *list, nsWrapperCache *cache, bool *triedToWrap)
    1304                 : {
    1305               0 :     return PaintRequestListWrapper::create(cx, scope, list, cache, triedToWrap);
    1306                 : }
    1307                 : 
    1308                 : bool
    1309               0 : PaintRequestList::objIsWrapper(JSObject *obj)
    1310                 : {
    1311               0 :     return PaintRequestListWrapper::objIsList(obj);
    1312                 : }
    1313                 : 
    1314                 : nsPaintRequestList*
    1315               0 : PaintRequestList::getNative(JSObject *obj)
    1316                 : {
    1317               0 :     return PaintRequestListWrapper::getListObject(obj);
    1318                 : }
    1319                 : 
    1320                 : // SVGLengthList
    1321                 : 
    1322                 : template<>
    1323                 : js::Class SVGLengthListWrapper::sInterfaceClass = {
    1324                 :     "SVGLengthList",
    1325                 :     0,
    1326                 :     JS_PropertyStub,        /* addProperty */
    1327                 :     JS_PropertyStub,        /* delProperty */
    1328                 :     JS_PropertyStub,        /* getProperty */
    1329                 :     JS_StrictPropertyStub,  /* setProperty */
    1330                 :     JS_EnumerateStub,
    1331                 :     JS_ResolveStub,
    1332                 :     JS_ConvertStub,
    1333                 :     JS_FinalizeStub,
    1334                 :     NULL,                   /* checkAccess */
    1335                 :     NULL,                   /* call */
    1336                 :     NULL,                   /* construct */
    1337                 :     interface_hasInstance
    1338                 : };
    1339                 : 
    1340                 : template<>
    1341                 : JSObject *
    1342               0 : SVGLengthListWrapper::getPrototype(JSContext *cx, XPCWrappedNativeScope *scope, bool *enabled)
    1343                 : {
    1344               0 :     if (!scope->NewDOMBindingsEnabled()) {
    1345               0 :         *enabled = false;
    1346               0 :         return NULL;
    1347                 :     }
    1348                 : 
    1349               0 :     *enabled = true;
    1350               0 :     return getPrototype(cx, scope);
    1351                 : }
    1352                 : 
    1353                 : template<>
    1354                 : bool
    1355               0 : SVGLengthListWrapper::getItemAt(mozilla::DOMSVGLengthList *list, uint32_t index, nsIDOMSVGLength * &item)
    1356                 : {
    1357               0 :     item = list->GetItemAt(index);
    1358               0 :     return !!item;
    1359                 : }
    1360                 : 
    1361                 : static JSBool
    1362               0 : SVGLengthList_AppendItem(JSContext *cx, unsigned argc, jsval *vp)
    1363                 : {
    1364               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1365               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1366               0 :     if (!obj)
    1367               0 :         return JS_FALSE;
    1368               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1369               0 :     if (!SVGLengthListWrapper::instanceIsListObject(cx, obj, callee))
    1370               0 :         return false;
    1371               0 :     if (argc < 1)
    1372               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1373               0 :     jsval *argv = JS_ARGV(cx, vp);
    1374                 :     nsresult rv;
    1375                 :     nsIDOMSVGLength *arg0;
    1376               0 :     xpc_qsSelfRef arg0ref;
    1377               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGLength>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    1378               0 :     if (NS_FAILED(rv)) {
    1379               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    1380               0 :         return JS_FALSE;
    1381                 :     }
    1382               0 :     nsCOMPtr<nsIDOMSVGLength> result;
    1383               0 :     rv = SVGLengthListWrapper::getListObject(obj)->AppendItem(arg0, getter_AddRefs(result));
    1384               0 :     if (NS_FAILED(rv))
    1385               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGLengthList", "appendItem");
    1386               0 :     if (!result) {
    1387               0 :       *vp = JSVAL_NULL;
    1388               0 :       return JS_TRUE;
    1389                 :     }
    1390               0 :     return Wrap(cx, obj, result, vp);
    1391                 : }
    1392                 : 
    1393                 : static JSBool
    1394               0 : SVGLengthList_Clear(JSContext *cx, unsigned argc, jsval *vp)
    1395                 : {
    1396               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1397               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1398               0 :     if (!obj)
    1399               0 :         return JS_FALSE;
    1400               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1401               0 :     if (!SVGLengthListWrapper::instanceIsListObject(cx, obj, callee))
    1402               0 :         return false;
    1403                 :     nsresult rv;
    1404               0 :     rv = SVGLengthListWrapper::getListObject(obj)->Clear();
    1405               0 :     if (NS_FAILED(rv))
    1406               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGLengthList", "clear");
    1407               0 :     *vp = JSVAL_VOID;
    1408               0 :     return JS_TRUE;
    1409                 : }
    1410                 : 
    1411                 : static JSBool
    1412               0 : SVGLengthList_GetItem(JSContext *cx, unsigned argc, jsval *vp)
    1413                 : {
    1414               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1415               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1416               0 :     if (!obj)
    1417               0 :         return JS_FALSE;
    1418               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1419               0 :     if (!SVGLengthListWrapper::instanceIsListObject(cx, obj, callee))
    1420               0 :         return false;
    1421               0 :     if (argc < 1)
    1422               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1423               0 :     jsval *argv = JS_ARGV(cx, vp);
    1424                 :     uint32_t arg0;
    1425               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
    1426               0 :         return JS_FALSE;
    1427                 :     nsresult rv;
    1428               0 :     nsCOMPtr<nsIDOMSVGLength> result;
    1429               0 :     rv = SVGLengthListWrapper::getListObject(obj)->GetItem(arg0, getter_AddRefs(result));
    1430               0 :     if (NS_FAILED(rv))
    1431               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGLengthList", "getItem");
    1432               0 :     if (!result) {
    1433               0 :       *vp = JSVAL_NULL;
    1434               0 :       return JS_TRUE;
    1435                 :     }
    1436               0 :     return Wrap(cx, obj, result, vp);
    1437                 : }
    1438                 : 
    1439                 : static JSBool
    1440               0 : SVGLengthList_Initialize(JSContext *cx, unsigned argc, jsval *vp)
    1441                 : {
    1442               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1443               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1444               0 :     if (!obj)
    1445               0 :         return JS_FALSE;
    1446               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1447               0 :     if (!SVGLengthListWrapper::instanceIsListObject(cx, obj, callee))
    1448               0 :         return false;
    1449               0 :     if (argc < 1)
    1450               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1451               0 :     jsval *argv = JS_ARGV(cx, vp);
    1452                 :     nsresult rv;
    1453                 :     nsIDOMSVGLength *arg0;
    1454               0 :     xpc_qsSelfRef arg0ref;
    1455               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGLength>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    1456               0 :     if (NS_FAILED(rv)) {
    1457               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    1458               0 :         return JS_FALSE;
    1459                 :     }
    1460               0 :     nsCOMPtr<nsIDOMSVGLength> result;
    1461               0 :     rv = SVGLengthListWrapper::getListObject(obj)->Initialize(arg0, getter_AddRefs(result));
    1462               0 :     if (NS_FAILED(rv))
    1463               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGLengthList", "initialize");
    1464               0 :     if (!result) {
    1465               0 :       *vp = JSVAL_NULL;
    1466               0 :       return JS_TRUE;
    1467                 :     }
    1468               0 :     return Wrap(cx, obj, result, vp);
    1469                 : }
    1470                 : 
    1471                 : static JSBool
    1472               0 : SVGLengthList_InsertItemBefore(JSContext *cx, unsigned argc, jsval *vp)
    1473                 : {
    1474               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1475               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1476               0 :     if (!obj)
    1477               0 :         return JS_FALSE;
    1478               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1479               0 :     if (!SVGLengthListWrapper::instanceIsListObject(cx, obj, callee))
    1480               0 :         return false;
    1481               0 :     if (argc < 2)
    1482               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1483               0 :     jsval *argv = JS_ARGV(cx, vp);
    1484                 :     nsresult rv;
    1485                 :     nsIDOMSVGLength *arg0;
    1486               0 :     xpc_qsSelfRef arg0ref;
    1487               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGLength>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    1488               0 :     if (NS_FAILED(rv)) {
    1489               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    1490               0 :         return JS_FALSE;
    1491                 :     }
    1492                 :     uint32_t arg1;
    1493               0 :     if (!JS_ValueToECMAUint32(cx, argv[1], &arg1))
    1494               0 :         return JS_FALSE;
    1495               0 :     nsCOMPtr<nsIDOMSVGLength> result;
    1496               0 :     rv = SVGLengthListWrapper::getListObject(obj)->InsertItemBefore(arg0, arg1, getter_AddRefs(result));
    1497               0 :     if (NS_FAILED(rv))
    1498               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGLengthList", "insertItemBefore");
    1499               0 :     if (!result) {
    1500               0 :       *vp = JSVAL_NULL;
    1501               0 :       return JS_TRUE;
    1502                 :     }
    1503               0 :     return Wrap(cx, obj, result, vp);
    1504                 : }
    1505                 : 
    1506                 : static JSBool
    1507               0 : SVGLengthList_GetNumberOfItems(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
    1508                 : {
    1509               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1510               0 :     if (!SVGLengthListWrapper::instanceIsListObject(cx, obj, NULL))
    1511               0 :         return false;
    1512                 :     nsresult rv;
    1513                 :     PRUint32 result;
    1514               0 :     rv = SVGLengthListWrapper::getListObject(obj)->GetNumberOfItems(&result);
    1515               0 :     if (NS_FAILED(rv))
    1516               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGLengthList", "numberOfItems");
    1517               0 :     *vp = UINT_TO_JSVAL(result);
    1518               0 :     return JS_TRUE;
    1519                 : }
    1520                 : 
    1521                 : static JSBool
    1522               0 : SVGLengthList_RemoveItem(JSContext *cx, unsigned argc, jsval *vp)
    1523                 : {
    1524               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1525               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1526               0 :     if (!obj)
    1527               0 :         return JS_FALSE;
    1528               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1529               0 :     if (!SVGLengthListWrapper::instanceIsListObject(cx, obj, callee))
    1530               0 :         return false;
    1531               0 :     if (argc < 1)
    1532               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1533               0 :     jsval *argv = JS_ARGV(cx, vp);
    1534                 :     uint32_t arg0;
    1535               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
    1536               0 :         return JS_FALSE;
    1537                 :     nsresult rv;
    1538               0 :     nsCOMPtr<nsIDOMSVGLength> result;
    1539               0 :     rv = SVGLengthListWrapper::getListObject(obj)->RemoveItem(arg0, getter_AddRefs(result));
    1540               0 :     if (NS_FAILED(rv))
    1541               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGLengthList", "removeItem");
    1542               0 :     if (!result) {
    1543               0 :       *vp = JSVAL_NULL;
    1544               0 :       return JS_TRUE;
    1545                 :     }
    1546               0 :     return Wrap(cx, obj, result, vp);
    1547                 : }
    1548                 : 
    1549                 : static JSBool
    1550               0 : SVGLengthList_ReplaceItem(JSContext *cx, unsigned argc, jsval *vp)
    1551                 : {
    1552               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1553               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1554               0 :     if (!obj)
    1555               0 :         return JS_FALSE;
    1556               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1557               0 :     if (!SVGLengthListWrapper::instanceIsListObject(cx, obj, callee))
    1558               0 :         return false;
    1559               0 :     if (argc < 2)
    1560               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1561               0 :     jsval *argv = JS_ARGV(cx, vp);
    1562                 :     nsresult rv;
    1563                 :     nsIDOMSVGLength *arg0;
    1564               0 :     xpc_qsSelfRef arg0ref;
    1565               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGLength>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    1566               0 :     if (NS_FAILED(rv)) {
    1567               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    1568               0 :         return JS_FALSE;
    1569                 :     }
    1570                 :     uint32_t arg1;
    1571               0 :     if (!JS_ValueToECMAUint32(cx, argv[1], &arg1))
    1572               0 :         return JS_FALSE;
    1573               0 :     nsCOMPtr<nsIDOMSVGLength> result;
    1574               0 :     rv = SVGLengthListWrapper::getListObject(obj)->ReplaceItem(arg0, arg1, getter_AddRefs(result));
    1575               0 :     if (NS_FAILED(rv))
    1576               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGLengthList", "replaceItem");
    1577               0 :     if (!result) {
    1578               0 :       *vp = JSVAL_NULL;
    1579               0 :       return JS_TRUE;
    1580                 :     }
    1581               0 :     return Wrap(cx, obj, result, vp);
    1582                 : }
    1583                 : 
    1584                 : template<>
    1585                 : SVGLengthListWrapper::Properties SVGLengthListWrapper::sProtoProperties[] = {
    1586                 :     { s_length_id, length_getter, NULL },
    1587                 :     { s_numberOfItems_id, SVGLengthList_GetNumberOfItems, xpc_qsGetterOnlyPropertyStub }
    1588                 : };
    1589                 : 
    1590                 : template<>
    1591            1464 : size_t SVGLengthListWrapper::sProtoPropertiesCount = ArrayLength(SVGLengthListWrapper::sProtoProperties);
    1592                 : 
    1593                 : template<>
    1594                 : SVGLengthListWrapper::Methods SVGLengthListWrapper::sProtoMethods[] = {
    1595                 :     { s_appendItem_id, SVGLengthList_AppendItem, 1 },
    1596                 :     { s_clear_id, SVGLengthList_Clear, 0 },
    1597                 :     { s_getItem_id, SVGLengthList_GetItem, 1 },
    1598                 :     { s_initialize_id, SVGLengthList_Initialize, 1 },
    1599                 :     { s_insertItemBefore_id, SVGLengthList_InsertItemBefore, 2 },
    1600                 :     { s_removeItem_id, SVGLengthList_RemoveItem, 1 },
    1601                 :     { s_replaceItem_id, SVGLengthList_ReplaceItem, 2 }
    1602                 : };
    1603                 : 
    1604                 : template<>
    1605            1464 : size_t SVGLengthListWrapper::sProtoMethodsCount = ArrayLength(SVGLengthListWrapper::sProtoMethods);
    1606                 : 
    1607                 : template class ListBase<SVGLengthListClass>;
    1608                 : 
    1609                 : JSObject*
    1610               0 : SVGLengthList::create(JSContext *cx, XPCWrappedNativeScope *scope, mozilla::DOMSVGLengthList *list, nsWrapperCache *cache, bool *triedToWrap)
    1611                 : {
    1612               0 :     return SVGLengthListWrapper::create(cx, scope, list, cache, triedToWrap);
    1613                 : }
    1614                 : 
    1615                 : bool
    1616               0 : SVGLengthList::objIsWrapper(JSObject *obj)
    1617                 : {
    1618               0 :     return SVGLengthListWrapper::objIsList(obj);
    1619                 : }
    1620                 : 
    1621                 : mozilla::DOMSVGLengthList*
    1622               0 : SVGLengthList::getNative(JSObject *obj)
    1623                 : {
    1624               0 :     return SVGLengthListWrapper::getListObject(obj);
    1625                 : }
    1626                 : 
    1627                 : // SVGNumberList
    1628                 : 
    1629                 : template<>
    1630                 : js::Class SVGNumberListWrapper::sInterfaceClass = {
    1631                 :     "SVGNumberList",
    1632                 :     0,
    1633                 :     JS_PropertyStub,        /* addProperty */
    1634                 :     JS_PropertyStub,        /* delProperty */
    1635                 :     JS_PropertyStub,        /* getProperty */
    1636                 :     JS_StrictPropertyStub,  /* setProperty */
    1637                 :     JS_EnumerateStub,
    1638                 :     JS_ResolveStub,
    1639                 :     JS_ConvertStub,
    1640                 :     JS_FinalizeStub,
    1641                 :     NULL,                   /* checkAccess */
    1642                 :     NULL,                   /* call */
    1643                 :     NULL,                   /* construct */
    1644                 :     interface_hasInstance
    1645                 : };
    1646                 : 
    1647                 : template<>
    1648                 : JSObject *
    1649               0 : SVGNumberListWrapper::getPrototype(JSContext *cx, XPCWrappedNativeScope *scope, bool *enabled)
    1650                 : {
    1651               0 :     if (!scope->NewDOMBindingsEnabled()) {
    1652               0 :         *enabled = false;
    1653               0 :         return NULL;
    1654                 :     }
    1655                 : 
    1656               0 :     *enabled = true;
    1657               0 :     return getPrototype(cx, scope);
    1658                 : }
    1659                 : 
    1660                 : template<>
    1661                 : bool
    1662               0 : SVGNumberListWrapper::getItemAt(mozilla::DOMSVGNumberList *list, uint32_t index, nsIDOMSVGNumber * &item)
    1663                 : {
    1664               0 :     item = list->GetItemAt(index);
    1665               0 :     return !!item;
    1666                 : }
    1667                 : 
    1668                 : static JSBool
    1669               0 : SVGNumberList_AppendItem(JSContext *cx, unsigned argc, jsval *vp)
    1670                 : {
    1671               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1672               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1673               0 :     if (!obj)
    1674               0 :         return JS_FALSE;
    1675               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1676               0 :     if (!SVGNumberListWrapper::instanceIsListObject(cx, obj, callee))
    1677               0 :         return false;
    1678               0 :     if (argc < 1)
    1679               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1680               0 :     jsval *argv = JS_ARGV(cx, vp);
    1681                 :     nsresult rv;
    1682                 :     nsIDOMSVGNumber *arg0;
    1683               0 :     xpc_qsSelfRef arg0ref;
    1684               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGNumber>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    1685               0 :     if (NS_FAILED(rv)) {
    1686               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    1687               0 :         return JS_FALSE;
    1688                 :     }
    1689               0 :     nsCOMPtr<nsIDOMSVGNumber> result;
    1690               0 :     rv = SVGNumberListWrapper::getListObject(obj)->AppendItem(arg0, getter_AddRefs(result));
    1691               0 :     if (NS_FAILED(rv))
    1692               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGNumberList", "appendItem");
    1693               0 :     if (!result) {
    1694               0 :       *vp = JSVAL_NULL;
    1695               0 :       return JS_TRUE;
    1696                 :     }
    1697               0 :     return Wrap(cx, obj, result, vp);
    1698                 : }
    1699                 : 
    1700                 : static JSBool
    1701               0 : SVGNumberList_Clear(JSContext *cx, unsigned argc, jsval *vp)
    1702                 : {
    1703               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1704               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1705               0 :     if (!obj)
    1706               0 :         return JS_FALSE;
    1707               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1708               0 :     if (!SVGNumberListWrapper::instanceIsListObject(cx, obj, callee))
    1709               0 :         return false;
    1710                 :     nsresult rv;
    1711               0 :     rv = SVGNumberListWrapper::getListObject(obj)->Clear();
    1712               0 :     if (NS_FAILED(rv))
    1713               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGNumberList", "clear");
    1714               0 :     *vp = JSVAL_VOID;
    1715               0 :     return JS_TRUE;
    1716                 : }
    1717                 : 
    1718                 : static JSBool
    1719               0 : SVGNumberList_GetItem(JSContext *cx, unsigned argc, jsval *vp)
    1720                 : {
    1721               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1722               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1723               0 :     if (!obj)
    1724               0 :         return JS_FALSE;
    1725               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1726               0 :     if (!SVGNumberListWrapper::instanceIsListObject(cx, obj, callee))
    1727               0 :         return false;
    1728               0 :     if (argc < 1)
    1729               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1730               0 :     jsval *argv = JS_ARGV(cx, vp);
    1731                 :     uint32_t arg0;
    1732               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
    1733               0 :         return JS_FALSE;
    1734                 :     nsresult rv;
    1735               0 :     nsCOMPtr<nsIDOMSVGNumber> result;
    1736               0 :     rv = SVGNumberListWrapper::getListObject(obj)->GetItem(arg0, getter_AddRefs(result));
    1737               0 :     if (NS_FAILED(rv))
    1738               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGNumberList", "getItem");
    1739               0 :     if (!result) {
    1740               0 :       *vp = JSVAL_NULL;
    1741               0 :       return JS_TRUE;
    1742                 :     }
    1743               0 :     return Wrap(cx, obj, result, vp);
    1744                 : }
    1745                 : 
    1746                 : static JSBool
    1747               0 : SVGNumberList_Initialize(JSContext *cx, unsigned argc, jsval *vp)
    1748                 : {
    1749               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1750               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1751               0 :     if (!obj)
    1752               0 :         return JS_FALSE;
    1753               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1754               0 :     if (!SVGNumberListWrapper::instanceIsListObject(cx, obj, callee))
    1755               0 :         return false;
    1756               0 :     if (argc < 1)
    1757               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1758               0 :     jsval *argv = JS_ARGV(cx, vp);
    1759                 :     nsresult rv;
    1760                 :     nsIDOMSVGNumber *arg0;
    1761               0 :     xpc_qsSelfRef arg0ref;
    1762               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGNumber>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    1763               0 :     if (NS_FAILED(rv)) {
    1764               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    1765               0 :         return JS_FALSE;
    1766                 :     }
    1767               0 :     nsCOMPtr<nsIDOMSVGNumber> result;
    1768               0 :     rv = SVGNumberListWrapper::getListObject(obj)->Initialize(arg0, getter_AddRefs(result));
    1769               0 :     if (NS_FAILED(rv))
    1770               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGNumberList", "initialize");
    1771               0 :     if (!result) {
    1772               0 :       *vp = JSVAL_NULL;
    1773               0 :       return JS_TRUE;
    1774                 :     }
    1775               0 :     return Wrap(cx, obj, result, vp);
    1776                 : }
    1777                 : 
    1778                 : static JSBool
    1779               0 : SVGNumberList_InsertItemBefore(JSContext *cx, unsigned argc, jsval *vp)
    1780                 : {
    1781               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1782               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1783               0 :     if (!obj)
    1784               0 :         return JS_FALSE;
    1785               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1786               0 :     if (!SVGNumberListWrapper::instanceIsListObject(cx, obj, callee))
    1787               0 :         return false;
    1788               0 :     if (argc < 2)
    1789               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1790               0 :     jsval *argv = JS_ARGV(cx, vp);
    1791                 :     nsresult rv;
    1792                 :     nsIDOMSVGNumber *arg0;
    1793               0 :     xpc_qsSelfRef arg0ref;
    1794               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGNumber>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    1795               0 :     if (NS_FAILED(rv)) {
    1796               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    1797               0 :         return JS_FALSE;
    1798                 :     }
    1799                 :     uint32_t arg1;
    1800               0 :     if (!JS_ValueToECMAUint32(cx, argv[1], &arg1))
    1801               0 :         return JS_FALSE;
    1802               0 :     nsCOMPtr<nsIDOMSVGNumber> result;
    1803               0 :     rv = SVGNumberListWrapper::getListObject(obj)->InsertItemBefore(arg0, arg1, getter_AddRefs(result));
    1804               0 :     if (NS_FAILED(rv))
    1805               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGNumberList", "insertItemBefore");
    1806               0 :     if (!result) {
    1807               0 :       *vp = JSVAL_NULL;
    1808               0 :       return JS_TRUE;
    1809                 :     }
    1810               0 :     return Wrap(cx, obj, result, vp);
    1811                 : }
    1812                 : 
    1813                 : static JSBool
    1814               0 : SVGNumberList_GetNumberOfItems(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
    1815                 : {
    1816               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1817               0 :     if (!SVGNumberListWrapper::instanceIsListObject(cx, obj, NULL))
    1818               0 :         return false;
    1819                 :     nsresult rv;
    1820                 :     PRUint32 result;
    1821               0 :     rv = SVGNumberListWrapper::getListObject(obj)->GetNumberOfItems(&result);
    1822               0 :     if (NS_FAILED(rv))
    1823               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGNumberList", "numberOfItems");
    1824               0 :     *vp = UINT_TO_JSVAL(result);
    1825               0 :     return JS_TRUE;
    1826                 : }
    1827                 : 
    1828                 : static JSBool
    1829               0 : SVGNumberList_RemoveItem(JSContext *cx, unsigned argc, jsval *vp)
    1830                 : {
    1831               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1832               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1833               0 :     if (!obj)
    1834               0 :         return JS_FALSE;
    1835               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1836               0 :     if (!SVGNumberListWrapper::instanceIsListObject(cx, obj, callee))
    1837               0 :         return false;
    1838               0 :     if (argc < 1)
    1839               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1840               0 :     jsval *argv = JS_ARGV(cx, vp);
    1841                 :     uint32_t arg0;
    1842               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
    1843               0 :         return JS_FALSE;
    1844                 :     nsresult rv;
    1845               0 :     nsCOMPtr<nsIDOMSVGNumber> result;
    1846               0 :     rv = SVGNumberListWrapper::getListObject(obj)->RemoveItem(arg0, getter_AddRefs(result));
    1847               0 :     if (NS_FAILED(rv))
    1848               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGNumberList", "removeItem");
    1849               0 :     if (!result) {
    1850               0 :       *vp = JSVAL_NULL;
    1851               0 :       return JS_TRUE;
    1852                 :     }
    1853               0 :     return Wrap(cx, obj, result, vp);
    1854                 : }
    1855                 : 
    1856                 : static JSBool
    1857               0 : SVGNumberList_ReplaceItem(JSContext *cx, unsigned argc, jsval *vp)
    1858                 : {
    1859               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1860               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1861               0 :     if (!obj)
    1862               0 :         return JS_FALSE;
    1863               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1864               0 :     if (!SVGNumberListWrapper::instanceIsListObject(cx, obj, callee))
    1865               0 :         return false;
    1866               0 :     if (argc < 2)
    1867               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1868               0 :     jsval *argv = JS_ARGV(cx, vp);
    1869                 :     nsresult rv;
    1870                 :     nsIDOMSVGNumber *arg0;
    1871               0 :     xpc_qsSelfRef arg0ref;
    1872               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGNumber>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    1873               0 :     if (NS_FAILED(rv)) {
    1874               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    1875               0 :         return JS_FALSE;
    1876                 :     }
    1877                 :     uint32_t arg1;
    1878               0 :     if (!JS_ValueToECMAUint32(cx, argv[1], &arg1))
    1879               0 :         return JS_FALSE;
    1880               0 :     nsCOMPtr<nsIDOMSVGNumber> result;
    1881               0 :     rv = SVGNumberListWrapper::getListObject(obj)->ReplaceItem(arg0, arg1, getter_AddRefs(result));
    1882               0 :     if (NS_FAILED(rv))
    1883               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGNumberList", "replaceItem");
    1884               0 :     if (!result) {
    1885               0 :       *vp = JSVAL_NULL;
    1886               0 :       return JS_TRUE;
    1887                 :     }
    1888               0 :     return Wrap(cx, obj, result, vp);
    1889                 : }
    1890                 : 
    1891                 : template<>
    1892                 : SVGNumberListWrapper::Properties SVGNumberListWrapper::sProtoProperties[] = {
    1893                 :     { s_length_id, length_getter, NULL },
    1894                 :     { s_numberOfItems_id, SVGNumberList_GetNumberOfItems, xpc_qsGetterOnlyPropertyStub }
    1895                 : };
    1896                 : 
    1897                 : template<>
    1898            1464 : size_t SVGNumberListWrapper::sProtoPropertiesCount = ArrayLength(SVGNumberListWrapper::sProtoProperties);
    1899                 : 
    1900                 : template<>
    1901                 : SVGNumberListWrapper::Methods SVGNumberListWrapper::sProtoMethods[] = {
    1902                 :     { s_appendItem_id, SVGNumberList_AppendItem, 1 },
    1903                 :     { s_clear_id, SVGNumberList_Clear, 0 },
    1904                 :     { s_getItem_id, SVGNumberList_GetItem, 1 },
    1905                 :     { s_initialize_id, SVGNumberList_Initialize, 1 },
    1906                 :     { s_insertItemBefore_id, SVGNumberList_InsertItemBefore, 2 },
    1907                 :     { s_removeItem_id, SVGNumberList_RemoveItem, 1 },
    1908                 :     { s_replaceItem_id, SVGNumberList_ReplaceItem, 2 }
    1909                 : };
    1910                 : 
    1911                 : template<>
    1912            1464 : size_t SVGNumberListWrapper::sProtoMethodsCount = ArrayLength(SVGNumberListWrapper::sProtoMethods);
    1913                 : 
    1914                 : template class ListBase<SVGNumberListClass>;
    1915                 : 
    1916                 : JSObject*
    1917               0 : SVGNumberList::create(JSContext *cx, XPCWrappedNativeScope *scope, mozilla::DOMSVGNumberList *list, nsWrapperCache *cache, bool *triedToWrap)
    1918                 : {
    1919               0 :     return SVGNumberListWrapper::create(cx, scope, list, cache, triedToWrap);
    1920                 : }
    1921                 : 
    1922                 : bool
    1923               0 : SVGNumberList::objIsWrapper(JSObject *obj)
    1924                 : {
    1925               0 :     return SVGNumberListWrapper::objIsList(obj);
    1926                 : }
    1927                 : 
    1928                 : mozilla::DOMSVGNumberList*
    1929               0 : SVGNumberList::getNative(JSObject *obj)
    1930                 : {
    1931               0 :     return SVGNumberListWrapper::getListObject(obj);
    1932                 : }
    1933                 : 
    1934                 : // SVGPathSegList
    1935                 : 
    1936                 : template<>
    1937                 : js::Class SVGPathSegListWrapper::sInterfaceClass = {
    1938                 :     "SVGPathSegList",
    1939                 :     0,
    1940                 :     JS_PropertyStub,        /* addProperty */
    1941                 :     JS_PropertyStub,        /* delProperty */
    1942                 :     JS_PropertyStub,        /* getProperty */
    1943                 :     JS_StrictPropertyStub,  /* setProperty */
    1944                 :     JS_EnumerateStub,
    1945                 :     JS_ResolveStub,
    1946                 :     JS_ConvertStub,
    1947                 :     JS_FinalizeStub,
    1948                 :     NULL,                   /* checkAccess */
    1949                 :     NULL,                   /* call */
    1950                 :     NULL,                   /* construct */
    1951                 :     interface_hasInstance
    1952                 : };
    1953                 : 
    1954                 : template<>
    1955                 : JSObject *
    1956               0 : SVGPathSegListWrapper::getPrototype(JSContext *cx, XPCWrappedNativeScope *scope, bool *enabled)
    1957                 : {
    1958               0 :     if (!scope->NewDOMBindingsEnabled()) {
    1959               0 :         *enabled = false;
    1960               0 :         return NULL;
    1961                 :     }
    1962                 : 
    1963               0 :     *enabled = true;
    1964               0 :     return getPrototype(cx, scope);
    1965                 : }
    1966                 : 
    1967                 : template<>
    1968                 : bool
    1969               0 : SVGPathSegListWrapper::getItemAt(mozilla::DOMSVGPathSegList *list, uint32_t index, nsIDOMSVGPathSeg * &item)
    1970                 : {
    1971               0 :     item = list->GetItemAt(index);
    1972               0 :     return !!item;
    1973                 : }
    1974                 : 
    1975                 : static JSBool
    1976               0 : SVGPathSegList_AppendItem(JSContext *cx, unsigned argc, jsval *vp)
    1977                 : {
    1978               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    1979               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    1980               0 :     if (!obj)
    1981               0 :         return JS_FALSE;
    1982               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    1983               0 :     if (!SVGPathSegListWrapper::instanceIsListObject(cx, obj, callee))
    1984               0 :         return false;
    1985               0 :     if (argc < 1)
    1986               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    1987               0 :     jsval *argv = JS_ARGV(cx, vp);
    1988                 :     nsresult rv;
    1989                 :     nsIDOMSVGPathSeg *arg0;
    1990               0 :     xpc_qsSelfRef arg0ref;
    1991               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGPathSeg>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    1992               0 :     if (NS_FAILED(rv)) {
    1993               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    1994               0 :         return JS_FALSE;
    1995                 :     }
    1996               0 :     nsCOMPtr<nsIDOMSVGPathSeg> result;
    1997               0 :     rv = SVGPathSegListWrapper::getListObject(obj)->AppendItem(arg0, getter_AddRefs(result));
    1998               0 :     if (NS_FAILED(rv))
    1999               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPathSegList", "appendItem");
    2000               0 :     if (!result) {
    2001               0 :       *vp = JSVAL_NULL;
    2002               0 :       return JS_TRUE;
    2003                 :     }
    2004               0 :     return Wrap(cx, obj, result, vp);
    2005                 : }
    2006                 : 
    2007                 : static JSBool
    2008               0 : SVGPathSegList_Clear(JSContext *cx, unsigned argc, jsval *vp)
    2009                 : {
    2010               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2011               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2012               0 :     if (!obj)
    2013               0 :         return JS_FALSE;
    2014               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2015               0 :     if (!SVGPathSegListWrapper::instanceIsListObject(cx, obj, callee))
    2016               0 :         return false;
    2017                 :     nsresult rv;
    2018               0 :     rv = SVGPathSegListWrapper::getListObject(obj)->Clear();
    2019               0 :     if (NS_FAILED(rv))
    2020               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPathSegList", "clear");
    2021               0 :     *vp = JSVAL_VOID;
    2022               0 :     return JS_TRUE;
    2023                 : }
    2024                 : 
    2025                 : static JSBool
    2026               0 : SVGPathSegList_GetItem(JSContext *cx, unsigned argc, jsval *vp)
    2027                 : {
    2028               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2029               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2030               0 :     if (!obj)
    2031               0 :         return JS_FALSE;
    2032               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2033               0 :     if (!SVGPathSegListWrapper::instanceIsListObject(cx, obj, callee))
    2034               0 :         return false;
    2035               0 :     if (argc < 1)
    2036               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2037               0 :     jsval *argv = JS_ARGV(cx, vp);
    2038                 :     uint32_t arg0;
    2039               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
    2040               0 :         return JS_FALSE;
    2041                 :     nsresult rv;
    2042               0 :     nsCOMPtr<nsIDOMSVGPathSeg> result;
    2043               0 :     rv = SVGPathSegListWrapper::getListObject(obj)->GetItem(arg0, getter_AddRefs(result));
    2044               0 :     if (NS_FAILED(rv))
    2045               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPathSegList", "getItem");
    2046               0 :     if (!result) {
    2047               0 :       *vp = JSVAL_NULL;
    2048               0 :       return JS_TRUE;
    2049                 :     }
    2050               0 :     return Wrap(cx, obj, result, vp);
    2051                 : }
    2052                 : 
    2053                 : static JSBool
    2054               0 : SVGPathSegList_Initialize(JSContext *cx, unsigned argc, jsval *vp)
    2055                 : {
    2056               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2057               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2058               0 :     if (!obj)
    2059               0 :         return JS_FALSE;
    2060               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2061               0 :     if (!SVGPathSegListWrapper::instanceIsListObject(cx, obj, callee))
    2062               0 :         return false;
    2063               0 :     if (argc < 1)
    2064               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2065               0 :     jsval *argv = JS_ARGV(cx, vp);
    2066                 :     nsresult rv;
    2067                 :     nsIDOMSVGPathSeg *arg0;
    2068               0 :     xpc_qsSelfRef arg0ref;
    2069               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGPathSeg>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    2070               0 :     if (NS_FAILED(rv)) {
    2071               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    2072               0 :         return JS_FALSE;
    2073                 :     }
    2074               0 :     nsCOMPtr<nsIDOMSVGPathSeg> result;
    2075               0 :     rv = SVGPathSegListWrapper::getListObject(obj)->Initialize(arg0, getter_AddRefs(result));
    2076               0 :     if (NS_FAILED(rv))
    2077               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPathSegList", "initialize");
    2078               0 :     if (!result) {
    2079               0 :       *vp = JSVAL_NULL;
    2080               0 :       return JS_TRUE;
    2081                 :     }
    2082               0 :     return Wrap(cx, obj, result, vp);
    2083                 : }
    2084                 : 
    2085                 : static JSBool
    2086               0 : SVGPathSegList_InsertItemBefore(JSContext *cx, unsigned argc, jsval *vp)
    2087                 : {
    2088               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2089               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2090               0 :     if (!obj)
    2091               0 :         return JS_FALSE;
    2092               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2093               0 :     if (!SVGPathSegListWrapper::instanceIsListObject(cx, obj, callee))
    2094               0 :         return false;
    2095               0 :     if (argc < 2)
    2096               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2097               0 :     jsval *argv = JS_ARGV(cx, vp);
    2098                 :     nsresult rv;
    2099                 :     nsIDOMSVGPathSeg *arg0;
    2100               0 :     xpc_qsSelfRef arg0ref;
    2101               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGPathSeg>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    2102               0 :     if (NS_FAILED(rv)) {
    2103               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    2104               0 :         return JS_FALSE;
    2105                 :     }
    2106                 :     uint32_t arg1;
    2107               0 :     if (!JS_ValueToECMAUint32(cx, argv[1], &arg1))
    2108               0 :         return JS_FALSE;
    2109               0 :     nsCOMPtr<nsIDOMSVGPathSeg> result;
    2110               0 :     rv = SVGPathSegListWrapper::getListObject(obj)->InsertItemBefore(arg0, arg1, getter_AddRefs(result));
    2111               0 :     if (NS_FAILED(rv))
    2112               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPathSegList", "insertItemBefore");
    2113               0 :     if (!result) {
    2114               0 :       *vp = JSVAL_NULL;
    2115               0 :       return JS_TRUE;
    2116                 :     }
    2117               0 :     return Wrap(cx, obj, result, vp);
    2118                 : }
    2119                 : 
    2120                 : static JSBool
    2121               0 : SVGPathSegList_GetNumberOfItems(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
    2122                 : {
    2123               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2124               0 :     if (!SVGPathSegListWrapper::instanceIsListObject(cx, obj, NULL))
    2125               0 :         return false;
    2126                 :     nsresult rv;
    2127                 :     PRUint32 result;
    2128               0 :     rv = SVGPathSegListWrapper::getListObject(obj)->GetNumberOfItems(&result);
    2129               0 :     if (NS_FAILED(rv))
    2130               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPathSegList", "numberOfItems");
    2131               0 :     *vp = UINT_TO_JSVAL(result);
    2132               0 :     return JS_TRUE;
    2133                 : }
    2134                 : 
    2135                 : static JSBool
    2136               0 : SVGPathSegList_RemoveItem(JSContext *cx, unsigned argc, jsval *vp)
    2137                 : {
    2138               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2139               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2140               0 :     if (!obj)
    2141               0 :         return JS_FALSE;
    2142               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2143               0 :     if (!SVGPathSegListWrapper::instanceIsListObject(cx, obj, callee))
    2144               0 :         return false;
    2145               0 :     if (argc < 1)
    2146               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2147               0 :     jsval *argv = JS_ARGV(cx, vp);
    2148                 :     uint32_t arg0;
    2149               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
    2150               0 :         return JS_FALSE;
    2151                 :     nsresult rv;
    2152               0 :     nsCOMPtr<nsIDOMSVGPathSeg> result;
    2153               0 :     rv = SVGPathSegListWrapper::getListObject(obj)->RemoveItem(arg0, getter_AddRefs(result));
    2154               0 :     if (NS_FAILED(rv))
    2155               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPathSegList", "removeItem");
    2156               0 :     if (!result) {
    2157               0 :       *vp = JSVAL_NULL;
    2158               0 :       return JS_TRUE;
    2159                 :     }
    2160               0 :     return Wrap(cx, obj, result, vp);
    2161                 : }
    2162                 : 
    2163                 : static JSBool
    2164               0 : SVGPathSegList_ReplaceItem(JSContext *cx, unsigned argc, jsval *vp)
    2165                 : {
    2166               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2167               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2168               0 :     if (!obj)
    2169               0 :         return JS_FALSE;
    2170               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2171               0 :     if (!SVGPathSegListWrapper::instanceIsListObject(cx, obj, callee))
    2172               0 :         return false;
    2173               0 :     if (argc < 2)
    2174               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2175               0 :     jsval *argv = JS_ARGV(cx, vp);
    2176                 :     nsresult rv;
    2177                 :     nsIDOMSVGPathSeg *arg0;
    2178               0 :     xpc_qsSelfRef arg0ref;
    2179               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGPathSeg>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    2180               0 :     if (NS_FAILED(rv)) {
    2181               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    2182               0 :         return JS_FALSE;
    2183                 :     }
    2184                 :     uint32_t arg1;
    2185               0 :     if (!JS_ValueToECMAUint32(cx, argv[1], &arg1))
    2186               0 :         return JS_FALSE;
    2187               0 :     nsCOMPtr<nsIDOMSVGPathSeg> result;
    2188               0 :     rv = SVGPathSegListWrapper::getListObject(obj)->ReplaceItem(arg0, arg1, getter_AddRefs(result));
    2189               0 :     if (NS_FAILED(rv))
    2190               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPathSegList", "replaceItem");
    2191               0 :     if (!result) {
    2192               0 :       *vp = JSVAL_NULL;
    2193               0 :       return JS_TRUE;
    2194                 :     }
    2195               0 :     return Wrap(cx, obj, result, vp);
    2196                 : }
    2197                 : 
    2198                 : template<>
    2199                 : SVGPathSegListWrapper::Properties SVGPathSegListWrapper::sProtoProperties[] = {
    2200                 :     { s_length_id, length_getter, NULL },
    2201                 :     { s_numberOfItems_id, SVGPathSegList_GetNumberOfItems, xpc_qsGetterOnlyPropertyStub }
    2202                 : };
    2203                 : 
    2204                 : template<>
    2205            1464 : size_t SVGPathSegListWrapper::sProtoPropertiesCount = ArrayLength(SVGPathSegListWrapper::sProtoProperties);
    2206                 : 
    2207                 : template<>
    2208                 : SVGPathSegListWrapper::Methods SVGPathSegListWrapper::sProtoMethods[] = {
    2209                 :     { s_appendItem_id, SVGPathSegList_AppendItem, 1 },
    2210                 :     { s_clear_id, SVGPathSegList_Clear, 0 },
    2211                 :     { s_getItem_id, SVGPathSegList_GetItem, 1 },
    2212                 :     { s_initialize_id, SVGPathSegList_Initialize, 1 },
    2213                 :     { s_insertItemBefore_id, SVGPathSegList_InsertItemBefore, 2 },
    2214                 :     { s_removeItem_id, SVGPathSegList_RemoveItem, 1 },
    2215                 :     { s_replaceItem_id, SVGPathSegList_ReplaceItem, 2 }
    2216                 : };
    2217                 : 
    2218                 : template<>
    2219            1464 : size_t SVGPathSegListWrapper::sProtoMethodsCount = ArrayLength(SVGPathSegListWrapper::sProtoMethods);
    2220                 : 
    2221                 : template class ListBase<SVGPathSegListClass>;
    2222                 : 
    2223                 : JSObject*
    2224               0 : SVGPathSegList::create(JSContext *cx, XPCWrappedNativeScope *scope, mozilla::DOMSVGPathSegList *list, nsWrapperCache *cache, bool *triedToWrap)
    2225                 : {
    2226               0 :     return SVGPathSegListWrapper::create(cx, scope, list, cache, triedToWrap);
    2227                 : }
    2228                 : 
    2229                 : bool
    2230               0 : SVGPathSegList::objIsWrapper(JSObject *obj)
    2231                 : {
    2232               0 :     return SVGPathSegListWrapper::objIsList(obj);
    2233                 : }
    2234                 : 
    2235                 : mozilla::DOMSVGPathSegList*
    2236               0 : SVGPathSegList::getNative(JSObject *obj)
    2237                 : {
    2238               0 :     return SVGPathSegListWrapper::getListObject(obj);
    2239                 : }
    2240                 : 
    2241                 : // SVGPointList
    2242                 : 
    2243                 : template<>
    2244                 : js::Class SVGPointListWrapper::sInterfaceClass = {
    2245                 :     "SVGPointList",
    2246                 :     0,
    2247                 :     JS_PropertyStub,        /* addProperty */
    2248                 :     JS_PropertyStub,        /* delProperty */
    2249                 :     JS_PropertyStub,        /* getProperty */
    2250                 :     JS_StrictPropertyStub,  /* setProperty */
    2251                 :     JS_EnumerateStub,
    2252                 :     JS_ResolveStub,
    2253                 :     JS_ConvertStub,
    2254                 :     JS_FinalizeStub,
    2255                 :     NULL,                   /* checkAccess */
    2256                 :     NULL,                   /* call */
    2257                 :     NULL,                   /* construct */
    2258                 :     interface_hasInstance
    2259                 : };
    2260                 : 
    2261                 : template<>
    2262                 : JSObject *
    2263               0 : SVGPointListWrapper::getPrototype(JSContext *cx, XPCWrappedNativeScope *scope, bool *enabled)
    2264                 : {
    2265               0 :     if (!scope->NewDOMBindingsEnabled()) {
    2266               0 :         *enabled = false;
    2267               0 :         return NULL;
    2268                 :     }
    2269                 : 
    2270               0 :     *enabled = true;
    2271               0 :     return getPrototype(cx, scope);
    2272                 : }
    2273                 : 
    2274                 : template<>
    2275                 : bool
    2276               0 : SVGPointListWrapper::getItemAt(mozilla::DOMSVGPointList *list, uint32_t index, nsIDOMSVGPoint * &item)
    2277                 : {
    2278               0 :     item = list->GetItemAt(index);
    2279               0 :     return !!item;
    2280                 : }
    2281                 : 
    2282                 : static JSBool
    2283               0 : SVGPointList_AppendItem(JSContext *cx, unsigned argc, jsval *vp)
    2284                 : {
    2285               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2286               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2287               0 :     if (!obj)
    2288               0 :         return JS_FALSE;
    2289               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2290               0 :     if (!SVGPointListWrapper::instanceIsListObject(cx, obj, callee))
    2291               0 :         return false;
    2292               0 :     if (argc < 1)
    2293               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2294               0 :     jsval *argv = JS_ARGV(cx, vp);
    2295                 :     nsresult rv;
    2296                 :     nsIDOMSVGPoint *arg0;
    2297               0 :     xpc_qsSelfRef arg0ref;
    2298               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGPoint>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    2299               0 :     if (NS_FAILED(rv)) {
    2300               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    2301               0 :         return JS_FALSE;
    2302                 :     }
    2303               0 :     nsCOMPtr<nsIDOMSVGPoint> result;
    2304               0 :     rv = SVGPointListWrapper::getListObject(obj)->AppendItem(arg0, getter_AddRefs(result));
    2305               0 :     if (NS_FAILED(rv))
    2306               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPointList", "appendItem");
    2307               0 :     if (!result) {
    2308               0 :       *vp = JSVAL_NULL;
    2309               0 :       return JS_TRUE;
    2310                 :     }
    2311               0 :     return Wrap(cx, obj, result, vp);
    2312                 : }
    2313                 : 
    2314                 : static JSBool
    2315               0 : SVGPointList_Clear(JSContext *cx, unsigned argc, jsval *vp)
    2316                 : {
    2317               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2318               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2319               0 :     if (!obj)
    2320               0 :         return JS_FALSE;
    2321               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2322               0 :     if (!SVGPointListWrapper::instanceIsListObject(cx, obj, callee))
    2323               0 :         return false;
    2324                 :     nsresult rv;
    2325               0 :     rv = SVGPointListWrapper::getListObject(obj)->Clear();
    2326               0 :     if (NS_FAILED(rv))
    2327               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPointList", "clear");
    2328               0 :     *vp = JSVAL_VOID;
    2329               0 :     return JS_TRUE;
    2330                 : }
    2331                 : 
    2332                 : static JSBool
    2333               0 : SVGPointList_GetItem(JSContext *cx, unsigned argc, jsval *vp)
    2334                 : {
    2335               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2336               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2337               0 :     if (!obj)
    2338               0 :         return JS_FALSE;
    2339               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2340               0 :     if (!SVGPointListWrapper::instanceIsListObject(cx, obj, callee))
    2341               0 :         return false;
    2342               0 :     if (argc < 1)
    2343               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2344               0 :     jsval *argv = JS_ARGV(cx, vp);
    2345                 :     uint32_t arg0;
    2346               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
    2347               0 :         return JS_FALSE;
    2348                 :     nsresult rv;
    2349               0 :     nsCOMPtr<nsIDOMSVGPoint> result;
    2350               0 :     rv = SVGPointListWrapper::getListObject(obj)->GetItem(arg0, getter_AddRefs(result));
    2351               0 :     if (NS_FAILED(rv))
    2352               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPointList", "getItem");
    2353               0 :     if (!result) {
    2354               0 :       *vp = JSVAL_NULL;
    2355               0 :       return JS_TRUE;
    2356                 :     }
    2357               0 :     return Wrap(cx, obj, result, vp);
    2358                 : }
    2359                 : 
    2360                 : static JSBool
    2361               0 : SVGPointList_Initialize(JSContext *cx, unsigned argc, jsval *vp)
    2362                 : {
    2363               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2364               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2365               0 :     if (!obj)
    2366               0 :         return JS_FALSE;
    2367               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2368               0 :     if (!SVGPointListWrapper::instanceIsListObject(cx, obj, callee))
    2369               0 :         return false;
    2370               0 :     if (argc < 1)
    2371               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2372               0 :     jsval *argv = JS_ARGV(cx, vp);
    2373                 :     nsresult rv;
    2374                 :     nsIDOMSVGPoint *arg0;
    2375               0 :     xpc_qsSelfRef arg0ref;
    2376               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGPoint>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    2377               0 :     if (NS_FAILED(rv)) {
    2378               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    2379               0 :         return JS_FALSE;
    2380                 :     }
    2381               0 :     nsCOMPtr<nsIDOMSVGPoint> result;
    2382               0 :     rv = SVGPointListWrapper::getListObject(obj)->Initialize(arg0, getter_AddRefs(result));
    2383               0 :     if (NS_FAILED(rv))
    2384               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPointList", "initialize");
    2385               0 :     if (!result) {
    2386               0 :       *vp = JSVAL_NULL;
    2387               0 :       return JS_TRUE;
    2388                 :     }
    2389               0 :     return Wrap(cx, obj, result, vp);
    2390                 : }
    2391                 : 
    2392                 : static JSBool
    2393               0 : SVGPointList_InsertItemBefore(JSContext *cx, unsigned argc, jsval *vp)
    2394                 : {
    2395               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2396               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2397               0 :     if (!obj)
    2398               0 :         return JS_FALSE;
    2399               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2400               0 :     if (!SVGPointListWrapper::instanceIsListObject(cx, obj, callee))
    2401               0 :         return false;
    2402               0 :     if (argc < 2)
    2403               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2404               0 :     jsval *argv = JS_ARGV(cx, vp);
    2405                 :     nsresult rv;
    2406                 :     nsIDOMSVGPoint *arg0;
    2407               0 :     xpc_qsSelfRef arg0ref;
    2408               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGPoint>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    2409               0 :     if (NS_FAILED(rv)) {
    2410               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    2411               0 :         return JS_FALSE;
    2412                 :     }
    2413                 :     uint32_t arg1;
    2414               0 :     if (!JS_ValueToECMAUint32(cx, argv[1], &arg1))
    2415               0 :         return JS_FALSE;
    2416               0 :     nsCOMPtr<nsIDOMSVGPoint> result;
    2417               0 :     rv = SVGPointListWrapper::getListObject(obj)->InsertItemBefore(arg0, arg1, getter_AddRefs(result));
    2418               0 :     if (NS_FAILED(rv))
    2419               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPointList", "insertItemBefore");
    2420               0 :     if (!result) {
    2421               0 :       *vp = JSVAL_NULL;
    2422               0 :       return JS_TRUE;
    2423                 :     }
    2424               0 :     return Wrap(cx, obj, result, vp);
    2425                 : }
    2426                 : 
    2427                 : static JSBool
    2428               0 : SVGPointList_GetNumberOfItems(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
    2429                 : {
    2430               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2431               0 :     if (!SVGPointListWrapper::instanceIsListObject(cx, obj, NULL))
    2432               0 :         return false;
    2433                 :     nsresult rv;
    2434                 :     PRUint32 result;
    2435               0 :     rv = SVGPointListWrapper::getListObject(obj)->GetNumberOfItems(&result);
    2436               0 :     if (NS_FAILED(rv))
    2437               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPointList", "numberOfItems");
    2438               0 :     *vp = UINT_TO_JSVAL(result);
    2439               0 :     return JS_TRUE;
    2440                 : }
    2441                 : 
    2442                 : static JSBool
    2443               0 : SVGPointList_RemoveItem(JSContext *cx, unsigned argc, jsval *vp)
    2444                 : {
    2445               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2446               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2447               0 :     if (!obj)
    2448               0 :         return JS_FALSE;
    2449               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2450               0 :     if (!SVGPointListWrapper::instanceIsListObject(cx, obj, callee))
    2451               0 :         return false;
    2452               0 :     if (argc < 1)
    2453               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2454               0 :     jsval *argv = JS_ARGV(cx, vp);
    2455                 :     uint32_t arg0;
    2456               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
    2457               0 :         return JS_FALSE;
    2458                 :     nsresult rv;
    2459               0 :     nsCOMPtr<nsIDOMSVGPoint> result;
    2460               0 :     rv = SVGPointListWrapper::getListObject(obj)->RemoveItem(arg0, getter_AddRefs(result));
    2461               0 :     if (NS_FAILED(rv))
    2462               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPointList", "removeItem");
    2463               0 :     if (!result) {
    2464               0 :       *vp = JSVAL_NULL;
    2465               0 :       return JS_TRUE;
    2466                 :     }
    2467               0 :     return Wrap(cx, obj, result, vp);
    2468                 : }
    2469                 : 
    2470                 : static JSBool
    2471               0 : SVGPointList_ReplaceItem(JSContext *cx, unsigned argc, jsval *vp)
    2472                 : {
    2473               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2474               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2475               0 :     if (!obj)
    2476               0 :         return JS_FALSE;
    2477               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2478               0 :     if (!SVGPointListWrapper::instanceIsListObject(cx, obj, callee))
    2479               0 :         return false;
    2480               0 :     if (argc < 2)
    2481               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2482               0 :     jsval *argv = JS_ARGV(cx, vp);
    2483                 :     nsresult rv;
    2484                 :     nsIDOMSVGPoint *arg0;
    2485               0 :     xpc_qsSelfRef arg0ref;
    2486               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGPoint>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    2487               0 :     if (NS_FAILED(rv)) {
    2488               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    2489               0 :         return JS_FALSE;
    2490                 :     }
    2491                 :     uint32_t arg1;
    2492               0 :     if (!JS_ValueToECMAUint32(cx, argv[1], &arg1))
    2493               0 :         return JS_FALSE;
    2494               0 :     nsCOMPtr<nsIDOMSVGPoint> result;
    2495               0 :     rv = SVGPointListWrapper::getListObject(obj)->ReplaceItem(arg0, arg1, getter_AddRefs(result));
    2496               0 :     if (NS_FAILED(rv))
    2497               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGPointList", "replaceItem");
    2498               0 :     if (!result) {
    2499               0 :       *vp = JSVAL_NULL;
    2500               0 :       return JS_TRUE;
    2501                 :     }
    2502               0 :     return Wrap(cx, obj, result, vp);
    2503                 : }
    2504                 : 
    2505                 : template<>
    2506                 : SVGPointListWrapper::Properties SVGPointListWrapper::sProtoProperties[] = {
    2507                 :     { s_length_id, length_getter, NULL },
    2508                 :     { s_numberOfItems_id, SVGPointList_GetNumberOfItems, xpc_qsGetterOnlyPropertyStub }
    2509                 : };
    2510                 : 
    2511                 : template<>
    2512            1464 : size_t SVGPointListWrapper::sProtoPropertiesCount = ArrayLength(SVGPointListWrapper::sProtoProperties);
    2513                 : 
    2514                 : template<>
    2515                 : SVGPointListWrapper::Methods SVGPointListWrapper::sProtoMethods[] = {
    2516                 :     { s_appendItem_id, SVGPointList_AppendItem, 1 },
    2517                 :     { s_clear_id, SVGPointList_Clear, 0 },
    2518                 :     { s_getItem_id, SVGPointList_GetItem, 1 },
    2519                 :     { s_initialize_id, SVGPointList_Initialize, 1 },
    2520                 :     { s_insertItemBefore_id, SVGPointList_InsertItemBefore, 2 },
    2521                 :     { s_removeItem_id, SVGPointList_RemoveItem, 1 },
    2522                 :     { s_replaceItem_id, SVGPointList_ReplaceItem, 2 }
    2523                 : };
    2524                 : 
    2525                 : template<>
    2526            1464 : size_t SVGPointListWrapper::sProtoMethodsCount = ArrayLength(SVGPointListWrapper::sProtoMethods);
    2527                 : 
    2528                 : template class ListBase<SVGPointListClass>;
    2529                 : 
    2530                 : JSObject*
    2531               0 : SVGPointList::create(JSContext *cx, XPCWrappedNativeScope *scope, mozilla::DOMSVGPointList *list, nsWrapperCache *cache, bool *triedToWrap)
    2532                 : {
    2533               0 :     return SVGPointListWrapper::create(cx, scope, list, cache, triedToWrap);
    2534                 : }
    2535                 : 
    2536                 : bool
    2537               0 : SVGPointList::objIsWrapper(JSObject *obj)
    2538                 : {
    2539               0 :     return SVGPointListWrapper::objIsList(obj);
    2540                 : }
    2541                 : 
    2542                 : mozilla::DOMSVGPointList*
    2543               0 : SVGPointList::getNative(JSObject *obj)
    2544                 : {
    2545               0 :     return SVGPointListWrapper::getListObject(obj);
    2546                 : }
    2547                 : 
    2548                 : // SVGTransformList
    2549                 : 
    2550                 : template<>
    2551                 : js::Class SVGTransformListWrapper::sInterfaceClass = {
    2552                 :     "SVGTransformList",
    2553                 :     0,
    2554                 :     JS_PropertyStub,        /* addProperty */
    2555                 :     JS_PropertyStub,        /* delProperty */
    2556                 :     JS_PropertyStub,        /* getProperty */
    2557                 :     JS_StrictPropertyStub,  /* setProperty */
    2558                 :     JS_EnumerateStub,
    2559                 :     JS_ResolveStub,
    2560                 :     JS_ConvertStub,
    2561                 :     JS_FinalizeStub,
    2562                 :     NULL,                   /* checkAccess */
    2563                 :     NULL,                   /* call */
    2564                 :     NULL,                   /* construct */
    2565                 :     interface_hasInstance
    2566                 : };
    2567                 : 
    2568                 : template<>
    2569                 : JSObject *
    2570               0 : SVGTransformListWrapper::getPrototype(JSContext *cx, XPCWrappedNativeScope *scope, bool *enabled)
    2571                 : {
    2572               0 :     if (!scope->NewDOMBindingsEnabled()) {
    2573               0 :         *enabled = false;
    2574               0 :         return NULL;
    2575                 :     }
    2576                 : 
    2577               0 :     *enabled = true;
    2578               0 :     return getPrototype(cx, scope);
    2579                 : }
    2580                 : 
    2581                 : template<>
    2582                 : bool
    2583               0 : SVGTransformListWrapper::getItemAt(mozilla::DOMSVGTransformList *list, uint32_t index, nsIDOMSVGTransform * &item)
    2584                 : {
    2585               0 :     item = list->GetItemAt(index);
    2586               0 :     return !!item;
    2587                 : }
    2588                 : 
    2589                 : static JSBool
    2590               0 : SVGTransformList_AppendItem(JSContext *cx, unsigned argc, jsval *vp)
    2591                 : {
    2592               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2593               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2594               0 :     if (!obj)
    2595               0 :         return JS_FALSE;
    2596               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2597               0 :     if (!SVGTransformListWrapper::instanceIsListObject(cx, obj, callee))
    2598               0 :         return false;
    2599               0 :     if (argc < 1)
    2600               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2601               0 :     jsval *argv = JS_ARGV(cx, vp);
    2602                 :     nsresult rv;
    2603                 :     nsIDOMSVGTransform *arg0;
    2604               0 :     xpc_qsSelfRef arg0ref;
    2605               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGTransform>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    2606               0 :     if (NS_FAILED(rv)) {
    2607               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    2608               0 :         return JS_FALSE;
    2609                 :     }
    2610               0 :     nsCOMPtr<nsIDOMSVGTransform> result;
    2611               0 :     rv = SVGTransformListWrapper::getListObject(obj)->AppendItem(arg0, getter_AddRefs(result));
    2612               0 :     if (NS_FAILED(rv))
    2613               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGTransformList", "appendItem");
    2614               0 :     if (!result) {
    2615               0 :       *vp = JSVAL_NULL;
    2616               0 :       return JS_TRUE;
    2617                 :     }
    2618               0 :     return Wrap(cx, obj, result, vp);
    2619                 : }
    2620                 : 
    2621                 : static JSBool
    2622               0 : SVGTransformList_Clear(JSContext *cx, unsigned argc, jsval *vp)
    2623                 : {
    2624               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2625               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2626               0 :     if (!obj)
    2627               0 :         return JS_FALSE;
    2628               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2629               0 :     if (!SVGTransformListWrapper::instanceIsListObject(cx, obj, callee))
    2630               0 :         return false;
    2631                 :     nsresult rv;
    2632               0 :     rv = SVGTransformListWrapper::getListObject(obj)->Clear();
    2633               0 :     if (NS_FAILED(rv))
    2634               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGTransformList", "clear");
    2635               0 :     *vp = JSVAL_VOID;
    2636               0 :     return JS_TRUE;
    2637                 : }
    2638                 : 
    2639                 : static JSBool
    2640               0 : SVGTransformList_Consolidate(JSContext *cx, unsigned argc, jsval *vp)
    2641                 : {
    2642               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2643               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2644               0 :     if (!obj)
    2645               0 :         return JS_FALSE;
    2646               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2647               0 :     if (!SVGTransformListWrapper::instanceIsListObject(cx, obj, callee))
    2648               0 :         return false;
    2649                 :     nsresult rv;
    2650               0 :     nsCOMPtr<nsIDOMSVGTransform> result;
    2651               0 :     rv = SVGTransformListWrapper::getListObject(obj)->Consolidate(getter_AddRefs(result));
    2652               0 :     if (NS_FAILED(rv))
    2653               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGTransformList", "consolidate");
    2654               0 :     if (!result) {
    2655               0 :       *vp = JSVAL_NULL;
    2656               0 :       return JS_TRUE;
    2657                 :     }
    2658               0 :     return Wrap(cx, obj, result, vp);
    2659                 : }
    2660                 : 
    2661                 : static JSBool
    2662               0 : SVGTransformList_CreateSVGTransformFromMatrix(JSContext *cx, unsigned argc, jsval *vp)
    2663                 : {
    2664               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2665               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2666               0 :     if (!obj)
    2667               0 :         return JS_FALSE;
    2668               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2669               0 :     if (!SVGTransformListWrapper::instanceIsListObject(cx, obj, callee))
    2670               0 :         return false;
    2671               0 :     if (argc < 1)
    2672               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2673               0 :     jsval *argv = JS_ARGV(cx, vp);
    2674                 :     nsresult rv;
    2675                 :     nsIDOMSVGMatrix *arg0;
    2676               0 :     xpc_qsSelfRef arg0ref;
    2677               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGMatrix>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    2678               0 :     if (NS_FAILED(rv)) {
    2679               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    2680               0 :         return JS_FALSE;
    2681                 :     }
    2682               0 :     nsCOMPtr<nsIDOMSVGTransform> result;
    2683               0 :     rv = SVGTransformListWrapper::getListObject(obj)->CreateSVGTransformFromMatrix(arg0, getter_AddRefs(result));
    2684               0 :     if (NS_FAILED(rv))
    2685               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGTransformList", "createSVGTransformFromMatrix");
    2686               0 :     if (!result) {
    2687               0 :       *vp = JSVAL_NULL;
    2688               0 :       return JS_TRUE;
    2689                 :     }
    2690               0 :     return Wrap(cx, obj, result, vp);
    2691                 : }
    2692                 : 
    2693                 : static JSBool
    2694               0 : SVGTransformList_GetItem(JSContext *cx, unsigned argc, jsval *vp)
    2695                 : {
    2696               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2697               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2698               0 :     if (!obj)
    2699               0 :         return JS_FALSE;
    2700               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2701               0 :     if (!SVGTransformListWrapper::instanceIsListObject(cx, obj, callee))
    2702               0 :         return false;
    2703               0 :     if (argc < 1)
    2704               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2705               0 :     jsval *argv = JS_ARGV(cx, vp);
    2706                 :     uint32_t arg0;
    2707               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
    2708               0 :         return JS_FALSE;
    2709                 :     nsresult rv;
    2710               0 :     nsCOMPtr<nsIDOMSVGTransform> result;
    2711               0 :     rv = SVGTransformListWrapper::getListObject(obj)->GetItem(arg0, getter_AddRefs(result));
    2712               0 :     if (NS_FAILED(rv))
    2713               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGTransformList", "getItem");
    2714               0 :     if (!result) {
    2715               0 :       *vp = JSVAL_NULL;
    2716               0 :       return JS_TRUE;
    2717                 :     }
    2718               0 :     return Wrap(cx, obj, result, vp);
    2719                 : }
    2720                 : 
    2721                 : static JSBool
    2722               0 : SVGTransformList_Initialize(JSContext *cx, unsigned argc, jsval *vp)
    2723                 : {
    2724               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2725               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2726               0 :     if (!obj)
    2727               0 :         return JS_FALSE;
    2728               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2729               0 :     if (!SVGTransformListWrapper::instanceIsListObject(cx, obj, callee))
    2730               0 :         return false;
    2731               0 :     if (argc < 1)
    2732               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2733               0 :     jsval *argv = JS_ARGV(cx, vp);
    2734                 :     nsresult rv;
    2735                 :     nsIDOMSVGTransform *arg0;
    2736               0 :     xpc_qsSelfRef arg0ref;
    2737               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGTransform>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    2738               0 :     if (NS_FAILED(rv)) {
    2739               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    2740               0 :         return JS_FALSE;
    2741                 :     }
    2742               0 :     nsCOMPtr<nsIDOMSVGTransform> result;
    2743               0 :     rv = SVGTransformListWrapper::getListObject(obj)->Initialize(arg0, getter_AddRefs(result));
    2744               0 :     if (NS_FAILED(rv))
    2745               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGTransformList", "initialize");
    2746               0 :     if (!result) {
    2747               0 :       *vp = JSVAL_NULL;
    2748               0 :       return JS_TRUE;
    2749                 :     }
    2750               0 :     return Wrap(cx, obj, result, vp);
    2751                 : }
    2752                 : 
    2753                 : static JSBool
    2754               0 : SVGTransformList_InsertItemBefore(JSContext *cx, unsigned argc, jsval *vp)
    2755                 : {
    2756               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2757               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2758               0 :     if (!obj)
    2759               0 :         return JS_FALSE;
    2760               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2761               0 :     if (!SVGTransformListWrapper::instanceIsListObject(cx, obj, callee))
    2762               0 :         return false;
    2763               0 :     if (argc < 2)
    2764               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2765               0 :     jsval *argv = JS_ARGV(cx, vp);
    2766                 :     nsresult rv;
    2767                 :     nsIDOMSVGTransform *arg0;
    2768               0 :     xpc_qsSelfRef arg0ref;
    2769               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGTransform>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    2770               0 :     if (NS_FAILED(rv)) {
    2771               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    2772               0 :         return JS_FALSE;
    2773                 :     }
    2774                 :     uint32_t arg1;
    2775               0 :     if (!JS_ValueToECMAUint32(cx, argv[1], &arg1))
    2776               0 :         return JS_FALSE;
    2777               0 :     nsCOMPtr<nsIDOMSVGTransform> result;
    2778               0 :     rv = SVGTransformListWrapper::getListObject(obj)->InsertItemBefore(arg0, arg1, getter_AddRefs(result));
    2779               0 :     if (NS_FAILED(rv))
    2780               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGTransformList", "insertItemBefore");
    2781               0 :     if (!result) {
    2782               0 :       *vp = JSVAL_NULL;
    2783               0 :       return JS_TRUE;
    2784                 :     }
    2785               0 :     return Wrap(cx, obj, result, vp);
    2786                 : }
    2787                 : 
    2788                 : static JSBool
    2789               0 : SVGTransformList_GetNumberOfItems(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
    2790                 : {
    2791               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2792               0 :     if (!SVGTransformListWrapper::instanceIsListObject(cx, obj, NULL))
    2793               0 :         return false;
    2794                 :     nsresult rv;
    2795                 :     PRUint32 result;
    2796               0 :     rv = SVGTransformListWrapper::getListObject(obj)->GetNumberOfItems(&result);
    2797               0 :     if (NS_FAILED(rv))
    2798               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGTransformList", "numberOfItems");
    2799               0 :     *vp = UINT_TO_JSVAL(result);
    2800               0 :     return JS_TRUE;
    2801                 : }
    2802                 : 
    2803                 : static JSBool
    2804               0 : SVGTransformList_RemoveItem(JSContext *cx, unsigned argc, jsval *vp)
    2805                 : {
    2806               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2807               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2808               0 :     if (!obj)
    2809               0 :         return JS_FALSE;
    2810               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2811               0 :     if (!SVGTransformListWrapper::instanceIsListObject(cx, obj, callee))
    2812               0 :         return false;
    2813               0 :     if (argc < 1)
    2814               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2815               0 :     jsval *argv = JS_ARGV(cx, vp);
    2816                 :     uint32_t arg0;
    2817               0 :     if (!JS_ValueToECMAUint32(cx, argv[0], &arg0))
    2818               0 :         return JS_FALSE;
    2819                 :     nsresult rv;
    2820               0 :     nsCOMPtr<nsIDOMSVGTransform> result;
    2821               0 :     rv = SVGTransformListWrapper::getListObject(obj)->RemoveItem(arg0, getter_AddRefs(result));
    2822               0 :     if (NS_FAILED(rv))
    2823               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGTransformList", "removeItem");
    2824               0 :     if (!result) {
    2825               0 :       *vp = JSVAL_NULL;
    2826               0 :       return JS_TRUE;
    2827                 :     }
    2828               0 :     return Wrap(cx, obj, result, vp);
    2829                 : }
    2830                 : 
    2831                 : static JSBool
    2832               0 : SVGTransformList_ReplaceItem(JSContext *cx, unsigned argc, jsval *vp)
    2833                 : {
    2834               0 :     XPC_QS_ASSERT_CONTEXT_OK(cx);
    2835               0 :     JSObject *obj = JS_THIS_OBJECT(cx, vp);
    2836               0 :     if (!obj)
    2837               0 :         return JS_FALSE;
    2838               0 :     JSObject *callee = JSVAL_TO_OBJECT(JS_CALLEE(cx, vp));
    2839               0 :     if (!SVGTransformListWrapper::instanceIsListObject(cx, obj, callee))
    2840               0 :         return false;
    2841               0 :     if (argc < 2)
    2842               0 :         return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
    2843               0 :     jsval *argv = JS_ARGV(cx, vp);
    2844                 :     nsresult rv;
    2845                 :     nsIDOMSVGTransform *arg0;
    2846               0 :     xpc_qsSelfRef arg0ref;
    2847               0 :     rv = xpc_qsUnwrapArg<nsIDOMSVGTransform>(cx, argv[0], &arg0, &arg0ref.ptr, &argv[0]);
    2848               0 :     if (NS_FAILED(rv)) {
    2849               0 :         xpc_qsThrowBadArgWithDetails(cx, rv, 0, "", "");
    2850               0 :         return JS_FALSE;
    2851                 :     }
    2852                 :     uint32_t arg1;
    2853               0 :     if (!JS_ValueToECMAUint32(cx, argv[1], &arg1))
    2854               0 :         return JS_FALSE;
    2855               0 :     nsCOMPtr<nsIDOMSVGTransform> result;
    2856               0 :     rv = SVGTransformListWrapper::getListObject(obj)->ReplaceItem(arg0, arg1, getter_AddRefs(result));
    2857               0 :     if (NS_FAILED(rv))
    2858               0 :         return xpc_qsThrowMethodFailedWithDetails(cx, rv, "SVGTransformList", "replaceItem");
    2859               0 :     if (!result) {
    2860               0 :       *vp = JSVAL_NULL;
    2861               0 :       return JS_TRUE;
    2862                 :     }
    2863               0 :     return Wrap(cx, obj, result, vp);
    2864                 : }
    2865                 : 
    2866                 : template<>
    2867                 : SVGTransformListWrapper::Properties SVGTransformListWrapper::sProtoProperties[] = {
    2868                 :     { s_length_id, length_getter, NULL },
    2869                 :     { s_numberOfItems_id, SVGTransformList_GetNumberOfItems, xpc_qsGetterOnlyPropertyStub }
    2870                 : };
    2871                 : 
    2872                 : template<>
    2873            1464 : size_t SVGTransformListWrapper::sProtoPropertiesCount = ArrayLength(SVGTransformListWrapper::sProtoProperties);
    2874                 : 
    2875                 : template<>
    2876                 : SVGTransformListWrapper::Methods SVGTransformListWrapper::sProtoMethods[] = {
    2877                 :     { s_appendItem_id, SVGTransformList_AppendItem, 1 },
    2878                 :     { s_clear_id, SVGTransformList_Clear, 0 },
    2879                 :     { s_consolidate_id, SVGTransformList_Consolidate, 0 },
    2880                 :     { s_createSVGTransformFromMatrix_id, SVGTransformList_CreateSVGTransformFromMatrix, 1 },
    2881                 :     { s_getItem_id, SVGTransformList_GetItem, 1 },
    2882                 :     { s_initialize_id, SVGTransformList_Initialize, 1 },
    2883                 :     { s_insertItemBefore_id, SVGTransformList_InsertItemBefore, 2 },
    2884                 :     { s_removeItem_id, SVGTransformList_RemoveItem, 1 },
    2885                 :     { s_replaceItem_id, SVGTransformList_ReplaceItem, 2 }
    2886                 : };
    2887                 : 
    2888                 : template<>
    2889            1464 : size_t SVGTransformListWrapper::sProtoMethodsCount = ArrayLength(SVGTransformListWrapper::sProtoMethods);
    2890                 : 
    2891                 : template class ListBase<SVGTransformListClass>;
    2892                 : 
    2893                 : JSObject*
    2894               0 : SVGTransformList::create(JSContext *cx, XPCWrappedNativeScope *scope, mozilla::DOMSVGTransformList *list, nsWrapperCache *cache, bool *triedToWrap)
    2895                 : {
    2896               0 :     return SVGTransformListWrapper::create(cx, scope, list, cache, triedToWrap);
    2897                 : }
    2898                 : 
    2899                 : bool
    2900               0 : SVGTransformList::objIsWrapper(JSObject *obj)
    2901                 : {
    2902               0 :     return SVGTransformListWrapper::objIsList(obj);
    2903                 : }
    2904                 : 
    2905                 : mozilla::DOMSVGTransformList*
    2906               0 : SVGTransformList::getNative(JSObject *obj)
    2907                 : {
    2908               0 :     return SVGTransformListWrapper::getListObject(obj);
    2909                 : }
    2910                 : 
    2911                 : // Register prototypes
    2912                 : 
    2913                 : void
    2914             306 : Register(nsDOMClassInfoData *aData)
    2915                 : {
    2916                 : #define REGISTER_PROTO(_dom_class) \
    2917                 :     aData[eDOMClassInfo_##_dom_class##_id].mDefineDOMInterface = _dom_class##Wrapper::getPrototype
    2918                 : 
    2919             306 :     REGISTER_PROTO(ClientRectList);
    2920             306 :     REGISTER_PROTO(DOMTokenList);
    2921             306 :     REGISTER_PROTO(NodeList);
    2922             306 :     REGISTER_PROTO(HTMLCollection);
    2923             306 :     REGISTER_PROTO(SVGPathSegList);
    2924             306 :     REGISTER_PROTO(PaintRequestList);
    2925             306 :     REGISTER_PROTO(FileList);
    2926             306 :     REGISTER_PROTO(SVGLengthList);
    2927             306 :     REGISTER_PROTO(SVGTransformList);
    2928             306 :     REGISTER_PROTO(DOMSettableTokenList);
    2929             306 :     REGISTER_PROTO(SVGPointList);
    2930             306 :     REGISTER_PROTO(SVGNumberList);
    2931             306 :     REGISTER_PROTO(HTMLOptionsCollection);
    2932                 : 
    2933                 : #undef REGISTER_PROTO
    2934             306 : }
    2935                 : 
    2936                 : }
    2937                 : }
    2938            4392 : }

Generated by: LCOV version 1.7