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

          Line data    Source code
       1             : /* THIS FILE IS AUTOGENERATED FROM VTTCue.webidl BY Codegen.py - DO NOT EDIT */
       2             : 
       3             : #include "TextTrackCueBinding.h"
       4             : #include "VTTCueBinding.h"
       5             : #include "WrapperFactory.h"
       6             : #include "jsapi.h"
       7             : #include "mozilla/FloatingPoint.h"
       8             : #include "mozilla/OwningNonNull.h"
       9             : #include "mozilla/Preferences.h"
      10             : #include "mozilla/dom/BindingUtils.h"
      11             : #include "mozilla/dom/DOMJSClass.h"
      12             : #include "mozilla/dom/DocumentFragment.h"
      13             : #include "mozilla/dom/HTMLDivElement.h"
      14             : #include "mozilla/dom/NonRefcountedDOMObject.h"
      15             : #include "mozilla/dom/Nullable.h"
      16             : #include "mozilla/dom/PrimitiveConversions.h"
      17             : #include "mozilla/dom/TextTrackCue.h"
      18             : #include "mozilla/dom/TextTrackRegion.h"
      19             : #include "mozilla/dom/UnionConversions.h"
      20             : #include "mozilla/dom/XrayExpandoClass.h"
      21             : #include "nsContentUtils.h"
      22             : 
      23             : namespace mozilla {
      24             : namespace dom {
      25             : 
      26             : namespace AutoKeywordValues {
      27             : extern const EnumEntry strings[2] = {
      28             :   {"auto", 4},
      29             :   { nullptr, 0 }
      30             : };
      31             : } // namespace AutoKeywordValues
      32             : 
      33             : bool
      34           0 : ToJSValue(JSContext* aCx, AutoKeyword aArgument, JS::MutableHandle<JS::Value> aValue)
      35             : {
      36           0 :   MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(AutoKeywordValues::strings));
      37             :   JSString* resultStr =
      38           0 :     JS_NewStringCopyN(aCx, AutoKeywordValues::strings[uint32_t(aArgument)].value,
      39           0 :                       AutoKeywordValues::strings[uint32_t(aArgument)].length);
      40           0 :   if (!resultStr) {
      41           0 :     return false;
      42             :   }
      43           0 :   aValue.setString(resultStr);
      44           0 :   return true;
      45             : }
      46             : 
      47             : 
      48             : namespace LineAlignSettingValues {
      49             : extern const EnumEntry strings[4] = {
      50             :   {"start", 5},
      51             :   {"center", 6},
      52             :   {"end", 3},
      53             :   { nullptr, 0 }
      54             : };
      55             : } // namespace LineAlignSettingValues
      56             : 
      57             : bool
      58           0 : ToJSValue(JSContext* aCx, LineAlignSetting aArgument, JS::MutableHandle<JS::Value> aValue)
      59             : {
      60           0 :   MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(LineAlignSettingValues::strings));
      61             :   JSString* resultStr =
      62           0 :     JS_NewStringCopyN(aCx, LineAlignSettingValues::strings[uint32_t(aArgument)].value,
      63           0 :                       LineAlignSettingValues::strings[uint32_t(aArgument)].length);
      64           0 :   if (!resultStr) {
      65           0 :     return false;
      66             :   }
      67           0 :   aValue.setString(resultStr);
      68           0 :   return true;
      69             : }
      70             : 
      71             : 
      72             : namespace PositionAlignSettingValues {
      73             : extern const EnumEntry strings[5] = {
      74             :   {"line-left", 9},
      75             :   {"center", 6},
      76             :   {"line-right", 10},
      77             :   {"auto", 4},
      78             :   { nullptr, 0 }
      79             : };
      80             : } // namespace PositionAlignSettingValues
      81             : 
      82             : bool
      83           0 : ToJSValue(JSContext* aCx, PositionAlignSetting aArgument, JS::MutableHandle<JS::Value> aValue)
      84             : {
      85           0 :   MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(PositionAlignSettingValues::strings));
      86             :   JSString* resultStr =
      87           0 :     JS_NewStringCopyN(aCx, PositionAlignSettingValues::strings[uint32_t(aArgument)].value,
      88           0 :                       PositionAlignSettingValues::strings[uint32_t(aArgument)].length);
      89           0 :   if (!resultStr) {
      90           0 :     return false;
      91             :   }
      92           0 :   aValue.setString(resultStr);
      93           0 :   return true;
      94             : }
      95             : 
      96             : 
      97             : namespace AlignSettingValues {
      98             : extern const EnumEntry strings[6] = {
      99             :   {"start", 5},
     100             :   {"center", 6},
     101             :   {"end", 3},
     102             :   {"left", 4},
     103             :   {"right", 5},
     104             :   { nullptr, 0 }
     105             : };
     106             : } // namespace AlignSettingValues
     107             : 
     108             : bool
     109           0 : ToJSValue(JSContext* aCx, AlignSetting aArgument, JS::MutableHandle<JS::Value> aValue)
     110             : {
     111           0 :   MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(AlignSettingValues::strings));
     112             :   JSString* resultStr =
     113           0 :     JS_NewStringCopyN(aCx, AlignSettingValues::strings[uint32_t(aArgument)].value,
     114           0 :                       AlignSettingValues::strings[uint32_t(aArgument)].length);
     115           0 :   if (!resultStr) {
     116           0 :     return false;
     117             :   }
     118           0 :   aValue.setString(resultStr);
     119           0 :   return true;
     120             : }
     121             : 
     122             : 
     123             : namespace DirectionSettingValues {
     124             : extern const EnumEntry strings[4] = {
     125             :   {"", 0},
     126             :   {"rl", 2},
     127             :   {"lr", 2},
     128             :   { nullptr, 0 }
     129             : };
     130             : } // namespace DirectionSettingValues
     131             : 
     132             : bool
     133           0 : ToJSValue(JSContext* aCx, DirectionSetting aArgument, JS::MutableHandle<JS::Value> aValue)
     134             : {
     135           0 :   MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(DirectionSettingValues::strings));
     136             :   JSString* resultStr =
     137           0 :     JS_NewStringCopyN(aCx, DirectionSettingValues::strings[uint32_t(aArgument)].value,
     138           0 :                       DirectionSettingValues::strings[uint32_t(aArgument)].length);
     139           0 :   if (!resultStr) {
     140           0 :     return false;
     141             :   }
     142           0 :   aValue.setString(resultStr);
     143           0 :   return true;
     144             : }
     145             : 
     146             : 
     147             : bool
     148           0 : DoubleOrAutoKeyword::ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const
     149             : {
     150           0 :   switch (mType) {
     151             :     case eUninitialized: {
     152           0 :       return false;
     153             :       break;
     154             :     }
     155             :     case eDouble: {
     156           0 :       rval.set(JS_NumberValue(double(mValue.mDouble.Value())));
     157           0 :       return true;
     158             :       break;
     159             :     }
     160             :     case eAutoKeyword: {
     161           0 :       if (!ToJSValue(cx, mValue.mAutoKeyword.Value(), rval)) {
     162           0 :         return false;
     163             :       }
     164           0 :       return true;
     165             :       break;
     166             :     }
     167             :     default: {
     168           0 :       return false;
     169             :       break;
     170             :     }
     171             :   }
     172             : 
     173             :   return false;
     174             : }
     175             : 
     176             : 
     177             : double&
     178           0 : OwningDoubleOrAutoKeyword::RawSetAsDouble()
     179             : {
     180           0 :   if (mType == eDouble) {
     181           0 :     return mValue.mDouble.Value();
     182             :   }
     183           0 :   MOZ_ASSERT(mType == eUninitialized);
     184           0 :   mType = eDouble;
     185           0 :   return mValue.mDouble.SetValue();
     186             : }
     187             : 
     188             : double&
     189           0 : OwningDoubleOrAutoKeyword::SetAsDouble()
     190             : {
     191           0 :   if (mType == eDouble) {
     192           0 :     return mValue.mDouble.Value();
     193             :   }
     194           0 :   Uninit();
     195           0 :   mType = eDouble;
     196           0 :   return mValue.mDouble.SetValue();
     197             : }
     198             : 
     199             : bool
     200           0 : OwningDoubleOrAutoKeyword::TrySetToDouble(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl)
     201             : {
     202           0 :   tryNext = false;
     203             :   { // scope for memberSlot
     204           0 :     double& memberSlot = RawSetAsDouble();
     205           0 :     if (!ValueToPrimitive<double, eDefault>(cx, value, &memberSlot)) {
     206           0 :       return false;
     207           0 :     } else if (!mozilla::IsFinite(memberSlot)) {
     208           0 :       ThrowErrorMessage(cx, MSG_NOT_FINITE, "Member of DoubleOrAutoKeyword");
     209           0 :       return false;
     210             :     }
     211             :   }
     212           0 :   return true;
     213             : }
     214             : 
     215             : void
     216           0 : OwningDoubleOrAutoKeyword::DestroyDouble()
     217             : {
     218           0 :   MOZ_ASSERT(IsDouble(), "Wrong type!");
     219           0 :   mValue.mDouble.Destroy();
     220           0 :   mType = eUninitialized;
     221           0 : }
     222             : 
     223             : 
     224             : 
     225             : 
     226             : AutoKeyword&
     227           0 : OwningDoubleOrAutoKeyword::RawSetAsAutoKeyword()
     228             : {
     229           0 :   if (mType == eAutoKeyword) {
     230           0 :     return mValue.mAutoKeyword.Value();
     231             :   }
     232           0 :   MOZ_ASSERT(mType == eUninitialized);
     233           0 :   mType = eAutoKeyword;
     234           0 :   return mValue.mAutoKeyword.SetValue();
     235             : }
     236             : 
     237             : AutoKeyword&
     238           0 : OwningDoubleOrAutoKeyword::SetAsAutoKeyword()
     239             : {
     240           0 :   if (mType == eAutoKeyword) {
     241           0 :     return mValue.mAutoKeyword.Value();
     242             :   }
     243           0 :   Uninit();
     244           0 :   mType = eAutoKeyword;
     245           0 :   return mValue.mAutoKeyword.SetValue();
     246             : }
     247             : 
     248             : bool
     249           0 : OwningDoubleOrAutoKeyword::TrySetToAutoKeyword(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl)
     250             : {
     251           0 :   tryNext = false;
     252             :   { // scope for memberSlot
     253           0 :     AutoKeyword& memberSlot = RawSetAsAutoKeyword();
     254             :     {
     255             :       int index;
     256           0 :       if (!FindEnumStringIndex<true>(cx, value, AutoKeywordValues::strings, "AutoKeyword", "Member of DoubleOrAutoKeyword", &index)) {
     257           0 :         return false;
     258             :       }
     259           0 :       MOZ_ASSERT(index >= 0);
     260           0 :       memberSlot = static_cast<AutoKeyword>(index);
     261             :     }
     262             :   }
     263           0 :   return true;
     264             : }
     265             : 
     266             : void
     267           0 : OwningDoubleOrAutoKeyword::DestroyAutoKeyword()
     268             : {
     269           0 :   MOZ_ASSERT(IsAutoKeyword(), "Wrong type!");
     270           0 :   mValue.mAutoKeyword.Destroy();
     271           0 :   mType = eUninitialized;
     272           0 : }
     273             : 
     274             : 
     275             : 
     276             : 
     277             : void
     278           0 : OwningDoubleOrAutoKeyword::Uninit()
     279             : {
     280           0 :   switch (mType) {
     281             :     case eUninitialized: {
     282           0 :       break;
     283             :     }
     284             :     case eDouble: {
     285           0 :       DestroyDouble();
     286           0 :       break;
     287             :     }
     288             :     case eAutoKeyword: {
     289           0 :       DestroyAutoKeyword();
     290           0 :       break;
     291             :     }
     292             :   }
     293           0 : }
     294             : 
     295             : bool
     296           0 : OwningDoubleOrAutoKeyword::ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const
     297             : {
     298           0 :   switch (mType) {
     299             :     case eUninitialized: {
     300           0 :       return false;
     301             :       break;
     302             :     }
     303             :     case eDouble: {
     304           0 :       rval.set(JS_NumberValue(double(mValue.mDouble.Value())));
     305           0 :       return true;
     306             :       break;
     307             :     }
     308             :     case eAutoKeyword: {
     309           0 :       if (!ToJSValue(cx, mValue.mAutoKeyword.Value(), rval)) {
     310           0 :         return false;
     311             :       }
     312           0 :       return true;
     313             :       break;
     314             :     }
     315             :     default: {
     316           0 :       return false;
     317             :       break;
     318             :     }
     319             :   }
     320             : 
     321             :   return false;
     322             : }
     323             : 
     324             : void
     325           0 : OwningDoubleOrAutoKeyword::TraceUnion(JSTracer* trc)
     326             : {
     327           0 : }
     328             : 
     329             : OwningDoubleOrAutoKeyword&
     330           0 : OwningDoubleOrAutoKeyword::operator=(const OwningDoubleOrAutoKeyword& aOther)
     331             : {
     332           0 :   switch (aOther.mType) {
     333             :     case eUninitialized: {
     334           0 :       MOZ_ASSERT(mType == eUninitialized,
     335             :                  "We need to destroy ourselves?");
     336           0 :       break;
     337             :     }
     338             :     case eDouble: {
     339           0 :       SetAsDouble() = aOther.GetAsDouble();
     340           0 :       break;
     341             :     }
     342             :     case eAutoKeyword: {
     343           0 :       SetAsAutoKeyword() = aOther.GetAsAutoKeyword();
     344           0 :       break;
     345             :     }
     346             :   }
     347           0 :   return *this;
     348             : }
     349             : 
     350             : 
     351             : namespace VTTCueBinding {
     352             : 
     353             : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<TextTrackCueBinding::NativeType>::value,
     354             :               "Can't inherit from an interface with a different ownership model.");
     355             : 
     356             : static bool
     357           0 : get_region(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
     358             : {
     359           0 :   auto result(StrongOrRawPtr<mozilla::dom::TextTrackRegion>(self->GetRegion()));
     360           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     361           0 :   if (!result) {
     362           0 :     args.rval().setNull();
     363           0 :     return true;
     364             :   }
     365           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
     366           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     367           0 :     return false;
     368             :   }
     369           0 :   return true;
     370             : }
     371             : 
     372             : static bool
     373           0 : set_region(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
     374             : {
     375             :   mozilla::dom::TextTrackRegion* arg0;
     376           0 :   if (args[0].isObject()) {
     377             :     {
     378           0 :       nsresult rv = UnwrapObject<prototypes::id::VTTRegion, mozilla::dom::TextTrackRegion>(args[0], arg0);
     379           0 :       if (NS_FAILED(rv)) {
     380           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Value being assigned to VTTCue.region", "VTTRegion");
     381           0 :         return false;
     382             :       }
     383             :     }
     384           0 :   } else if (args[0].isNullOrUndefined()) {
     385           0 :     arg0 = nullptr;
     386             :   } else {
     387           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Value being assigned to VTTCue.region");
     388           0 :     return false;
     389             :   }
     390           0 :   self->SetRegion(Constify(arg0));
     391           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     392             : 
     393           0 :   return true;
     394             : }
     395             : 
     396             : static const JSJitInfo region_getterinfo = {
     397             :   { (JSJitGetterOp)get_region },
     398             :   { prototypes::id::VTTCue },
     399             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     400             :   JSJitInfo::Getter,
     401             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     402             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     403             :   false,  /* isInfallible. False in setters. */
     404             :   false,  /* isMovable.  Not relevant for setters. */
     405             :   false, /* isEliminatable.  Not relevant for setters. */
     406             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     407             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     408             :   false,  /* isTypedMethod.  Only relevant for methods. */
     409             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     410             : };
     411             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     412             : static_assert(0 < 1, "There is no slot for us");
     413             : static const JSJitInfo region_setterinfo = {
     414             :   { (JSJitGetterOp)set_region },
     415             :   { prototypes::id::VTTCue },
     416             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     417             :   JSJitInfo::Setter,
     418             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     419             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     420             :   false,  /* isInfallible. False in setters. */
     421             :   false,  /* isMovable.  Not relevant for setters. */
     422             :   false, /* isEliminatable.  Not relevant for setters. */
     423             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     424             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     425             :   false,  /* isTypedMethod.  Only relevant for methods. */
     426             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     427             : };
     428             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     429             : static_assert(0 < 1, "There is no slot for us");
     430             : 
     431             : static bool
     432           0 : get_vertical(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
     433             : {
     434           0 :   DirectionSetting result(self->Vertical());
     435           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     436           0 :   if (!ToJSValue(cx, result, args.rval())) {
     437           0 :     return false;
     438             :   }
     439           0 :   return true;
     440             : }
     441             : 
     442             : static bool
     443           0 : set_vertical(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
     444             : {
     445             :   DirectionSetting arg0;
     446             :   {
     447             :     int index;
     448           0 :     if (!FindEnumStringIndex<false>(cx, args[0], DirectionSettingValues::strings, "DirectionSetting", "Value being assigned to VTTCue.vertical", &index)) {
     449           0 :       return false;
     450             :     }
     451           0 :     if (index < 0) {
     452           0 :       return true;
     453             :     }
     454           0 :     arg0 = static_cast<DirectionSetting>(index);
     455             :   }
     456           0 :   self->SetVertical(arg0);
     457           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     458             : 
     459           0 :   return true;
     460             : }
     461             : 
     462             : static const JSJitInfo vertical_getterinfo = {
     463             :   { (JSJitGetterOp)get_vertical },
     464             :   { prototypes::id::VTTCue },
     465             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     466             :   JSJitInfo::Getter,
     467             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     468             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     469             :   false,  /* isInfallible. False in setters. */
     470             :   false,  /* isMovable.  Not relevant for setters. */
     471             :   false, /* isEliminatable.  Not relevant for setters. */
     472             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     473             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     474             :   false,  /* isTypedMethod.  Only relevant for methods. */
     475             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     476             : };
     477             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     478             : static_assert(0 < 1, "There is no slot for us");
     479             : static const JSJitInfo vertical_setterinfo = {
     480             :   { (JSJitGetterOp)set_vertical },
     481             :   { prototypes::id::VTTCue },
     482             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     483             :   JSJitInfo::Setter,
     484             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     485             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     486             :   false,  /* isInfallible. False in setters. */
     487             :   false,  /* isMovable.  Not relevant for setters. */
     488             :   false, /* isEliminatable.  Not relevant for setters. */
     489             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     490             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     491             :   false,  /* isTypedMethod.  Only relevant for methods. */
     492             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     493             : };
     494             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     495             : static_assert(0 < 1, "There is no slot for us");
     496             : 
     497             : static bool
     498           0 : get_snapToLines(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
     499             : {
     500           0 :   bool result(self->SnapToLines());
     501           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     502           0 :   args.rval().setBoolean(result);
     503           0 :   return true;
     504             : }
     505             : 
     506             : static bool
     507           0 : set_snapToLines(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
     508             : {
     509             :   bool arg0;
     510           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
     511           0 :     return false;
     512             :   }
     513           0 :   self->SetSnapToLines(arg0);
     514           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     515             : 
     516           0 :   return true;
     517             : }
     518             : 
     519             : static const JSJitInfo snapToLines_getterinfo = {
     520             :   { (JSJitGetterOp)get_snapToLines },
     521             :   { prototypes::id::VTTCue },
     522             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     523             :   JSJitInfo::Getter,
     524             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     525             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
     526             :   true,  /* isInfallible. False in setters. */
     527             :   false,  /* isMovable.  Not relevant for setters. */
     528             :   false, /* isEliminatable.  Not relevant for setters. */
     529             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     530             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     531             :   false,  /* isTypedMethod.  Only relevant for methods. */
     532             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     533             : };
     534             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     535             : static_assert(0 < 1, "There is no slot for us");
     536             : static const JSJitInfo snapToLines_setterinfo = {
     537             :   { (JSJitGetterOp)set_snapToLines },
     538             :   { prototypes::id::VTTCue },
     539             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     540             :   JSJitInfo::Setter,
     541             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     542             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     543             :   false,  /* isInfallible. False in setters. */
     544             :   false,  /* isMovable.  Not relevant for setters. */
     545             :   false, /* isEliminatable.  Not relevant for setters. */
     546             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     547             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     548             :   false,  /* isTypedMethod.  Only relevant for methods. */
     549             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     550             : };
     551             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     552             : static_assert(0 < 1, "There is no slot for us");
     553             : 
     554             : static bool
     555           0 : get_line(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
     556             : {
     557           0 :   OwningDoubleOrAutoKeyword result;
     558           0 :   self->GetLine(result);
     559           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     560           0 :   if (!result.ToJSVal(cx, obj, args.rval())) {
     561           0 :     return false;
     562             :   }
     563           0 :   return true;
     564             : }
     565             : 
     566             : static bool
     567           0 : set_line(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
     568             : {
     569           0 :   DoubleOrAutoKeyword arg0;
     570           0 :   DoubleOrAutoKeywordArgument arg0_holder(arg0);
     571             :   {
     572           0 :     bool done = false, failed = false, tryNext;
     573             :     do {
     574           0 :       if (args[0].isNumber()) {
     575           0 :         done = (failed = !arg0_holder.TrySetToDouble(cx, args[0], tryNext)) || !tryNext;
     576           0 :         break;
     577             :       }
     578           0 :       done = (failed = !arg0_holder.TrySetToAutoKeyword(cx, args[0], tryNext)) || !tryNext;
     579           0 :       break;
     580             :     } while (0);
     581           0 :     if (failed) {
     582           0 :       return false;
     583             :     }
     584           0 :     if (!done) {
     585           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Value being assigned to VTTCue.line", "");
     586           0 :       return false;
     587             :     }
     588             :   }
     589           0 :   self->SetLine(Constify(arg0));
     590           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     591             : 
     592           0 :   return true;
     593             : }
     594             : 
     595             : static const JSJitInfo line_getterinfo = {
     596             :   { (JSJitGetterOp)get_line },
     597             :   { prototypes::id::VTTCue },
     598             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     599             :   JSJitInfo::Getter,
     600             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     601             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     602             :   false,  /* isInfallible. False in setters. */
     603             :   false,  /* isMovable.  Not relevant for setters. */
     604             :   false, /* isEliminatable.  Not relevant for setters. */
     605             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     606             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     607             :   false,  /* isTypedMethod.  Only relevant for methods. */
     608             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     609             : };
     610             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     611             : static_assert(0 < 1, "There is no slot for us");
     612             : static const JSJitInfo line_setterinfo = {
     613             :   { (JSJitGetterOp)set_line },
     614             :   { prototypes::id::VTTCue },
     615             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     616             :   JSJitInfo::Setter,
     617             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     618             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     619             :   false,  /* isInfallible. False in setters. */
     620             :   false,  /* isMovable.  Not relevant for setters. */
     621             :   false, /* isEliminatable.  Not relevant for setters. */
     622             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     623             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     624             :   false,  /* isTypedMethod.  Only relevant for methods. */
     625             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     626             : };
     627             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     628             : static_assert(0 < 1, "There is no slot for us");
     629             : 
     630             : static bool
     631           0 : get_lineAlign(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
     632             : {
     633           0 :   LineAlignSetting result(self->LineAlign());
     634           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     635           0 :   if (!ToJSValue(cx, result, args.rval())) {
     636           0 :     return false;
     637             :   }
     638           0 :   return true;
     639             : }
     640             : 
     641             : static bool
     642           0 : set_lineAlign(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
     643             : {
     644             :   LineAlignSetting arg0;
     645             :   {
     646             :     int index;
     647           0 :     if (!FindEnumStringIndex<false>(cx, args[0], LineAlignSettingValues::strings, "LineAlignSetting", "Value being assigned to VTTCue.lineAlign", &index)) {
     648           0 :       return false;
     649             :     }
     650           0 :     if (index < 0) {
     651           0 :       return true;
     652             :     }
     653           0 :     arg0 = static_cast<LineAlignSetting>(index);
     654             :   }
     655           0 :   binding_detail::FastErrorResult rv;
     656           0 :   self->SetLineAlign(arg0, rv);
     657           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     658           0 :     return false;
     659             :   }
     660           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     661             : 
     662           0 :   return true;
     663             : }
     664             : 
     665             : static const JSJitInfo lineAlign_getterinfo = {
     666             :   { (JSJitGetterOp)get_lineAlign },
     667             :   { prototypes::id::VTTCue },
     668             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     669             :   JSJitInfo::Getter,
     670             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     671             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     672             :   false,  /* isInfallible. False in setters. */
     673             :   false,  /* isMovable.  Not relevant for setters. */
     674             :   false, /* isEliminatable.  Not relevant for setters. */
     675             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     676             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     677             :   false,  /* isTypedMethod.  Only relevant for methods. */
     678             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     679             : };
     680             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     681             : static_assert(0 < 1, "There is no slot for us");
     682             : static const JSJitInfo lineAlign_setterinfo = {
     683             :   { (JSJitGetterOp)set_lineAlign },
     684             :   { prototypes::id::VTTCue },
     685             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     686             :   JSJitInfo::Setter,
     687             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     688             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     689             :   false,  /* isInfallible. False in setters. */
     690             :   false,  /* isMovable.  Not relevant for setters. */
     691             :   false, /* isEliminatable.  Not relevant for setters. */
     692             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     693             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     694             :   false,  /* isTypedMethod.  Only relevant for methods. */
     695             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     696             : };
     697             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     698             : static_assert(0 < 1, "There is no slot for us");
     699             : 
     700             : static bool
     701           0 : get_position(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
     702             : {
     703           0 :   OwningDoubleOrAutoKeyword result;
     704           0 :   self->GetPosition(result);
     705           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     706           0 :   if (!result.ToJSVal(cx, obj, args.rval())) {
     707           0 :     return false;
     708             :   }
     709           0 :   return true;
     710             : }
     711             : 
     712             : static bool
     713           0 : set_position(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
     714             : {
     715           0 :   DoubleOrAutoKeyword arg0;
     716           0 :   DoubleOrAutoKeywordArgument arg0_holder(arg0);
     717             :   {
     718           0 :     bool done = false, failed = false, tryNext;
     719             :     do {
     720           0 :       if (args[0].isNumber()) {
     721           0 :         done = (failed = !arg0_holder.TrySetToDouble(cx, args[0], tryNext)) || !tryNext;
     722           0 :         break;
     723             :       }
     724           0 :       done = (failed = !arg0_holder.TrySetToAutoKeyword(cx, args[0], tryNext)) || !tryNext;
     725           0 :       break;
     726             :     } while (0);
     727           0 :     if (failed) {
     728           0 :       return false;
     729             :     }
     730           0 :     if (!done) {
     731           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Value being assigned to VTTCue.position", "");
     732           0 :       return false;
     733             :     }
     734             :   }
     735           0 :   binding_detail::FastErrorResult rv;
     736           0 :   self->SetPosition(Constify(arg0), rv);
     737           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     738           0 :     return false;
     739             :   }
     740           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     741             : 
     742           0 :   return true;
     743             : }
     744             : 
     745             : static const JSJitInfo position_getterinfo = {
     746             :   { (JSJitGetterOp)get_position },
     747             :   { prototypes::id::VTTCue },
     748             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     749             :   JSJitInfo::Getter,
     750             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     751             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     752             :   false,  /* isInfallible. False in setters. */
     753             :   false,  /* isMovable.  Not relevant for setters. */
     754             :   false, /* isEliminatable.  Not relevant for setters. */
     755             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     756             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     757             :   false,  /* isTypedMethod.  Only relevant for methods. */
     758             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     759             : };
     760             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     761             : static_assert(0 < 1, "There is no slot for us");
     762             : static const JSJitInfo position_setterinfo = {
     763             :   { (JSJitGetterOp)set_position },
     764             :   { prototypes::id::VTTCue },
     765             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     766             :   JSJitInfo::Setter,
     767             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     768             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     769             :   false,  /* isInfallible. False in setters. */
     770             :   false,  /* isMovable.  Not relevant for setters. */
     771             :   false, /* isEliminatable.  Not relevant for setters. */
     772             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     773             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     774             :   false,  /* isTypedMethod.  Only relevant for methods. */
     775             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     776             : };
     777             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     778             : static_assert(0 < 1, "There is no slot for us");
     779             : 
     780             : static bool
     781           0 : get_positionAlign(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
     782             : {
     783           0 :   PositionAlignSetting result(self->PositionAlign());
     784           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     785           0 :   if (!ToJSValue(cx, result, args.rval())) {
     786           0 :     return false;
     787             :   }
     788           0 :   return true;
     789             : }
     790             : 
     791             : static bool
     792           0 : set_positionAlign(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
     793             : {
     794             :   PositionAlignSetting arg0;
     795             :   {
     796             :     int index;
     797           0 :     if (!FindEnumStringIndex<false>(cx, args[0], PositionAlignSettingValues::strings, "PositionAlignSetting", "Value being assigned to VTTCue.positionAlign", &index)) {
     798           0 :       return false;
     799             :     }
     800           0 :     if (index < 0) {
     801           0 :       return true;
     802             :     }
     803           0 :     arg0 = static_cast<PositionAlignSetting>(index);
     804             :   }
     805           0 :   binding_detail::FastErrorResult rv;
     806           0 :   self->SetPositionAlign(arg0, rv);
     807           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     808           0 :     return false;
     809             :   }
     810           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     811             : 
     812           0 :   return true;
     813             : }
     814             : 
     815             : static const JSJitInfo positionAlign_getterinfo = {
     816             :   { (JSJitGetterOp)get_positionAlign },
     817             :   { prototypes::id::VTTCue },
     818             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     819             :   JSJitInfo::Getter,
     820             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     821             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     822             :   false,  /* isInfallible. False in setters. */
     823             :   false,  /* isMovable.  Not relevant for setters. */
     824             :   false, /* isEliminatable.  Not relevant for setters. */
     825             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     826             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     827             :   false,  /* isTypedMethod.  Only relevant for methods. */
     828             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     829             : };
     830             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     831             : static_assert(0 < 1, "There is no slot for us");
     832             : static const JSJitInfo positionAlign_setterinfo = {
     833             :   { (JSJitGetterOp)set_positionAlign },
     834             :   { prototypes::id::VTTCue },
     835             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     836             :   JSJitInfo::Setter,
     837             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     838             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     839             :   false,  /* isInfallible. False in setters. */
     840             :   false,  /* isMovable.  Not relevant for setters. */
     841             :   false, /* isEliminatable.  Not relevant for setters. */
     842             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     843             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     844             :   false,  /* isTypedMethod.  Only relevant for methods. */
     845             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     846             : };
     847             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     848             : static_assert(0 < 1, "There is no slot for us");
     849             : 
     850             : static bool
     851           0 : get_size(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
     852             : {
     853           0 :   double result(self->Size());
     854           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     855           0 :   args.rval().set(JS_NumberValue(double(result)));
     856           0 :   return true;
     857             : }
     858             : 
     859             : static bool
     860           0 : set_size(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
     861             : {
     862             :   double arg0;
     863           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     864           0 :     return false;
     865           0 :   } else if (!mozilla::IsFinite(arg0)) {
     866           0 :     ThrowErrorMessage(cx, MSG_NOT_FINITE, "Value being assigned to VTTCue.size");
     867           0 :     return false;
     868             :   }
     869           0 :   binding_detail::FastErrorResult rv;
     870           0 :   self->SetSize(arg0, rv);
     871           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     872           0 :     return false;
     873             :   }
     874           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     875             : 
     876           0 :   return true;
     877             : }
     878             : 
     879             : static const JSJitInfo size_getterinfo = {
     880             :   { (JSJitGetterOp)get_size },
     881             :   { prototypes::id::VTTCue },
     882             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     883             :   JSJitInfo::Getter,
     884             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     885             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     886             :   true,  /* isInfallible. False in setters. */
     887             :   false,  /* isMovable.  Not relevant for setters. */
     888             :   false, /* isEliminatable.  Not relevant for setters. */
     889             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     890             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     891             :   false,  /* isTypedMethod.  Only relevant for methods. */
     892             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     893             : };
     894             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     895             : static_assert(0 < 1, "There is no slot for us");
     896             : static const JSJitInfo size_setterinfo = {
     897             :   { (JSJitGetterOp)set_size },
     898             :   { prototypes::id::VTTCue },
     899             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     900             :   JSJitInfo::Setter,
     901             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     902             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     903             :   false,  /* isInfallible. False in setters. */
     904             :   false,  /* isMovable.  Not relevant for setters. */
     905             :   false, /* isEliminatable.  Not relevant for setters. */
     906             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     907             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     908             :   false,  /* isTypedMethod.  Only relevant for methods. */
     909             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     910             : };
     911             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     912             : static_assert(0 < 1, "There is no slot for us");
     913             : 
     914             : static bool
     915           0 : get_align(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
     916             : {
     917           0 :   AlignSetting result(self->Align());
     918           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     919           0 :   if (!ToJSValue(cx, result, args.rval())) {
     920           0 :     return false;
     921             :   }
     922           0 :   return true;
     923             : }
     924             : 
     925             : static bool
     926           0 : set_align(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
     927             : {
     928             :   AlignSetting arg0;
     929             :   {
     930             :     int index;
     931           0 :     if (!FindEnumStringIndex<false>(cx, args[0], AlignSettingValues::strings, "AlignSetting", "Value being assigned to VTTCue.align", &index)) {
     932           0 :       return false;
     933             :     }
     934           0 :     if (index < 0) {
     935           0 :       return true;
     936             :     }
     937           0 :     arg0 = static_cast<AlignSetting>(index);
     938             :   }
     939           0 :   self->SetAlign(arg0);
     940           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     941             : 
     942           0 :   return true;
     943             : }
     944             : 
     945             : static const JSJitInfo align_getterinfo = {
     946             :   { (JSJitGetterOp)get_align },
     947             :   { prototypes::id::VTTCue },
     948             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     949             :   JSJitInfo::Getter,
     950             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     951             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     952             :   false,  /* isInfallible. False in setters. */
     953             :   false,  /* isMovable.  Not relevant for setters. */
     954             :   false, /* isEliminatable.  Not relevant for setters. */
     955             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     956             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     957             :   false,  /* isTypedMethod.  Only relevant for methods. */
     958             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     959             : };
     960             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     961             : static_assert(0 < 1, "There is no slot for us");
     962             : static const JSJitInfo align_setterinfo = {
     963             :   { (JSJitGetterOp)set_align },
     964             :   { prototypes::id::VTTCue },
     965             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
     966             :   JSJitInfo::Setter,
     967             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     968             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     969             :   false,  /* isInfallible. False in setters. */
     970             :   false,  /* isMovable.  Not relevant for setters. */
     971             :   false, /* isEliminatable.  Not relevant for setters. */
     972             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     973             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     974             :   false,  /* isTypedMethod.  Only relevant for methods. */
     975             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     976             : };
     977             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     978             : static_assert(0 < 1, "There is no slot for us");
     979             : 
     980             : static bool
     981           0 : get_text(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
     982             : {
     983           0 :   DOMString result;
     984           0 :   self->GetText(result);
     985           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     986           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     987           0 :     return false;
     988             :   }
     989           0 :   return true;
     990             : }
     991             : 
     992             : static bool
     993           0 : set_text(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
     994             : {
     995           0 :   binding_detail::FakeString arg0;
     996           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     997           0 :     return false;
     998             :   }
     999           0 :   self->SetText(NonNullHelper(Constify(arg0)));
    1000           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1001             : 
    1002           0 :   return true;
    1003             : }
    1004             : 
    1005             : static const JSJitInfo text_getterinfo = {
    1006             :   { (JSJitGetterOp)get_text },
    1007             :   { prototypes::id::VTTCue },
    1008             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
    1009             :   JSJitInfo::Getter,
    1010             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1011             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1012             :   false,  /* isInfallible. False in setters. */
    1013             :   false,  /* isMovable.  Not relevant for setters. */
    1014             :   false, /* isEliminatable.  Not relevant for setters. */
    1015             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1016             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1017             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1018             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1019             : };
    1020             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1021             : static_assert(0 < 1, "There is no slot for us");
    1022             : static const JSJitInfo text_setterinfo = {
    1023             :   { (JSJitGetterOp)set_text },
    1024             :   { prototypes::id::VTTCue },
    1025             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
    1026             :   JSJitInfo::Setter,
    1027             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1028             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1029             :   false,  /* isInfallible. False in setters. */
    1030             :   false,  /* isMovable.  Not relevant for setters. */
    1031             :   false, /* isEliminatable.  Not relevant for setters. */
    1032             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1033             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1034             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1035             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1036             : };
    1037             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1038             : static_assert(0 < 1, "There is no slot for us");
    1039             : 
    1040             : static bool
    1041           0 : getCueAsHTML(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, const JSJitMethodCallArgs& args)
    1042             : {
    1043           0 :   auto result(StrongOrRawPtr<mozilla::dom::DocumentFragment>(self->GetCueAsHTML()));
    1044           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1045           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1046           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1047           0 :     return false;
    1048             :   }
    1049           0 :   return true;
    1050             : }
    1051             : 
    1052             : static const JSJitInfo getCueAsHTML_methodinfo = {
    1053             :   { (JSJitGetterOp)getCueAsHTML },
    1054             :   { prototypes::id::VTTCue },
    1055             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
    1056             :   JSJitInfo::Method,
    1057             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1058             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1059             :   false,  /* isInfallible. False in setters. */
    1060             :   false,  /* isMovable.  Not relevant for setters. */
    1061             :   false, /* isEliminatable.  Not relevant for setters. */
    1062             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1063             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1064             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1065             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1066             : };
    1067             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1068             : static_assert(0 < 1, "There is no slot for us");
    1069             : 
    1070             : static bool
    1071           0 : get_displayState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
    1072             : {
    1073           0 :   auto result(StrongOrRawPtr<mozilla::dom::HTMLDivElement>(self->GetDisplayState()));
    1074           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1075           0 :   if (!result) {
    1076           0 :     args.rval().setNull();
    1077           0 :     return true;
    1078             :   }
    1079           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1080           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1081           0 :     return false;
    1082             :   }
    1083           0 :   return true;
    1084             : }
    1085             : 
    1086             : static bool
    1087           0 : set_displayState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
    1088             : {
    1089             :   mozilla::dom::HTMLDivElement* arg0;
    1090           0 :   if (args[0].isObject()) {
    1091             :     {
    1092           0 :       nsresult rv = UnwrapObject<prototypes::id::HTMLDivElement, mozilla::dom::HTMLDivElement>(args[0], arg0);
    1093           0 :       if (NS_FAILED(rv)) {
    1094           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Value being assigned to VTTCue.displayState", "HTMLDivElement");
    1095           0 :         return false;
    1096             :       }
    1097             :     }
    1098           0 :   } else if (args[0].isNullOrUndefined()) {
    1099           0 :     arg0 = nullptr;
    1100             :   } else {
    1101           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Value being assigned to VTTCue.displayState");
    1102           0 :     return false;
    1103             :   }
    1104           0 :   self->SetDisplayState(Constify(arg0));
    1105           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1106             : 
    1107           0 :   return true;
    1108             : }
    1109             : 
    1110             : static const JSJitInfo displayState_getterinfo = {
    1111             :   { (JSJitGetterOp)get_displayState },
    1112             :   { prototypes::id::VTTCue },
    1113             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
    1114             :   JSJitInfo::Getter,
    1115             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1116             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1117             :   false,  /* isInfallible. False in setters. */
    1118             :   false,  /* isMovable.  Not relevant for setters. */
    1119             :   false, /* isEliminatable.  Not relevant for setters. */
    1120             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1121             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1122             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1123             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1124             : };
    1125             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1126             : static_assert(0 < 1, "There is no slot for us");
    1127             : static const JSJitInfo displayState_setterinfo = {
    1128             :   { (JSJitGetterOp)set_displayState },
    1129             :   { prototypes::id::VTTCue },
    1130             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
    1131             :   JSJitInfo::Setter,
    1132             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1133             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1134             :   false,  /* isInfallible. False in setters. */
    1135             :   false,  /* isMovable.  Not relevant for setters. */
    1136             :   false, /* isEliminatable.  Not relevant for setters. */
    1137             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1138             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1139             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1140             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1141             : };
    1142             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1143             : static_assert(0 < 1, "There is no slot for us");
    1144             : 
    1145             : static bool
    1146           0 : get_hasBeenReset(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
    1147             : {
    1148           0 :   bool result(self->HasBeenReset());
    1149           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1150           0 :   args.rval().setBoolean(result);
    1151           0 :   return true;
    1152             : }
    1153             : 
    1154             : static const JSJitInfo hasBeenReset_getterinfo = {
    1155             :   { (JSJitGetterOp)get_hasBeenReset },
    1156             :   { prototypes::id::VTTCue },
    1157             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
    1158             :   JSJitInfo::Getter,
    1159             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1160             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    1161             :   true,  /* isInfallible. False in setters. */
    1162             :   false,  /* isMovable.  Not relevant for setters. */
    1163             :   false, /* isEliminatable.  Not relevant for setters. */
    1164             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1165             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1166             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1167             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1168             : };
    1169             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1170             : static_assert(0 < 1, "There is no slot for us");
    1171             : 
    1172             : static bool
    1173           0 : get_computedLine(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
    1174             : {
    1175           0 :   double result(self->ComputedLine());
    1176           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1177           0 :   args.rval().set(JS_NumberValue(double(result)));
    1178           0 :   return true;
    1179             : }
    1180             : 
    1181             : static const JSJitInfo computedLine_getterinfo = {
    1182             :   { (JSJitGetterOp)get_computedLine },
    1183             :   { prototypes::id::VTTCue },
    1184             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
    1185             :   JSJitInfo::Getter,
    1186             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1187             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    1188             :   true,  /* isInfallible. False in setters. */
    1189             :   false,  /* isMovable.  Not relevant for setters. */
    1190             :   false, /* isEliminatable.  Not relevant for setters. */
    1191             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1192             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1193             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1194             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1195             : };
    1196             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1197             : static_assert(0 < 1, "There is no slot for us");
    1198             : 
    1199             : static bool
    1200           0 : get_computedPosition(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
    1201             : {
    1202           0 :   double result(self->ComputedPosition());
    1203           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1204           0 :   args.rval().set(JS_NumberValue(double(result)));
    1205           0 :   return true;
    1206             : }
    1207             : 
    1208             : static const JSJitInfo computedPosition_getterinfo = {
    1209             :   { (JSJitGetterOp)get_computedPosition },
    1210             :   { prototypes::id::VTTCue },
    1211             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
    1212             :   JSJitInfo::Getter,
    1213             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1214             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    1215             :   true,  /* 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 : get_computedPositionAlign(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
    1228             : {
    1229           0 :   PositionAlignSetting result(self->ComputedPositionAlign());
    1230           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1231           0 :   if (!ToJSValue(cx, result, args.rval())) {
    1232           0 :     return false;
    1233             :   }
    1234           0 :   return true;
    1235             : }
    1236             : 
    1237             : static const JSJitInfo computedPositionAlign_getterinfo = {
    1238             :   { (JSJitGetterOp)get_computedPositionAlign },
    1239             :   { prototypes::id::VTTCue },
    1240             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
    1241             :   JSJitInfo::Getter,
    1242             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1243             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1244             :   false,  /* isInfallible. False in setters. */
    1245             :   false,  /* isMovable.  Not relevant for setters. */
    1246             :   false, /* isEliminatable.  Not relevant for setters. */
    1247             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1248             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1249             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1250             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1251             : };
    1252             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1253             : static_assert(0 < 1, "There is no slot for us");
    1254             : 
    1255             : static bool
    1256           0 : get_getActive(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
    1257             : {
    1258           0 :   bool result(self->GetActive());
    1259           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1260           0 :   args.rval().setBoolean(result);
    1261           0 :   return true;
    1262             : }
    1263             : 
    1264             : static const JSJitInfo getActive_getterinfo = {
    1265             :   { (JSJitGetterOp)get_getActive },
    1266             :   { prototypes::id::VTTCue },
    1267             :   { PrototypeTraits<prototypes::id::VTTCue>::Depth },
    1268             :   JSJitInfo::Getter,
    1269             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1270             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    1271             :   true,  /* isInfallible. False in setters. */
    1272             :   false,  /* isMovable.  Not relevant for setters. */
    1273             :   false, /* isEliminatable.  Not relevant for setters. */
    1274             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1275             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1276             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1277             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1278             : };
    1279             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1280             : static_assert(0 < 1, "There is no slot for us");
    1281             : 
    1282             : static bool
    1283           0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
    1284             : {
    1285           0 :   mozilla::dom::TextTrackCue* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TextTrackCue>(obj);
    1286             :   // We don't want to preserve if we don't have a wrapper, and we
    1287             :   // obviously can't preserve if we're not initialized.
    1288           0 :   if (self && self->GetWrapperPreserveColor()) {
    1289           0 :     PreserveWrapper(self);
    1290             :   }
    1291           0 :   return true;
    1292             : }
    1293             : 
    1294             : static void
    1295           0 : _finalize(js::FreeOp* fop, JSObject* obj)
    1296             : {
    1297           0 :   mozilla::dom::TextTrackCue* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TextTrackCue>(obj);
    1298           0 :   if (self) {
    1299           0 :     ClearWrapper(self, self, obj);
    1300           0 :     AddForDeferredFinalization<mozilla::dom::TextTrackCue>(self);
    1301             :   }
    1302           0 : }
    1303             : 
    1304             : static void
    1305           0 : _objectMoved(JSObject* obj, const JSObject* old)
    1306             : {
    1307           0 :   mozilla::dom::TextTrackCue* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TextTrackCue>(obj);
    1308           0 :   if (self) {
    1309           0 :     UpdateWrapper(self, self, obj, old);
    1310             :   }
    1311           0 : }
    1312             : 
    1313             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    1314             : #if defined(__clang__)
    1315             : #pragma clang diagnostic push
    1316             : #pragma clang diagnostic ignored "-Wmissing-braces"
    1317             : #endif
    1318             : static const JSFunctionSpec sMethods_specs[] = {
    1319             :   JS_FNSPEC("getCueAsHTML", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getCueAsHTML_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    1320             :   JS_FS_END
    1321             : };
    1322             : #if defined(__clang__)
    1323             : #pragma clang diagnostic pop
    1324             : #endif
    1325             : 
    1326             : 
    1327             : // Can't be const because the pref-enabled boolean needs to be writable
    1328             : static Prefable<const JSFunctionSpec> sMethods[] = {
    1329             :   { nullptr, &sMethods_specs[0] },
    1330             :   { nullptr, nullptr }
    1331             : };
    1332             : 
    1333             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    1334             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    1335             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    1336             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    1337             : 
    1338             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    1339             : #if defined(__clang__)
    1340             : #pragma clang diagnostic push
    1341             : #pragma clang diagnostic ignored "-Wmissing-braces"
    1342             : #endif
    1343             : static const JSPropertySpec sAttributes_specs[] = {
    1344             :   { "region", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &region_getterinfo, GenericBindingSetter, &region_setterinfo },
    1345             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    1346             :   { "vertical", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &vertical_getterinfo, GenericBindingSetter, &vertical_setterinfo },
    1347             :   { "snapToLines", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &snapToLines_getterinfo, GenericBindingSetter, &snapToLines_setterinfo },
    1348             :   { "line", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &line_getterinfo, GenericBindingSetter, &line_setterinfo },
    1349             :   { "lineAlign", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &lineAlign_getterinfo, GenericBindingSetter, &lineAlign_setterinfo },
    1350             :   { "position", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &position_getterinfo, GenericBindingSetter, &position_setterinfo },
    1351             :   { "positionAlign", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &positionAlign_getterinfo, GenericBindingSetter, &positionAlign_setterinfo },
    1352             :   { "size", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &size_getterinfo, GenericBindingSetter, &size_setterinfo },
    1353             :   { "align", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &align_getterinfo, GenericBindingSetter, &align_setterinfo },
    1354             :   { "text", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &text_getterinfo, GenericBindingSetter, &text_setterinfo },
    1355             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
    1356             : };
    1357             : #if defined(__clang__)
    1358             : #pragma clang diagnostic pop
    1359             : #endif
    1360             : 
    1361             : static PrefableDisablers sAttributes_disablers0 = {
    1362             :   true, false, 0, nullptr
    1363             : };
    1364             : 
    1365             : // Can't be const because the pref-enabled boolean needs to be writable
    1366             : static Prefable<const JSPropertySpec> sAttributes[] = {
    1367             :   { &sAttributes_disablers0, &sAttributes_specs[0] },
    1368             :   { nullptr, &sAttributes_specs[2] },
    1369             :   { nullptr, nullptr }
    1370             : };
    1371             : 
    1372             : static_assert(2 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    1373             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    1374             : static_assert(9 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    1375             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    1376             : 
    1377             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    1378             : #if defined(__clang__)
    1379             : #pragma clang diagnostic push
    1380             : #pragma clang diagnostic ignored "-Wmissing-braces"
    1381             : #endif
    1382             : static const JSPropertySpec sChromeAttributes_specs[] = {
    1383             :   { "displayState", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &displayState_getterinfo, GenericBindingSetter, &displayState_setterinfo },
    1384             :   { "hasBeenReset", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &hasBeenReset_getterinfo, nullptr, nullptr },
    1385             :   { "computedLine", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &computedLine_getterinfo, nullptr, nullptr },
    1386             :   { "computedPosition", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &computedPosition_getterinfo, nullptr, nullptr },
    1387             :   { "computedPositionAlign", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &computedPositionAlign_getterinfo, nullptr, nullptr },
    1388             :   { "getActive", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &getActive_getterinfo, nullptr, nullptr },
    1389             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
    1390             : };
    1391             : #if defined(__clang__)
    1392             : #pragma clang diagnostic pop
    1393             : #endif
    1394             : 
    1395             : 
    1396             : // Can't be const because the pref-enabled boolean needs to be writable
    1397             : static Prefable<const JSPropertySpec> sChromeAttributes[] = {
    1398             :   { nullptr, &sChromeAttributes_specs[0] },
    1399             :   { nullptr, nullptr }
    1400             : };
    1401             : 
    1402             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    1403             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    1404             : static_assert(6 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    1405             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    1406             : 
    1407             : 
    1408             : static uint16_t sNativeProperties_sortedPropertyIndices[11];
    1409             : static PropertyInfo sNativeProperties_propertyInfos[11];
    1410             : 
    1411             : static const NativePropertiesN<2> sNativeProperties = {
    1412             :   false, 0,
    1413             :   false, 0,
    1414             :   true,  0 /* sMethods */,
    1415             :   true,  1 /* sAttributes */,
    1416             :   false, 0,
    1417             :   false, 0,
    1418             :   false, 0,
    1419             :   -1,
    1420             :   11,
    1421             :   sNativeProperties_sortedPropertyIndices,
    1422             :   {
    1423             :     { sMethods, &sNativeProperties_propertyInfos[0] },
    1424             :     { sAttributes, &sNativeProperties_propertyInfos[1] }
    1425             :   }
    1426             : };
    1427             : static_assert(11 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
    1428             :     "We have a property info count that is oversized");
    1429             : 
    1430             : static uint16_t sChromeOnlyNativeProperties_sortedPropertyIndices[6];
    1431             : static PropertyInfo sChromeOnlyNativeProperties_propertyInfos[6];
    1432             : 
    1433             : static const NativePropertiesN<1> sChromeOnlyNativeProperties = {
    1434             :   false, 0,
    1435             :   false, 0,
    1436             :   false, 0,
    1437             :   true,  0 /* sChromeAttributes */,
    1438             :   false, 0,
    1439             :   false, 0,
    1440             :   false, 0,
    1441             :   -1,
    1442             :   6,
    1443             :   sChromeOnlyNativeProperties_sortedPropertyIndices,
    1444             :   {
    1445             :     { sChromeAttributes, &sChromeOnlyNativeProperties_propertyInfos[0] }
    1446             :   }
    1447             : };
    1448             : static_assert(6 < 1ull << CHAR_BIT * sizeof(sChromeOnlyNativeProperties.propertyInfoCount),
    1449             :     "We have a property info count that is oversized");
    1450             : 
    1451             : static bool
    1452           0 : _constructor(JSContext* cx, unsigned argc, JS::Value* vp)
    1453             : {
    1454           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
    1455           0 :   JS::Rooted<JSObject*> obj(cx, &args.callee());
    1456           0 :   if (!args.isConstructing()) {
    1457             :     // XXXbz wish I could get the name from the callee instead of
    1458             :     // Adding more relocations
    1459           0 :     return ThrowConstructorWithoutNew(cx, "VTTCue");
    1460             :   }
    1461             : 
    1462           0 :   GlobalObject global(cx, obj);
    1463           0 :   if (global.Failed()) {
    1464           0 :     return false;
    1465             :   }
    1466             : 
    1467           0 :   JS::Rooted<JSObject*> desiredProto(cx);
    1468           0 :   if (!GetDesiredProto(cx, args, &desiredProto)) {
    1469           0 :     return false;
    1470             :   }
    1471             : 
    1472           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    1473           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "VTTCue");
    1474             :   }
    1475           0 :   bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
    1476             :   double arg0;
    1477           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1478           0 :     return false;
    1479           0 :   } else if (!mozilla::IsFinite(arg0)) {
    1480           0 :     ThrowErrorMessage(cx, MSG_NOT_FINITE, "Argument 1 of VTTCue.constructor");
    1481           0 :     return false;
    1482             :   }
    1483             :   double arg1;
    1484           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    1485           0 :     return false;
    1486           0 :   } else if (!mozilla::IsFinite(arg1)) {
    1487           0 :     ThrowErrorMessage(cx, MSG_NOT_FINITE, "Argument 2 of VTTCue.constructor");
    1488           0 :     return false;
    1489             :   }
    1490           0 :   binding_detail::FakeString arg2;
    1491           0 :   if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2)) {
    1492           0 :     return false;
    1493             :   }
    1494           0 :   Maybe<JSAutoCompartment> ac;
    1495           0 :   if (objIsXray) {
    1496           0 :     obj = js::CheckedUnwrap(obj);
    1497           0 :     if (!obj) {
    1498           0 :       return false;
    1499             :     }
    1500           0 :     ac.emplace(cx, obj);
    1501           0 :     if (!JS_WrapObject(cx, &desiredProto)) {
    1502           0 :       return false;
    1503             :     }
    1504             :   }
    1505           0 :   binding_detail::FastErrorResult rv;
    1506           0 :   auto result(StrongOrRawPtr<mozilla::dom::TextTrackCue>(mozilla::dom::TextTrackCue::Constructor(global, arg0, arg1, NonNullHelper(Constify(arg2)), rv)));
    1507           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1508           0 :     return false;
    1509             :   }
    1510           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1511             :   static_assert(!IsPointer<decltype(result)>::value,
    1512             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    1513           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
    1514           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1515           0 :     return false;
    1516             :   }
    1517           0 :   return true;
    1518             : }
    1519             : 
    1520             : static const js::ClassOps sInterfaceObjectClassOps = {
    1521             :     nullptr,               /* addProperty */
    1522             :     nullptr,               /* delProperty */
    1523             :     nullptr,               /* getProperty */
    1524             :     nullptr,               /* setProperty */
    1525             :     nullptr,               /* enumerate */
    1526             :     nullptr,               /* newEnumerate */
    1527             :     nullptr,               /* resolve */
    1528             :     nullptr,               /* mayResolve */
    1529             :     nullptr,               /* finalize */
    1530             :     _constructor, /* call */
    1531             :     nullptr,               /* hasInstance */
    1532             :     _constructor, /* construct */
    1533             :     nullptr,               /* trace */
    1534             : };
    1535             : 
    1536             : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
    1537             :   {
    1538             :     "Function",
    1539             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
    1540             :     &sInterfaceObjectClassOps,
    1541             :     JS_NULL_CLASS_SPEC,
    1542             :     JS_NULL_CLASS_EXT,
    1543             :     &sInterfaceObjectClassObjectOps
    1544             :   },
    1545             :   eInterface,
    1546             :   true,
    1547             :   prototypes::id::VTTCue,
    1548             :   PrototypeTraits<prototypes::id::VTTCue>::Depth,
    1549             :   sNativePropertyHooks,
    1550             :   "function VTTCue() {\n    [native code]\n}",
    1551             :   TextTrackCueBinding::GetConstructorObject
    1552             : };
    1553             : 
    1554             : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
    1555             :   {
    1556             :     "VTTCuePrototype",
    1557             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
    1558             :     JS_NULL_CLASS_OPS,
    1559             :     JS_NULL_CLASS_SPEC,
    1560             :     JS_NULL_CLASS_EXT,
    1561             :     JS_NULL_OBJECT_OPS
    1562             :   },
    1563             :   eInterfacePrototype,
    1564             :   false,
    1565             :   prototypes::id::VTTCue,
    1566             :   PrototypeTraits<prototypes::id::VTTCue>::Depth,
    1567             :   sNativePropertyHooks,
    1568             :   "[object VTTCuePrototype]",
    1569             :   TextTrackCueBinding::GetProtoObject
    1570             : };
    1571             : 
    1572             : JSObject*
    1573           0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
    1574             : {
    1575           0 :   return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
    1576             : }
    1577             : 
    1578             : static const js::ClassOps sClassOps = {
    1579             :   _addProperty, /* addProperty */
    1580             :   nullptr,               /* delProperty */
    1581             :   nullptr,               /* getProperty */
    1582             :   nullptr,               /* setProperty */
    1583             :   nullptr,               /* enumerate */
    1584             :   nullptr, /* newEnumerate */
    1585             :   nullptr, /* resolve */
    1586             :   nullptr, /* mayResolve */
    1587             :   _finalize, /* finalize */
    1588             :   nullptr, /* call */
    1589             :   nullptr,               /* hasInstance */
    1590             :   nullptr,               /* construct */
    1591             :   nullptr, /* trace */
    1592             : };
    1593             : 
    1594             : static const js::ClassExtension sClassExtension = {
    1595             :   nullptr, /* weakmapKeyDelegateOp */
    1596             :   _objectMoved /* objectMovedOp */
    1597             : };
    1598             : 
    1599             : static const DOMJSClass sClass = {
    1600             :   { "VTTCue",
    1601             :     JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
    1602             :     &sClassOps,
    1603             :     JS_NULL_CLASS_SPEC,
    1604             :     &sClassExtension,
    1605             :     JS_NULL_OBJECT_OPS
    1606             :   },
    1607             :   { prototypes::id::EventTarget, prototypes::id::TextTrackCue, prototypes::id::VTTCue, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
    1608             :   IsBaseOf<nsISupports, mozilla::dom::TextTrackCue >::value,
    1609             :   sNativePropertyHooks,
    1610             :   FindAssociatedGlobalForNative<mozilla::dom::TextTrackCue>::Get,
    1611             :   GetProtoObjectHandle,
    1612             :   GetCCParticipant<mozilla::dom::TextTrackCue>::Get()
    1613             : };
    1614             : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
    1615             :               "Must have the right minimal number of reserved slots.");
    1616             : static_assert(1 >= 1,
    1617             :               "Must have enough reserved slots.");
    1618             : 
    1619             : const JSClass*
    1620           0 : GetJSClass()
    1621             : {
    1622           0 :   return sClass.ToJSClass();
    1623             : }
    1624             : 
    1625             : bool
    1626           0 : Wrap(JSContext* aCx, mozilla::dom::TextTrackCue* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
    1627             : {
    1628             :   MOZ_ASSERT(static_cast<mozilla::dom::TextTrackCue*>(aObject) ==
    1629             :              reinterpret_cast<mozilla::dom::TextTrackCue*>(aObject),
    1630             :              "Multiple inheritance for mozilla::dom::TextTrackCue is broken.");
    1631             :   MOZ_ASSERT(static_cast<mozilla::dom::TextTrackCue*>(aObject) ==
    1632             :              reinterpret_cast<mozilla::dom::TextTrackCue*>(aObject),
    1633             :              "Multiple inheritance for mozilla::dom::TextTrackCue is broken.");
    1634             :   MOZ_ASSERT(static_cast<mozilla::dom::EventTarget*>(aObject) ==
    1635             :              reinterpret_cast<mozilla::dom::EventTarget*>(aObject),
    1636             :              "Multiple inheritance for mozilla::dom::EventTarget is broken.");
    1637           0 :   MOZ_ASSERT(ToSupportsIsCorrect(aObject));
    1638           0 :   MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
    1639           0 :   MOZ_ASSERT(!aCache->GetWrapper(),
    1640             :              "You should probably not be using Wrap() directly; use "
    1641             :              "GetOrCreateDOMReflector instead");
    1642             : 
    1643           0 :   MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
    1644             :              "nsISupports must be on our primary inheritance chain");
    1645             : 
    1646           0 :   JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
    1647           0 :   if (!global) {
    1648           0 :     return false;
    1649             :   }
    1650           0 :   MOZ_ASSERT(JS_IsGlobalObject(global));
    1651           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(global));
    1652             : 
    1653             :   // That might have ended up wrapping us already, due to the wonders
    1654             :   // of XBL.  Check for that, and bail out as needed.
    1655           0 :   aReflector.set(aCache->GetWrapper());
    1656           0 :   if (aReflector) {
    1657             : #ifdef DEBUG
    1658           0 :     binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
    1659             : #endif // DEBUG
    1660           0 :     return true;
    1661             :   }
    1662             : 
    1663           0 :   JSAutoCompartment ac(aCx, global);
    1664           0 :   JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
    1665           0 :   if (!canonicalProto) {
    1666           0 :     return false;
    1667             :   }
    1668           0 :   JS::Rooted<JSObject*> proto(aCx);
    1669           0 :   if (aGivenProto) {
    1670           0 :     proto = aGivenProto;
    1671             :     // Unfortunately, while aGivenProto was in the compartment of aCx
    1672             :     // coming in, we changed compartments to that of "parent" so may need
    1673             :     // to wrap the proto here.
    1674           0 :     if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
    1675           0 :       if (!JS_WrapObject(aCx, &proto)) {
    1676           0 :         return false;
    1677             :       }
    1678             :     }
    1679             :   } else {
    1680           0 :     proto = canonicalProto;
    1681             :   }
    1682             : 
    1683           0 :   BindingJSObjectCreator<mozilla::dom::TextTrackCue> creator(aCx);
    1684           0 :   creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
    1685           0 :   if (!aReflector) {
    1686           0 :     return false;
    1687             :   }
    1688             : 
    1689           0 :   aCache->SetWrapper(aReflector);
    1690           0 :   creator.InitializationSucceeded();
    1691             : 
    1692           0 :   MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
    1693             :              aCache->GetWrapperPreserveColor() == aReflector);
    1694             :   // If proto != canonicalProto, we have to preserve our wrapper;
    1695             :   // otherwise we won't be able to properly recreate it later, since
    1696             :   // we won't know what proto to use.  Note that we don't check
    1697             :   // aGivenProto here, since it's entirely possible (and even
    1698             :   // somewhat common) to have a non-null aGivenProto which is the
    1699             :   // same as canonicalProto.
    1700           0 :   if (proto != canonicalProto) {
    1701           0 :     PreserveWrapper(aObject);
    1702             :   }
    1703             : 
    1704           0 :   return true;
    1705             : }
    1706             : 
    1707             : const NativePropertyHooks sNativePropertyHooks[] = { {
    1708             :   nullptr,
    1709             :   nullptr,
    1710             :   nullptr,
    1711             :   { sNativeProperties.Upcast(), sChromeOnlyNativeProperties.Upcast() },
    1712             :   prototypes::id::VTTCue,
    1713             :   constructors::id::VTTCue,
    1714             :   TextTrackCueBinding::sNativePropertyHooks,
    1715             :   &DefaultXrayExpandoObjectClass
    1716             : } };
    1717             : 
    1718             : void
    1719           0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
    1720             : {
    1721           0 :   JS::Handle<JSObject*> parentProto(TextTrackCueBinding::GetProtoObjectHandle(aCx));
    1722           0 :   if (!parentProto) {
    1723           0 :     return;
    1724             :   }
    1725             : 
    1726           0 :   JS::Handle<JSObject*> constructorProto(TextTrackCueBinding::GetConstructorObjectHandle(aCx));
    1727           0 :   if (!constructorProto) {
    1728           0 :     return;
    1729             :   }
    1730             : 
    1731             :   static bool sIdsInited = false;
    1732           0 :   if (!sIdsInited && NS_IsMainThread()) {
    1733           0 :     if (!InitIds(aCx, sNativeProperties.Upcast())) {
    1734           0 :       return;
    1735             :     }
    1736           0 :     if (!InitIds(aCx, sChromeOnlyNativeProperties.Upcast())) {
    1737           0 :       return;
    1738             :     }
    1739           0 :     sIdsInited = true;
    1740             :   }
    1741             : 
    1742             :   static bool sPrefCachesInited = false;
    1743           0 :   if (!sPrefCachesInited && NS_IsMainThread()) {
    1744           0 :     sPrefCachesInited = true;
    1745           0 :     Preferences::AddBoolVarCache(&sAttributes[0].disablers->enabled, "media.webvtt.regions.enabled");
    1746             :   }
    1747             : 
    1748           0 :   JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::VTTCue);
    1749           0 :   JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::VTTCue);
    1750           0 :   dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
    1751             :                               &sPrototypeClass.mBase, protoCache,
    1752             :                               constructorProto, &sInterfaceObjectClass.mBase, 3, nullptr,
    1753             :                               interfaceCache,
    1754             :                               sNativeProperties.Upcast(),
    1755           0 :                               nsContentUtils::ThreadsafeIsSystemCaller(aCx) ? sChromeOnlyNativeProperties.Upcast() : nullptr,
    1756             :                               "VTTCue", aDefineOnGlobal,
    1757             :                               nullptr,
    1758           0 :                               false);
    1759             : }
    1760             : 
    1761             : JS::Handle<JSObject*>
    1762           0 : GetProtoObjectHandle(JSContext* aCx)
    1763             : {
    1764             :   /* Get the interface prototype object for this class.  This will create the
    1765             :      object as needed. */
    1766           0 :   bool aDefineOnGlobal = true;
    1767             : 
    1768             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    1769           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    1770           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    1771           0 :     return nullptr;
    1772             :   }
    1773             : 
    1774             :   /* Check to see whether the interface objects are already installed */
    1775           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    1776           0 :   if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::VTTCue)) {
    1777           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    1778           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    1779             :   }
    1780             : 
    1781             :   /*
    1782             :    * The object might _still_ be null, but that's OK.
    1783             :    *
    1784             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    1785             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    1786             :    * changed after they have been set.
    1787             :    *
    1788             :    * Calling address() avoids the read read barrier that does gray
    1789             :    * unmarking, but it's not possible for the object to be gray here.
    1790             :    */
    1791             : 
    1792           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::VTTCue);
    1793           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    1794           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    1795             : }
    1796             : 
    1797             : JS::Handle<JSObject*>
    1798           0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
    1799             : {
    1800             :   /* Get the interface object for this class.  This will create the object as
    1801             :      needed. */
    1802             : 
    1803             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    1804           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    1805           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    1806           0 :     return nullptr;
    1807             :   }
    1808             : 
    1809             :   /* Check to see whether the interface objects are already installed */
    1810           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    1811           0 :   if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::VTTCue)) {
    1812           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    1813           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    1814             :   }
    1815             : 
    1816             :   /*
    1817             :    * The object might _still_ be null, but that's OK.
    1818             :    *
    1819             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    1820             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    1821             :    * changed after they have been set.
    1822             :    *
    1823             :    * Calling address() avoids the read read barrier that does gray
    1824             :    * unmarking, but it's not possible for the object to be gray here.
    1825             :    */
    1826             : 
    1827           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::VTTCue);
    1828           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    1829           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    1830             : }
    1831             : 
    1832             : JSObject*
    1833           0 : GetConstructorObject(JSContext* aCx)
    1834             : {
    1835           0 :   return GetConstructorObjectHandle(aCx);
    1836             : }
    1837             : 
    1838             : } // namespace VTTCueBinding
    1839             : 
    1840             : 
    1841             : 
    1842             : } // namespace dom
    1843             : } // namespace mozilla

Generated by: LCOV version 1.13