LCOV - code coverage report
Current view: top level - obj-x86_64-pc-linux-gnu/dom/bindings - HTMLAppletElementBinding.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 764 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 63 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* THIS FILE IS AUTOGENERATED FROM HTMLAppletElement.webidl BY Codegen.py - DO NOT EDIT */
       2             : 
       3             : #include "HTMLAppletElementBinding.h"
       4             : #include "HTMLElementBinding.h"
       5             : #include "HTMLObjectElementBinding.h"
       6             : #include "WrapperFactory.h"
       7             : #include "imgINotificationObserver.h"
       8             : #include "imgIRequest.h"
       9             : #include "mozilla/OwningNonNull.h"
      10             : #include "mozilla/dom/BindingUtils.h"
      11             : #include "mozilla/dom/DOMJSClass.h"
      12             : #include "mozilla/dom/HTMLIFrameElement.h"
      13             : #include "mozilla/dom/HTMLSharedObjectElement.h"
      14             : #include "mozilla/dom/NonRefcountedDOMObject.h"
      15             : #include "mozilla/dom/Nullable.h"
      16             : #include "mozilla/dom/PrimitiveConversions.h"
      17             : #include "mozilla/dom/XrayExpandoClass.h"
      18             : #include "nsContentUtils.h"
      19             : #include "nsIFrameLoader.h"
      20             : #include "nsIURI.h"
      21             : #include "nsPIDOMWindow.h"
      22             : #include "nsXULElement.h"
      23             : 
      24             : namespace mozilla {
      25             : namespace dom {
      26             : 
      27             : namespace HTMLAppletElementBinding {
      28             : 
      29             : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<HTMLElementBinding::NativeType>::value,
      30             :               "Can't inherit from an interface with a different ownership model.");
      31             : 
      32             : static bool
      33           0 : get_align(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
      34             : {
      35           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
      36             :       // Return false from the JSNative in order to trigger
      37             :       // an uncatchable exception.
      38           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
      39           0 :       return false;
      40             :   }
      41           0 :   DOMString result;
      42           0 :   self->GetAlign(result);
      43           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
      44           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
      45           0 :     return false;
      46             :   }
      47           0 :   return true;
      48             : }
      49             : 
      50             : static bool
      51           0 : set_align(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
      52             : {
      53           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
      54             :       // Return false from the JSNative in order to trigger
      55             :       // an uncatchable exception.
      56           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
      57           0 :       return false;
      58             :   }
      59           0 :   binding_detail::FakeString arg0;
      60           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
      61           0 :     return false;
      62             :   }
      63           0 :   binding_detail::FastErrorResult rv;
      64           0 :   self->SetAlign(NonNullHelper(Constify(arg0)), rv);
      65           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
      66           0 :     return false;
      67             :   }
      68           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
      69             : 
      70           0 :   return true;
      71             : }
      72             : 
      73             : static const JSJitInfo align_getterinfo = {
      74             :   { (JSJitGetterOp)get_align },
      75             :   { prototypes::id::HTMLAppletElement },
      76             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
      77             :   JSJitInfo::Getter,
      78             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
      79             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
      80             :   false,  /* isInfallible. False in setters. */
      81             :   true,  /* isMovable.  Not relevant for setters. */
      82             :   true, /* isEliminatable.  Not relevant for setters. */
      83             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
      84             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
      85             :   false,  /* isTypedMethod.  Only relevant for methods. */
      86             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
      87             : };
      88             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
      89             : static_assert(0 < 1, "There is no slot for us");
      90             : static const JSJitInfo align_setterinfo = {
      91             :   { (JSJitGetterOp)set_align },
      92             :   { prototypes::id::HTMLAppletElement },
      93             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
      94             :   JSJitInfo::Setter,
      95             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
      96             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
      97             :   false,  /* isInfallible. False in setters. */
      98             :   false,  /* isMovable.  Not relevant for setters. */
      99             :   false, /* isEliminatable.  Not relevant for setters. */
     100             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     101             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     102             :   false,  /* isTypedMethod.  Only relevant for methods. */
     103             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     104             : };
     105             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     106             : static_assert(0 < 1, "There is no slot for us");
     107             : 
     108             : static bool
     109           0 : get_alt(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
     110             : {
     111           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     112             :       // Return false from the JSNative in order to trigger
     113             :       // an uncatchable exception.
     114           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     115           0 :       return false;
     116             :   }
     117           0 :   DOMString result;
     118           0 :   self->GetAlt(result);
     119           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     120           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     121           0 :     return false;
     122             :   }
     123           0 :   return true;
     124             : }
     125             : 
     126             : static bool
     127           0 : set_alt(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
     128             : {
     129           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     130             :       // Return false from the JSNative in order to trigger
     131             :       // an uncatchable exception.
     132           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     133           0 :       return false;
     134             :   }
     135           0 :   binding_detail::FakeString arg0;
     136           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     137           0 :     return false;
     138             :   }
     139           0 :   binding_detail::FastErrorResult rv;
     140           0 :   self->SetAlt(NonNullHelper(Constify(arg0)), rv);
     141           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     142           0 :     return false;
     143             :   }
     144           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     145             : 
     146           0 :   return true;
     147             : }
     148             : 
     149             : static const JSJitInfo alt_getterinfo = {
     150             :   { (JSJitGetterOp)get_alt },
     151             :   { prototypes::id::HTMLAppletElement },
     152             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     153             :   JSJitInfo::Getter,
     154             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     155             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     156             :   false,  /* isInfallible. False in setters. */
     157             :   true,  /* isMovable.  Not relevant for setters. */
     158             :   true, /* isEliminatable.  Not relevant for setters. */
     159             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     160             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     161             :   false,  /* isTypedMethod.  Only relevant for methods. */
     162             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     163             : };
     164             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     165             : static_assert(0 < 1, "There is no slot for us");
     166             : static const JSJitInfo alt_setterinfo = {
     167             :   { (JSJitGetterOp)set_alt },
     168             :   { prototypes::id::HTMLAppletElement },
     169             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     170             :   JSJitInfo::Setter,
     171             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     172             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     173             :   false,  /* isInfallible. False in setters. */
     174             :   false,  /* isMovable.  Not relevant for setters. */
     175             :   false, /* isEliminatable.  Not relevant for setters. */
     176             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     177             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     178             :   false,  /* isTypedMethod.  Only relevant for methods. */
     179             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     180             : };
     181             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     182             : static_assert(0 < 1, "There is no slot for us");
     183             : 
     184             : static bool
     185           0 : get_archive(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
     186             : {
     187           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     188             :       // Return false from the JSNative in order to trigger
     189             :       // an uncatchable exception.
     190           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     191           0 :       return false;
     192             :   }
     193           0 :   DOMString result;
     194           0 :   self->GetArchive(result);
     195           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     196           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     197           0 :     return false;
     198             :   }
     199           0 :   return true;
     200             : }
     201             : 
     202             : static bool
     203           0 : set_archive(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
     204             : {
     205           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     206             :       // Return false from the JSNative in order to trigger
     207             :       // an uncatchable exception.
     208           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     209           0 :       return false;
     210             :   }
     211           0 :   binding_detail::FakeString arg0;
     212           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     213           0 :     return false;
     214             :   }
     215           0 :   binding_detail::FastErrorResult rv;
     216           0 :   self->SetArchive(NonNullHelper(Constify(arg0)), rv);
     217           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     218           0 :     return false;
     219             :   }
     220           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     221             : 
     222           0 :   return true;
     223             : }
     224             : 
     225             : static const JSJitInfo archive_getterinfo = {
     226             :   { (JSJitGetterOp)get_archive },
     227             :   { prototypes::id::HTMLAppletElement },
     228             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     229             :   JSJitInfo::Getter,
     230             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     231             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     232             :   false,  /* isInfallible. False in setters. */
     233             :   true,  /* isMovable.  Not relevant for setters. */
     234             :   true, /* isEliminatable.  Not relevant for setters. */
     235             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     236             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     237             :   false,  /* isTypedMethod.  Only relevant for methods. */
     238             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     239             : };
     240             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     241             : static_assert(0 < 1, "There is no slot for us");
     242             : static const JSJitInfo archive_setterinfo = {
     243             :   { (JSJitGetterOp)set_archive },
     244             :   { prototypes::id::HTMLAppletElement },
     245             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     246             :   JSJitInfo::Setter,
     247             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     248             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     249             :   false,  /* isInfallible. False in setters. */
     250             :   false,  /* isMovable.  Not relevant for setters. */
     251             :   false, /* isEliminatable.  Not relevant for setters. */
     252             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     253             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     254             :   false,  /* isTypedMethod.  Only relevant for methods. */
     255             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     256             : };
     257             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     258             : static_assert(0 < 1, "There is no slot for us");
     259             : 
     260             : static bool
     261           0 : get_code(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
     262             : {
     263           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     264             :       // Return false from the JSNative in order to trigger
     265             :       // an uncatchable exception.
     266           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     267           0 :       return false;
     268             :   }
     269           0 :   DOMString result;
     270           0 :   self->GetCode(result);
     271           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     272           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     273           0 :     return false;
     274             :   }
     275           0 :   return true;
     276             : }
     277             : 
     278             : static bool
     279           0 : set_code(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
     280             : {
     281           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     282             :       // Return false from the JSNative in order to trigger
     283             :       // an uncatchable exception.
     284           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     285           0 :       return false;
     286             :   }
     287           0 :   binding_detail::FakeString arg0;
     288           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     289           0 :     return false;
     290             :   }
     291           0 :   binding_detail::FastErrorResult rv;
     292           0 :   self->SetCode(NonNullHelper(Constify(arg0)), rv);
     293           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     294           0 :     return false;
     295             :   }
     296           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     297             : 
     298           0 :   return true;
     299             : }
     300             : 
     301             : static const JSJitInfo code_getterinfo = {
     302             :   { (JSJitGetterOp)get_code },
     303             :   { prototypes::id::HTMLAppletElement },
     304             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     305             :   JSJitInfo::Getter,
     306             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     307             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     308             :   false,  /* isInfallible. False in setters. */
     309             :   true,  /* isMovable.  Not relevant for setters. */
     310             :   true, /* isEliminatable.  Not relevant for setters. */
     311             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     312             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     313             :   false,  /* isTypedMethod.  Only relevant for methods. */
     314             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     315             : };
     316             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     317             : static_assert(0 < 1, "There is no slot for us");
     318             : static const JSJitInfo code_setterinfo = {
     319             :   { (JSJitGetterOp)set_code },
     320             :   { prototypes::id::HTMLAppletElement },
     321             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     322             :   JSJitInfo::Setter,
     323             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     324             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     325             :   false,  /* isInfallible. False in setters. */
     326             :   false,  /* isMovable.  Not relevant for setters. */
     327             :   false, /* isEliminatable.  Not relevant for setters. */
     328             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     329             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     330             :   false,  /* isTypedMethod.  Only relevant for methods. */
     331             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     332             : };
     333             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     334             : static_assert(0 < 1, "There is no slot for us");
     335             : 
     336             : static bool
     337           0 : get_codeBase(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
     338             : {
     339           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     340             :       // Return false from the JSNative in order to trigger
     341             :       // an uncatchable exception.
     342           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     343           0 :       return false;
     344             :   }
     345           0 :   DOMString result;
     346           0 :   self->GetCodeBase(result);
     347           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     348           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     349           0 :     return false;
     350             :   }
     351           0 :   return true;
     352             : }
     353             : 
     354             : static bool
     355           0 : set_codeBase(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
     356             : {
     357           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     358             :       // Return false from the JSNative in order to trigger
     359             :       // an uncatchable exception.
     360           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     361           0 :       return false;
     362             :   }
     363           0 :   binding_detail::FakeString arg0;
     364           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     365           0 :     return false;
     366             :   }
     367           0 :   binding_detail::FastErrorResult rv;
     368           0 :   self->SetCodeBase(NonNullHelper(Constify(arg0)), rv);
     369           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     370           0 :     return false;
     371             :   }
     372           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     373             : 
     374           0 :   return true;
     375             : }
     376             : 
     377             : static const JSJitInfo codeBase_getterinfo = {
     378             :   { (JSJitGetterOp)get_codeBase },
     379             :   { prototypes::id::HTMLAppletElement },
     380             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     381             :   JSJitInfo::Getter,
     382             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     383             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     384             :   false,  /* isInfallible. False in setters. */
     385             :   true,  /* isMovable.  Not relevant for setters. */
     386             :   true, /* isEliminatable.  Not relevant for setters. */
     387             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     388             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     389             :   false,  /* isTypedMethod.  Only relevant for methods. */
     390             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     391             : };
     392             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     393             : static_assert(0 < 1, "There is no slot for us");
     394             : static const JSJitInfo codeBase_setterinfo = {
     395             :   { (JSJitGetterOp)set_codeBase },
     396             :   { prototypes::id::HTMLAppletElement },
     397             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     398             :   JSJitInfo::Setter,
     399             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     400             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     401             :   false,  /* isInfallible. False in setters. */
     402             :   false,  /* isMovable.  Not relevant for setters. */
     403             :   false, /* isEliminatable.  Not relevant for setters. */
     404             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     405             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     406             :   false,  /* isTypedMethod.  Only relevant for methods. */
     407             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     408             : };
     409             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     410             : static_assert(0 < 1, "There is no slot for us");
     411             : 
     412             : static bool
     413           0 : get_height(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
     414             : {
     415           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     416             :       // Return false from the JSNative in order to trigger
     417             :       // an uncatchable exception.
     418           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     419           0 :       return false;
     420             :   }
     421           0 :   DOMString result;
     422           0 :   self->GetHeight(result);
     423           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     424           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     425           0 :     return false;
     426             :   }
     427           0 :   return true;
     428             : }
     429             : 
     430             : static bool
     431           0 : set_height(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
     432             : {
     433           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     434             :       // Return false from the JSNative in order to trigger
     435             :       // an uncatchable exception.
     436           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     437           0 :       return false;
     438             :   }
     439           0 :   binding_detail::FakeString arg0;
     440           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     441           0 :     return false;
     442             :   }
     443           0 :   binding_detail::FastErrorResult rv;
     444           0 :   self->SetHeight(NonNullHelper(Constify(arg0)), rv);
     445           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     446           0 :     return false;
     447             :   }
     448           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     449             : 
     450           0 :   return true;
     451             : }
     452             : 
     453             : static const JSJitInfo height_getterinfo = {
     454             :   { (JSJitGetterOp)get_height },
     455             :   { prototypes::id::HTMLAppletElement },
     456             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     457             :   JSJitInfo::Getter,
     458             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     459             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     460             :   false,  /* isInfallible. False in setters. */
     461             :   true,  /* isMovable.  Not relevant for setters. */
     462             :   true, /* isEliminatable.  Not relevant for setters. */
     463             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     464             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     465             :   false,  /* isTypedMethod.  Only relevant for methods. */
     466             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     467             : };
     468             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     469             : static_assert(0 < 1, "There is no slot for us");
     470             : static const JSJitInfo height_setterinfo = {
     471             :   { (JSJitGetterOp)set_height },
     472             :   { prototypes::id::HTMLAppletElement },
     473             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     474             :   JSJitInfo::Setter,
     475             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     476             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     477             :   false,  /* isInfallible. False in setters. */
     478             :   false,  /* isMovable.  Not relevant for setters. */
     479             :   false, /* isEliminatable.  Not relevant for setters. */
     480             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     481             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     482             :   false,  /* isTypedMethod.  Only relevant for methods. */
     483             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     484             : };
     485             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     486             : static_assert(0 < 1, "There is no slot for us");
     487             : 
     488             : static bool
     489           0 : get_hspace(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
     490             : {
     491           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     492             :       // Return false from the JSNative in order to trigger
     493             :       // an uncatchable exception.
     494           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     495           0 :       return false;
     496             :   }
     497           0 :   uint32_t result(self->Hspace());
     498           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     499           0 :   args.rval().setNumber(result);
     500           0 :   return true;
     501             : }
     502             : 
     503             : static bool
     504           0 : set_hspace(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
     505             : {
     506           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     507             :       // Return false from the JSNative in order to trigger
     508             :       // an uncatchable exception.
     509           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     510           0 :       return false;
     511             :   }
     512             :   uint32_t arg0;
     513           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
     514           0 :     return false;
     515             :   }
     516           0 :   binding_detail::FastErrorResult rv;
     517           0 :   self->SetHspace(arg0, rv);
     518           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     519           0 :     return false;
     520             :   }
     521           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     522             : 
     523           0 :   return true;
     524             : }
     525             : 
     526             : static const JSJitInfo hspace_getterinfo = {
     527             :   { (JSJitGetterOp)get_hspace },
     528             :   { prototypes::id::HTMLAppletElement },
     529             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     530             :   JSJitInfo::Getter,
     531             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     532             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     533             :   true,  /* isInfallible. False in setters. */
     534             :   true,  /* isMovable.  Not relevant for setters. */
     535             :   true, /* isEliminatable.  Not relevant for setters. */
     536             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     537             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     538             :   false,  /* isTypedMethod.  Only relevant for methods. */
     539             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     540             : };
     541             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     542             : static_assert(0 < 1, "There is no slot for us");
     543             : static const JSJitInfo hspace_setterinfo = {
     544             :   { (JSJitGetterOp)set_hspace },
     545             :   { prototypes::id::HTMLAppletElement },
     546             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     547             :   JSJitInfo::Setter,
     548             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     549             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     550             :   false,  /* isInfallible. False in setters. */
     551             :   false,  /* isMovable.  Not relevant for setters. */
     552             :   false, /* isEliminatable.  Not relevant for setters. */
     553             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     554             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     555             :   false,  /* isTypedMethod.  Only relevant for methods. */
     556             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     557             : };
     558             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     559             : static_assert(0 < 1, "There is no slot for us");
     560             : 
     561             : static bool
     562           0 : get_name(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
     563             : {
     564           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     565             :       // Return false from the JSNative in order to trigger
     566             :       // an uncatchable exception.
     567           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     568           0 :       return false;
     569             :   }
     570           0 :   DOMString result;
     571           0 :   self->GetName(result);
     572           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     573           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     574           0 :     return false;
     575             :   }
     576           0 :   return true;
     577             : }
     578             : 
     579             : static bool
     580           0 : set_name(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
     581             : {
     582           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     583             :       // Return false from the JSNative in order to trigger
     584             :       // an uncatchable exception.
     585           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     586           0 :       return false;
     587             :   }
     588           0 :   binding_detail::FakeString arg0;
     589           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     590           0 :     return false;
     591             :   }
     592           0 :   binding_detail::FastErrorResult rv;
     593           0 :   self->SetName(NonNullHelper(Constify(arg0)), rv);
     594           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     595           0 :     return false;
     596             :   }
     597           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     598             : 
     599           0 :   return true;
     600             : }
     601             : 
     602             : static const JSJitInfo name_getterinfo = {
     603             :   { (JSJitGetterOp)get_name },
     604             :   { prototypes::id::HTMLAppletElement },
     605             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     606             :   JSJitInfo::Getter,
     607             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     608             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     609             :   false,  /* isInfallible. False in setters. */
     610             :   true,  /* isMovable.  Not relevant for setters. */
     611             :   true, /* isEliminatable.  Not relevant for setters. */
     612             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     613             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     614             :   false,  /* isTypedMethod.  Only relevant for methods. */
     615             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     616             : };
     617             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     618             : static_assert(0 < 1, "There is no slot for us");
     619             : static const JSJitInfo name_setterinfo = {
     620             :   { (JSJitGetterOp)set_name },
     621             :   { prototypes::id::HTMLAppletElement },
     622             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     623             :   JSJitInfo::Setter,
     624             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     625             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     626             :   false,  /* isInfallible. False in setters. */
     627             :   false,  /* isMovable.  Not relevant for setters. */
     628             :   false, /* isEliminatable.  Not relevant for setters. */
     629             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     630             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     631             :   false,  /* isTypedMethod.  Only relevant for methods. */
     632             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     633             : };
     634             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     635             : static_assert(0 < 1, "There is no slot for us");
     636             : 
     637             : static bool
     638           0 : get_object(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
     639             : {
     640           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     641             :       // Return false from the JSNative in order to trigger
     642             :       // an uncatchable exception.
     643           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     644           0 :       return false;
     645             :   }
     646           0 :   DOMString result;
     647           0 :   self->GetObject(result);
     648           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     649           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     650           0 :     return false;
     651             :   }
     652           0 :   return true;
     653             : }
     654             : 
     655             : static bool
     656           0 : set_object(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
     657             : {
     658           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     659             :       // Return false from the JSNative in order to trigger
     660             :       // an uncatchable exception.
     661           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     662           0 :       return false;
     663             :   }
     664           0 :   binding_detail::FakeString arg0;
     665           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     666           0 :     return false;
     667             :   }
     668           0 :   binding_detail::FastErrorResult rv;
     669           0 :   self->SetObject(NonNullHelper(Constify(arg0)), rv);
     670           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     671           0 :     return false;
     672             :   }
     673           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     674             : 
     675           0 :   return true;
     676             : }
     677             : 
     678             : static const JSJitInfo object_getterinfo = {
     679             :   { (JSJitGetterOp)get_object },
     680             :   { prototypes::id::HTMLAppletElement },
     681             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     682             :   JSJitInfo::Getter,
     683             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     684             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     685             :   false,  /* isInfallible. False in setters. */
     686             :   true,  /* isMovable.  Not relevant for setters. */
     687             :   true, /* isEliminatable.  Not relevant for setters. */
     688             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     689             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     690             :   false,  /* isTypedMethod.  Only relevant for methods. */
     691             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     692             : };
     693             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     694             : static_assert(0 < 1, "There is no slot for us");
     695             : static const JSJitInfo object_setterinfo = {
     696             :   { (JSJitGetterOp)set_object },
     697             :   { prototypes::id::HTMLAppletElement },
     698             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     699             :   JSJitInfo::Setter,
     700             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     701             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     702             :   false,  /* isInfallible. False in setters. */
     703             :   false,  /* isMovable.  Not relevant for setters. */
     704             :   false, /* isEliminatable.  Not relevant for setters. */
     705             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     706             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     707             :   false,  /* isTypedMethod.  Only relevant for methods. */
     708             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     709             : };
     710             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     711             : static_assert(0 < 1, "There is no slot for us");
     712             : 
     713             : static bool
     714           0 : get_vspace(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
     715             : {
     716           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     717             :       // Return false from the JSNative in order to trigger
     718             :       // an uncatchable exception.
     719           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     720           0 :       return false;
     721             :   }
     722           0 :   uint32_t result(self->Vspace());
     723           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     724           0 :   args.rval().setNumber(result);
     725           0 :   return true;
     726             : }
     727             : 
     728             : static bool
     729           0 : set_vspace(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
     730             : {
     731           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     732             :       // Return false from the JSNative in order to trigger
     733             :       // an uncatchable exception.
     734           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     735           0 :       return false;
     736             :   }
     737             :   uint32_t arg0;
     738           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
     739           0 :     return false;
     740             :   }
     741           0 :   binding_detail::FastErrorResult rv;
     742           0 :   self->SetVspace(arg0, rv);
     743           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     744           0 :     return false;
     745             :   }
     746           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     747             : 
     748           0 :   return true;
     749             : }
     750             : 
     751             : static const JSJitInfo vspace_getterinfo = {
     752             :   { (JSJitGetterOp)get_vspace },
     753             :   { prototypes::id::HTMLAppletElement },
     754             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     755             :   JSJitInfo::Getter,
     756             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     757             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     758             :   true,  /* isInfallible. False in setters. */
     759             :   true,  /* isMovable.  Not relevant for setters. */
     760             :   true, /* isEliminatable.  Not relevant for setters. */
     761             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     762             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     763             :   false,  /* isTypedMethod.  Only relevant for methods. */
     764             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     765             : };
     766             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     767             : static_assert(0 < 1, "There is no slot for us");
     768             : static const JSJitInfo vspace_setterinfo = {
     769             :   { (JSJitGetterOp)set_vspace },
     770             :   { prototypes::id::HTMLAppletElement },
     771             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     772             :   JSJitInfo::Setter,
     773             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     774             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     775             :   false,  /* isInfallible. False in setters. */
     776             :   false,  /* isMovable.  Not relevant for setters. */
     777             :   false, /* isEliminatable.  Not relevant for setters. */
     778             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     779             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     780             :   false,  /* isTypedMethod.  Only relevant for methods. */
     781             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     782             : };
     783             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     784             : static_assert(0 < 1, "There is no slot for us");
     785             : 
     786             : static bool
     787           0 : get_width(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
     788             : {
     789           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     790             :       // Return false from the JSNative in order to trigger
     791             :       // an uncatchable exception.
     792           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     793           0 :       return false;
     794             :   }
     795           0 :   DOMString result;
     796           0 :   self->GetWidth(result);
     797           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     798           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     799           0 :     return false;
     800             :   }
     801           0 :   return true;
     802             : }
     803             : 
     804             : static bool
     805           0 : set_width(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
     806             : {
     807           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     808             :       // Return false from the JSNative in order to trigger
     809             :       // an uncatchable exception.
     810           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     811           0 :       return false;
     812             :   }
     813           0 :   binding_detail::FakeString arg0;
     814           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     815           0 :     return false;
     816             :   }
     817           0 :   binding_detail::FastErrorResult rv;
     818           0 :   self->SetWidth(NonNullHelper(Constify(arg0)), rv);
     819           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     820           0 :     return false;
     821             :   }
     822           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     823             : 
     824           0 :   return true;
     825             : }
     826             : 
     827             : static const JSJitInfo width_getterinfo = {
     828             :   { (JSJitGetterOp)get_width },
     829             :   { prototypes::id::HTMLAppletElement },
     830             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     831             :   JSJitInfo::Getter,
     832             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     833             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     834             :   false,  /* isInfallible. False in setters. */
     835             :   true,  /* isMovable.  Not relevant for setters. */
     836             :   true, /* isEliminatable.  Not relevant for setters. */
     837             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     838             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     839             :   false,  /* isTypedMethod.  Only relevant for methods. */
     840             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     841             : };
     842             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     843             : static_assert(0 < 1, "There is no slot for us");
     844             : static const JSJitInfo width_setterinfo = {
     845             :   { (JSJitGetterOp)set_width },
     846             :   { prototypes::id::HTMLAppletElement },
     847             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     848             :   JSJitInfo::Setter,
     849             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     850             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     851             :   false,  /* isInfallible. False in setters. */
     852             :   false,  /* isMovable.  Not relevant for setters. */
     853             :   false, /* isEliminatable.  Not relevant for setters. */
     854             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     855             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     856             :   false,  /* isTypedMethod.  Only relevant for methods. */
     857             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     858             : };
     859             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     860             : static_assert(0 < 1, "There is no slot for us");
     861             : 
     862             : static bool
     863           0 : get_frameLoader(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
     864             : {
     865           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     866             :       // Return false from the JSNative in order to trigger
     867             :       // an uncatchable exception.
     868           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     869           0 :       return false;
     870             :   }
     871           0 :   auto result(StrongOrRawPtr<nsIFrameLoader>(self->GetFrameLoader()));
     872           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     873           0 :   if (!result) {
     874           0 :     args.rval().setNull();
     875           0 :     return true;
     876             :   }
     877           0 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIFrameLoader), args.rval())) {
     878           0 :     return false;
     879             :   }
     880           0 :   return true;
     881             : }
     882             : 
     883             : static const JSJitInfo frameLoader_getterinfo = {
     884             :   { (JSJitGetterOp)get_frameLoader },
     885             :   { prototypes::id::HTMLAppletElement },
     886             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     887             :   JSJitInfo::Getter,
     888             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     889             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     890             :   false,  /* isInfallible. False in setters. */
     891             :   false,  /* isMovable.  Not relevant for setters. */
     892             :   false, /* isEliminatable.  Not relevant for setters. */
     893             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     894             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     895             :   false,  /* isTypedMethod.  Only relevant for methods. */
     896             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     897             : };
     898             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     899             : static_assert(0 < 1, "There is no slot for us");
     900             : 
     901             : static bool
     902           0 : setIsPrerendered(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
     903             : {
     904           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     905             :       // Return false from the JSNative in order to trigger
     906             :       // an uncatchable exception.
     907           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     908           0 :       return false;
     909             :   }
     910           0 :   self->SetIsPrerendered();
     911           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     912           0 :   args.rval().setUndefined();
     913           0 :   return true;
     914             : }
     915             : 
     916             : static const JSJitInfo setIsPrerendered_methodinfo = {
     917             :   { (JSJitGetterOp)setIsPrerendered },
     918             :   { prototypes::id::HTMLAppletElement },
     919             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     920             :   JSJitInfo::Method,
     921             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     922             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     923             :   true,  /* isInfallible. False in setters. */
     924             :   false,  /* isMovable.  Not relevant for setters. */
     925             :   false, /* isEliminatable.  Not relevant for setters. */
     926             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     927             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     928             :   false,  /* isTypedMethod.  Only relevant for methods. */
     929             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     930             : };
     931             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     932             : static_assert(0 < 1, "There is no slot for us");
     933             : 
     934             : static bool
     935           0 : presetOpenerWindow(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
     936             : {
     937           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
     938           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.presetOpenerWindow");
     939             :   }
     940           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
     941             :       // Return false from the JSNative in order to trigger
     942             :       // an uncatchable exception.
     943           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     944           0 :       return false;
     945             :   }
     946             :   nsPIDOMWindowOuter* arg0;
     947           0 :   RefPtr<nsPIDOMWindowOuter> arg0_holder;
     948           0 :   if (args[0].isObject()) {
     949           0 :     JS::Rooted<JSObject*> source(cx, &args[0].toObject());
     950           0 :     if (NS_FAILED(UnwrapArg<nsPIDOMWindowOuter>(cx, source, getter_AddRefs(arg0_holder)))) {
     951           0 :       ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLAppletElement.presetOpenerWindow", "WindowProxy");
     952           0 :       return false;
     953             :     }
     954           0 :     MOZ_ASSERT(arg0_holder);
     955           0 :     arg0 = arg0_holder;
     956           0 :   } else if (args[0].isNullOrUndefined()) {
     957           0 :     arg0 = nullptr;
     958             :   } else {
     959           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLAppletElement.presetOpenerWindow");
     960           0 :     return false;
     961             :   }
     962           0 :   binding_detail::FastErrorResult rv;
     963           0 :   self->PresetOpenerWindow(Constify(arg0), rv);
     964           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     965           0 :     return false;
     966             :   }
     967           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     968           0 :   args.rval().setUndefined();
     969           0 :   return true;
     970             : }
     971             : 
     972             : static const JSJitInfo presetOpenerWindow_methodinfo = {
     973             :   { (JSJitGetterOp)presetOpenerWindow },
     974             :   { prototypes::id::HTMLAppletElement },
     975             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
     976             :   JSJitInfo::Method,
     977             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     978             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     979             :   false,  /* isInfallible. False in setters. */
     980             :   false,  /* isMovable.  Not relevant for setters. */
     981             :   false, /* isEliminatable.  Not relevant for setters. */
     982             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     983             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     984             :   false,  /* isTypedMethod.  Only relevant for methods. */
     985             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     986             : };
     987             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     988             : static_assert(0 < 1, "There is no slot for us");
     989             : 
     990             : static bool
     991           0 : swapFrameLoaders(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
     992             : {
     993           0 :   unsigned argcount = std::min(args.length(), 1u);
     994           0 :   switch (argcount) {
     995             :     case 1: {
     996           0 :       if (args[0].isObject()) {
     997             :         do {
     998           0 :           NonNull<nsXULElement> arg0;
     999             :           {
    1000           0 :             nsresult rv = UnwrapObject<prototypes::id::XULElement, nsXULElement>(args[0], arg0);
    1001           0 :             if (NS_FAILED(rv)) {
    1002           0 :               break;
    1003             :             }
    1004             :           }
    1005           0 :           if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1006             :               // Return false from the JSNative in order to trigger
    1007             :               // an uncatchable exception.
    1008           0 :               MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1009           0 :               return false;
    1010             :           }
    1011           0 :           binding_detail::FastErrorResult rv;
    1012           0 :           self->SwapFrameLoaders(NonNullHelper(arg0), rv);
    1013           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1014           0 :             return false;
    1015             :           }
    1016           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1017           0 :           args.rval().setUndefined();
    1018           0 :           return true;
    1019             :         } while (0);
    1020             :         do {
    1021           0 :           NonNull<mozilla::dom::HTMLIFrameElement> arg0;
    1022             :           {
    1023           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLIFrameElement, mozilla::dom::HTMLIFrameElement>(args[0], arg0);
    1024           0 :             if (NS_FAILED(rv)) {
    1025           0 :               break;
    1026             :             }
    1027             :           }
    1028           0 :           if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1029             :               // Return false from the JSNative in order to trigger
    1030             :               // an uncatchable exception.
    1031           0 :               MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1032           0 :               return false;
    1033             :           }
    1034           0 :           binding_detail::FastErrorResult rv;
    1035           0 :           self->SwapFrameLoaders(NonNullHelper(arg0), rv);
    1036           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1037           0 :             return false;
    1038             :           }
    1039           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1040           0 :           args.rval().setUndefined();
    1041           0 :           return true;
    1042             :         } while (0);
    1043             :       }
    1044           0 :       return ThrowErrorMessage(cx, MSG_OVERLOAD_RESOLUTION_FAILED, "1", "1", "HTMLAppletElement.swapFrameLoaders");
    1045             :       break;
    1046             :     }
    1047             :     default: {
    1048           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.swapFrameLoaders");
    1049             :       break;
    1050             :     }
    1051             :   }
    1052             :   MOZ_CRASH("We have an always-returning default case");
    1053             :   return false;
    1054             : }
    1055             : 
    1056             : static const JSJitInfo swapFrameLoaders_methodinfo = {
    1057             :   { (JSJitGetterOp)swapFrameLoaders },
    1058             :   { prototypes::id::HTMLAppletElement },
    1059             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1060             :   JSJitInfo::Method,
    1061             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1062             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1063             :   false,  /* isInfallible. False in setters. */
    1064             :   false,  /* isMovable.  Not relevant for setters. */
    1065             :   false, /* isEliminatable.  Not relevant for setters. */
    1066             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1067             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1068             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1069             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1070             : };
    1071             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1072             : static_assert(0 < 1, "There is no slot for us");
    1073             : 
    1074             : static bool
    1075           0 : get_loadingEnabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
    1076             : {
    1077           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1078             :       // Return false from the JSNative in order to trigger
    1079             :       // an uncatchable exception.
    1080           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1081           0 :       return false;
    1082             :   }
    1083           0 :   bool result(self->LoadingEnabled());
    1084           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1085           0 :   args.rval().setBoolean(result);
    1086           0 :   return true;
    1087             : }
    1088             : 
    1089             : static bool
    1090           0 : set_loadingEnabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitSetterCallArgs args)
    1091             : {
    1092           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1093             :       // Return false from the JSNative in order to trigger
    1094             :       // an uncatchable exception.
    1095           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1096           0 :       return false;
    1097             :   }
    1098             :   bool arg0;
    1099           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    1100           0 :     return false;
    1101             :   }
    1102           0 :   self->SetLoadingEnabled(arg0);
    1103           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1104             : 
    1105           0 :   return true;
    1106             : }
    1107             : 
    1108             : static const JSJitInfo loadingEnabled_getterinfo = {
    1109             :   { (JSJitGetterOp)get_loadingEnabled },
    1110             :   { prototypes::id::HTMLAppletElement },
    1111             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1112             :   JSJitInfo::Getter,
    1113             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1114             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    1115             :   true,  /* isInfallible. False in setters. */
    1116             :   false,  /* isMovable.  Not relevant for setters. */
    1117             :   false, /* isEliminatable.  Not relevant for setters. */
    1118             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1119             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1120             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1121             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1122             : };
    1123             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1124             : static_assert(0 < 1, "There is no slot for us");
    1125             : static const JSJitInfo loadingEnabled_setterinfo = {
    1126             :   { (JSJitGetterOp)set_loadingEnabled },
    1127             :   { prototypes::id::HTMLAppletElement },
    1128             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1129             :   JSJitInfo::Setter,
    1130             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1131             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1132             :   false,  /* isInfallible. False in setters. */
    1133             :   false,  /* isMovable.  Not relevant for setters. */
    1134             :   false, /* isEliminatable.  Not relevant for setters. */
    1135             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1136             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1137             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1138             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1139             : };
    1140             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1141             : static_assert(0 < 1, "There is no slot for us");
    1142             : 
    1143             : static bool
    1144           0 : get_imageBlockingStatus(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
    1145             : {
    1146           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1147             :       // Return false from the JSNative in order to trigger
    1148             :       // an uncatchable exception.
    1149           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1150           0 :       return false;
    1151             :   }
    1152           0 :   int16_t result(self->ImageBlockingStatus());
    1153           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1154           0 :   args.rval().setInt32(int32_t(result));
    1155           0 :   return true;
    1156             : }
    1157             : 
    1158             : static const JSJitInfo imageBlockingStatus_getterinfo = {
    1159             :   { (JSJitGetterOp)get_imageBlockingStatus },
    1160             :   { prototypes::id::HTMLAppletElement },
    1161             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1162             :   JSJitInfo::Getter,
    1163             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1164             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    1165             :   true,  /* isInfallible. False in setters. */
    1166             :   false,  /* isMovable.  Not relevant for setters. */
    1167             :   false, /* isEliminatable.  Not relevant for setters. */
    1168             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1169             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1170             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1171             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1172             : };
    1173             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1174             : static_assert(0 < 1, "There is no slot for us");
    1175             : 
    1176             : static bool
    1177           0 : addObserver(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
    1178             : {
    1179           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1180           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.addObserver");
    1181             :   }
    1182           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1183             :       // Return false from the JSNative in order to trigger
    1184             :       // an uncatchable exception.
    1185           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1186           0 :       return false;
    1187             :   }
    1188             :   imgINotificationObserver* arg0;
    1189           0 :   RefPtr<imgINotificationObserver> arg0_holder;
    1190           0 :   if (args[0].isObject()) {
    1191           0 :     JS::Rooted<JSObject*> source(cx, &args[0].toObject());
    1192           0 :     if (NS_FAILED(UnwrapArg<imgINotificationObserver>(cx, source, getter_AddRefs(arg0_holder)))) {
    1193           0 :       ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLAppletElement.addObserver", "imgINotificationObserver");
    1194           0 :       return false;
    1195             :     }
    1196           0 :     MOZ_ASSERT(arg0_holder);
    1197           0 :     arg0 = arg0_holder;
    1198             :   } else {
    1199           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLAppletElement.addObserver");
    1200           0 :     return false;
    1201             :   }
    1202           0 :   self->AddObserver(NonNullHelper(arg0));
    1203           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1204           0 :   args.rval().setUndefined();
    1205           0 :   return true;
    1206             : }
    1207             : 
    1208             : static const JSJitInfo addObserver_methodinfo = {
    1209             :   { (JSJitGetterOp)addObserver },
    1210             :   { prototypes::id::HTMLAppletElement },
    1211             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1212             :   JSJitInfo::Method,
    1213             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1214             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1215             :   false,  /* isInfallible. False in setters. */
    1216             :   false,  /* isMovable.  Not relevant for setters. */
    1217             :   false, /* isEliminatable.  Not relevant for setters. */
    1218             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1219             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1220             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1221             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1222             : };
    1223             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1224             : static_assert(0 < 1, "There is no slot for us");
    1225             : 
    1226             : static bool
    1227           0 : removeObserver(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
    1228             : {
    1229           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1230           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.removeObserver");
    1231             :   }
    1232           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1233             :       // Return false from the JSNative in order to trigger
    1234             :       // an uncatchable exception.
    1235           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1236           0 :       return false;
    1237             :   }
    1238             :   imgINotificationObserver* arg0;
    1239           0 :   RefPtr<imgINotificationObserver> arg0_holder;
    1240           0 :   if (args[0].isObject()) {
    1241           0 :     JS::Rooted<JSObject*> source(cx, &args[0].toObject());
    1242           0 :     if (NS_FAILED(UnwrapArg<imgINotificationObserver>(cx, source, getter_AddRefs(arg0_holder)))) {
    1243           0 :       ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLAppletElement.removeObserver", "imgINotificationObserver");
    1244           0 :       return false;
    1245             :     }
    1246           0 :     MOZ_ASSERT(arg0_holder);
    1247           0 :     arg0 = arg0_holder;
    1248             :   } else {
    1249           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLAppletElement.removeObserver");
    1250           0 :     return false;
    1251             :   }
    1252           0 :   self->RemoveObserver(NonNullHelper(arg0));
    1253           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1254           0 :   args.rval().setUndefined();
    1255           0 :   return true;
    1256             : }
    1257             : 
    1258             : static const JSJitInfo removeObserver_methodinfo = {
    1259             :   { (JSJitGetterOp)removeObserver },
    1260             :   { prototypes::id::HTMLAppletElement },
    1261             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1262             :   JSJitInfo::Method,
    1263             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1264             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1265             :   false,  /* isInfallible. False in setters. */
    1266             :   false,  /* isMovable.  Not relevant for setters. */
    1267             :   false, /* isEliminatable.  Not relevant for setters. */
    1268             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1269             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1270             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1271             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1272             : };
    1273             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1274             : static_assert(0 < 1, "There is no slot for us");
    1275             : 
    1276             : static bool
    1277           0 : getRequest(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
    1278             : {
    1279           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1280           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.getRequest");
    1281             :   }
    1282           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1283             :       // Return false from the JSNative in order to trigger
    1284             :       // an uncatchable exception.
    1285           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1286           0 :       return false;
    1287             :   }
    1288             :   int32_t arg0;
    1289           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    1290           0 :     return false;
    1291             :   }
    1292           0 :   binding_detail::FastErrorResult rv;
    1293           0 :   auto result(StrongOrRawPtr<imgIRequest>(self->GetRequest(arg0, rv)));
    1294           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1295           0 :     return false;
    1296             :   }
    1297           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1298           0 :   if (!result) {
    1299           0 :     args.rval().setNull();
    1300           0 :     return true;
    1301             :   }
    1302           0 :   if (!WrapObject(cx, result, &NS_GET_IID(imgIRequest), args.rval())) {
    1303           0 :     return false;
    1304             :   }
    1305           0 :   return true;
    1306             : }
    1307             : 
    1308             : static const JSJitInfo getRequest_methodinfo = {
    1309             :   { (JSJitGetterOp)getRequest },
    1310             :   { prototypes::id::HTMLAppletElement },
    1311             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1312             :   JSJitInfo::Method,
    1313             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1314             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1315             :   false,  /* isInfallible. False in setters. */
    1316             :   false,  /* isMovable.  Not relevant for setters. */
    1317             :   false, /* isEliminatable.  Not relevant for setters. */
    1318             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1319             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1320             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1321             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1322             : };
    1323             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1324             : static_assert(0 < 1, "There is no slot for us");
    1325             : 
    1326             : static bool
    1327           0 : getRequestType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
    1328             : {
    1329           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1330           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.getRequestType");
    1331             :   }
    1332           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1333             :       // Return false from the JSNative in order to trigger
    1334             :       // an uncatchable exception.
    1335           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1336           0 :       return false;
    1337             :   }
    1338             :   imgIRequest* arg0;
    1339           0 :   RefPtr<imgIRequest> arg0_holder;
    1340           0 :   if (args[0].isObject()) {
    1341           0 :     JS::Rooted<JSObject*> source(cx, &args[0].toObject());
    1342           0 :     if (NS_FAILED(UnwrapArg<imgIRequest>(cx, source, getter_AddRefs(arg0_holder)))) {
    1343           0 :       ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLAppletElement.getRequestType", "imgIRequest");
    1344           0 :       return false;
    1345             :     }
    1346           0 :     MOZ_ASSERT(arg0_holder);
    1347           0 :     arg0 = arg0_holder;
    1348             :   } else {
    1349           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLAppletElement.getRequestType");
    1350           0 :     return false;
    1351             :   }
    1352           0 :   binding_detail::FastErrorResult rv;
    1353           0 :   int32_t result(self->GetRequestType(NonNullHelper(arg0), rv));
    1354           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1355           0 :     return false;
    1356             :   }
    1357           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1358           0 :   args.rval().setInt32(int32_t(result));
    1359           0 :   return true;
    1360             : }
    1361             : 
    1362             : static const JSJitInfo getRequestType_methodinfo = {
    1363             :   { (JSJitGetterOp)getRequestType },
    1364             :   { prototypes::id::HTMLAppletElement },
    1365             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1366             :   JSJitInfo::Method,
    1367             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1368             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    1369             :   false,  /* isInfallible. False in setters. */
    1370             :   false,  /* isMovable.  Not relevant for setters. */
    1371             :   false, /* isEliminatable.  Not relevant for setters. */
    1372             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1373             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1374             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1375             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1376             : };
    1377             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1378             : static_assert(0 < 1, "There is no slot for us");
    1379             : 
    1380             : static bool
    1381           0 : get_currentURI(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
    1382             : {
    1383           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1384             :       // Return false from the JSNative in order to trigger
    1385             :       // an uncatchable exception.
    1386           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1387           0 :       return false;
    1388             :   }
    1389           0 :   binding_detail::FastErrorResult rv;
    1390           0 :   auto result(StrongOrRawPtr<nsIURI>(self->GetCurrentURI(rv)));
    1391           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1392           0 :     return false;
    1393             :   }
    1394           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1395           0 :   if (!result) {
    1396           0 :     args.rval().setNull();
    1397           0 :     return true;
    1398             :   }
    1399           0 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIURI), args.rval())) {
    1400           0 :     return false;
    1401             :   }
    1402           0 :   return true;
    1403             : }
    1404             : 
    1405             : static const JSJitInfo currentURI_getterinfo = {
    1406             :   { (JSJitGetterOp)get_currentURI },
    1407             :   { prototypes::id::HTMLAppletElement },
    1408             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1409             :   JSJitInfo::Getter,
    1410             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1411             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1412             :   false,  /* isInfallible. False in setters. */
    1413             :   false,  /* isMovable.  Not relevant for setters. */
    1414             :   false, /* isEliminatable.  Not relevant for setters. */
    1415             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1416             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1417             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1418             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1419             : };
    1420             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1421             : static_assert(0 < 1, "There is no slot for us");
    1422             : 
    1423             : static bool
    1424           0 : forceReload(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
    1425             : {
    1426           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1427             :       // Return false from the JSNative in order to trigger
    1428             :       // an uncatchable exception.
    1429           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1430           0 :       return false;
    1431             :   }
    1432           0 :   Optional<bool> arg0;
    1433           0 :   if (args.hasDefined(0)) {
    1434           0 :     arg0.Construct();
    1435           0 :     if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.Value())) {
    1436           0 :       return false;
    1437             :     }
    1438             :   }
    1439           0 :   binding_detail::FastErrorResult rv;
    1440           0 :   self->ForceReload(Constify(arg0), rv);
    1441           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1442           0 :     return false;
    1443             :   }
    1444           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1445           0 :   args.rval().setUndefined();
    1446           0 :   return true;
    1447             : }
    1448             : 
    1449             : static const JSJitInfo forceReload_methodinfo = {
    1450             :   { (JSJitGetterOp)forceReload },
    1451             :   { prototypes::id::HTMLAppletElement },
    1452             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1453             :   JSJitInfo::Method,
    1454             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1455             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1456             :   false,  /* isInfallible. False in setters. */
    1457             :   false,  /* isMovable.  Not relevant for setters. */
    1458             :   false, /* isEliminatable.  Not relevant for setters. */
    1459             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1460             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1461             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1462             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1463             : };
    1464             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1465             : static_assert(0 < 1, "There is no slot for us");
    1466             : 
    1467             : static bool
    1468           0 : forceImageState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
    1469             : {
    1470           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    1471           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.forceImageState");
    1472             :   }
    1473           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1474             :       // Return false from the JSNative in order to trigger
    1475             :       // an uncatchable exception.
    1476           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1477           0 :       return false;
    1478             :   }
    1479             :   bool arg0;
    1480           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    1481           0 :     return false;
    1482             :   }
    1483             :   uint64_t arg1;
    1484           0 :   if (!ValueToPrimitive<uint64_t, eDefault>(cx, args[1], &arg1)) {
    1485           0 :     return false;
    1486             :   }
    1487           0 :   self->ForceImageState(arg0, arg1);
    1488           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1489           0 :   args.rval().setUndefined();
    1490           0 :   return true;
    1491             : }
    1492             : 
    1493             : static const JSJitInfo forceImageState_methodinfo = {
    1494             :   { (JSJitGetterOp)forceImageState },
    1495             :   { prototypes::id::HTMLAppletElement },
    1496             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1497             :   JSJitInfo::Method,
    1498             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1499             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1500             :   false,  /* isInfallible. False in setters. */
    1501             :   false,  /* isMovable.  Not relevant for setters. */
    1502             :   false, /* isEliminatable.  Not relevant for setters. */
    1503             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1504             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1505             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1506             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1507             : };
    1508             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1509             : static_assert(0 < 1, "There is no slot for us");
    1510             : 
    1511             : static bool
    1512           0 : get_actualType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
    1513             : {
    1514           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1515             :       // Return false from the JSNative in order to trigger
    1516             :       // an uncatchable exception.
    1517           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1518           0 :       return false;
    1519             :   }
    1520           0 :   DOMString result;
    1521           0 :   self->GetActualType(result);
    1522           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1523           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1524           0 :     return false;
    1525             :   }
    1526           0 :   return true;
    1527             : }
    1528             : 
    1529             : static const JSJitInfo actualType_getterinfo = {
    1530             :   { (JSJitGetterOp)get_actualType },
    1531             :   { prototypes::id::HTMLAppletElement },
    1532             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1533             :   JSJitInfo::Getter,
    1534             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1535             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1536             :   false,  /* isInfallible. False in setters. */
    1537             :   false,  /* isMovable.  Not relevant for setters. */
    1538             :   false, /* isEliminatable.  Not relevant for setters. */
    1539             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1540             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1541             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1542             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1543             : };
    1544             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1545             : static_assert(0 < 1, "There is no slot for us");
    1546             : 
    1547             : static bool
    1548           0 : get_displayedType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
    1549             : {
    1550           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1551             :       // Return false from the JSNative in order to trigger
    1552             :       // an uncatchable exception.
    1553           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1554           0 :       return false;
    1555             :   }
    1556           0 :   uint32_t result(self->DisplayedType());
    1557           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1558           0 :   args.rval().setNumber(result);
    1559           0 :   return true;
    1560             : }
    1561             : 
    1562             : static const JSJitInfo displayedType_getterinfo = {
    1563             :   { (JSJitGetterOp)get_displayedType },
    1564             :   { prototypes::id::HTMLAppletElement },
    1565             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1566             :   JSJitInfo::Getter,
    1567             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1568             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    1569             :   true,  /* isInfallible. False in setters. */
    1570             :   false,  /* isMovable.  Not relevant for setters. */
    1571             :   false, /* isEliminatable.  Not relevant for setters. */
    1572             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1573             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1574             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1575             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1576             : };
    1577             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1578             : static_assert(0 < 1, "There is no slot for us");
    1579             : 
    1580             : static bool
    1581           0 : getContentTypeForMIMEType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
    1582             : {
    1583           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1584           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.getContentTypeForMIMEType");
    1585             :   }
    1586           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1587             :       // Return false from the JSNative in order to trigger
    1588             :       // an uncatchable exception.
    1589           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1590           0 :       return false;
    1591             :   }
    1592           0 :   binding_detail::FakeString arg0;
    1593           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1594           0 :     return false;
    1595             :   }
    1596           0 :   uint32_t result(self->GetContentTypeForMIMEType(NonNullHelper(Constify(arg0))));
    1597           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1598           0 :   args.rval().setNumber(result);
    1599           0 :   return true;
    1600             : }
    1601             : 
    1602             : static const JSJitInfo getContentTypeForMIMEType_methodinfo = {
    1603             :   { (JSJitGetterOp)getContentTypeForMIMEType },
    1604             :   { prototypes::id::HTMLAppletElement },
    1605             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1606             :   JSJitInfo::Method,
    1607             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1608             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    1609             :   false,  /* isInfallible. False in setters. */
    1610             :   false,  /* isMovable.  Not relevant for setters. */
    1611             :   false, /* isEliminatable.  Not relevant for setters. */
    1612             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1613             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1614             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1615             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1616             : };
    1617             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1618             : static_assert(0 < 1, "There is no slot for us");
    1619             : 
    1620             : static bool
    1621           0 : getPluginAttributes(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
    1622             : {
    1623           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1624             :       // Return false from the JSNative in order to trigger
    1625             :       // an uncatchable exception.
    1626           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1627           0 :       return false;
    1628             :   }
    1629           0 :   nsTArray<MozPluginParameter> result;
    1630           0 :   self->GetPluginAttributes(result);
    1631           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1632             : 
    1633           0 :   uint32_t length = result.Length();
    1634           0 :   JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
    1635           0 :   if (!returnArray) {
    1636           0 :     return false;
    1637             :   }
    1638             :   // Scope for 'tmp'
    1639             :   {
    1640           0 :     JS::Rooted<JS::Value> tmp(cx);
    1641           0 :     for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
    1642             :       // Control block to let us common up the JS_DefineElement calls when there
    1643             :       // are different ways to succeed at wrapping the object.
    1644             :       do {
    1645           0 :         if (!result[sequenceIdx0].ToObjectInternal(cx, &tmp)) {
    1646           0 :           return false;
    1647             :         }
    1648           0 :         break;
    1649             :       } while (0);
    1650           0 :       if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
    1651             :                             JSPROP_ENUMERATE)) {
    1652           0 :         return false;
    1653             :       }
    1654             :     }
    1655             :   }
    1656           0 :   args.rval().setObject(*returnArray);
    1657           0 :   return true;
    1658             : }
    1659             : 
    1660             : static const JSJitInfo getPluginAttributes_methodinfo = {
    1661             :   { (JSJitGetterOp)getPluginAttributes },
    1662             :   { prototypes::id::HTMLAppletElement },
    1663             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1664             :   JSJitInfo::Method,
    1665             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1666             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1667             :   false,  /* isInfallible. False in setters. */
    1668             :   false,  /* isMovable.  Not relevant for setters. */
    1669             :   false, /* isEliminatable.  Not relevant for setters. */
    1670             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1671             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1672             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1673             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1674             : };
    1675             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1676             : static_assert(0 < 1, "There is no slot for us");
    1677             : 
    1678             : static bool
    1679           0 : getPluginParameters(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
    1680             : {
    1681           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1682             :       // Return false from the JSNative in order to trigger
    1683             :       // an uncatchable exception.
    1684           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1685           0 :       return false;
    1686             :   }
    1687           0 :   nsTArray<MozPluginParameter> result;
    1688           0 :   self->GetPluginParameters(result);
    1689           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1690             : 
    1691           0 :   uint32_t length = result.Length();
    1692           0 :   JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
    1693           0 :   if (!returnArray) {
    1694           0 :     return false;
    1695             :   }
    1696             :   // Scope for 'tmp'
    1697             :   {
    1698           0 :     JS::Rooted<JS::Value> tmp(cx);
    1699           0 :     for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
    1700             :       // Control block to let us common up the JS_DefineElement calls when there
    1701             :       // are different ways to succeed at wrapping the object.
    1702             :       do {
    1703           0 :         if (!result[sequenceIdx0].ToObjectInternal(cx, &tmp)) {
    1704           0 :           return false;
    1705             :         }
    1706           0 :         break;
    1707             :       } while (0);
    1708           0 :       if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
    1709             :                             JSPROP_ENUMERATE)) {
    1710           0 :         return false;
    1711             :       }
    1712             :     }
    1713             :   }
    1714           0 :   args.rval().setObject(*returnArray);
    1715           0 :   return true;
    1716             : }
    1717             : 
    1718             : static const JSJitInfo getPluginParameters_methodinfo = {
    1719             :   { (JSJitGetterOp)getPluginParameters },
    1720             :   { prototypes::id::HTMLAppletElement },
    1721             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1722             :   JSJitInfo::Method,
    1723             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1724             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1725             :   false,  /* isInfallible. False in setters. */
    1726             :   false,  /* isMovable.  Not relevant for setters. */
    1727             :   false, /* isEliminatable.  Not relevant for setters. */
    1728             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1729             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1730             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1731             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1732             : };
    1733             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1734             : static_assert(0 < 1, "There is no slot for us");
    1735             : 
    1736             : static bool
    1737           0 : playPlugin(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
    1738             : {
    1739           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1740             :       // Return false from the JSNative in order to trigger
    1741             :       // an uncatchable exception.
    1742           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1743           0 :       return false;
    1744             :   }
    1745           0 :   binding_detail::FastErrorResult rv;
    1746           0 :   self->PlayPlugin(SystemCallerGuarantee(), rv);
    1747           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1748           0 :     return false;
    1749             :   }
    1750           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1751           0 :   args.rval().setUndefined();
    1752           0 :   return true;
    1753             : }
    1754             : 
    1755             : static const JSJitInfo playPlugin_methodinfo = {
    1756             :   { (JSJitGetterOp)playPlugin },
    1757             :   { prototypes::id::HTMLAppletElement },
    1758             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1759             :   JSJitInfo::Method,
    1760             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1761             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1762             :   false,  /* isInfallible. False in setters. */
    1763             :   false,  /* isMovable.  Not relevant for setters. */
    1764             :   false, /* isEliminatable.  Not relevant for setters. */
    1765             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1766             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1767             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1768             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1769             : };
    1770             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1771             : static_assert(0 < 1, "There is no slot for us");
    1772             : 
    1773             : static bool
    1774           0 : reload(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
    1775             : {
    1776           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1777           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLAppletElement.reload");
    1778             :   }
    1779           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1780             :       // Return false from the JSNative in order to trigger
    1781             :       // an uncatchable exception.
    1782           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1783           0 :       return false;
    1784             :   }
    1785             :   bool arg0;
    1786           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    1787           0 :     return false;
    1788             :   }
    1789           0 :   binding_detail::FastErrorResult rv;
    1790           0 :   self->Reload(arg0, rv);
    1791           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1792           0 :     return false;
    1793             :   }
    1794           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1795           0 :   args.rval().setUndefined();
    1796           0 :   return true;
    1797             : }
    1798             : 
    1799             : static const JSJitInfo reload_methodinfo = {
    1800             :   { (JSJitGetterOp)reload },
    1801             :   { prototypes::id::HTMLAppletElement },
    1802             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1803             :   JSJitInfo::Method,
    1804             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1805             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1806             :   false,  /* isInfallible. False in setters. */
    1807             :   false,  /* isMovable.  Not relevant for setters. */
    1808             :   false, /* isEliminatable.  Not relevant for setters. */
    1809             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1810             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1811             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1812             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1813             : };
    1814             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1815             : static_assert(0 < 1, "There is no slot for us");
    1816             : 
    1817             : static bool
    1818           0 : get_activated(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
    1819             : {
    1820           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1821             :       // Return false from the JSNative in order to trigger
    1822             :       // an uncatchable exception.
    1823           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1824           0 :       return false;
    1825             :   }
    1826           0 :   bool result(self->Activated());
    1827           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1828           0 :   args.rval().setBoolean(result);
    1829           0 :   return true;
    1830             : }
    1831             : 
    1832             : static const JSJitInfo activated_getterinfo = {
    1833             :   { (JSJitGetterOp)get_activated },
    1834             :   { prototypes::id::HTMLAppletElement },
    1835             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1836             :   JSJitInfo::Getter,
    1837             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1838             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    1839             :   true,  /* isInfallible. False in setters. */
    1840             :   false,  /* isMovable.  Not relevant for setters. */
    1841             :   false, /* isEliminatable.  Not relevant for setters. */
    1842             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1843             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1844             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1845             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1846             : };
    1847             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1848             : static_assert(0 < 1, "There is no slot for us");
    1849             : 
    1850             : static bool
    1851           0 : get_srcURI(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
    1852             : {
    1853           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1854             :       // Return false from the JSNative in order to trigger
    1855             :       // an uncatchable exception.
    1856           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1857           0 :       return false;
    1858             :   }
    1859           0 :   auto result(StrongOrRawPtr<nsIURI>(self->GetSrcURI()));
    1860           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1861           0 :   if (!result) {
    1862           0 :     args.rval().setNull();
    1863           0 :     return true;
    1864             :   }
    1865           0 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIURI), args.rval())) {
    1866           0 :     return false;
    1867             :   }
    1868           0 :   return true;
    1869             : }
    1870             : 
    1871             : static const JSJitInfo srcURI_getterinfo = {
    1872             :   { (JSJitGetterOp)get_srcURI },
    1873             :   { prototypes::id::HTMLAppletElement },
    1874             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1875             :   JSJitInfo::Getter,
    1876             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1877             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1878             :   false,  /* isInfallible. False in setters. */
    1879             :   false,  /* isMovable.  Not relevant for setters. */
    1880             :   false, /* isEliminatable.  Not relevant for setters. */
    1881             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1882             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1883             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1884             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1885             : };
    1886             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1887             : static_assert(0 < 1, "There is no slot for us");
    1888             : 
    1889             : static bool
    1890           0 : get_defaultFallbackType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
    1891             : {
    1892           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1893             :       // Return false from the JSNative in order to trigger
    1894             :       // an uncatchable exception.
    1895           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1896           0 :       return false;
    1897             :   }
    1898           0 :   uint32_t result(self->DefaultFallbackType());
    1899           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1900           0 :   args.rval().setNumber(result);
    1901           0 :   return true;
    1902             : }
    1903             : 
    1904             : static const JSJitInfo defaultFallbackType_getterinfo = {
    1905             :   { (JSJitGetterOp)get_defaultFallbackType },
    1906             :   { prototypes::id::HTMLAppletElement },
    1907             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1908             :   JSJitInfo::Getter,
    1909             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1910             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    1911             :   true,  /* isInfallible. False in setters. */
    1912             :   false,  /* isMovable.  Not relevant for setters. */
    1913             :   false, /* isEliminatable.  Not relevant for setters. */
    1914             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1915             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1916             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1917             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1918             : };
    1919             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1920             : static_assert(0 < 1, "There is no slot for us");
    1921             : 
    1922             : static bool
    1923           0 : get_pluginFallbackType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
    1924             : {
    1925           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1926             :       // Return false from the JSNative in order to trigger
    1927             :       // an uncatchable exception.
    1928           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1929           0 :       return false;
    1930             :   }
    1931           0 :   uint32_t result(self->PluginFallbackType());
    1932           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1933           0 :   args.rval().setNumber(result);
    1934           0 :   return true;
    1935             : }
    1936             : 
    1937             : static const JSJitInfo pluginFallbackType_getterinfo = {
    1938             :   { (JSJitGetterOp)get_pluginFallbackType },
    1939             :   { prototypes::id::HTMLAppletElement },
    1940             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1941             :   JSJitInfo::Getter,
    1942             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1943             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    1944             :   true,  /* isInfallible. False in setters. */
    1945             :   false,  /* isMovable.  Not relevant for setters. */
    1946             :   false, /* isEliminatable.  Not relevant for setters. */
    1947             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1948             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1949             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1950             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1951             : };
    1952             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1953             : static_assert(0 < 1, "There is no slot for us");
    1954             : 
    1955             : static bool
    1956           0 : get_hasRunningPlugin(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
    1957             : {
    1958           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1959             :       // Return false from the JSNative in order to trigger
    1960             :       // an uncatchable exception.
    1961           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1962           0 :       return false;
    1963             :   }
    1964           0 :   bool result(self->HasRunningPlugin());
    1965           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1966           0 :   args.rval().setBoolean(result);
    1967           0 :   return true;
    1968             : }
    1969             : 
    1970             : static const JSJitInfo hasRunningPlugin_getterinfo = {
    1971             :   { (JSJitGetterOp)get_hasRunningPlugin },
    1972             :   { prototypes::id::HTMLAppletElement },
    1973             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    1974             :   JSJitInfo::Getter,
    1975             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1976             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    1977             :   true,  /* isInfallible. False in setters. */
    1978             :   false,  /* isMovable.  Not relevant for setters. */
    1979             :   false, /* isEliminatable.  Not relevant for setters. */
    1980             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1981             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1982             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1983             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1984             : };
    1985             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1986             : static_assert(0 < 1, "There is no slot for us");
    1987             : 
    1988             : static bool
    1989           0 : skipFakePlugins(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, const JSJitMethodCallArgs& args)
    1990             : {
    1991           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1992             :       // Return false from the JSNative in order to trigger
    1993             :       // an uncatchable exception.
    1994           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1995           0 :       return false;
    1996             :   }
    1997           0 :   binding_detail::FastErrorResult rv;
    1998           0 :   self->SkipFakePlugins(rv);
    1999           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2000           0 :     return false;
    2001             :   }
    2002           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2003           0 :   args.rval().setUndefined();
    2004           0 :   return true;
    2005             : }
    2006             : 
    2007             : static const JSJitInfo skipFakePlugins_methodinfo = {
    2008             :   { (JSJitGetterOp)skipFakePlugins },
    2009             :   { prototypes::id::HTMLAppletElement },
    2010             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    2011             :   JSJitInfo::Method,
    2012             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2013             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2014             :   false,  /* isInfallible. False in setters. */
    2015             :   false,  /* isMovable.  Not relevant for setters. */
    2016             :   false, /* isEliminatable.  Not relevant for setters. */
    2017             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2018             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2019             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2020             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2021             : };
    2022             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2023             : static_assert(0 < 1, "There is no slot for us");
    2024             : 
    2025             : static bool
    2026           0 : get_runID(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLSharedObjectElement* self, JSJitGetterCallArgs args)
    2027             : {
    2028           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    2029             :       // Return false from the JSNative in order to trigger
    2030             :       // an uncatchable exception.
    2031           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2032           0 :       return false;
    2033             :   }
    2034           0 :   binding_detail::FastErrorResult rv;
    2035           0 :   uint32_t result(self->GetRunID(SystemCallerGuarantee(), rv));
    2036           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2037           0 :     return false;
    2038             :   }
    2039           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2040           0 :   args.rval().setNumber(result);
    2041           0 :   return true;
    2042             : }
    2043             : 
    2044             : static const JSJitInfo runID_getterinfo = {
    2045             :   { (JSJitGetterOp)get_runID },
    2046             :   { prototypes::id::HTMLAppletElement },
    2047             :   { PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth },
    2048             :   JSJitInfo::Getter,
    2049             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2050             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2051             :   false,  /* isInfallible. False in setters. */
    2052             :   false,  /* isMovable.  Not relevant for setters. */
    2053             :   false, /* isEliminatable.  Not relevant for setters. */
    2054             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2055             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2056             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2057             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2058             : };
    2059             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2060             : static_assert(0 < 1, "There is no slot for us");
    2061             : 
    2062             : static bool
    2063           0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
    2064             : {
    2065           0 :   mozilla::dom::HTMLSharedObjectElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLSharedObjectElement>(obj);
    2066             :   // We don't want to preserve if we don't have a wrapper, and we
    2067             :   // obviously can't preserve if we're not initialized.
    2068           0 :   if (self && self->GetWrapperPreserveColor()) {
    2069           0 :     PreserveWrapper(self);
    2070             :   }
    2071           0 :   return true;
    2072             : }
    2073             : 
    2074             : static void
    2075           0 : _finalize(js::FreeOp* fop, JSObject* obj)
    2076             : {
    2077           0 :   mozilla::dom::HTMLSharedObjectElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLSharedObjectElement>(obj);
    2078           0 :   if (self) {
    2079           0 :     ClearWrapper(self, self, obj);
    2080           0 :     AddForDeferredFinalization<mozilla::dom::HTMLSharedObjectElement>(self);
    2081             :   }
    2082           0 : }
    2083             : 
    2084             : static void
    2085           0 : _objectMoved(JSObject* obj, const JSObject* old)
    2086             : {
    2087           0 :   mozilla::dom::HTMLSharedObjectElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLSharedObjectElement>(obj);
    2088           0 :   if (self) {
    2089           0 :     UpdateWrapper(self, self, obj, old);
    2090             :   }
    2091           0 : }
    2092             : 
    2093             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    2094             : #if defined(__clang__)
    2095             : #pragma clang diagnostic push
    2096             : #pragma clang diagnostic ignored "-Wmissing-braces"
    2097             : #endif
    2098             : static const JSFunctionSpec sChromeMethods_specs[] = {
    2099             :   JS_FNSPEC("setIsPrerendered", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setIsPrerendered_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    2100             :   JS_FNSPEC("presetOpenerWindow", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&presetOpenerWindow_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    2101             :   JS_FNSPEC("swapFrameLoaders", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&swapFrameLoaders_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    2102             :   JS_FNSPEC("addObserver", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&addObserver_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    2103             :   JS_FNSPEC("removeObserver", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&removeObserver_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    2104             :   JS_FNSPEC("getRequest", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getRequest_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    2105             :   JS_FNSPEC("getRequestType", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getRequestType_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    2106             :   JS_FNSPEC("forceReload", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&forceReload_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    2107             :   JS_FNSPEC("forceImageState", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&forceImageState_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
    2108             :   JS_FNSPEC("getContentTypeForMIMEType", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getContentTypeForMIMEType_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    2109             :   JS_FNSPEC("getPluginAttributes", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getPluginAttributes_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    2110             :   JS_FNSPEC("getPluginParameters", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getPluginParameters_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    2111             :   JS_FNSPEC("playPlugin", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&playPlugin_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    2112             :   JS_FNSPEC("reload", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&reload_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    2113             :   JS_FNSPEC("skipFakePlugins", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&skipFakePlugins_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    2114             :   JS_FS_END
    2115             : };
    2116             : #if defined(__clang__)
    2117             : #pragma clang diagnostic pop
    2118             : #endif
    2119             : 
    2120             : 
    2121             : // Can't be const because the pref-enabled boolean needs to be writable
    2122             : static Prefable<const JSFunctionSpec> sChromeMethods[] = {
    2123             :   { nullptr, &sChromeMethods_specs[0] },
    2124             :   { nullptr, nullptr }
    2125             : };
    2126             : 
    2127             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    2128             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    2129             : static_assert(15 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    2130             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    2131             : 
    2132             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    2133             : #if defined(__clang__)
    2134             : #pragma clang diagnostic push
    2135             : #pragma clang diagnostic ignored "-Wmissing-braces"
    2136             : #endif
    2137             : static const JSPropertySpec sAttributes_specs[] = {
    2138             :   { "align", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &align_getterinfo, GenericBindingSetter, &align_setterinfo },
    2139             :   { "alt", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &alt_getterinfo, GenericBindingSetter, &alt_setterinfo },
    2140             :   { "archive", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &archive_getterinfo, GenericBindingSetter, &archive_setterinfo },
    2141             :   { "code", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &code_getterinfo, GenericBindingSetter, &code_setterinfo },
    2142             :   { "codeBase", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &codeBase_getterinfo, GenericBindingSetter, &codeBase_setterinfo },
    2143             :   { "height", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &height_getterinfo, GenericBindingSetter, &height_setterinfo },
    2144             :   { "hspace", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &hspace_getterinfo, GenericBindingSetter, &hspace_setterinfo },
    2145             :   { "name", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &name_getterinfo, GenericBindingSetter, &name_setterinfo },
    2146             :   { "object", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &object_getterinfo, GenericBindingSetter, &object_setterinfo },
    2147             :   { "vspace", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &vspace_getterinfo, GenericBindingSetter, &vspace_setterinfo },
    2148             :   { "width", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &width_getterinfo, GenericBindingSetter, &width_setterinfo },
    2149             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
    2150             : };
    2151             : #if defined(__clang__)
    2152             : #pragma clang diagnostic pop
    2153             : #endif
    2154             : 
    2155             : 
    2156             : // Can't be const because the pref-enabled boolean needs to be writable
    2157             : static Prefable<const JSPropertySpec> sAttributes[] = {
    2158             :   { nullptr, &sAttributes_specs[0] },
    2159             :   { nullptr, nullptr }
    2160             : };
    2161             : 
    2162             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    2163             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    2164             : static_assert(11 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    2165             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    2166             : 
    2167             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    2168             : #if defined(__clang__)
    2169             : #pragma clang diagnostic push
    2170             : #pragma clang diagnostic ignored "-Wmissing-braces"
    2171             : #endif
    2172             : static const JSPropertySpec sChromeAttributes_specs[] = {
    2173             :   { "frameLoader", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &frameLoader_getterinfo, nullptr, nullptr },
    2174             :   { "loadingEnabled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &loadingEnabled_getterinfo, GenericBindingSetter, &loadingEnabled_setterinfo },
    2175             :   { "imageBlockingStatus", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &imageBlockingStatus_getterinfo, nullptr, nullptr },
    2176             :   { "currentURI", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &currentURI_getterinfo, nullptr, nullptr },
    2177             :   { "actualType", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &actualType_getterinfo, nullptr, nullptr },
    2178             :   { "displayedType", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &displayedType_getterinfo, nullptr, nullptr },
    2179             :   { "activated", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &activated_getterinfo, nullptr, nullptr },
    2180             :   { "srcURI", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &srcURI_getterinfo, nullptr, nullptr },
    2181             :   { "defaultFallbackType", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &defaultFallbackType_getterinfo, nullptr, nullptr },
    2182             :   { "pluginFallbackType", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &pluginFallbackType_getterinfo, nullptr, nullptr },
    2183             :   { "hasRunningPlugin", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &hasRunningPlugin_getterinfo, nullptr, nullptr },
    2184             :   { "runID", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &runID_getterinfo, nullptr, nullptr },
    2185             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
    2186             : };
    2187             : #if defined(__clang__)
    2188             : #pragma clang diagnostic pop
    2189             : #endif
    2190             : 
    2191             : 
    2192             : // Can't be const because the pref-enabled boolean needs to be writable
    2193             : static Prefable<const JSPropertySpec> sChromeAttributes[] = {
    2194             :   { nullptr, &sChromeAttributes_specs[0] },
    2195             :   { nullptr, nullptr }
    2196             : };
    2197             : 
    2198             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    2199             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    2200             : static_assert(12 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    2201             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    2202             : 
    2203             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    2204             : #if defined(__clang__)
    2205             : #pragma clang diagnostic push
    2206             : #pragma clang diagnostic ignored "-Wmissing-braces"
    2207             : #endif
    2208             : static const ConstantSpec sChromeConstants_specs[] = {
    2209             :   { "UNKNOWN_REQUEST", JS::Int32Value(-1) },
    2210             :   { "CURRENT_REQUEST", JS::Int32Value(0) },
    2211             :   { "PENDING_REQUEST", JS::Int32Value(1) },
    2212             :   { "TYPE_LOADING", JS::NumberValue(0U) },
    2213             :   { "TYPE_IMAGE", JS::NumberValue(1U) },
    2214             :   { "TYPE_PLUGIN", JS::NumberValue(2U) },
    2215             :   { "TYPE_FAKE_PLUGIN", JS::NumberValue(3U) },
    2216             :   { "TYPE_DOCUMENT", JS::NumberValue(4U) },
    2217             :   { "TYPE_NULL", JS::NumberValue(5U) },
    2218             :   { "PLUGIN_UNSUPPORTED", JS::NumberValue(0U) },
    2219             :   { "PLUGIN_ALTERNATE", JS::NumberValue(1U) },
    2220             :   { "PLUGIN_DISABLED", JS::NumberValue(2U) },
    2221             :   { "PLUGIN_BLOCKLISTED", JS::NumberValue(3U) },
    2222             :   { "PLUGIN_OUTDATED", JS::NumberValue(4U) },
    2223             :   { "PLUGIN_CRASHED", JS::NumberValue(5U) },
    2224             :   { "PLUGIN_SUPPRESSED", JS::NumberValue(6U) },
    2225             :   { "PLUGIN_USER_DISABLED", JS::NumberValue(7U) },
    2226             :   { "PLUGIN_CLICK_TO_PLAY", JS::NumberValue(8U) },
    2227             :   { "PLUGIN_VULNERABLE_UPDATABLE", JS::NumberValue(9U) },
    2228             :   { "PLUGIN_VULNERABLE_NO_UPDATE", JS::NumberValue(10U) },
    2229             :   { 0, JS::UndefinedValue() }
    2230             : };
    2231             : #if defined(__clang__)
    2232             : #pragma clang diagnostic pop
    2233             : #endif
    2234             : 
    2235             : 
    2236             : // Can't be const because the pref-enabled boolean needs to be writable
    2237             : static Prefable<const ConstantSpec> sChromeConstants[] = {
    2238             :   { nullptr, &sChromeConstants_specs[0] },
    2239             :   { nullptr, nullptr }
    2240             : };
    2241             : 
    2242             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    2243             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    2244             : static_assert(20 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    2245             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    2246             : 
    2247             : 
    2248             : static uint16_t sNativeProperties_sortedPropertyIndices[11];
    2249             : static PropertyInfo sNativeProperties_propertyInfos[11];
    2250             : 
    2251             : static const NativePropertiesN<1> sNativeProperties = {
    2252             :   false, 0,
    2253             :   false, 0,
    2254             :   false, 0,
    2255             :   true,  0 /* sAttributes */,
    2256             :   false, 0,
    2257             :   false, 0,
    2258             :   false, 0,
    2259             :   -1,
    2260             :   11,
    2261             :   sNativeProperties_sortedPropertyIndices,
    2262             :   {
    2263             :     { sAttributes, &sNativeProperties_propertyInfos[0] }
    2264             :   }
    2265             : };
    2266             : static_assert(11 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
    2267             :     "We have a property info count that is oversized");
    2268             : 
    2269             : static uint16_t sChromeOnlyNativeProperties_sortedPropertyIndices[47];
    2270             : static PropertyInfo sChromeOnlyNativeProperties_propertyInfos[47];
    2271             : 
    2272             : static const NativePropertiesN<3> sChromeOnlyNativeProperties = {
    2273             :   false, 0,
    2274             :   false, 0,
    2275             :   true,  0 /* sChromeMethods */,
    2276             :   true,  1 /* sChromeAttributes */,
    2277             :   false, 0,
    2278             :   false, 0,
    2279             :   true,  2 /* sChromeConstants */,
    2280             :   -1,
    2281             :   47,
    2282             :   sChromeOnlyNativeProperties_sortedPropertyIndices,
    2283             :   {
    2284             :     { sChromeMethods, &sChromeOnlyNativeProperties_propertyInfos[0] },
    2285             :     { sChromeAttributes, &sChromeOnlyNativeProperties_propertyInfos[15] },
    2286             :     { sChromeConstants, &sChromeOnlyNativeProperties_propertyInfos[27] }
    2287             :   }
    2288             : };
    2289             : static_assert(47 < 1ull << CHAR_BIT * sizeof(sChromeOnlyNativeProperties.propertyInfoCount),
    2290             :     "We have a property info count that is oversized");
    2291             : 
    2292             : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
    2293             :   {
    2294             :     "Function",
    2295             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
    2296             :     &sBoringInterfaceObjectClassClassOps,
    2297             :     JS_NULL_CLASS_SPEC,
    2298             :     JS_NULL_CLASS_EXT,
    2299             :     &sInterfaceObjectClassObjectOps
    2300             :   },
    2301             :   eInterface,
    2302             :   true,
    2303             :   prototypes::id::HTMLAppletElement,
    2304             :   PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth,
    2305             :   sNativePropertyHooks,
    2306             :   "function HTMLAppletElement() {\n    [native code]\n}",
    2307             :   HTMLElementBinding::GetConstructorObject
    2308             : };
    2309             : 
    2310             : static bool
    2311           0 : _resolve(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, bool* resolvedp)
    2312             : {
    2313           0 :   mozilla::dom::HTMLSharedObjectElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLSharedObjectElement>(obj);
    2314           0 :   JS::Rooted<JS::PropertyDescriptor> desc(cx);
    2315           0 :   if (!self->DoResolve(cx, obj, id, &desc)) {
    2316           0 :     return false;
    2317             :   }
    2318           0 :   if (!desc.object()) {
    2319           0 :     return true;
    2320             :   }
    2321             :   // If desc.value() is undefined, then the DoResolve call
    2322             :   // has already defined it on the object.  Don't try to also
    2323             :   // define it.
    2324           0 :   if (!desc.value().isUndefined()) {
    2325           0 :     desc.attributesRef() |= JSPROP_RESOLVING;
    2326           0 :     if (!JS_DefinePropertyById(cx, obj, id, desc)) {
    2327           0 :       return false;
    2328             :     }
    2329             :   }
    2330           0 :   *resolvedp = true;
    2331           0 :   return true;
    2332             : }
    2333             : 
    2334             : static bool
    2335           0 : _mayResolve(const JSAtomState& names, jsid id, JSObject* maybeObj)
    2336             : {
    2337           0 :   return mozilla::dom::HTMLSharedObjectElement::MayResolve(id);
    2338             : }
    2339             : 
    2340             : static bool
    2341           0 : _newEnumerate(JSContext* cx, JS::Handle<JSObject*> obj, JS::AutoIdVector& properties, bool enumerableOnly)
    2342             : {
    2343             :   mozilla::dom::HTMLSharedObjectElement* self;
    2344           0 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
    2345             :   {
    2346           0 :     nsresult rv = UnwrapObject<prototypes::id::HTMLAppletElement, mozilla::dom::HTMLSharedObjectElement>(&rootSelf, self);
    2347           0 :     if (NS_FAILED(rv)) {
    2348           0 :       return ThrowErrorMessage(cx, MSG_THIS_DOES_NOT_IMPLEMENT_INTERFACE, "Value", "HTMLAppletElement");
    2349             :     }
    2350             :   }
    2351           0 :   binding_detail::FastErrorResult rv;
    2352           0 :   self->GetOwnPropertyNames(cx, properties, enumerableOnly, rv);
    2353           0 :   if (rv.MaybeSetPendingException(cx)) {
    2354           0 :     return false;
    2355             :   }
    2356           0 :   return true;
    2357             : }
    2358             : 
    2359             : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
    2360             :   {
    2361             :     "HTMLAppletElementPrototype",
    2362             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
    2363             :     JS_NULL_CLASS_OPS,
    2364             :     JS_NULL_CLASS_SPEC,
    2365             :     JS_NULL_CLASS_EXT,
    2366             :     JS_NULL_OBJECT_OPS
    2367             :   },
    2368             :   eInterfacePrototype,
    2369             :   false,
    2370             :   prototypes::id::HTMLAppletElement,
    2371             :   PrototypeTraits<prototypes::id::HTMLAppletElement>::Depth,
    2372             :   sNativePropertyHooks,
    2373             :   "[object HTMLAppletElementPrototype]",
    2374             :   HTMLElementBinding::GetProtoObject
    2375             : };
    2376             : 
    2377             : JSObject*
    2378           0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
    2379             : {
    2380           0 :   return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
    2381             : }
    2382             : 
    2383             : static const js::ClassOps sClassOps = {
    2384             :   _addProperty, /* addProperty */
    2385             :   nullptr,               /* delProperty */
    2386             :   nullptr,               /* getProperty */
    2387             :   nullptr,               /* setProperty */
    2388             :   nullptr,               /* enumerate */
    2389             :   _newEnumerate, /* newEnumerate */
    2390             :   _resolve, /* resolve */
    2391             :   _mayResolve, /* mayResolve */
    2392             :   _finalize, /* finalize */
    2393             :   nullptr, /* call */
    2394             :   nullptr,               /* hasInstance */
    2395             :   nullptr,               /* construct */
    2396             :   nullptr, /* trace */
    2397             : };
    2398             : 
    2399             : static const js::ClassExtension sClassExtension = {
    2400             :   nullptr, /* weakmapKeyDelegateOp */
    2401             :   _objectMoved /* objectMovedOp */
    2402             : };
    2403             : 
    2404             : static const DOMJSClass sClass = {
    2405             :   { "HTMLAppletElement",
    2406             :     JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
    2407             :     &sClassOps,
    2408             :     JS_NULL_CLASS_SPEC,
    2409             :     &sClassExtension,
    2410             :     JS_NULL_OBJECT_OPS
    2411             :   },
    2412             :   { prototypes::id::EventTarget, prototypes::id::Node, prototypes::id::Element, prototypes::id::HTMLElement, prototypes::id::HTMLAppletElement, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
    2413             :   IsBaseOf<nsISupports, mozilla::dom::HTMLSharedObjectElement >::value,
    2414             :   sNativePropertyHooks,
    2415             :   FindAssociatedGlobalForNative<mozilla::dom::HTMLSharedObjectElement>::Get,
    2416             :   GetProtoObjectHandle,
    2417             :   GetCCParticipant<mozilla::dom::HTMLSharedObjectElement>::Get()
    2418             : };
    2419             : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
    2420             :               "Must have the right minimal number of reserved slots.");
    2421             : static_assert(1 >= 1,
    2422             :               "Must have enough reserved slots.");
    2423             : 
    2424             : const JSClass*
    2425           0 : GetJSClass()
    2426             : {
    2427           0 :   return sClass.ToJSClass();
    2428             : }
    2429             : 
    2430             : bool
    2431           0 : Wrap(JSContext* aCx, mozilla::dom::HTMLSharedObjectElement* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
    2432             : {
    2433             :   MOZ_ASSERT(static_cast<mozilla::dom::HTMLSharedObjectElement*>(aObject) ==
    2434             :              reinterpret_cast<mozilla::dom::HTMLSharedObjectElement*>(aObject),
    2435             :              "Multiple inheritance for mozilla::dom::HTMLSharedObjectElement is broken.");
    2436             :   MOZ_ASSERT(static_cast<nsGenericHTMLElement*>(aObject) ==
    2437             :              reinterpret_cast<nsGenericHTMLElement*>(aObject),
    2438             :              "Multiple inheritance for nsGenericHTMLElement is broken.");
    2439             :   MOZ_ASSERT(static_cast<mozilla::dom::Element*>(aObject) ==
    2440             :              reinterpret_cast<mozilla::dom::Element*>(aObject),
    2441             :              "Multiple inheritance for mozilla::dom::Element is broken.");
    2442             :   MOZ_ASSERT(static_cast<nsINode*>(aObject) ==
    2443             :              reinterpret_cast<nsINode*>(aObject),
    2444             :              "Multiple inheritance for nsINode is broken.");
    2445             :   MOZ_ASSERT(static_cast<mozilla::dom::EventTarget*>(aObject) ==
    2446             :              reinterpret_cast<mozilla::dom::EventTarget*>(aObject),
    2447             :              "Multiple inheritance for mozilla::dom::EventTarget is broken.");
    2448           0 :   MOZ_ASSERT(ToSupportsIsCorrect(aObject));
    2449           0 :   MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
    2450           0 :   MOZ_ASSERT(!aCache->GetWrapper(),
    2451             :              "You should probably not be using Wrap() directly; use "
    2452             :              "GetOrCreateDOMReflector instead");
    2453             : 
    2454           0 :   MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
    2455             :              "nsISupports must be on our primary inheritance chain");
    2456             : 
    2457           0 :   JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
    2458           0 :   if (!global) {
    2459           0 :     return false;
    2460             :   }
    2461           0 :   MOZ_ASSERT(JS_IsGlobalObject(global));
    2462           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(global));
    2463             : 
    2464             :   // That might have ended up wrapping us already, due to the wonders
    2465             :   // of XBL.  Check for that, and bail out as needed.
    2466           0 :   aReflector.set(aCache->GetWrapper());
    2467           0 :   if (aReflector) {
    2468             : #ifdef DEBUG
    2469           0 :     binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
    2470             : #endif // DEBUG
    2471           0 :     return true;
    2472             :   }
    2473             : 
    2474           0 :   JSAutoCompartment ac(aCx, global);
    2475           0 :   JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
    2476           0 :   if (!canonicalProto) {
    2477           0 :     return false;
    2478             :   }
    2479           0 :   JS::Rooted<JSObject*> proto(aCx);
    2480           0 :   if (aGivenProto) {
    2481           0 :     proto = aGivenProto;
    2482             :     // Unfortunately, while aGivenProto was in the compartment of aCx
    2483             :     // coming in, we changed compartments to that of "parent" so may need
    2484             :     // to wrap the proto here.
    2485           0 :     if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
    2486           0 :       if (!JS_WrapObject(aCx, &proto)) {
    2487           0 :         return false;
    2488             :       }
    2489             :     }
    2490             :   } else {
    2491           0 :     proto = canonicalProto;
    2492             :   }
    2493             : 
    2494           0 :   BindingJSObjectCreator<mozilla::dom::HTMLSharedObjectElement> creator(aCx);
    2495           0 :   creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
    2496           0 :   if (!aReflector) {
    2497           0 :     return false;
    2498             :   }
    2499             : 
    2500           0 :   aCache->SetWrapper(aReflector);
    2501           0 :   creator.InitializationSucceeded();
    2502             : 
    2503           0 :   MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
    2504             :              aCache->GetWrapperPreserveColor() == aReflector);
    2505             :   // If proto != canonicalProto, we have to preserve our wrapper;
    2506             :   // otherwise we won't be able to properly recreate it later, since
    2507             :   // we won't know what proto to use.  Note that we don't check
    2508             :   // aGivenProto here, since it's entirely possible (and even
    2509             :   // somewhat common) to have a non-null aGivenProto which is the
    2510             :   // same as canonicalProto.
    2511           0 :   if (proto != canonicalProto) {
    2512           0 :     PreserveWrapper(aObject);
    2513             :   }
    2514             : 
    2515           0 :   return true;
    2516             : }
    2517             : 
    2518             : const NativePropertyHooks sNativePropertyHooks[] = { {
    2519             :   nullptr,
    2520             :   nullptr,
    2521             :   nullptr,
    2522             :   { sNativeProperties.Upcast(), sChromeOnlyNativeProperties.Upcast() },
    2523             :   prototypes::id::HTMLAppletElement,
    2524             :   constructors::id::HTMLAppletElement,
    2525             :   HTMLElementBinding::sNativePropertyHooks,
    2526             :   &DefaultXrayExpandoObjectClass
    2527             : } };
    2528             : 
    2529             : void
    2530           0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
    2531             : {
    2532           0 :   JS::Handle<JSObject*> parentProto(HTMLElementBinding::GetProtoObjectHandle(aCx));
    2533           0 :   if (!parentProto) {
    2534           0 :     return;
    2535             :   }
    2536             : 
    2537           0 :   JS::Handle<JSObject*> constructorProto(HTMLElementBinding::GetConstructorObjectHandle(aCx));
    2538           0 :   if (!constructorProto) {
    2539           0 :     return;
    2540             :   }
    2541             : 
    2542             :   static bool sIdsInited = false;
    2543           0 :   if (!sIdsInited && NS_IsMainThread()) {
    2544           0 :     if (!InitIds(aCx, sNativeProperties.Upcast())) {
    2545           0 :       return;
    2546             :     }
    2547           0 :     if (!InitIds(aCx, sChromeOnlyNativeProperties.Upcast())) {
    2548           0 :       return;
    2549             :     }
    2550           0 :     sIdsInited = true;
    2551             :   }
    2552             : 
    2553           0 :   JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::HTMLAppletElement);
    2554           0 :   JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::HTMLAppletElement);
    2555           0 :   dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
    2556             :                               &sPrototypeClass.mBase, protoCache,
    2557             :                               constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
    2558             :                               interfaceCache,
    2559             :                               sNativeProperties.Upcast(),
    2560           0 :                               nsContentUtils::ThreadsafeIsSystemCaller(aCx) ? sChromeOnlyNativeProperties.Upcast() : nullptr,
    2561             :                               "HTMLAppletElement", aDefineOnGlobal,
    2562             :                               nullptr,
    2563           0 :                               false);
    2564             : }
    2565             : 
    2566             : JS::Handle<JSObject*>
    2567           0 : GetProtoObjectHandle(JSContext* aCx)
    2568             : {
    2569             :   /* Get the interface prototype object for this class.  This will create the
    2570             :      object as needed. */
    2571           0 :   bool aDefineOnGlobal = true;
    2572             : 
    2573             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    2574           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    2575           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    2576           0 :     return nullptr;
    2577             :   }
    2578             : 
    2579             :   /* Check to see whether the interface objects are already installed */
    2580           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    2581           0 :   if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::HTMLAppletElement)) {
    2582           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    2583           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    2584             :   }
    2585             : 
    2586             :   /*
    2587             :    * The object might _still_ be null, but that's OK.
    2588             :    *
    2589             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    2590             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    2591             :    * changed after they have been set.
    2592             :    *
    2593             :    * Calling address() avoids the read read barrier that does gray
    2594             :    * unmarking, but it's not possible for the object to be gray here.
    2595             :    */
    2596             : 
    2597           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::HTMLAppletElement);
    2598           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    2599           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    2600             : }
    2601             : 
    2602             : JS::Handle<JSObject*>
    2603           0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
    2604             : {
    2605             :   /* Get the interface object for this class.  This will create the object as
    2606             :      needed. */
    2607             : 
    2608             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    2609           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    2610           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    2611           0 :     return nullptr;
    2612             :   }
    2613             : 
    2614             :   /* Check to see whether the interface objects are already installed */
    2615           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    2616           0 :   if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::HTMLAppletElement)) {
    2617           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    2618           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    2619             :   }
    2620             : 
    2621             :   /*
    2622             :    * The object might _still_ be null, but that's OK.
    2623             :    *
    2624             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    2625             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    2626             :    * changed after they have been set.
    2627             :    *
    2628             :    * Calling address() avoids the read read barrier that does gray
    2629             :    * unmarking, but it's not possible for the object to be gray here.
    2630             :    */
    2631             : 
    2632           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::HTMLAppletElement);
    2633           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    2634           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    2635             : }
    2636             : 
    2637             : JSObject*
    2638           0 : GetConstructorObject(JSContext* aCx)
    2639             : {
    2640           0 :   return GetConstructorObjectHandle(aCx);
    2641             : }
    2642             : 
    2643             : } // namespace HTMLAppletElementBinding
    2644             : 
    2645             : 
    2646             : 
    2647             : } // namespace dom
    2648             : } // namespace mozilla

Generated by: LCOV version 1.13