LCOV - code coverage report
Current view: top level - obj-x86_64-pc-linux-gnu/dom/bindings - DocumentBinding.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 281 3978 7.1 %
Date: 2017-07-14 16:53:18 Functions: 32 353 9.1 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* THIS FILE IS AUTOGENERATED FROM Document.webidl BY Codegen.py - DO NOT EDIT */
       2             : 
       3             : #include "AtomList.h"
       4             : #include "CustomElementRegistry.h"
       5             : #include "DOMPointBinding.h"
       6             : #include "DocumentBinding.h"
       7             : #include "EventHandlerBinding.h"
       8             : #include "GeometryUtilsBinding.h"
       9             : #include "NodeBinding.h"
      10             : #include "NodeFilterBinding.h"
      11             : #include "WebComponentsBinding.h"
      12             : #include "WrapperFactory.h"
      13             : #include "XPathNSResolverBinding.h"
      14             : #include "jsapi.h"
      15             : #include "mozilla/FloatingPoint.h"
      16             : #include "mozilla/OwningNonNull.h"
      17             : #include "mozilla/Preferences.h"
      18             : #include "mozilla/dom/Animation.h"
      19             : #include "mozilla/dom/AnonymousContent.h"
      20             : #include "mozilla/dom/Attr.h"
      21             : #include "mozilla/dom/BindingUtils.h"
      22             : #include "mozilla/dom/CDATASection.h"
      23             : #include "mozilla/dom/Comment.h"
      24             : #include "mozilla/dom/CustomElementRegistry.h"
      25             : #include "mozilla/dom/DOMImplementation.h"
      26             : #include "mozilla/dom/DOMJSClass.h"
      27             : #include "mozilla/dom/DOMPoint.h"
      28             : #include "mozilla/dom/DOMQuad.h"
      29             : #include "mozilla/dom/DOMRect.h"
      30             : #include "mozilla/dom/DOMStringList.h"
      31             : #include "mozilla/dom/DocumentFragment.h"
      32             : #include "mozilla/dom/DocumentTimeline.h"
      33             : #include "mozilla/dom/DocumentType.h"
      34             : #include "mozilla/dom/Element.h"
      35             : #include "mozilla/dom/Event.h"
      36             : #include "mozilla/dom/EventTarget.h"
      37             : #include "mozilla/dom/FontFaceSet.h"
      38             : #include "mozilla/dom/Location.h"
      39             : #include "mozilla/dom/NodeIterator.h"
      40             : #include "mozilla/dom/NonRefcountedDOMObject.h"
      41             : #include "mozilla/dom/Nullable.h"
      42             : #include "mozilla/dom/PrimitiveConversions.h"
      43             : #include "mozilla/dom/ProcessingInstruction.h"
      44             : #include "mozilla/dom/Promise.h"
      45             : #include "mozilla/dom/SVGSVGElement.h"
      46             : #include "mozilla/dom/ScriptSettings.h"
      47             : #include "mozilla/dom/SimpleGlobalObject.h"
      48             : #include "mozilla/dom/StyleSheetList.h"
      49             : #include "mozilla/dom/ToJSValue.h"
      50             : #include "mozilla/dom/Touch.h"
      51             : #include "mozilla/dom/TouchEvent.h"
      52             : #include "mozilla/dom/TreeWalker.h"
      53             : #include "mozilla/dom/UnionConversions.h"
      54             : #include "mozilla/dom/UnionTypes.h"
      55             : #include "mozilla/dom/XPathExpression.h"
      56             : #include "mozilla/dom/XPathResult.h"
      57             : #include "mozilla/dom/XrayExpandoClass.h"
      58             : #include "nsContentList.h"
      59             : #include "nsContentUtils.h"
      60             : #include "nsDOMCaretPosition.h"
      61             : #include "nsDocument.h"
      62             : #include "nsGenericHTMLElement.h"
      63             : #include "nsGlobalWindow.h"
      64             : #include "nsIDocShell.h"
      65             : #include "nsIDocument.h"
      66             : #include "nsILoadGroup.h"
      67             : #include "nsINode.h"
      68             : #include "nsINodeList.h"
      69             : #include "nsISupports.h"
      70             : #include "nsIURI.h"
      71             : #include "nsPIDOMWindow.h"
      72             : #include "nsRange.h"
      73             : #include "nsTextNode.h"
      74             : #include "xpcjsid.h"
      75             : 
      76             : namespace mozilla {
      77             : namespace dom {
      78             : 
      79             : namespace VisibilityStateValues {
      80             : extern const EnumEntry strings[4] = {
      81             :   {"hidden", 6},
      82             :   {"visible", 7},
      83             :   {"prerender", 9},
      84             :   { nullptr, 0 }
      85             : };
      86             : } // namespace VisibilityStateValues
      87             : 
      88             : bool
      89           0 : ToJSValue(JSContext* aCx, VisibilityState aArgument, JS::MutableHandle<JS::Value> aValue)
      90             : {
      91           0 :   MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(VisibilityStateValues::strings));
      92             :   JSString* resultStr =
      93           0 :     JS_NewStringCopyN(aCx, VisibilityStateValues::strings[uint32_t(aArgument)].value,
      94           0 :                       VisibilityStateValues::strings[uint32_t(aArgument)].length);
      95           0 :   if (!resultStr) {
      96           0 :     return false;
      97             :   }
      98           0 :   aValue.setString(resultStr);
      99           0 :   return true;
     100             : }
     101             : 
     102             : 
     103             : namespace FlashClassificationValues {
     104             : extern const EnumEntry strings[5] = {
     105             :   {"unclassified", 12},
     106             :   {"unknown", 7},
     107             :   {"allowed", 7},
     108             :   {"denied", 6},
     109             :   { nullptr, 0 }
     110             : };
     111             : } // namespace FlashClassificationValues
     112             : 
     113             : bool
     114           0 : ToJSValue(JSContext* aCx, FlashClassification aArgument, JS::MutableHandle<JS::Value> aValue)
     115             : {
     116           0 :   MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(FlashClassificationValues::strings));
     117             :   JSString* resultStr =
     118           0 :     JS_NewStringCopyN(aCx, FlashClassificationValues::strings[uint32_t(aArgument)].value,
     119           0 :                       FlashClassificationValues::strings[uint32_t(aArgument)].length);
     120           0 :   if (!resultStr) {
     121           0 :     return false;
     122             :   }
     123           0 :   aValue.setString(resultStr);
     124           0 :   return true;
     125             : }
     126             : 
     127             : 
     128             : 
     129           0 : ElementCreationOptions::ElementCreationOptions()
     130             : {
     131             :   // Safe to pass a null context if we pass a null value
     132           0 :   Init(nullptr, JS::NullHandleValue);
     133           0 : }
     134             : 
     135             : 
     136             : 
     137             : bool
     138           1 : ElementCreationOptions::InitIds(JSContext* cx, ElementCreationOptionsAtoms* atomsCache)
     139             : {
     140           1 :   MOZ_ASSERT(!*reinterpret_cast<jsid**>(atomsCache));
     141             : 
     142             :   // Initialize these in reverse order so that any failure leaves the first one
     143             :   // uninitialized.
     144           2 :   if (!atomsCache->pseudo_id.init(cx, "pseudo") ||
     145           1 :       !atomsCache->is_id.init(cx, "is")) {
     146           0 :     return false;
     147             :   }
     148           1 :   return true;
     149             : }
     150             : 
     151             : bool
     152          56 : ElementCreationOptions::Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription, bool passedToJSImpl)
     153             : {
     154             :   // Passing a null JSContext is OK only if we're initing from null,
     155             :   // Since in that case we will not have to do any property gets
     156             :   // Also evaluate isNullOrUndefined in order to avoid false-positive
     157             :   // checkers by static analysis tools
     158          56 :   MOZ_ASSERT_IF(!cx, val.isNull() && val.isNullOrUndefined());
     159          56 :   ElementCreationOptionsAtoms* atomsCache = nullptr;
     160          56 :   if (cx) {
     161          56 :     atomsCache = GetAtomCache<ElementCreationOptionsAtoms>(cx);
     162          56 :     if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
     163           0 :       return false;
     164             :     }
     165             :   }
     166             : 
     167          56 :   if (!IsConvertibleToDictionary(val)) {
     168           0 :     return ThrowErrorMessage(cx, MSG_NOT_DICTIONARY, sourceDescription);
     169             :   }
     170             : 
     171          56 :   bool isNull = val.isNullOrUndefined();
     172             :   // We only need these if !isNull, in which case we have |cx|.
     173         112 :   Maybe<JS::Rooted<JSObject *> > object;
     174         112 :   Maybe<JS::Rooted<JS::Value> > temp;
     175          56 :   if (!isNull) {
     176           0 :     MOZ_ASSERT(cx);
     177           0 :     object.emplace(cx, &val.toObject());
     178           0 :     temp.emplace(cx);
     179             :   }
     180          56 :   if (!isNull) {
     181           0 :     if (!JS_GetPropertyById(cx, *object, atomsCache->is_id, temp.ptr())) {
     182           0 :       return false;
     183             :     }
     184             :   }
     185          56 :   if (!isNull && !temp->isUndefined()) {
     186           0 :     mIs.Construct();
     187           0 :     if (!ConvertJSValueToString(cx, temp.ref(), eStringify, eStringify, (mIs.Value()))) {
     188           0 :       return false;
     189             :     }
     190           0 :     mIsAnyMemberPresent = true;
     191             :   }
     192             : 
     193          56 :   if (!isNull) {
     194           0 :     if (nsContentUtils::ThreadsafeIsSystemCaller(cx)) {
     195           0 :       if (!JS_GetPropertyById(cx, *object, atomsCache->pseudo_id, temp.ptr())) {
     196           0 :         return false;
     197             :       }
     198             :     } else {
     199           0 :       temp->setUndefined();
     200             :     }
     201             :   }
     202          56 :   if (!isNull && !temp->isUndefined()) {
     203           0 :     mPseudo.Construct();
     204           0 :     if (!ConvertJSValueToString(cx, temp.ref(), eStringify, eStringify, (mPseudo.Value()))) {
     205           0 :       return false;
     206             :     }
     207           0 :     mIsAnyMemberPresent = true;
     208             :   }
     209          56 :   return true;
     210             : }
     211             : 
     212             : bool
     213           0 : ElementCreationOptions::Init(const nsAString& aJSON)
     214             : {
     215           0 :   AutoJSAPI jsapi;
     216           0 :   JSObject* cleanGlobal = SimpleGlobalObject::Create(SimpleGlobalObject::GlobalType::BindingDetail);
     217           0 :   if (!cleanGlobal) {
     218           0 :     return false;
     219             :   }
     220           0 :   if (!jsapi.Init(cleanGlobal)) {
     221           0 :     return false;
     222             :   }
     223           0 :   JSContext* cx = jsapi.cx();
     224           0 :   JS::Rooted<JS::Value> json(cx);
     225           0 :   bool ok = ParseJSON(cx, aJSON, &json);
     226           0 :   NS_ENSURE_TRUE(ok, false);
     227           0 :   return Init(cx, json);
     228             : }
     229             : 
     230             : bool
     231           0 : ElementCreationOptions::ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const
     232             : {
     233           0 :   ElementCreationOptionsAtoms* atomsCache = GetAtomCache<ElementCreationOptionsAtoms>(cx);
     234           0 :   if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
     235           0 :     return false;
     236             :   }
     237             : 
     238           0 :   JS::Rooted<JSObject*> obj(cx, JS_NewPlainObject(cx));
     239           0 :   if (!obj) {
     240           0 :     return false;
     241             :   }
     242           0 :   rval.set(JS::ObjectValue(*obj));
     243             : 
     244           0 :   if (mIs.WasPassed()) {
     245             :     do {
     246             :       // block for our 'break' successCode and scope for 'temp' and 'currentValue'
     247           0 :       JS::Rooted<JS::Value> temp(cx);
     248           0 :       nsString const & currentValue = mIs.InternalValue();
     249           0 :       if (!xpc::NonVoidStringToJsval(cx, currentValue, &temp)) {
     250           0 :         return false;
     251             :       }
     252           0 :       if (!JS_DefinePropertyById(cx, obj, atomsCache->is_id, temp, JSPROP_ENUMERATE)) {
     253           0 :         return false;
     254             :       }
     255           0 :       break;
     256             :     } while(0);
     257             :   }
     258             : 
     259           0 :   if (nsContentUtils::ThreadsafeIsSystemCaller(cx)) {
     260           0 :     if (mPseudo.WasPassed()) {
     261             :       do {
     262             :         // block for our 'break' successCode and scope for 'temp' and 'currentValue'
     263           0 :         JS::Rooted<JS::Value> temp(cx);
     264           0 :         nsString const & currentValue = mPseudo.InternalValue();
     265           0 :         if (!xpc::NonVoidStringToJsval(cx, currentValue, &temp)) {
     266           0 :           return false;
     267             :         }
     268           0 :         if (!JS_DefinePropertyById(cx, obj, atomsCache->pseudo_id, temp, JSPROP_ENUMERATE)) {
     269           0 :           return false;
     270             :         }
     271           0 :         break;
     272             :       } while(0);
     273             :     }
     274             :   }
     275             : 
     276           0 :   return true;
     277             : }
     278             : 
     279             : bool
     280           0 : ElementCreationOptions::ToJSON(nsAString& aJSON) const
     281             : {
     282           0 :   AutoJSAPI jsapi;
     283           0 :   jsapi.Init();
     284           0 :   JSContext *cx = jsapi.cx();
     285             :   // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here
     286             :   // because we'll only be creating objects, in ways that have no
     287             :   // side-effects, followed by a call to JS::ToJSONMaybeSafely,
     288             :   // which likewise guarantees no side-effects for the sorts of
     289             :   // things we will pass it.
     290           0 :   JSAutoCompartment ac(cx, binding_detail::UnprivilegedJunkScopeOrWorkerGlobal());
     291           0 :   JS::Rooted<JS::Value> val(cx);
     292           0 :   if (!ToObjectInternal(cx, &val)) {
     293           0 :     return false;
     294             :   }
     295           0 :   JS::Rooted<JSObject*> obj(cx, &val.toObject());
     296           0 :   return StringifyToJSON(cx, obj, aJSON);
     297             : }
     298             : 
     299             : void
     300           0 : ElementCreationOptions::TraceDictionary(JSTracer* trc)
     301             : {
     302           0 : }
     303             : 
     304             : ElementCreationOptions&
     305           0 : ElementCreationOptions::operator=(const ElementCreationOptions& aOther)
     306             : {
     307           0 :   mIs.Reset();
     308           0 :   if (aOther.mIs.WasPassed()) {
     309           0 :     mIs.Construct(aOther.mIs.Value());
     310             :   }
     311           0 :   mPseudo.Reset();
     312           0 :   if (aOther.mPseudo.WasPassed()) {
     313           0 :     mPseudo.Construct(aOther.mPseudo.Value());
     314             :   }
     315           0 :   return *this;
     316             : }
     317             : 
     318             : namespace binding_detail {
     319             : } // namespace binding_detail
     320             : 
     321             : 
     322             : bool
     323           0 : ElementCreationOptionsOrString::ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const
     324             : {
     325           0 :   switch (mType) {
     326             :     case eUninitialized: {
     327           0 :       return false;
     328             :       break;
     329             :     }
     330             :     case eElementCreationOptions: {
     331           0 :       if (!mValue.mElementCreationOptions.Value().ToObjectInternal(cx, rval)) {
     332           0 :         return false;
     333             :       }
     334           0 :       return true;
     335             :       break;
     336             :     }
     337             :     case eString: {
     338           0 :       if (!xpc::NonVoidStringToJsval(cx, mValue.mString.Value(), rval)) {
     339           0 :         return false;
     340             :       }
     341           0 :       return true;
     342             :       break;
     343             :     }
     344             :     default: {
     345           0 :       return false;
     346             :       break;
     347             :     }
     348             :   }
     349             : 
     350             :   return false;
     351             : }
     352             : 
     353             : 
     354             : ElementCreationOptions&
     355           0 : OwningElementCreationOptionsOrString::RawSetAsElementCreationOptions()
     356             : {
     357           0 :   if (mType == eElementCreationOptions) {
     358           0 :     return mValue.mElementCreationOptions.Value();
     359             :   }
     360           0 :   MOZ_ASSERT(mType == eUninitialized);
     361           0 :   mType = eElementCreationOptions;
     362           0 :   return mValue.mElementCreationOptions.SetValue();
     363             : }
     364             : 
     365             : ElementCreationOptions&
     366           0 : OwningElementCreationOptionsOrString::SetAsElementCreationOptions()
     367             : {
     368           0 :   if (mType == eElementCreationOptions) {
     369           0 :     return mValue.mElementCreationOptions.Value();
     370             :   }
     371           0 :   Uninit();
     372           0 :   mType = eElementCreationOptions;
     373           0 :   return mValue.mElementCreationOptions.SetValue();
     374             : }
     375             : 
     376             : bool
     377           0 : OwningElementCreationOptionsOrString::TrySetToElementCreationOptions(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl)
     378             : {
     379           0 :   tryNext = false;
     380             :   { // scope for memberSlot
     381           0 :     ElementCreationOptions& memberSlot = RawSetAsElementCreationOptions();
     382           0 :     if (!IsConvertibleToDictionary(value)) {
     383           0 :       DestroyElementCreationOptions();
     384           0 :       tryNext = true;
     385           0 :       return true;
     386             :     }
     387           0 :     if (!memberSlot.Init(cx, value,  "Member of ElementCreationOptionsOrString", passedToJSImpl)) {
     388           0 :       return false;
     389             :     }
     390             :   }
     391           0 :   return true;
     392             : }
     393             : 
     394             : void
     395           0 : OwningElementCreationOptionsOrString::DestroyElementCreationOptions()
     396             : {
     397           0 :   MOZ_ASSERT(IsElementCreationOptions(), "Wrong type!");
     398           0 :   mValue.mElementCreationOptions.Destroy();
     399           0 :   mType = eUninitialized;
     400           0 : }
     401             : 
     402             : 
     403             : 
     404             : 
     405             : nsString&
     406           0 : OwningElementCreationOptionsOrString::RawSetAsString()
     407             : {
     408           0 :   if (mType == eString) {
     409           0 :     return mValue.mString.Value();
     410             :   }
     411           0 :   MOZ_ASSERT(mType == eUninitialized);
     412           0 :   mType = eString;
     413           0 :   return mValue.mString.SetValue();
     414             : }
     415             : 
     416             : nsString&
     417           0 : OwningElementCreationOptionsOrString::SetAsString()
     418             : {
     419           0 :   if (mType == eString) {
     420           0 :     return mValue.mString.Value();
     421             :   }
     422           0 :   Uninit();
     423           0 :   mType = eString;
     424           0 :   return mValue.mString.SetValue();
     425             : }
     426             : 
     427             : bool
     428           0 : OwningElementCreationOptionsOrString::TrySetToString(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl)
     429             : {
     430           0 :   tryNext = false;
     431             :   { // scope for memberSlot
     432           0 :     nsString& memberSlot = RawSetAsString();
     433           0 :     if (!ConvertJSValueToString(cx, value, eStringify, eStringify, memberSlot)) {
     434           0 :       return false;
     435             :     }
     436             :   }
     437           0 :   return true;
     438             : }
     439             : 
     440             : 
     441             : void
     442           0 : OwningElementCreationOptionsOrString::DestroyString()
     443             : {
     444           0 :   MOZ_ASSERT(IsString(), "Wrong type!");
     445           0 :   mValue.mString.Destroy();
     446           0 :   mType = eUninitialized;
     447           0 : }
     448             : 
     449             : 
     450             : 
     451             : 
     452             : void
     453           0 : OwningElementCreationOptionsOrString::Uninit()
     454             : {
     455           0 :   switch (mType) {
     456             :     case eUninitialized: {
     457           0 :       break;
     458             :     }
     459             :     case eElementCreationOptions: {
     460           0 :       DestroyElementCreationOptions();
     461           0 :       break;
     462             :     }
     463             :     case eString: {
     464           0 :       DestroyString();
     465           0 :       break;
     466             :     }
     467             :   }
     468           0 : }
     469             : 
     470             : bool
     471           0 : OwningElementCreationOptionsOrString::ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const
     472             : {
     473           0 :   switch (mType) {
     474             :     case eUninitialized: {
     475           0 :       return false;
     476             :       break;
     477             :     }
     478             :     case eElementCreationOptions: {
     479           0 :       if (!mValue.mElementCreationOptions.Value().ToObjectInternal(cx, rval)) {
     480           0 :         return false;
     481             :       }
     482           0 :       return true;
     483             :       break;
     484             :     }
     485             :     case eString: {
     486           0 :       if (!xpc::NonVoidStringToJsval(cx, mValue.mString.Value(), rval)) {
     487           0 :         return false;
     488             :       }
     489           0 :       return true;
     490             :       break;
     491             :     }
     492             :     default: {
     493           0 :       return false;
     494             :       break;
     495             :     }
     496             :   }
     497             : 
     498             :   return false;
     499             : }
     500             : 
     501             : void
     502           0 : OwningElementCreationOptionsOrString::TraceUnion(JSTracer* trc)
     503             : {
     504           0 : }
     505             : 
     506             : OwningElementCreationOptionsOrString&
     507           0 : OwningElementCreationOptionsOrString::operator=(const OwningElementCreationOptionsOrString& aOther)
     508             : {
     509           0 :   switch (aOther.mType) {
     510             :     case eUninitialized: {
     511           0 :       MOZ_ASSERT(mType == eUninitialized,
     512             :                  "We need to destroy ourselves?");
     513           0 :       break;
     514             :     }
     515             :     case eElementCreationOptions: {
     516           0 :       SetAsElementCreationOptions() = aOther.GetAsElementCreationOptions();
     517           0 :       break;
     518             :     }
     519             :     case eString: {
     520           0 :       SetAsString() = aOther.GetAsString();
     521           0 :       break;
     522             :     }
     523             :   }
     524           0 :   return *this;
     525             : }
     526             : 
     527             : 
     528             : namespace DocumentBinding {
     529             : 
     530             : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<NodeBinding::NativeType>::value,
     531             :               "Can't inherit from an interface with a different ownership model.");
     532             : 
     533             : static bool
     534           0 : get_implementation(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
     535             : {
     536           0 :   binding_detail::FastErrorResult rv;
     537           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMImplementation>(self->GetImplementation(rv)));
     538           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     539           0 :     return false;
     540             :   }
     541           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     542           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
     543           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     544           0 :     return false;
     545             :   }
     546           0 :   return true;
     547             : }
     548             : 
     549             : static const JSJitInfo implementation_getterinfo = {
     550             :   { (JSJitGetterOp)get_implementation },
     551             :   { prototypes::id::Document },
     552             :   { PrototypeTraits<prototypes::id::Document>::Depth },
     553             :   JSJitInfo::Getter,
     554             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     555             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
     556             :   false,  /* isInfallible. False in setters. */
     557             :   false,  /* isMovable.  Not relevant for setters. */
     558             :   false, /* isEliminatable.  Not relevant for setters. */
     559             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     560             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     561             :   false,  /* isTypedMethod.  Only relevant for methods. */
     562             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     563             : };
     564             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     565             : static_assert(0 < 1, "There is no slot for us");
     566             : 
     567             : static bool
     568           0 : get_URL(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
     569             : {
     570           0 :   binding_detail::FastErrorResult rv;
     571           0 :   DOMString result;
     572           0 :   self->GetDocumentURIFromJS(result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
     573           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     574           0 :     return false;
     575             :   }
     576           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     577           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     578           0 :     return false;
     579             :   }
     580           0 :   return true;
     581             : }
     582             : 
     583             : static const JSJitInfo URL_getterinfo = {
     584             :   { (JSJitGetterOp)get_URL },
     585             :   { prototypes::id::Document },
     586             :   { PrototypeTraits<prototypes::id::Document>::Depth },
     587             :   JSJitInfo::Getter,
     588             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     589             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     590             :   false,  /* isInfallible. False in setters. */
     591             :   false,  /* isMovable.  Not relevant for setters. */
     592             :   false, /* isEliminatable.  Not relevant for setters. */
     593             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     594             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     595             :   false,  /* isTypedMethod.  Only relevant for methods. */
     596             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     597             : };
     598             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     599             : static_assert(0 < 1, "There is no slot for us");
     600             : 
     601             : static bool
     602          12 : get_documentURI(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
     603             : {
     604          24 :   binding_detail::FastErrorResult rv;
     605          24 :   DOMString result;
     606          12 :   self->GetDocumentURIFromJS(result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
     607          12 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     608           0 :     return false;
     609             :   }
     610          12 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     611          12 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     612           0 :     return false;
     613             :   }
     614          12 :   return true;
     615             : }
     616             : 
     617             : static const JSJitInfo documentURI_getterinfo = {
     618             :   { (JSJitGetterOp)get_documentURI },
     619             :   { prototypes::id::Document },
     620             :   { PrototypeTraits<prototypes::id::Document>::Depth },
     621             :   JSJitInfo::Getter,
     622             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     623             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     624             :   false,  /* isInfallible. False in setters. */
     625             :   false,  /* isMovable.  Not relevant for setters. */
     626             :   false, /* isEliminatable.  Not relevant for setters. */
     627             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     628             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     629             :   false,  /* isTypedMethod.  Only relevant for methods. */
     630             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     631             : };
     632             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     633             : static_assert(0 < 1, "There is no slot for us");
     634             : 
     635             : static bool
     636           0 : get_compatMode(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
     637             : {
     638           0 :   DOMString result;
     639           0 :   self->GetCompatMode(result);
     640           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     641           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     642           0 :     return false;
     643             :   }
     644           0 :   return true;
     645             : }
     646             : 
     647             : static const JSJitInfo compatMode_getterinfo = {
     648             :   { (JSJitGetterOp)get_compatMode },
     649             :   { prototypes::id::Document },
     650             :   { PrototypeTraits<prototypes::id::Document>::Depth },
     651             :   JSJitInfo::Getter,
     652             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     653             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     654             :   false,  /* isInfallible. False in setters. */
     655             :   true,  /* isMovable.  Not relevant for setters. */
     656             :   true, /* isEliminatable.  Not relevant for setters. */
     657             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     658             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     659             :   false,  /* isTypedMethod.  Only relevant for methods. */
     660             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     661             : };
     662             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     663             : static_assert(0 < 1, "There is no slot for us");
     664             : 
     665             : static bool
     666           5 : get_characterSet(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
     667             : {
     668          10 :   DOMString result;
     669           5 :   self->GetCharacterSet(result);
     670           5 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     671           5 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     672           0 :     return false;
     673             :   }
     674           5 :   return true;
     675             : }
     676             : 
     677             : static const JSJitInfo characterSet_getterinfo = {
     678             :   { (JSJitGetterOp)get_characterSet },
     679             :   { prototypes::id::Document },
     680             :   { PrototypeTraits<prototypes::id::Document>::Depth },
     681             :   JSJitInfo::Getter,
     682             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     683             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     684             :   false,  /* isInfallible. False in setters. */
     685             :   true,  /* isMovable.  Not relevant for setters. */
     686             :   true, /* isEliminatable.  Not relevant for setters. */
     687             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     688             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     689             :   false,  /* isTypedMethod.  Only relevant for methods. */
     690             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     691             : };
     692             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     693             : static_assert(0 < 1, "There is no slot for us");
     694             : 
     695             : static bool
     696           0 : get_charset(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
     697             : {
     698           0 :   DOMString result;
     699           0 :   self->GetCharacterSet(result);
     700           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     701           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     702           0 :     return false;
     703             :   }
     704           0 :   return true;
     705             : }
     706             : 
     707             : static const JSJitInfo charset_getterinfo = {
     708             :   { (JSJitGetterOp)get_charset },
     709             :   { prototypes::id::Document },
     710             :   { PrototypeTraits<prototypes::id::Document>::Depth },
     711             :   JSJitInfo::Getter,
     712             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     713             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     714             :   false,  /* isInfallible. False in setters. */
     715             :   true,  /* isMovable.  Not relevant for setters. */
     716             :   true, /* isEliminatable.  Not relevant for setters. */
     717             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     718             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     719             :   false,  /* isTypedMethod.  Only relevant for methods. */
     720             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     721             : };
     722             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     723             : static_assert(0 < 1, "There is no slot for us");
     724             : 
     725             : static bool
     726           0 : get_inputEncoding(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
     727             : {
     728           0 :   DOMString result;
     729           0 :   self->GetCharacterSet(result);
     730           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     731           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     732           0 :     return false;
     733             :   }
     734           0 :   return true;
     735             : }
     736             : 
     737             : static const JSJitInfo inputEncoding_getterinfo = {
     738             :   { (JSJitGetterOp)get_inputEncoding },
     739             :   { prototypes::id::Document },
     740             :   { PrototypeTraits<prototypes::id::Document>::Depth },
     741             :   JSJitInfo::Getter,
     742             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     743             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     744             :   false,  /* isInfallible. False in setters. */
     745             :   true,  /* isMovable.  Not relevant for setters. */
     746             :   true, /* isEliminatable.  Not relevant for setters. */
     747             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     748             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     749             :   false,  /* isTypedMethod.  Only relevant for methods. */
     750             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     751             : };
     752             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     753             : static_assert(0 < 1, "There is no slot for us");
     754             : 
     755             : static bool
     756           9 : get_contentType(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
     757             : {
     758          18 :   DOMString result;
     759           9 :   self->GetContentType(result);
     760           9 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     761           9 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     762           0 :     return false;
     763             :   }
     764           9 :   return true;
     765             : }
     766             : 
     767             : static const JSJitInfo contentType_getterinfo = {
     768             :   { (JSJitGetterOp)get_contentType },
     769             :   { prototypes::id::Document },
     770             :   { PrototypeTraits<prototypes::id::Document>::Depth },
     771             :   JSJitInfo::Getter,
     772             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     773             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     774             :   false,  /* isInfallible. False in setters. */
     775             :   true,  /* isMovable.  Not relevant for setters. */
     776             :   true, /* isEliminatable.  Not relevant for setters. */
     777             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     778             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     779             :   false,  /* isTypedMethod.  Only relevant for methods. */
     780             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     781             : };
     782             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     783             : static_assert(0 < 1, "There is no slot for us");
     784             : 
     785             : static bool
     786           0 : get_doctype(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
     787             : {
     788           0 :   auto result(StrongOrRawPtr<mozilla::dom::DocumentType>(self->GetDoctype()));
     789           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     790           0 :   if (!result) {
     791           0 :     args.rval().setNull();
     792           0 :     return true;
     793             :   }
     794           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
     795           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     796           0 :     return false;
     797             :   }
     798           0 :   return true;
     799             : }
     800             : 
     801             : static const JSJitInfo doctype_getterinfo = {
     802             :   { (JSJitGetterOp)get_doctype },
     803             :   { prototypes::id::Document },
     804             :   { PrototypeTraits<prototypes::id::Document>::Depth },
     805             :   JSJitInfo::Getter,
     806             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     807             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     808             :   false,  /* isInfallible. False in setters. */
     809             :   true,  /* isMovable.  Not relevant for setters. */
     810             :   true, /* isEliminatable.  Not relevant for setters. */
     811             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     812             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     813             :   false,  /* isTypedMethod.  Only relevant for methods. */
     814             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     815             : };
     816             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     817             : static_assert(0 < 1, "There is no slot for us");
     818             : 
     819             : static bool
     820          13 : get_documentElement(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
     821             : {
     822          13 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetDocumentElement()));
     823          13 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     824          13 :   if (!result) {
     825           0 :     args.rval().setNull();
     826           0 :     return true;
     827             :   }
     828          13 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
     829           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     830           0 :     return false;
     831             :   }
     832          13 :   return true;
     833             : }
     834             : 
     835             : static const JSJitInfo documentElement_getterinfo = {
     836             :   { (JSJitGetterOp)get_documentElement },
     837             :   { prototypes::id::Document },
     838             :   { PrototypeTraits<prototypes::id::Document>::Depth },
     839             :   JSJitInfo::Getter,
     840             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     841             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     842             :   false,  /* isInfallible. False in setters. */
     843             :   true,  /* isMovable.  Not relevant for setters. */
     844             :   true, /* isEliminatable.  Not relevant for setters. */
     845             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     846             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     847             :   false,  /* isTypedMethod.  Only relevant for methods. */
     848             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     849             : };
     850             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     851             : static_assert(0 < 1, "There is no slot for us");
     852             : 
     853             : static bool
     854           0 : getElementsByTagName(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
     855             : {
     856           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
     857           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.getElementsByTagName");
     858             :   }
     859           0 :   binding_detail::FakeString arg0;
     860           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     861           0 :     return false;
     862             :   }
     863           0 :   auto result(StrongOrRawPtr<nsIHTMLCollection>(self->GetElementsByTagName(NonNullHelper(Constify(arg0)))));
     864           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     865           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
     866           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     867           0 :     return false;
     868             :   }
     869           0 :   return true;
     870             : }
     871             : 
     872             : static const JSJitInfo::ArgType getElementsByTagName_methodinfo_argTypes[] = { JSJitInfo::String, JSJitInfo::ArgTypeListEnd };
     873             : static const JSTypedMethodJitInfo getElementsByTagName_methodinfo = {
     874             :   {
     875             :     { (JSJitGetterOp)getElementsByTagName },
     876             :     { prototypes::id::Document },
     877             :     { PrototypeTraits<prototypes::id::Document>::Depth },
     878             :     JSJitInfo::Method,
     879             :     JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     880             :     JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
     881             :     false,  /* isInfallible. False in setters. */
     882             :     true,  /* isMovable.  Not relevant for setters. */
     883             :     true, /* isEliminatable.  Not relevant for setters. */
     884             :     false, /* isAlwaysInSlot.  Only relevant for getters. */
     885             :     false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     886             :     true,  /* isTypedMethod.  Only relevant for methods. */
     887             :     0   /* Reserved slot index, if we're stored in a slot, else 0. */
     888             :   },
     889             :   getElementsByTagName_methodinfo_argTypes
     890             : };
     891             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     892             : static_assert(0 < 1, "There is no slot for us");
     893             : 
     894             : static bool
     895           0 : getElementsByTagNameNS(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
     896             : {
     897           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
     898           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.getElementsByTagNameNS");
     899             :   }
     900           0 :   binding_detail::FakeString arg0;
     901           0 :   if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
     902           0 :     return false;
     903             :   }
     904           0 :   binding_detail::FakeString arg1;
     905           0 :   if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
     906           0 :     return false;
     907             :   }
     908           0 :   binding_detail::FastErrorResult rv;
     909           0 :   auto result(StrongOrRawPtr<nsIHTMLCollection>(self->GetElementsByTagNameNS(NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)), rv)));
     910           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     911           0 :     return false;
     912             :   }
     913           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     914           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
     915           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     916           0 :     return false;
     917             :   }
     918           0 :   return true;
     919             : }
     920             : 
     921             : static const JSJitInfo::ArgType getElementsByTagNameNS_methodinfo_argTypes[] = { JSJitInfo::ArgType(JSJitInfo::Null | JSJitInfo::String), JSJitInfo::String, JSJitInfo::ArgTypeListEnd };
     922             : static const JSTypedMethodJitInfo getElementsByTagNameNS_methodinfo = {
     923             :   {
     924             :     { (JSJitGetterOp)getElementsByTagNameNS },
     925             :     { prototypes::id::Document },
     926             :     { PrototypeTraits<prototypes::id::Document>::Depth },
     927             :     JSJitInfo::Method,
     928             :     JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     929             :     JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
     930             :     false,  /* isInfallible. False in setters. */
     931             :     false,  /* isMovable.  Not relevant for setters. */
     932             :     false, /* isEliminatable.  Not relevant for setters. */
     933             :     false, /* isAlwaysInSlot.  Only relevant for getters. */
     934             :     false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     935             :     true,  /* isTypedMethod.  Only relevant for methods. */
     936             :     0   /* Reserved slot index, if we're stored in a slot, else 0. */
     937             :   },
     938             :   getElementsByTagNameNS_methodinfo_argTypes
     939             : };
     940             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     941             : static_assert(0 < 1, "There is no slot for us");
     942             : 
     943             : static bool
     944           0 : getElementsByClassName(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
     945             : {
     946           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
     947           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.getElementsByClassName");
     948             :   }
     949           0 :   binding_detail::FakeString arg0;
     950           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     951           0 :     return false;
     952             :   }
     953           0 :   auto result(StrongOrRawPtr<nsIHTMLCollection>(self->GetElementsByClassName(NonNullHelper(Constify(arg0)))));
     954           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     955           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
     956           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     957           0 :     return false;
     958             :   }
     959           0 :   return true;
     960             : }
     961             : 
     962             : static const JSJitInfo::ArgType getElementsByClassName_methodinfo_argTypes[] = { JSJitInfo::String, JSJitInfo::ArgTypeListEnd };
     963             : static const JSTypedMethodJitInfo getElementsByClassName_methodinfo = {
     964             :   {
     965             :     { (JSJitGetterOp)getElementsByClassName },
     966             :     { prototypes::id::Document },
     967             :     { PrototypeTraits<prototypes::id::Document>::Depth },
     968             :     JSJitInfo::Method,
     969             :     JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     970             :     JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
     971             :     false,  /* isInfallible. False in setters. */
     972             :     true,  /* isMovable.  Not relevant for setters. */
     973             :     true, /* isEliminatable.  Not relevant for setters. */
     974             :     false, /* isAlwaysInSlot.  Only relevant for getters. */
     975             :     false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     976             :     true,  /* isTypedMethod.  Only relevant for methods. */
     977             :     0   /* Reserved slot index, if we're stored in a slot, else 0. */
     978             :   },
     979             :   getElementsByClassName_methodinfo_argTypes
     980             : };
     981             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     982             : static_assert(0 < 1, "There is no slot for us");
     983             : 
     984             : static bool
     985         221 : getElementById(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
     986             : {
     987         221 :   if (MOZ_UNLIKELY(args.length() < 1)) {
     988           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.getElementById");
     989             :   }
     990         442 :   binding_detail::FakeString arg0;
     991         221 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     992           0 :     return false;
     993             :   }
     994         221 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetElementById(NonNullHelper(Constify(arg0)))));
     995         221 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     996         221 :   if (!result) {
     997          25 :     args.rval().setNull();
     998          25 :     return true;
     999             :   }
    1000         196 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1001           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1002           0 :     return false;
    1003             :   }
    1004         196 :   return true;
    1005             : }
    1006             : 
    1007             : static const JSJitInfo::ArgType getElementById_methodinfo_argTypes[] = { JSJitInfo::String, JSJitInfo::ArgTypeListEnd };
    1008             : static const JSTypedMethodJitInfo getElementById_methodinfo = {
    1009             :   {
    1010             :     { (JSJitGetterOp)getElementById },
    1011             :     { prototypes::id::Document },
    1012             :     { PrototypeTraits<prototypes::id::Document>::Depth },
    1013             :     JSJitInfo::Method,
    1014             :     JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1015             :     JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1016             :     false,  /* isInfallible. False in setters. */
    1017             :     true,  /* isMovable.  Not relevant for setters. */
    1018             :     true, /* isEliminatable.  Not relevant for setters. */
    1019             :     false, /* isAlwaysInSlot.  Only relevant for getters. */
    1020             :     false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1021             :     true,  /* isTypedMethod.  Only relevant for methods. */
    1022             :     0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1023             :   },
    1024             :   getElementById_methodinfo_argTypes
    1025             : };
    1026             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1027             : static_assert(0 < 1, "There is no slot for us");
    1028             : 
    1029             : static bool
    1030          48 : createElement(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1031             : {
    1032          48 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1033           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.createElement");
    1034             :   }
    1035          96 :   binding_detail::FakeString arg0;
    1036          48 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1037           0 :     return false;
    1038             :   }
    1039          96 :   ElementCreationOptionsOrString arg1;
    1040          48 :   ElementCreationOptionsOrStringArgument arg1_holder(arg1);
    1041          48 :   if (!(args.hasDefined(1))) {
    1042          48 :     if (!arg1.RawSetAsElementCreationOptions().Init(cx, JS::NullHandleValue, "Member of ElementCreationOptionsOrString")) {
    1043           0 :       return false;
    1044             :     }
    1045             :   } else {
    1046             :     {
    1047           0 :       bool done = false, failed = false, tryNext;
    1048           0 :       if (!done) {
    1049           0 :         done = (failed = !arg1_holder.TrySetToElementCreationOptions(cx, args[1], tryNext, false)) || !tryNext;
    1050             :       }
    1051           0 :       if (!done) {
    1052             :         do {
    1053           0 :           done = (failed = !arg1_holder.TrySetToString(cx, args[1], tryNext)) || !tryNext;
    1054           0 :           break;
    1055             :         } while (0);
    1056             :       }
    1057           0 :       if (failed) {
    1058           0 :         return false;
    1059             :       }
    1060           0 :       if (!done) {
    1061           0 :         ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of Document.createElement", "ElementCreationOptions");
    1062           0 :         return false;
    1063             :       }
    1064             :     }
    1065             :   }
    1066          96 :   binding_detail::FastErrorResult rv;
    1067          96 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->CreateElement(NonNullHelper(Constify(arg0)), Constify(arg1), rv)));
    1068          48 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1069           0 :     return false;
    1070             :   }
    1071          48 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1072             :   static_assert(!IsPointer<decltype(result)>::value,
    1073             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    1074          48 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1075           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1076           0 :     return false;
    1077             :   }
    1078          48 :   return true;
    1079             : }
    1080             : 
    1081             : static const JSJitInfo createElement_methodinfo = {
    1082             :   { (JSJitGetterOp)createElement },
    1083             :   { prototypes::id::Document },
    1084             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1085             :   JSJitInfo::Method,
    1086             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1087             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1088             :   false,  /* isInfallible. False in setters. */
    1089             :   false,  /* isMovable.  Not relevant for setters. */
    1090             :   false, /* isEliminatable.  Not relevant for setters. */
    1091             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1092             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1093             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1094             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1095             : };
    1096             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1097             : static_assert(0 < 1, "There is no slot for us");
    1098             : 
    1099             : static bool
    1100           8 : createElementNS(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1101             : {
    1102           8 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    1103           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.createElementNS");
    1104             :   }
    1105          16 :   binding_detail::FakeString arg0;
    1106           8 :   if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
    1107           0 :     return false;
    1108             :   }
    1109          16 :   binding_detail::FakeString arg1;
    1110           8 :   if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
    1111           0 :     return false;
    1112             :   }
    1113          16 :   ElementCreationOptionsOrString arg2;
    1114           8 :   ElementCreationOptionsOrStringArgument arg2_holder(arg2);
    1115           8 :   if (!(args.hasDefined(2))) {
    1116           8 :     if (!arg2.RawSetAsElementCreationOptions().Init(cx, JS::NullHandleValue, "Member of ElementCreationOptionsOrString")) {
    1117           0 :       return false;
    1118             :     }
    1119             :   } else {
    1120             :     {
    1121           0 :       bool done = false, failed = false, tryNext;
    1122           0 :       if (!done) {
    1123           0 :         done = (failed = !arg2_holder.TrySetToElementCreationOptions(cx, args[2], tryNext, false)) || !tryNext;
    1124             :       }
    1125           0 :       if (!done) {
    1126             :         do {
    1127           0 :           done = (failed = !arg2_holder.TrySetToString(cx, args[2], tryNext)) || !tryNext;
    1128           0 :           break;
    1129             :         } while (0);
    1130             :       }
    1131           0 :       if (failed) {
    1132           0 :         return false;
    1133             :       }
    1134           0 :       if (!done) {
    1135           0 :         ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 3 of Document.createElementNS", "ElementCreationOptions");
    1136           0 :         return false;
    1137             :       }
    1138             :     }
    1139             :   }
    1140          16 :   binding_detail::FastErrorResult rv;
    1141          16 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->CreateElementNS(NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)), Constify(arg2), rv)));
    1142           8 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1143           0 :     return false;
    1144             :   }
    1145           8 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1146             :   static_assert(!IsPointer<decltype(result)>::value,
    1147             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    1148           8 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1149           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1150           0 :     return false;
    1151             :   }
    1152           8 :   return true;
    1153             : }
    1154             : 
    1155             : static const JSJitInfo createElementNS_methodinfo = {
    1156             :   { (JSJitGetterOp)createElementNS },
    1157             :   { prototypes::id::Document },
    1158             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1159             :   JSJitInfo::Method,
    1160             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1161             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1162             :   false,  /* isInfallible. False in setters. */
    1163             :   false,  /* isMovable.  Not relevant for setters. */
    1164             :   false, /* isEliminatable.  Not relevant for setters. */
    1165             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1166             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1167             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1168             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1169             : };
    1170             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1171             : static_assert(0 < 1, "There is no slot for us");
    1172             : 
    1173             : static bool
    1174           4 : createDocumentFragment(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1175             : {
    1176           8 :   auto result(StrongOrRawPtr<mozilla::dom::DocumentFragment>(self->CreateDocumentFragment()));
    1177           4 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1178             :   static_assert(!IsPointer<decltype(result)>::value,
    1179             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    1180           4 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1181           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1182           0 :     return false;
    1183             :   }
    1184           4 :   return true;
    1185             : }
    1186             : 
    1187             : static const JSJitInfo createDocumentFragment_methodinfo = {
    1188             :   { (JSJitGetterOp)createDocumentFragment },
    1189             :   { prototypes::id::Document },
    1190             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1191             :   JSJitInfo::Method,
    1192             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1193             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1194             :   false,  /* isInfallible. False in setters. */
    1195             :   false,  /* isMovable.  Not relevant for setters. */
    1196             :   false, /* isEliminatable.  Not relevant for setters. */
    1197             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1198             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1199             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1200             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1201             : };
    1202             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1203             : static_assert(0 < 1, "There is no slot for us");
    1204             : 
    1205             : static bool
    1206           0 : createTextNode(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1207             : {
    1208           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1209           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.createTextNode");
    1210             :   }
    1211           0 :   binding_detail::FakeString arg0;
    1212           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1213           0 :     return false;
    1214             :   }
    1215           0 :   auto result(StrongOrRawPtr<mozilla::dom::Text>(self->CreateTextNode(NonNullHelper(Constify(arg0)))));
    1216           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1217             :   static_assert(!IsPointer<decltype(result)>::value,
    1218             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    1219           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1220           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1221           0 :     return false;
    1222             :   }
    1223           0 :   return true;
    1224             : }
    1225             : 
    1226             : static const JSJitInfo createTextNode_methodinfo = {
    1227             :   { (JSJitGetterOp)createTextNode },
    1228             :   { prototypes::id::Document },
    1229             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1230             :   JSJitInfo::Method,
    1231             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1232             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1233             :   false,  /* isInfallible. False in setters. */
    1234             :   false,  /* isMovable.  Not relevant for setters. */
    1235             :   false, /* isEliminatable.  Not relevant for setters. */
    1236             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1237             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1238             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1239             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1240             : };
    1241             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1242             : static_assert(0 < 1, "There is no slot for us");
    1243             : 
    1244             : static bool
    1245           0 : createComment(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1246             : {
    1247           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1248           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.createComment");
    1249             :   }
    1250           0 :   binding_detail::FakeString arg0;
    1251           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1252           0 :     return false;
    1253             :   }
    1254           0 :   auto result(StrongOrRawPtr<mozilla::dom::Comment>(self->CreateComment(NonNullHelper(Constify(arg0)))));
    1255           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1256             :   static_assert(!IsPointer<decltype(result)>::value,
    1257             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    1258           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1259           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1260           0 :     return false;
    1261             :   }
    1262           0 :   return true;
    1263             : }
    1264             : 
    1265             : static const JSJitInfo createComment_methodinfo = {
    1266             :   { (JSJitGetterOp)createComment },
    1267             :   { prototypes::id::Document },
    1268             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1269             :   JSJitInfo::Method,
    1270             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1271             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1272             :   false,  /* isInfallible. False in setters. */
    1273             :   false,  /* isMovable.  Not relevant for setters. */
    1274             :   false, /* isEliminatable.  Not relevant for setters. */
    1275             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1276             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1277             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1278             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1279             : };
    1280             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1281             : static_assert(0 < 1, "There is no slot for us");
    1282             : 
    1283             : static bool
    1284           0 : createProcessingInstruction(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1285             : {
    1286           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    1287           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.createProcessingInstruction");
    1288             :   }
    1289           0 :   binding_detail::FakeString arg0;
    1290           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1291           0 :     return false;
    1292             :   }
    1293           0 :   binding_detail::FakeString arg1;
    1294           0 :   if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
    1295           0 :     return false;
    1296             :   }
    1297           0 :   binding_detail::FastErrorResult rv;
    1298           0 :   auto result(StrongOrRawPtr<mozilla::dom::ProcessingInstruction>(self->CreateProcessingInstruction(NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)), rv)));
    1299           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1300           0 :     return false;
    1301             :   }
    1302           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1303             :   static_assert(!IsPointer<decltype(result)>::value,
    1304             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    1305           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1306           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1307           0 :     return false;
    1308             :   }
    1309           0 :   return true;
    1310             : }
    1311             : 
    1312             : static const JSJitInfo createProcessingInstruction_methodinfo = {
    1313             :   { (JSJitGetterOp)createProcessingInstruction },
    1314             :   { prototypes::id::Document },
    1315             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1316             :   JSJitInfo::Method,
    1317             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1318             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1319             :   false,  /* isInfallible. False in setters. */
    1320             :   false,  /* isMovable.  Not relevant for setters. */
    1321             :   false, /* isEliminatable.  Not relevant for setters. */
    1322             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1323             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1324             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1325             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1326             : };
    1327             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1328             : static_assert(0 < 1, "There is no slot for us");
    1329             : 
    1330             : static bool
    1331           0 : importNode(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1332             : {
    1333           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1334           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.importNode");
    1335             :   }
    1336           0 :   NonNull<nsINode> arg0;
    1337           0 :   if (args[0].isObject()) {
    1338             :     {
    1339           0 :       nsresult rv = UnwrapObject<prototypes::id::Node, nsINode>(args[0], arg0);
    1340           0 :       if (NS_FAILED(rv)) {
    1341           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Document.importNode", "Node");
    1342           0 :         return false;
    1343             :       }
    1344             :     }
    1345             :   } else {
    1346           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Document.importNode");
    1347           0 :     return false;
    1348             :   }
    1349             :   bool arg1;
    1350           0 :   if (args.hasDefined(1)) {
    1351           0 :     if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
    1352           0 :       return false;
    1353             :     }
    1354             :   } else {
    1355           0 :     arg1 = false;
    1356             :   }
    1357           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1358           0 :   Maybe<AutoCEReaction> ceReaction;
    1359           0 :   if (reactionsStack) {
    1360           0 :     ceReaction.emplace(reactionsStack);
    1361             :   }
    1362           0 :   binding_detail::FastErrorResult rv;
    1363           0 :   auto result(StrongOrRawPtr<nsINode>(self->ImportNode(NonNullHelper(arg0), arg1, rv)));
    1364           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1365           0 :     return false;
    1366             :   }
    1367           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1368           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1369           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1370           0 :     return false;
    1371             :   }
    1372           0 :   return true;
    1373             : }
    1374             : 
    1375             : static const JSJitInfo importNode_methodinfo = {
    1376             :   { (JSJitGetterOp)importNode },
    1377             :   { prototypes::id::Document },
    1378             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1379             :   JSJitInfo::Method,
    1380             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1381             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1382             :   false,  /* isInfallible. False in setters. */
    1383             :   false,  /* isMovable.  Not relevant for setters. */
    1384             :   false, /* isEliminatable.  Not relevant for setters. */
    1385             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1386             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1387             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1388             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1389             : };
    1390             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1391             : static_assert(0 < 1, "There is no slot for us");
    1392             : 
    1393             : static bool
    1394           0 : adoptNode(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1395             : {
    1396           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1397           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.adoptNode");
    1398             :   }
    1399           0 :   NonNull<nsINode> arg0;
    1400           0 :   if (args[0].isObject()) {
    1401             :     {
    1402           0 :       nsresult rv = UnwrapObject<prototypes::id::Node, nsINode>(args[0], arg0);
    1403           0 :       if (NS_FAILED(rv)) {
    1404           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Document.adoptNode", "Node");
    1405           0 :         return false;
    1406             :       }
    1407             :     }
    1408             :   } else {
    1409           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Document.adoptNode");
    1410           0 :     return false;
    1411             :   }
    1412           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1413           0 :   Maybe<AutoCEReaction> ceReaction;
    1414           0 :   if (reactionsStack) {
    1415           0 :     ceReaction.emplace(reactionsStack);
    1416             :   }
    1417           0 :   binding_detail::FastErrorResult rv;
    1418           0 :   auto result(StrongOrRawPtr<nsINode>(self->AdoptNode(NonNullHelper(arg0), rv)));
    1419           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1420           0 :     return false;
    1421             :   }
    1422           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1423           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1424           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1425           0 :     return false;
    1426             :   }
    1427           0 :   return true;
    1428             : }
    1429             : 
    1430             : static const JSJitInfo adoptNode_methodinfo = {
    1431             :   { (JSJitGetterOp)adoptNode },
    1432             :   { prototypes::id::Document },
    1433             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1434             :   JSJitInfo::Method,
    1435             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1436             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1437             :   false,  /* isInfallible. False in setters. */
    1438             :   false,  /* isMovable.  Not relevant for setters. */
    1439             :   false, /* isEliminatable.  Not relevant for setters. */
    1440             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1441             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1442             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1443             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1444             : };
    1445             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1446             : static_assert(0 < 1, "There is no slot for us");
    1447             : 
    1448             : static bool
    1449           3 : createEvent(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1450             : {
    1451           3 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1452           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.createEvent");
    1453             :   }
    1454           6 :   binding_detail::FakeString arg0;
    1455           3 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1456           0 :     return false;
    1457             :   }
    1458           6 :   binding_detail::FastErrorResult rv;
    1459           6 :   auto result(StrongOrRawPtr<mozilla::dom::Event>(self->CreateEvent(NonNullHelper(Constify(arg0)), nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv)));
    1460           3 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1461           0 :     return false;
    1462             :   }
    1463           3 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1464             :   static_assert(!IsPointer<decltype(result)>::value,
    1465             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    1466           3 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1467           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1468           0 :     return false;
    1469             :   }
    1470           3 :   return true;
    1471             : }
    1472             : 
    1473             : static const JSJitInfo createEvent_methodinfo = {
    1474             :   { (JSJitGetterOp)createEvent },
    1475             :   { prototypes::id::Document },
    1476             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1477             :   JSJitInfo::Method,
    1478             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1479             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1480             :   false,  /* isInfallible. False in setters. */
    1481             :   false,  /* isMovable.  Not relevant for setters. */
    1482             :   false, /* isEliminatable.  Not relevant for setters. */
    1483             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1484             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1485             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1486             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1487             : };
    1488             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1489             : static_assert(0 < 1, "There is no slot for us");
    1490             : 
    1491             : static bool
    1492           2 : createRange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1493             : {
    1494           4 :   binding_detail::FastErrorResult rv;
    1495           4 :   auto result(StrongOrRawPtr<nsRange>(self->CreateRange(rv)));
    1496           2 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1497           0 :     return false;
    1498             :   }
    1499           2 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1500             :   static_assert(!IsPointer<decltype(result)>::value,
    1501             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    1502           2 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1503           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1504           0 :     return false;
    1505             :   }
    1506           2 :   return true;
    1507             : }
    1508             : 
    1509             : static const JSJitInfo createRange_methodinfo = {
    1510             :   { (JSJitGetterOp)createRange },
    1511             :   { prototypes::id::Document },
    1512             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1513             :   JSJitInfo::Method,
    1514             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1515             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1516             :   false,  /* isInfallible. False in setters. */
    1517             :   false,  /* isMovable.  Not relevant for setters. */
    1518             :   false, /* isEliminatable.  Not relevant for setters. */
    1519             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1520             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1521             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1522             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1523             : };
    1524             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1525             : static_assert(0 < 1, "There is no slot for us");
    1526             : 
    1527             : static bool
    1528           0 : createNodeIterator(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1529             : {
    1530           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1531           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.createNodeIterator");
    1532             :   }
    1533           0 :   NonNull<nsINode> arg0;
    1534           0 :   if (args[0].isObject()) {
    1535             :     {
    1536           0 :       nsresult rv = UnwrapObject<prototypes::id::Node, nsINode>(args[0], arg0);
    1537           0 :       if (NS_FAILED(rv)) {
    1538           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Document.createNodeIterator", "Node");
    1539           0 :         return false;
    1540             :       }
    1541             :     }
    1542             :   } else {
    1543           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Document.createNodeIterator");
    1544           0 :     return false;
    1545             :   }
    1546             :   uint32_t arg1;
    1547           0 :   if (args.hasDefined(1)) {
    1548           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    1549           0 :       return false;
    1550             :     }
    1551             :   } else {
    1552           0 :     arg1 = 4294967295U;
    1553             :   }
    1554           0 :   RootedCallback<RefPtr<binding_detail::FastNodeFilter>> arg2(cx);
    1555           0 :   if (args.hasDefined(2)) {
    1556           0 :     if (args[2].isObject()) {
    1557             :       { // scope for tempRoot
    1558           0 :         JS::Rooted<JSObject*> tempRoot(cx, &args[2].toObject());
    1559           0 :         arg2 = new binding_detail::FastNodeFilter(tempRoot);
    1560             :       }
    1561           0 :     } else if (args[2].isNullOrUndefined()) {
    1562           0 :       arg2 = nullptr;
    1563             :     } else {
    1564           0 :       ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 3 of Document.createNodeIterator");
    1565           0 :       return false;
    1566             :     }
    1567             :   } else {
    1568           0 :     arg2 = nullptr;
    1569             :   }
    1570           0 :   binding_detail::FastErrorResult rv;
    1571           0 :   auto result(StrongOrRawPtr<mozilla::dom::NodeIterator>(self->CreateNodeIterator(NonNullHelper(arg0), arg1, Constify(arg2), rv)));
    1572           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1573           0 :     return false;
    1574             :   }
    1575           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1576             :   static_assert(!IsPointer<decltype(result)>::value,
    1577             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    1578           0 :   if (!WrapNewBindingNonWrapperCachedObject(cx, obj, result, args.rval())) {
    1579           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1580           0 :     return false;
    1581             :   }
    1582           0 :   return true;
    1583             : }
    1584             : 
    1585             : static const JSJitInfo createNodeIterator_methodinfo = {
    1586             :   { (JSJitGetterOp)createNodeIterator },
    1587             :   { prototypes::id::Document },
    1588             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1589             :   JSJitInfo::Method,
    1590             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1591             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1592             :   false,  /* isInfallible. False in setters. */
    1593             :   false,  /* isMovable.  Not relevant for setters. */
    1594             :   false, /* isEliminatable.  Not relevant for setters. */
    1595             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1596             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1597             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1598             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1599             : };
    1600             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1601             : static_assert(0 < 1, "There is no slot for us");
    1602             : 
    1603             : static bool
    1604           0 : createTreeWalker(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1605             : {
    1606           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1607           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.createTreeWalker");
    1608             :   }
    1609           0 :   NonNull<nsINode> arg0;
    1610           0 :   if (args[0].isObject()) {
    1611             :     {
    1612           0 :       nsresult rv = UnwrapObject<prototypes::id::Node, nsINode>(args[0], arg0);
    1613           0 :       if (NS_FAILED(rv)) {
    1614           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Document.createTreeWalker", "Node");
    1615           0 :         return false;
    1616             :       }
    1617             :     }
    1618             :   } else {
    1619           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Document.createTreeWalker");
    1620           0 :     return false;
    1621             :   }
    1622             :   uint32_t arg1;
    1623           0 :   if (args.hasDefined(1)) {
    1624           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    1625           0 :       return false;
    1626             :     }
    1627             :   } else {
    1628           0 :     arg1 = 4294967295U;
    1629             :   }
    1630           0 :   RootedCallback<RefPtr<binding_detail::FastNodeFilter>> arg2(cx);
    1631           0 :   if (args.hasDefined(2)) {
    1632           0 :     if (args[2].isObject()) {
    1633             :       { // scope for tempRoot
    1634           0 :         JS::Rooted<JSObject*> tempRoot(cx, &args[2].toObject());
    1635           0 :         arg2 = new binding_detail::FastNodeFilter(tempRoot);
    1636             :       }
    1637           0 :     } else if (args[2].isNullOrUndefined()) {
    1638           0 :       arg2 = nullptr;
    1639             :     } else {
    1640           0 :       ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 3 of Document.createTreeWalker");
    1641           0 :       return false;
    1642             :     }
    1643             :   } else {
    1644           0 :     arg2 = nullptr;
    1645             :   }
    1646           0 :   binding_detail::FastErrorResult rv;
    1647           0 :   auto result(StrongOrRawPtr<mozilla::dom::TreeWalker>(self->CreateTreeWalker(NonNullHelper(arg0), arg1, Constify(arg2), rv)));
    1648           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1649           0 :     return false;
    1650             :   }
    1651           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1652             :   static_assert(!IsPointer<decltype(result)>::value,
    1653             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    1654           0 :   if (!WrapNewBindingNonWrapperCachedObject(cx, obj, result, args.rval())) {
    1655           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1656           0 :     return false;
    1657             :   }
    1658           0 :   return true;
    1659             : }
    1660             : 
    1661             : static const JSJitInfo createTreeWalker_methodinfo = {
    1662             :   { (JSJitGetterOp)createTreeWalker },
    1663             :   { prototypes::id::Document },
    1664             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1665             :   JSJitInfo::Method,
    1666             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1667             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1668             :   false,  /* isInfallible. False in setters. */
    1669             :   false,  /* isMovable.  Not relevant for setters. */
    1670             :   false, /* isEliminatable.  Not relevant for setters. */
    1671             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1672             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1673             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1674             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1675             : };
    1676             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1677             : static_assert(0 < 1, "There is no slot for us");
    1678             : 
    1679             : static bool
    1680           0 : createCDATASection(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1681             : {
    1682           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1683           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.createCDATASection");
    1684             :   }
    1685           0 :   binding_detail::FakeString arg0;
    1686           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1687           0 :     return false;
    1688             :   }
    1689           0 :   binding_detail::FastErrorResult rv;
    1690           0 :   auto result(StrongOrRawPtr<mozilla::dom::CDATASection>(self->CreateCDATASection(NonNullHelper(Constify(arg0)), rv)));
    1691           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1692           0 :     return false;
    1693             :   }
    1694           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1695             :   static_assert(!IsPointer<decltype(result)>::value,
    1696             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    1697           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1698           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1699           0 :     return false;
    1700             :   }
    1701           0 :   return true;
    1702             : }
    1703             : 
    1704             : static const JSJitInfo createCDATASection_methodinfo = {
    1705             :   { (JSJitGetterOp)createCDATASection },
    1706             :   { prototypes::id::Document },
    1707             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1708             :   JSJitInfo::Method,
    1709             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1710             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1711             :   false,  /* isInfallible. False in setters. */
    1712             :   false,  /* isMovable.  Not relevant for setters. */
    1713             :   false, /* isEliminatable.  Not relevant for setters. */
    1714             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1715             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1716             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1717             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1718             : };
    1719             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1720             : static_assert(0 < 1, "There is no slot for us");
    1721             : 
    1722             : static bool
    1723           0 : createAttribute(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1724             : {
    1725           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1726           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.createAttribute");
    1727             :   }
    1728           0 :   binding_detail::FakeString arg0;
    1729           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1730           0 :     return false;
    1731             :   }
    1732           0 :   binding_detail::FastErrorResult rv;
    1733           0 :   auto result(StrongOrRawPtr<mozilla::dom::Attr>(self->CreateAttribute(NonNullHelper(Constify(arg0)), rv)));
    1734           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1735           0 :     return false;
    1736             :   }
    1737           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1738             :   static_assert(!IsPointer<decltype(result)>::value,
    1739             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    1740           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1741           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1742           0 :     return false;
    1743             :   }
    1744           0 :   return true;
    1745             : }
    1746             : 
    1747             : static const JSJitInfo createAttribute_methodinfo = {
    1748             :   { (JSJitGetterOp)createAttribute },
    1749             :   { prototypes::id::Document },
    1750             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1751             :   JSJitInfo::Method,
    1752             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1753             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1754             :   false,  /* isInfallible. False in setters. */
    1755             :   false,  /* isMovable.  Not relevant for setters. */
    1756             :   false, /* isEliminatable.  Not relevant for setters. */
    1757             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1758             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1759             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1760             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1761             : };
    1762             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1763             : static_assert(0 < 1, "There is no slot for us");
    1764             : 
    1765             : static bool
    1766           0 : createAttributeNS(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    1767             : {
    1768           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    1769           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.createAttributeNS");
    1770             :   }
    1771           0 :   binding_detail::FakeString arg0;
    1772           0 :   if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
    1773           0 :     return false;
    1774             :   }
    1775           0 :   binding_detail::FakeString arg1;
    1776           0 :   if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
    1777           0 :     return false;
    1778             :   }
    1779           0 :   binding_detail::FastErrorResult rv;
    1780           0 :   auto result(StrongOrRawPtr<mozilla::dom::Attr>(self->CreateAttributeNS(NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)), rv)));
    1781           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1782           0 :     return false;
    1783             :   }
    1784           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1785             :   static_assert(!IsPointer<decltype(result)>::value,
    1786             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    1787           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1788           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1789           0 :     return false;
    1790             :   }
    1791           0 :   return true;
    1792             : }
    1793             : 
    1794             : static const JSJitInfo createAttributeNS_methodinfo = {
    1795             :   { (JSJitGetterOp)createAttributeNS },
    1796             :   { prototypes::id::Document },
    1797             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1798             :   JSJitInfo::Method,
    1799             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1800             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1801             :   false,  /* isInfallible. False in setters. */
    1802             :   false,  /* isMovable.  Not relevant for setters. */
    1803             :   false, /* isEliminatable.  Not relevant for setters. */
    1804             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1805             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1806             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1807             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1808             : };
    1809             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1810             : static_assert(0 < 1, "There is no slot for us");
    1811             : 
    1812             : static bool
    1813           0 : get_location(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    1814             : {
    1815           0 :   auto result(StrongOrRawPtr<mozilla::dom::Location>(self->GetLocation()));
    1816           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1817           0 :   if (!result) {
    1818           0 :     args.rval().setNull();
    1819           0 :     return true;
    1820             :   }
    1821           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1822           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1823           0 :     return false;
    1824             :   }
    1825           0 :   return true;
    1826             : }
    1827             : 
    1828             : static bool
    1829           0 : set_location(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    1830             : {
    1831           0 :   JS::Rooted<JS::Value> v(cx);
    1832           0 :   if (!JS_GetProperty(cx, obj, "location", &v)) {
    1833           0 :     return false;
    1834             :   }
    1835             : 
    1836           0 :   if (!v.isObject()) {
    1837           0 :     return ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Document.location");
    1838             :   }
    1839             : 
    1840           0 :   JS::Rooted<JSObject*> targetObj(cx, &v.toObject());
    1841           0 :   return JS_SetProperty(cx, targetObj, "href", args[0]);
    1842             : }
    1843             : 
    1844             : static const JSJitInfo location_getterinfo = {
    1845             :   { (JSJitGetterOp)get_location },
    1846             :   { prototypes::id::Document },
    1847             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1848             :   JSJitInfo::Getter,
    1849             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1850             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1851             :   false,  /* isInfallible. False in setters. */
    1852             :   false,  /* isMovable.  Not relevant for setters. */
    1853             :   false, /* isEliminatable.  Not relevant for setters. */
    1854             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1855             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1856             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1857             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1858             : };
    1859             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1860             : static_assert(0 < 1, "There is no slot for us");
    1861             : static const JSJitInfo location_setterinfo = {
    1862             :   { (JSJitGetterOp)set_location },
    1863             :   { prototypes::id::Document },
    1864             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1865             :   JSJitInfo::Setter,
    1866             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1867             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1868             :   false,  /* isInfallible. False in setters. */
    1869             :   false,  /* isMovable.  Not relevant for setters. */
    1870             :   false, /* isEliminatable.  Not relevant for setters. */
    1871             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1872             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1873             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1874             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1875             : };
    1876             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1877             : static_assert(0 < 1, "There is no slot for us");
    1878             : 
    1879             : static bool
    1880           0 : get_referrer(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    1881             : {
    1882           0 :   DOMString result;
    1883           0 :   self->GetReferrer(result);
    1884           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1885           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1886           0 :     return false;
    1887             :   }
    1888           0 :   return true;
    1889             : }
    1890             : 
    1891             : static const JSJitInfo referrer_getterinfo = {
    1892             :   { (JSJitGetterOp)get_referrer },
    1893             :   { prototypes::id::Document },
    1894             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1895             :   JSJitInfo::Getter,
    1896             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1897             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1898             :   false,  /* isInfallible. False in setters. */
    1899             :   false,  /* isMovable.  Not relevant for setters. */
    1900             :   false, /* isEliminatable.  Not relevant for setters. */
    1901             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1902             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1903             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1904             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1905             : };
    1906             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1907             : static_assert(0 < 1, "There is no slot for us");
    1908             : 
    1909             : static bool
    1910           0 : get_lastModified(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    1911             : {
    1912           0 :   DOMString result;
    1913           0 :   self->GetLastModified(result);
    1914           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1915           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1916           0 :     return false;
    1917             :   }
    1918           0 :   return true;
    1919             : }
    1920             : 
    1921             : static const JSJitInfo lastModified_getterinfo = {
    1922             :   { (JSJitGetterOp)get_lastModified },
    1923             :   { prototypes::id::Document },
    1924             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1925             :   JSJitInfo::Getter,
    1926             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1927             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1928             :   false,  /* isInfallible. False in setters. */
    1929             :   false,  /* isMovable.  Not relevant for setters. */
    1930             :   false, /* isEliminatable.  Not relevant for setters. */
    1931             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1932             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1933             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1934             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1935             : };
    1936             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1937             : static_assert(0 < 1, "There is no slot for us");
    1938             : 
    1939             : static bool
    1940          10 : get_readyState(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    1941             : {
    1942          20 :   DOMString result;
    1943          10 :   self->GetReadyState(result);
    1944          10 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1945          10 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1946           0 :     return false;
    1947             :   }
    1948          10 :   return true;
    1949             : }
    1950             : 
    1951             : static const JSJitInfo readyState_getterinfo = {
    1952             :   { (JSJitGetterOp)get_readyState },
    1953             :   { prototypes::id::Document },
    1954             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    1955             :   JSJitInfo::Getter,
    1956             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1957             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1958             :   false,  /* isInfallible. False in setters. */
    1959             :   false,  /* isMovable.  Not relevant for setters. */
    1960             :   false, /* isEliminatable.  Not relevant for setters. */
    1961             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1962             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1963             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1964             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1965             : };
    1966             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1967             : static_assert(0 < 1, "There is no slot for us");
    1968             : 
    1969             : static bool
    1970           2 : get_title(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    1971             : {
    1972           4 :   DOMString result;
    1973           2 :   self->GetTitle(result);
    1974           2 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1975           2 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1976           0 :     return false;
    1977             :   }
    1978           2 :   return true;
    1979             : }
    1980             : 
    1981             : static bool
    1982           1 : set_title(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    1983             : {
    1984           2 :   binding_detail::FakeString arg0;
    1985           1 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1986           0 :     return false;
    1987             :   }
    1988           1 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1989           2 :   Maybe<AutoCEReaction> ceReaction;
    1990           1 :   if (reactionsStack) {
    1991           1 :     ceReaction.emplace(reactionsStack);
    1992             :   }
    1993           2 :   binding_detail::FastErrorResult rv;
    1994           1 :   self->SetTitle(NonNullHelper(Constify(arg0)), rv);
    1995           1 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1996           0 :     return false;
    1997             :   }
    1998           1 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1999             : 
    2000           1 :   return true;
    2001             : }
    2002             : 
    2003             : static const JSJitInfo title_getterinfo = {
    2004             :   { (JSJitGetterOp)get_title },
    2005             :   { prototypes::id::Document },
    2006             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2007             :   JSJitInfo::Getter,
    2008             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2009             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    2010             :   false,  /* isInfallible. False in setters. */
    2011             :   true,  /* isMovable.  Not relevant for setters. */
    2012             :   true, /* isEliminatable.  Not relevant for setters. */
    2013             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2014             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2015             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2016             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2017             : };
    2018             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2019             : static_assert(0 < 1, "There is no slot for us");
    2020             : static const JSJitInfo title_setterinfo = {
    2021             :   { (JSJitGetterOp)set_title },
    2022             :   { prototypes::id::Document },
    2023             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2024             :   JSJitInfo::Setter,
    2025             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2026             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2027             :   false,  /* isInfallible. False in setters. */
    2028             :   false,  /* isMovable.  Not relevant for setters. */
    2029             :   false, /* isEliminatable.  Not relevant for setters. */
    2030             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2031             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2032             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2033             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2034             : };
    2035             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2036             : static_assert(0 < 1, "There is no slot for us");
    2037             : 
    2038             : static bool
    2039           0 : get_dir(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2040             : {
    2041           0 :   DOMString result;
    2042           0 :   self->GetDir(result);
    2043           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2044           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    2045           0 :     return false;
    2046             :   }
    2047           0 :   return true;
    2048             : }
    2049             : 
    2050             : static bool
    2051           0 : set_dir(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    2052             : {
    2053           0 :   binding_detail::FakeString arg0;
    2054           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2055           0 :     return false;
    2056             :   }
    2057           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    2058           0 :   Maybe<AutoCEReaction> ceReaction;
    2059           0 :   if (reactionsStack) {
    2060           0 :     ceReaction.emplace(reactionsStack);
    2061             :   }
    2062           0 :   self->SetDir(NonNullHelper(Constify(arg0)));
    2063           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2064             : 
    2065           0 :   return true;
    2066             : }
    2067             : 
    2068             : static const JSJitInfo dir_getterinfo = {
    2069             :   { (JSJitGetterOp)get_dir },
    2070             :   { prototypes::id::Document },
    2071             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2072             :   JSJitInfo::Getter,
    2073             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2074             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    2075             :   false,  /* isInfallible. False in setters. */
    2076             :   true,  /* isMovable.  Not relevant for setters. */
    2077             :   true, /* isEliminatable.  Not relevant for setters. */
    2078             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2079             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2080             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2081             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2082             : };
    2083             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2084             : static_assert(0 < 1, "There is no slot for us");
    2085             : static const JSJitInfo dir_setterinfo = {
    2086             :   { (JSJitGetterOp)set_dir },
    2087             :   { prototypes::id::Document },
    2088             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2089             :   JSJitInfo::Setter,
    2090             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2091             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2092             :   false,  /* isInfallible. False in setters. */
    2093             :   false,  /* isMovable.  Not relevant for setters. */
    2094             :   false, /* isEliminatable.  Not relevant for setters. */
    2095             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2096             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2097             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2098             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2099             : };
    2100             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2101             : static_assert(0 < 1, "There is no slot for us");
    2102             : 
    2103             : static bool
    2104          17 : get_defaultView(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2105             : {
    2106          17 :   auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->GetDefaultView()));
    2107          17 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2108          17 :   if (!result) {
    2109           0 :     args.rval().setNull();
    2110           0 :     return true;
    2111             :   }
    2112          17 :   if (!WrapObject(cx, result, args.rval())) {
    2113           0 :     return false;
    2114             :   }
    2115          17 :   return true;
    2116             : }
    2117             : 
    2118             : static const JSJitInfo defaultView_getterinfo = {
    2119             :   { (JSJitGetterOp)get_defaultView },
    2120             :   { prototypes::id::Document },
    2121             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2122             :   JSJitInfo::Getter,
    2123             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2124             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2125             :   false,  /* isInfallible. False in setters. */
    2126             :   true,  /* isMovable.  Not relevant for setters. */
    2127             :   true, /* isEliminatable.  Not relevant for setters. */
    2128             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2129             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2130             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2131             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2132             : };
    2133             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2134             : static_assert(0 < 1, "There is no slot for us");
    2135             : 
    2136             : static bool
    2137           1 : get_activeElement(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2138             : {
    2139           1 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetActiveElement()));
    2140           1 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2141           1 :   if (!result) {
    2142           0 :     args.rval().setNull();
    2143           0 :     return true;
    2144             :   }
    2145           1 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    2146           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2147           0 :     return false;
    2148             :   }
    2149           1 :   return true;
    2150             : }
    2151             : 
    2152             : static const JSJitInfo activeElement_getterinfo = {
    2153             :   { (JSJitGetterOp)get_activeElement },
    2154             :   { prototypes::id::Document },
    2155             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2156             :   JSJitInfo::Getter,
    2157             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2158             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2159             :   false,  /* isInfallible. False in setters. */
    2160             :   false,  /* isMovable.  Not relevant for setters. */
    2161             :   false, /* isEliminatable.  Not relevant for setters. */
    2162             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2163             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2164             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2165             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2166             : };
    2167             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2168             : static_assert(0 < 1, "There is no slot for us");
    2169             : 
    2170             : static bool
    2171           0 : hasFocus(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    2172             : {
    2173           0 :   binding_detail::FastErrorResult rv;
    2174           0 :   bool result(self->HasFocus(rv));
    2175           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2176           0 :     return false;
    2177             :   }
    2178           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2179           0 :   args.rval().setBoolean(result);
    2180           0 :   return true;
    2181             : }
    2182             : 
    2183             : static const JSJitInfo hasFocus_methodinfo = {
    2184             :   { (JSJitGetterOp)hasFocus },
    2185             :   { prototypes::id::Document },
    2186             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2187             :   JSJitInfo::Method,
    2188             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2189             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    2190             :   false,  /* isInfallible. False in setters. */
    2191             :   false,  /* isMovable.  Not relevant for setters. */
    2192             :   false, /* isEliminatable.  Not relevant for setters. */
    2193             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2194             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2195             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2196             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2197             : };
    2198             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2199             : static_assert(0 < 1, "There is no slot for us");
    2200             : 
    2201             : static bool
    2202           0 : get_onreadystatechange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2203             : {
    2204           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnreadystatechange());
    2205           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2206           0 :   if (result) {
    2207           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2208           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2209           0 :       return false;
    2210             :     }
    2211           0 :     return true;
    2212             :   } else {
    2213           0 :     args.rval().setNull();
    2214           0 :     return true;
    2215             :   }
    2216             : }
    2217             : 
    2218             : static bool
    2219           0 : set_onreadystatechange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    2220             : {
    2221           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2222           0 :   if (args[0].isObject()) {
    2223             :     { // scope for tempRoot
    2224           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2225           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2226             :     }
    2227             :   } else {
    2228           0 :     arg0 = nullptr;
    2229             :   }
    2230           0 :   self->SetOnreadystatechange(Constify(arg0));
    2231           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2232             : 
    2233           0 :   return true;
    2234             : }
    2235             : 
    2236             : static const JSJitInfo onreadystatechange_getterinfo = {
    2237             :   { (JSJitGetterOp)get_onreadystatechange },
    2238             :   { prototypes::id::Document },
    2239             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2240             :   JSJitInfo::Getter,
    2241             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2242             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2243             :   false,  /* isInfallible. False in setters. */
    2244             :   false,  /* isMovable.  Not relevant for setters. */
    2245             :   false, /* isEliminatable.  Not relevant for setters. */
    2246             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2247             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2248             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2249             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2250             : };
    2251             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2252             : static_assert(0 < 1, "There is no slot for us");
    2253             : static const JSJitInfo onreadystatechange_setterinfo = {
    2254             :   { (JSJitGetterOp)set_onreadystatechange },
    2255             :   { prototypes::id::Document },
    2256             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2257             :   JSJitInfo::Setter,
    2258             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2259             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2260             :   false,  /* isInfallible. False in setters. */
    2261             :   false,  /* isMovable.  Not relevant for setters. */
    2262             :   false, /* isEliminatable.  Not relevant for setters. */
    2263             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2264             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2265             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2266             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2267             : };
    2268             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2269             : static_assert(0 < 1, "There is no slot for us");
    2270             : 
    2271             : static bool
    2272           0 : get_onbeforescriptexecute(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2273             : {
    2274           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnbeforescriptexecute());
    2275           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2276           0 :   if (result) {
    2277           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2278           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2279           0 :       return false;
    2280             :     }
    2281           0 :     return true;
    2282             :   } else {
    2283           0 :     args.rval().setNull();
    2284           0 :     return true;
    2285             :   }
    2286             : }
    2287             : 
    2288             : static bool
    2289           0 : set_onbeforescriptexecute(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    2290             : {
    2291           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2292           0 :   if (args[0].isObject()) {
    2293             :     { // scope for tempRoot
    2294           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2295           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2296             :     }
    2297             :   } else {
    2298           0 :     arg0 = nullptr;
    2299             :   }
    2300           0 :   self->SetOnbeforescriptexecute(Constify(arg0));
    2301           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2302             : 
    2303           0 :   return true;
    2304             : }
    2305             : 
    2306             : static const JSJitInfo onbeforescriptexecute_getterinfo = {
    2307             :   { (JSJitGetterOp)get_onbeforescriptexecute },
    2308             :   { prototypes::id::Document },
    2309             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2310             :   JSJitInfo::Getter,
    2311             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2312             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2313             :   false,  /* isInfallible. False in setters. */
    2314             :   false,  /* isMovable.  Not relevant for setters. */
    2315             :   false, /* isEliminatable.  Not relevant for setters. */
    2316             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2317             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2318             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2319             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2320             : };
    2321             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2322             : static_assert(0 < 1, "There is no slot for us");
    2323             : static const JSJitInfo onbeforescriptexecute_setterinfo = {
    2324             :   { (JSJitGetterOp)set_onbeforescriptexecute },
    2325             :   { prototypes::id::Document },
    2326             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2327             :   JSJitInfo::Setter,
    2328             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2329             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2330             :   false,  /* isInfallible. False in setters. */
    2331             :   false,  /* isMovable.  Not relevant for setters. */
    2332             :   false, /* isEliminatable.  Not relevant for setters. */
    2333             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2334             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2335             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2336             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2337             : };
    2338             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2339             : static_assert(0 < 1, "There is no slot for us");
    2340             : 
    2341             : static bool
    2342           0 : get_onafterscriptexecute(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2343             : {
    2344           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnafterscriptexecute());
    2345           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2346           0 :   if (result) {
    2347           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2348           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2349           0 :       return false;
    2350             :     }
    2351           0 :     return true;
    2352             :   } else {
    2353           0 :     args.rval().setNull();
    2354           0 :     return true;
    2355             :   }
    2356             : }
    2357             : 
    2358             : static bool
    2359           0 : set_onafterscriptexecute(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    2360             : {
    2361           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2362           0 :   if (args[0].isObject()) {
    2363             :     { // scope for tempRoot
    2364           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2365           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2366             :     }
    2367             :   } else {
    2368           0 :     arg0 = nullptr;
    2369             :   }
    2370           0 :   self->SetOnafterscriptexecute(Constify(arg0));
    2371           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2372             : 
    2373           0 :   return true;
    2374             : }
    2375             : 
    2376             : static const JSJitInfo onafterscriptexecute_getterinfo = {
    2377             :   { (JSJitGetterOp)get_onafterscriptexecute },
    2378             :   { prototypes::id::Document },
    2379             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2380             :   JSJitInfo::Getter,
    2381             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2382             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2383             :   false,  /* isInfallible. False in setters. */
    2384             :   false,  /* isMovable.  Not relevant for setters. */
    2385             :   false, /* isEliminatable.  Not relevant for setters. */
    2386             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2387             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2388             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2389             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2390             : };
    2391             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2392             : static_assert(0 < 1, "There is no slot for us");
    2393             : static const JSJitInfo onafterscriptexecute_setterinfo = {
    2394             :   { (JSJitGetterOp)set_onafterscriptexecute },
    2395             :   { prototypes::id::Document },
    2396             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2397             :   JSJitInfo::Setter,
    2398             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2399             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2400             :   false,  /* isInfallible. False in setters. */
    2401             :   false,  /* isMovable.  Not relevant for setters. */
    2402             :   false, /* isEliminatable.  Not relevant for setters. */
    2403             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2404             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2405             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2406             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2407             : };
    2408             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2409             : static_assert(0 < 1, "There is no slot for us");
    2410             : 
    2411             : static bool
    2412           0 : get_onselectionchange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2413             : {
    2414           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnselectionchange());
    2415           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2416           0 :   if (result) {
    2417           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2418           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2419           0 :       return false;
    2420             :     }
    2421           0 :     return true;
    2422             :   } else {
    2423           0 :     args.rval().setNull();
    2424           0 :     return true;
    2425             :   }
    2426             : }
    2427             : 
    2428             : static bool
    2429           0 : set_onselectionchange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    2430             : {
    2431           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2432           0 :   if (args[0].isObject()) {
    2433             :     { // scope for tempRoot
    2434           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2435           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2436             :     }
    2437             :   } else {
    2438           0 :     arg0 = nullptr;
    2439             :   }
    2440           0 :   self->SetOnselectionchange(Constify(arg0));
    2441           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2442             : 
    2443           0 :   return true;
    2444             : }
    2445             : 
    2446             : static const JSJitInfo onselectionchange_getterinfo = {
    2447             :   { (JSJitGetterOp)get_onselectionchange },
    2448             :   { prototypes::id::Document },
    2449             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2450             :   JSJitInfo::Getter,
    2451             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2452             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2453             :   false,  /* isInfallible. False in setters. */
    2454             :   false,  /* isMovable.  Not relevant for setters. */
    2455             :   false, /* isEliminatable.  Not relevant for setters. */
    2456             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2457             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2458             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2459             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2460             : };
    2461             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2462             : static_assert(0 < 1, "There is no slot for us");
    2463             : static const JSJitInfo onselectionchange_setterinfo = {
    2464             :   { (JSJitGetterOp)set_onselectionchange },
    2465             :   { prototypes::id::Document },
    2466             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2467             :   JSJitInfo::Setter,
    2468             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2469             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2470             :   false,  /* isInfallible. False in setters. */
    2471             :   false,  /* isMovable.  Not relevant for setters. */
    2472             :   false, /* isEliminatable.  Not relevant for setters. */
    2473             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2474             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2475             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2476             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2477             : };
    2478             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2479             : static_assert(0 < 1, "There is no slot for us");
    2480             : 
    2481             : static bool
    2482           3 : get_mozSyntheticDocument(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2483             : {
    2484           3 :   bool result(self->MozSyntheticDocument());
    2485           3 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2486           3 :   args.rval().setBoolean(result);
    2487           3 :   return true;
    2488             : }
    2489             : 
    2490             : static const JSJitInfo mozSyntheticDocument_getterinfo = {
    2491             :   { (JSJitGetterOp)get_mozSyntheticDocument },
    2492             :   { prototypes::id::Document },
    2493             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2494             :   JSJitInfo::Getter,
    2495             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2496             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    2497             :   true,  /* isInfallible. False in setters. */
    2498             :   false,  /* isMovable.  Not relevant for setters. */
    2499             :   false, /* isEliminatable.  Not relevant for setters. */
    2500             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2501             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2502             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2503             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2504             : };
    2505             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2506             : static_assert(0 < 1, "There is no slot for us");
    2507             : 
    2508             : static bool
    2509           0 : get_currentScript(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2510             : {
    2511           0 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetCurrentScript()));
    2512           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2513           0 :   if (!result) {
    2514           0 :     args.rval().setNull();
    2515           0 :     return true;
    2516             :   }
    2517           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    2518           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2519           0 :     return false;
    2520             :   }
    2521           0 :   return true;
    2522             : }
    2523             : 
    2524             : static const JSJitInfo currentScript_getterinfo = {
    2525             :   { (JSJitGetterOp)get_currentScript },
    2526             :   { prototypes::id::Document },
    2527             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2528             :   JSJitInfo::Getter,
    2529             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2530             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2531             :   false,  /* isInfallible. False in setters. */
    2532             :   true,  /* isMovable.  Not relevant for setters. */
    2533             :   true, /* isEliminatable.  Not relevant for setters. */
    2534             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2535             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2536             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2537             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2538             : };
    2539             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2540             : static_assert(0 < 1, "There is no slot for us");
    2541             : 
    2542             : static bool
    2543           0 : releaseCapture(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    2544             : {
    2545           0 :   self->ReleaseCapture();
    2546           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2547           0 :   args.rval().setUndefined();
    2548           0 :   return true;
    2549             : }
    2550             : 
    2551             : static const JSJitInfo releaseCapture_methodinfo = {
    2552             :   { (JSJitGetterOp)releaseCapture },
    2553             :   { prototypes::id::Document },
    2554             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2555             :   JSJitInfo::Method,
    2556             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2557             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2558             :   true,  /* isInfallible. False in setters. */
    2559             :   false,  /* isMovable.  Not relevant for setters. */
    2560             :   false, /* isEliminatable.  Not relevant for setters. */
    2561             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2562             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2563             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2564             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2565             : };
    2566             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2567             : static_assert(0 < 1, "There is no slot for us");
    2568             : 
    2569             : static bool
    2570           0 : mozSetImageElement(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    2571             : {
    2572           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    2573           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.mozSetImageElement");
    2574             :   }
    2575           0 :   binding_detail::FakeString arg0;
    2576           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2577           0 :     return false;
    2578             :   }
    2579             :   mozilla::dom::Element* arg1;
    2580           0 :   if (args[1].isObject()) {
    2581             :     {
    2582           0 :       nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[1], arg1);
    2583           0 :       if (NS_FAILED(rv)) {
    2584           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of Document.mozSetImageElement", "Element");
    2585           0 :         return false;
    2586             :       }
    2587             :     }
    2588           0 :   } else if (args[1].isNullOrUndefined()) {
    2589           0 :     arg1 = nullptr;
    2590             :   } else {
    2591           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of Document.mozSetImageElement");
    2592           0 :     return false;
    2593             :   }
    2594           0 :   self->MozSetImageElement(NonNullHelper(Constify(arg0)), Constify(arg1));
    2595           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2596           0 :   args.rval().setUndefined();
    2597           0 :   return true;
    2598             : }
    2599             : 
    2600             : static const JSJitInfo mozSetImageElement_methodinfo = {
    2601             :   { (JSJitGetterOp)mozSetImageElement },
    2602             :   { prototypes::id::Document },
    2603             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2604             :   JSJitInfo::Method,
    2605             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2606             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2607             :   false,  /* isInfallible. False in setters. */
    2608             :   false,  /* isMovable.  Not relevant for setters. */
    2609             :   false, /* isEliminatable.  Not relevant for setters. */
    2610             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2611             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2612             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2613             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2614             : };
    2615             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2616             : static_assert(0 < 1, "There is no slot for us");
    2617             : 
    2618             : static bool
    2619           7 : get_documentURIObject(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2620             : {
    2621           7 :   auto result(StrongOrRawPtr<nsIURI>(self->GetDocumentURIObject()));
    2622           7 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2623           7 :   if (!result) {
    2624           0 :     args.rval().setNull();
    2625           0 :     return true;
    2626             :   }
    2627           7 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIURI), args.rval())) {
    2628           0 :     return false;
    2629             :   }
    2630           7 :   return true;
    2631             : }
    2632             : 
    2633             : static const JSJitInfo documentURIObject_getterinfo = {
    2634             :   { (JSJitGetterOp)get_documentURIObject },
    2635             :   { prototypes::id::Document },
    2636             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2637             :   JSJitInfo::Getter,
    2638             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2639             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2640             :   false,  /* isInfallible. False in setters. */
    2641             :   false,  /* isMovable.  Not relevant for setters. */
    2642             :   false, /* isEliminatable.  Not relevant for setters. */
    2643             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2644             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2645             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2646             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2647             : };
    2648             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2649             : static_assert(0 < 1, "There is no slot for us");
    2650             : 
    2651             : static bool
    2652           0 : get_referrerPolicy(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2653             : {
    2654           0 :   uint32_t result(self->ReferrerPolicy());
    2655           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2656           0 :   args.rval().setNumber(result);
    2657           0 :   return true;
    2658             : }
    2659             : 
    2660             : static const JSJitInfo referrerPolicy_getterinfo = {
    2661             :   { (JSJitGetterOp)get_referrerPolicy },
    2662             :   { prototypes::id::Document },
    2663             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2664             :   JSJitInfo::Getter,
    2665             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2666             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2667             :   true,  /* isInfallible. False in setters. */
    2668             :   false,  /* isMovable.  Not relevant for setters. */
    2669             :   false, /* isEliminatable.  Not relevant for setters. */
    2670             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2671             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2672             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2673             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2674             : };
    2675             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2676             : static_assert(0 < 1, "There is no slot for us");
    2677             : 
    2678             : static bool
    2679           0 : get_fullscreen(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2680             : {
    2681           0 :   bool result(self->Fullscreen());
    2682           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2683           0 :   args.rval().setBoolean(result);
    2684           0 :   return true;
    2685             : }
    2686             : 
    2687             : static bool
    2688           0 : set_fullscreen(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    2689             : {
    2690           0 :   DeprecationWarning(cx, obj, nsIDocument::eLenientSetter);
    2691           0 :   return true;
    2692             : }
    2693             : 
    2694             : static const JSJitInfo fullscreen_getterinfo = {
    2695             :   { (JSJitGetterOp)get_fullscreen },
    2696             :   { prototypes::id::Document },
    2697             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2698             :   JSJitInfo::Getter,
    2699             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2700             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    2701             :   true,  /* isInfallible. False in setters. */
    2702             :   false,  /* isMovable.  Not relevant for setters. */
    2703             :   false, /* isEliminatable.  Not relevant for setters. */
    2704             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2705             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2706             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2707             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2708             : };
    2709             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2710             : static_assert(0 < 1, "There is no slot for us");
    2711             : static const JSJitInfo fullscreen_setterinfo = {
    2712             :   { (JSJitGetterOp)set_fullscreen },
    2713             :   { prototypes::id::Document },
    2714             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2715             :   JSJitInfo::Setter,
    2716             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2717             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2718             :   false,  /* isInfallible. False in setters. */
    2719             :   false,  /* isMovable.  Not relevant for setters. */
    2720             :   false, /* isEliminatable.  Not relevant for setters. */
    2721             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2722             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2723             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2724             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2725             : };
    2726             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2727             : static_assert(0 < 1, "There is no slot for us");
    2728             : 
    2729             : static bool
    2730           0 : get_mozFullScreen(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2731             : {
    2732           0 :   bool result(self->Fullscreen());
    2733           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2734           0 :   args.rval().setBoolean(result);
    2735           0 :   return true;
    2736             : }
    2737             : 
    2738             : static const JSJitInfo mozFullScreen_getterinfo = {
    2739             :   { (JSJitGetterOp)get_mozFullScreen },
    2740             :   { prototypes::id::Document },
    2741             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2742             :   JSJitInfo::Getter,
    2743             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2744             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    2745             :   true,  /* isInfallible. False in setters. */
    2746             :   false,  /* isMovable.  Not relevant for setters. */
    2747             :   false, /* isEliminatable.  Not relevant for setters. */
    2748             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2749             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2750             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2751             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2752             : };
    2753             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2754             : static_assert(0 < 1, "There is no slot for us");
    2755             : 
    2756             : static bool
    2757           0 : get_fullscreenEnabled(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2758             : {
    2759           0 :   bool result(self->FullscreenEnabled(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem));
    2760           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2761           0 :   args.rval().setBoolean(result);
    2762           0 :   return true;
    2763             : }
    2764             : 
    2765             : static bool
    2766           0 : set_fullscreenEnabled(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    2767             : {
    2768           0 :   DeprecationWarning(cx, obj, nsIDocument::eLenientSetter);
    2769           0 :   return true;
    2770             : }
    2771             : 
    2772             : static const JSJitInfo fullscreenEnabled_getterinfo = {
    2773             :   { (JSJitGetterOp)get_fullscreenEnabled },
    2774             :   { prototypes::id::Document },
    2775             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2776             :   JSJitInfo::Getter,
    2777             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2778             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    2779             :   true,  /* isInfallible. False in setters. */
    2780             :   false,  /* isMovable.  Not relevant for setters. */
    2781             :   false, /* isEliminatable.  Not relevant for setters. */
    2782             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2783             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2784             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2785             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2786             : };
    2787             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2788             : static_assert(0 < 1, "There is no slot for us");
    2789             : static const JSJitInfo fullscreenEnabled_setterinfo = {
    2790             :   { (JSJitGetterOp)set_fullscreenEnabled },
    2791             :   { prototypes::id::Document },
    2792             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2793             :   JSJitInfo::Setter,
    2794             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2795             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2796             :   false,  /* isInfallible. False in setters. */
    2797             :   false,  /* isMovable.  Not relevant for setters. */
    2798             :   false, /* isEliminatable.  Not relevant for setters. */
    2799             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2800             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2801             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2802             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2803             : };
    2804             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2805             : static_assert(0 < 1, "There is no slot for us");
    2806             : 
    2807             : static bool
    2808           0 : get_mozFullScreenEnabled(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2809             : {
    2810           0 :   bool result(self->FullscreenEnabled(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem));
    2811           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2812           0 :   args.rval().setBoolean(result);
    2813           0 :   return true;
    2814             : }
    2815             : 
    2816             : static const JSJitInfo mozFullScreenEnabled_getterinfo = {
    2817             :   { (JSJitGetterOp)get_mozFullScreenEnabled },
    2818             :   { prototypes::id::Document },
    2819             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2820             :   JSJitInfo::Getter,
    2821             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2822             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    2823             :   true,  /* isInfallible. False in setters. */
    2824             :   false,  /* isMovable.  Not relevant for setters. */
    2825             :   false, /* isEliminatable.  Not relevant for setters. */
    2826             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2827             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2828             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2829             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2830             : };
    2831             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2832             : static_assert(0 < 1, "There is no slot for us");
    2833             : 
    2834             : static bool
    2835           0 : get_fullscreenElement(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2836             : {
    2837           0 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetFullscreenElement()));
    2838           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2839           0 :   if (!result) {
    2840           0 :     args.rval().setNull();
    2841           0 :     return true;
    2842             :   }
    2843           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    2844           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2845           0 :     return false;
    2846             :   }
    2847           0 :   return true;
    2848             : }
    2849             : 
    2850             : static bool
    2851           0 : set_fullscreenElement(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    2852             : {
    2853           0 :   DeprecationWarning(cx, obj, nsIDocument::eLenientSetter);
    2854           0 :   return true;
    2855             : }
    2856             : 
    2857             : static const JSJitInfo fullscreenElement_getterinfo = {
    2858             :   { (JSJitGetterOp)get_fullscreenElement },
    2859             :   { prototypes::id::Document },
    2860             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2861             :   JSJitInfo::Getter,
    2862             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2863             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2864             :   false,  /* isInfallible. False in setters. */
    2865             :   false,  /* isMovable.  Not relevant for setters. */
    2866             :   false, /* isEliminatable.  Not relevant for setters. */
    2867             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2868             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2869             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2870             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2871             : };
    2872             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2873             : static_assert(0 < 1, "There is no slot for us");
    2874             : static const JSJitInfo fullscreenElement_setterinfo = {
    2875             :   { (JSJitGetterOp)set_fullscreenElement },
    2876             :   { prototypes::id::Document },
    2877             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2878             :   JSJitInfo::Setter,
    2879             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2880             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2881             :   false,  /* isInfallible. False in setters. */
    2882             :   false,  /* isMovable.  Not relevant for setters. */
    2883             :   false, /* isEliminatable.  Not relevant for setters. */
    2884             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2885             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2886             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2887             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2888             : };
    2889             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2890             : static_assert(0 < 1, "There is no slot for us");
    2891             : 
    2892             : static bool
    2893           0 : get_mozFullScreenElement(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2894             : {
    2895           0 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetFullscreenElement()));
    2896           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2897           0 :   if (!result) {
    2898           0 :     args.rval().setNull();
    2899           0 :     return true;
    2900             :   }
    2901           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    2902           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2903           0 :     return false;
    2904             :   }
    2905           0 :   return true;
    2906             : }
    2907             : 
    2908             : static const JSJitInfo mozFullScreenElement_getterinfo = {
    2909             :   { (JSJitGetterOp)get_mozFullScreenElement },
    2910             :   { prototypes::id::Document },
    2911             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2912             :   JSJitInfo::Getter,
    2913             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2914             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2915             :   false,  /* isInfallible. False in setters. */
    2916             :   false,  /* isMovable.  Not relevant for setters. */
    2917             :   false, /* isEliminatable.  Not relevant for setters. */
    2918             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2919             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2920             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2921             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2922             : };
    2923             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2924             : static_assert(0 < 1, "There is no slot for us");
    2925             : 
    2926             : static bool
    2927           0 : exitFullscreen(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    2928             : {
    2929           0 :   self->ExitFullscreen();
    2930           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2931           0 :   args.rval().setUndefined();
    2932           0 :   return true;
    2933             : }
    2934             : 
    2935             : static const JSJitInfo exitFullscreen_methodinfo = {
    2936             :   { (JSJitGetterOp)exitFullscreen },
    2937             :   { prototypes::id::Document },
    2938             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2939             :   JSJitInfo::Method,
    2940             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2941             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2942             :   true,  /* isInfallible. False in setters. */
    2943             :   false,  /* isMovable.  Not relevant for setters. */
    2944             :   false, /* isEliminatable.  Not relevant for setters. */
    2945             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2946             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2947             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2948             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2949             : };
    2950             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2951             : static_assert(0 < 1, "There is no slot for us");
    2952             : 
    2953             : static bool
    2954           0 : mozCancelFullScreen(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    2955             : {
    2956           0 :   self->ExitFullscreen();
    2957           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2958           0 :   args.rval().setUndefined();
    2959           0 :   return true;
    2960             : }
    2961             : 
    2962             : static const JSJitInfo mozCancelFullScreen_methodinfo = {
    2963             :   { (JSJitGetterOp)mozCancelFullScreen },
    2964             :   { prototypes::id::Document },
    2965             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    2966             :   JSJitInfo::Method,
    2967             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2968             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2969             :   true,  /* isInfallible. False in setters. */
    2970             :   false,  /* isMovable.  Not relevant for setters. */
    2971             :   false, /* isEliminatable.  Not relevant for setters. */
    2972             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2973             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2974             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2975             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2976             : };
    2977             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2978             : static_assert(0 < 1, "There is no slot for us");
    2979             : 
    2980             : static bool
    2981           0 : get_onfullscreenchange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    2982             : {
    2983           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnfullscreenchange());
    2984           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2985           0 :   if (result) {
    2986           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2987           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2988           0 :       return false;
    2989             :     }
    2990           0 :     return true;
    2991             :   } else {
    2992           0 :     args.rval().setNull();
    2993           0 :     return true;
    2994             :   }
    2995             : }
    2996             : 
    2997             : static bool
    2998           0 : set_onfullscreenchange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    2999             : {
    3000           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3001           0 :   if (args[0].isObject()) {
    3002             :     { // scope for tempRoot
    3003           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3004           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3005             :     }
    3006             :   } else {
    3007           0 :     arg0 = nullptr;
    3008             :   }
    3009           0 :   self->SetOnfullscreenchange(Constify(arg0));
    3010           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3011             : 
    3012           0 :   return true;
    3013             : }
    3014             : 
    3015             : static const JSJitInfo onfullscreenchange_getterinfo = {
    3016             :   { (JSJitGetterOp)get_onfullscreenchange },
    3017             :   { prototypes::id::Document },
    3018             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3019             :   JSJitInfo::Getter,
    3020             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3021             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3022             :   false,  /* isInfallible. False in setters. */
    3023             :   false,  /* isMovable.  Not relevant for setters. */
    3024             :   false, /* isEliminatable.  Not relevant for setters. */
    3025             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3026             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3027             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3028             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3029             : };
    3030             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3031             : static_assert(0 < 1, "There is no slot for us");
    3032             : static const JSJitInfo onfullscreenchange_setterinfo = {
    3033             :   { (JSJitGetterOp)set_onfullscreenchange },
    3034             :   { prototypes::id::Document },
    3035             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3036             :   JSJitInfo::Setter,
    3037             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3038             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3039             :   false,  /* isInfallible. False in setters. */
    3040             :   false,  /* isMovable.  Not relevant for setters. */
    3041             :   false, /* isEliminatable.  Not relevant for setters. */
    3042             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3043             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3044             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3045             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3046             : };
    3047             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3048             : static_assert(0 < 1, "There is no slot for us");
    3049             : 
    3050             : static bool
    3051           0 : get_onfullscreenerror(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    3052             : {
    3053           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnfullscreenerror());
    3054           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3055           0 :   if (result) {
    3056           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3057           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3058           0 :       return false;
    3059             :     }
    3060           0 :     return true;
    3061             :   } else {
    3062           0 :     args.rval().setNull();
    3063           0 :     return true;
    3064             :   }
    3065             : }
    3066             : 
    3067             : static bool
    3068           0 : set_onfullscreenerror(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    3069             : {
    3070           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3071           0 :   if (args[0].isObject()) {
    3072             :     { // scope for tempRoot
    3073           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3074           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3075             :     }
    3076             :   } else {
    3077           0 :     arg0 = nullptr;
    3078             :   }
    3079           0 :   self->SetOnfullscreenerror(Constify(arg0));
    3080           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3081             : 
    3082           0 :   return true;
    3083             : }
    3084             : 
    3085             : static const JSJitInfo onfullscreenerror_getterinfo = {
    3086             :   { (JSJitGetterOp)get_onfullscreenerror },
    3087             :   { prototypes::id::Document },
    3088             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3089             :   JSJitInfo::Getter,
    3090             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3091             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3092             :   false,  /* isInfallible. False in setters. */
    3093             :   false,  /* isMovable.  Not relevant for setters. */
    3094             :   false, /* isEliminatable.  Not relevant for setters. */
    3095             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3096             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3097             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3098             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3099             : };
    3100             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3101             : static_assert(0 < 1, "There is no slot for us");
    3102             : static const JSJitInfo onfullscreenerror_setterinfo = {
    3103             :   { (JSJitGetterOp)set_onfullscreenerror },
    3104             :   { prototypes::id::Document },
    3105             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3106             :   JSJitInfo::Setter,
    3107             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3108             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3109             :   false,  /* isInfallible. False in setters. */
    3110             :   false,  /* isMovable.  Not relevant for setters. */
    3111             :   false, /* isEliminatable.  Not relevant for setters. */
    3112             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3113             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3114             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3115             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3116             : };
    3117             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3118             : static_assert(0 < 1, "There is no slot for us");
    3119             : 
    3120             : static bool
    3121           0 : get_pointerLockElement(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    3122             : {
    3123           0 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetPointerLockElement()));
    3124           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3125           0 :   if (!result) {
    3126           0 :     args.rval().setNull();
    3127           0 :     return true;
    3128             :   }
    3129           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3130           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3131           0 :     return false;
    3132             :   }
    3133           0 :   return true;
    3134             : }
    3135             : 
    3136             : static const JSJitInfo pointerLockElement_getterinfo = {
    3137             :   { (JSJitGetterOp)get_pointerLockElement },
    3138             :   { prototypes::id::Document },
    3139             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3140             :   JSJitInfo::Getter,
    3141             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3142             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3143             :   false,  /* isInfallible. False in setters. */
    3144             :   false,  /* isMovable.  Not relevant for setters. */
    3145             :   false, /* isEliminatable.  Not relevant for setters. */
    3146             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3147             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3148             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3149             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3150             : };
    3151             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3152             : static_assert(0 < 1, "There is no slot for us");
    3153             : 
    3154             : static bool
    3155           0 : exitPointerLock(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    3156             : {
    3157           0 :   self->ExitPointerLock();
    3158           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3159           0 :   args.rval().setUndefined();
    3160           0 :   return true;
    3161             : }
    3162             : 
    3163             : static const JSJitInfo exitPointerLock_methodinfo = {
    3164             :   { (JSJitGetterOp)exitPointerLock },
    3165             :   { prototypes::id::Document },
    3166             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3167             :   JSJitInfo::Method,
    3168             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3169             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3170             :   true,  /* isInfallible. False in setters. */
    3171             :   false,  /* isMovable.  Not relevant for setters. */
    3172             :   false, /* isEliminatable.  Not relevant for setters. */
    3173             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3174             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3175             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3176             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3177             : };
    3178             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3179             : static_assert(0 < 1, "There is no slot for us");
    3180             : 
    3181             : static bool
    3182           0 : get_onpointerlockchange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    3183             : {
    3184           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerlockchange());
    3185           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3186           0 :   if (result) {
    3187           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3188           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3189           0 :       return false;
    3190             :     }
    3191           0 :     return true;
    3192             :   } else {
    3193           0 :     args.rval().setNull();
    3194           0 :     return true;
    3195             :   }
    3196             : }
    3197             : 
    3198             : static bool
    3199           0 : set_onpointerlockchange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    3200             : {
    3201           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3202           0 :   if (args[0].isObject()) {
    3203             :     { // scope for tempRoot
    3204           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3205           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3206             :     }
    3207             :   } else {
    3208           0 :     arg0 = nullptr;
    3209             :   }
    3210           0 :   self->SetOnpointerlockchange(Constify(arg0));
    3211           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3212             : 
    3213           0 :   return true;
    3214             : }
    3215             : 
    3216             : static const JSJitInfo onpointerlockchange_getterinfo = {
    3217             :   { (JSJitGetterOp)get_onpointerlockchange },
    3218             :   { prototypes::id::Document },
    3219             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3220             :   JSJitInfo::Getter,
    3221             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3222             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3223             :   false,  /* isInfallible. False in setters. */
    3224             :   false,  /* isMovable.  Not relevant for setters. */
    3225             :   false, /* isEliminatable.  Not relevant for setters. */
    3226             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3227             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3228             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3229             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3230             : };
    3231             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3232             : static_assert(0 < 1, "There is no slot for us");
    3233             : static const JSJitInfo onpointerlockchange_setterinfo = {
    3234             :   { (JSJitGetterOp)set_onpointerlockchange },
    3235             :   { prototypes::id::Document },
    3236             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3237             :   JSJitInfo::Setter,
    3238             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3239             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3240             :   false,  /* isInfallible. False in setters. */
    3241             :   false,  /* isMovable.  Not relevant for setters. */
    3242             :   false, /* isEliminatable.  Not relevant for setters. */
    3243             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3244             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3245             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3246             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3247             : };
    3248             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3249             : static_assert(0 < 1, "There is no slot for us");
    3250             : 
    3251             : static bool
    3252           0 : get_onpointerlockerror(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    3253             : {
    3254           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerlockerror());
    3255           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3256           0 :   if (result) {
    3257           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3258           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3259           0 :       return false;
    3260             :     }
    3261           0 :     return true;
    3262             :   } else {
    3263           0 :     args.rval().setNull();
    3264           0 :     return true;
    3265             :   }
    3266             : }
    3267             : 
    3268             : static bool
    3269           0 : set_onpointerlockerror(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    3270             : {
    3271           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3272           0 :   if (args[0].isObject()) {
    3273             :     { // scope for tempRoot
    3274           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3275           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3276             :     }
    3277             :   } else {
    3278           0 :     arg0 = nullptr;
    3279             :   }
    3280           0 :   self->SetOnpointerlockerror(Constify(arg0));
    3281           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3282             : 
    3283           0 :   return true;
    3284             : }
    3285             : 
    3286             : static const JSJitInfo onpointerlockerror_getterinfo = {
    3287             :   { (JSJitGetterOp)get_onpointerlockerror },
    3288             :   { prototypes::id::Document },
    3289             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3290             :   JSJitInfo::Getter,
    3291             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3292             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3293             :   false,  /* isInfallible. False in setters. */
    3294             :   false,  /* isMovable.  Not relevant for setters. */
    3295             :   false, /* isEliminatable.  Not relevant for setters. */
    3296             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3297             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3298             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3299             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3300             : };
    3301             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3302             : static_assert(0 < 1, "There is no slot for us");
    3303             : static const JSJitInfo onpointerlockerror_setterinfo = {
    3304             :   { (JSJitGetterOp)set_onpointerlockerror },
    3305             :   { prototypes::id::Document },
    3306             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3307             :   JSJitInfo::Setter,
    3308             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3309             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3310             :   false,  /* isInfallible. False in setters. */
    3311             :   false,  /* isMovable.  Not relevant for setters. */
    3312             :   false, /* isEliminatable.  Not relevant for setters. */
    3313             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3314             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3315             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3316             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3317             : };
    3318             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3319             : static_assert(0 < 1, "There is no slot for us");
    3320             : 
    3321             : static bool
    3322           0 : registerElement(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    3323             : {
    3324           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3325           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.registerElement");
    3326             :   }
    3327           0 :   binding_detail::FakeString arg0;
    3328           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    3329           0 :     return false;
    3330             :   }
    3331           0 :   RootedDictionary<binding_detail::FastElementRegistrationOptions> arg1(cx);
    3332           0 :   if (!arg1.Init(cx, (args.hasDefined(1)) ? args[1] : JS::NullHandleValue,  "Argument 2 of Document.registerElement", false)) {
    3333           0 :     return false;
    3334             :   }
    3335           0 :   binding_detail::FastErrorResult rv;
    3336           0 :   JS::Rooted<JSObject*> result(cx);
    3337           0 :   self->RegisterElement(cx, NonNullHelper(Constify(arg0)), Constify(arg1), &result, rv);
    3338           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3339           0 :     return false;
    3340             :   }
    3341           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3342           0 :   JS::ExposeObjectToActiveJS(result);
    3343           0 :   args.rval().setObject(*result);
    3344           0 :   if (!MaybeWrapObjectValue(cx, args.rval())) {
    3345           0 :     return false;
    3346             :   }
    3347           0 :   return true;
    3348             : }
    3349             : 
    3350             : static const JSJitInfo registerElement_methodinfo = {
    3351             :   { (JSJitGetterOp)registerElement },
    3352             :   { prototypes::id::Document },
    3353             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3354             :   JSJitInfo::Method,
    3355             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3356             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3357             :   false,  /* isInfallible. False in setters. */
    3358             :   false,  /* isMovable.  Not relevant for setters. */
    3359             :   false, /* isEliminatable.  Not relevant for setters. */
    3360             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3361             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3362             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3363             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3364             : };
    3365             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3366             : static_assert(0 < 1, "There is no slot for us");
    3367             : 
    3368             : static bool
    3369           0 : get_hidden(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    3370             : {
    3371           0 :   bool result(self->Hidden());
    3372           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3373           0 :   args.rval().setBoolean(result);
    3374           0 :   return true;
    3375             : }
    3376             : 
    3377             : static const JSJitInfo hidden_getterinfo = {
    3378             :   { (JSJitGetterOp)get_hidden },
    3379             :   { prototypes::id::Document },
    3380             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3381             :   JSJitInfo::Getter,
    3382             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3383             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    3384             :   true,  /* isInfallible. False in setters. */
    3385             :   false,  /* isMovable.  Not relevant for setters. */
    3386             :   false, /* isEliminatable.  Not relevant for setters. */
    3387             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3388             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3389             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3390             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3391             : };
    3392             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3393             : static_assert(0 < 1, "There is no slot for us");
    3394             : 
    3395             : static bool
    3396           0 : get_visibilityState(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    3397             : {
    3398           0 :   VisibilityState result(self->VisibilityState());
    3399           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3400           0 :   if (!ToJSValue(cx, result, args.rval())) {
    3401           0 :     return false;
    3402             :   }
    3403           0 :   return true;
    3404             : }
    3405             : 
    3406             : static const JSJitInfo visibilityState_getterinfo = {
    3407             :   { (JSJitGetterOp)get_visibilityState },
    3408             :   { prototypes::id::Document },
    3409             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3410             :   JSJitInfo::Getter,
    3411             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3412             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    3413             :   false,  /* isInfallible. False in setters. */
    3414             :   false,  /* isMovable.  Not relevant for setters. */
    3415             :   false, /* isEliminatable.  Not relevant for setters. */
    3416             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3417             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3418             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3419             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3420             : };
    3421             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3422             : static_assert(0 < 1, "There is no slot for us");
    3423             : 
    3424             : static bool
    3425           2 : get_styleSheets(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    3426             : {
    3427           2 :   auto result(StrongOrRawPtr<mozilla::dom::StyleSheetList>(self->StyleSheets()));
    3428           2 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3429           2 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3430           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3431           0 :     return false;
    3432             :   }
    3433           2 :   return true;
    3434             : }
    3435             : 
    3436             : static const JSJitInfo styleSheets_getterinfo = {
    3437             :   { (JSJitGetterOp)get_styleSheets },
    3438             :   { prototypes::id::Document },
    3439             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3440             :   JSJitInfo::Getter,
    3441             :   JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
    3442             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3443             :   false,  /* isInfallible. False in setters. */
    3444             :   true,  /* isMovable.  Not relevant for setters. */
    3445             :   true, /* isEliminatable.  Not relevant for setters. */
    3446             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3447             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3448             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3449             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3450             : };
    3451             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3452             : static_assert(0 < 1, "There is no slot for us");
    3453             : 
    3454             : static bool
    3455           1 : get_selectedStyleSheetSet(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    3456             : {
    3457           2 :   DOMString result;
    3458           1 :   self->GetSelectedStyleSheetSet(result);
    3459           1 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3460           1 :   if (!xpc::StringToJsval(cx, result, args.rval())) {
    3461           0 :     return false;
    3462             :   }
    3463           1 :   return true;
    3464             : }
    3465             : 
    3466             : static bool
    3467           0 : set_selectedStyleSheetSet(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    3468             : {
    3469           0 :   binding_detail::FakeString arg0;
    3470           0 :   if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
    3471           0 :     return false;
    3472             :   }
    3473           0 :   self->SetSelectedStyleSheetSet(NonNullHelper(Constify(arg0)));
    3474           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3475             : 
    3476           0 :   return true;
    3477             : }
    3478             : 
    3479             : static const JSJitInfo selectedStyleSheetSet_getterinfo = {
    3480             :   { (JSJitGetterOp)get_selectedStyleSheetSet },
    3481             :   { prototypes::id::Document },
    3482             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3483             :   JSJitInfo::Getter,
    3484             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3485             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3486             :   false,  /* isInfallible. False in setters. */
    3487             :   false,  /* isMovable.  Not relevant for setters. */
    3488             :   false, /* isEliminatable.  Not relevant for setters. */
    3489             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3490             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3491             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3492             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3493             : };
    3494             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3495             : static_assert(0 < 1, "There is no slot for us");
    3496             : static const JSJitInfo selectedStyleSheetSet_setterinfo = {
    3497             :   { (JSJitGetterOp)set_selectedStyleSheetSet },
    3498             :   { prototypes::id::Document },
    3499             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3500             :   JSJitInfo::Setter,
    3501             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3502             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3503             :   false,  /* isInfallible. False in setters. */
    3504             :   false,  /* isMovable.  Not relevant for setters. */
    3505             :   false, /* isEliminatable.  Not relevant for setters. */
    3506             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3507             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3508             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3509             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3510             : };
    3511             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3512             : static_assert(0 < 1, "There is no slot for us");
    3513             : 
    3514             : static bool
    3515           1 : get_lastStyleSheetSet(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    3516             : {
    3517           2 :   DOMString result;
    3518           1 :   self->GetLastStyleSheetSet(result);
    3519           1 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3520           1 :   if (!xpc::StringToJsval(cx, result, args.rval())) {
    3521           0 :     return false;
    3522             :   }
    3523           1 :   return true;
    3524             : }
    3525             : 
    3526             : static const JSJitInfo lastStyleSheetSet_getterinfo = {
    3527             :   { (JSJitGetterOp)get_lastStyleSheetSet },
    3528             :   { prototypes::id::Document },
    3529             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3530             :   JSJitInfo::Getter,
    3531             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3532             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3533             :   false,  /* isInfallible. False in setters. */
    3534             :   false,  /* isMovable.  Not relevant for setters. */
    3535             :   false, /* isEliminatable.  Not relevant for setters. */
    3536             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3537             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3538             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3539             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3540             : };
    3541             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3542             : static_assert(0 < 1, "There is no slot for us");
    3543             : 
    3544             : static bool
    3545           2 : get_preferredStyleSheetSet(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    3546             : {
    3547           4 :   DOMString result;
    3548           2 :   self->GetPreferredStyleSheetSet(result);
    3549           2 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3550           2 :   if (!xpc::StringToJsval(cx, result, args.rval())) {
    3551           0 :     return false;
    3552             :   }
    3553           2 :   return true;
    3554             : }
    3555             : 
    3556             : static const JSJitInfo preferredStyleSheetSet_getterinfo = {
    3557             :   { (JSJitGetterOp)get_preferredStyleSheetSet },
    3558             :   { prototypes::id::Document },
    3559             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3560             :   JSJitInfo::Getter,
    3561             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3562             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3563             :   false,  /* isInfallible. False in setters. */
    3564             :   false,  /* isMovable.  Not relevant for setters. */
    3565             :   false, /* isEliminatable.  Not relevant for setters. */
    3566             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3567             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3568             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3569             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3570             : };
    3571             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3572             : static_assert(0 < 1, "There is no slot for us");
    3573             : 
    3574             : static bool
    3575           0 : get_styleSheetSets(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    3576             : {
    3577           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMStringList>(self->StyleSheetSets()));
    3578           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3579           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3580           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3581           0 :     return false;
    3582             :   }
    3583           0 :   return true;
    3584             : }
    3585             : 
    3586             : static const JSJitInfo styleSheetSets_getterinfo = {
    3587             :   { (JSJitGetterOp)get_styleSheetSets },
    3588             :   { prototypes::id::Document },
    3589             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3590             :   JSJitInfo::Getter,
    3591             :   JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
    3592             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3593             :   false,  /* isInfallible. False in setters. */
    3594             :   true,  /* isMovable.  Not relevant for setters. */
    3595             :   true, /* isEliminatable.  Not relevant for setters. */
    3596             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3597             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3598             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3599             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3600             : };
    3601             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3602             : static_assert(0 < 1, "There is no slot for us");
    3603             : 
    3604             : static bool
    3605           0 : enableStyleSheetsForSet(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    3606             : {
    3607           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3608           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.enableStyleSheetsForSet");
    3609             :   }
    3610           0 :   binding_detail::FakeString arg0;
    3611           0 :   if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
    3612           0 :     return false;
    3613             :   }
    3614           0 :   self->EnableStyleSheetsForSet(NonNullHelper(Constify(arg0)));
    3615           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3616           0 :   args.rval().setUndefined();
    3617           0 :   return true;
    3618             : }
    3619             : 
    3620             : static const JSJitInfo enableStyleSheetsForSet_methodinfo = {
    3621             :   { (JSJitGetterOp)enableStyleSheetsForSet },
    3622             :   { prototypes::id::Document },
    3623             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3624             :   JSJitInfo::Method,
    3625             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3626             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3627             :   false,  /* isInfallible. False in setters. */
    3628             :   false,  /* isMovable.  Not relevant for setters. */
    3629             :   false, /* isEliminatable.  Not relevant for setters. */
    3630             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3631             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3632             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3633             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3634             : };
    3635             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3636             : static_assert(0 < 1, "There is no slot for us");
    3637             : 
    3638             : static bool
    3639           0 : elementFromPoint(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    3640             : {
    3641           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3642           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.elementFromPoint");
    3643             :   }
    3644             :   float arg0;
    3645           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[0], &arg0)) {
    3646           0 :     return false;
    3647           0 :   } else if (!mozilla::IsFinite(arg0)) {
    3648           0 :     ThrowErrorMessage(cx, MSG_NOT_FINITE, "Argument 1 of Document.elementFromPoint");
    3649           0 :     return false;
    3650             :   }
    3651             :   float arg1;
    3652           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
    3653           0 :     return false;
    3654           0 :   } else if (!mozilla::IsFinite(arg1)) {
    3655           0 :     ThrowErrorMessage(cx, MSG_NOT_FINITE, "Argument 2 of Document.elementFromPoint");
    3656           0 :     return false;
    3657             :   }
    3658           0 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->ElementFromPoint(arg0, arg1)));
    3659           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3660           0 :   if (!result) {
    3661           0 :     args.rval().setNull();
    3662           0 :     return true;
    3663             :   }
    3664           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3665           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3666           0 :     return false;
    3667             :   }
    3668           0 :   return true;
    3669             : }
    3670             : 
    3671             : static const JSJitInfo elementFromPoint_methodinfo = {
    3672             :   { (JSJitGetterOp)elementFromPoint },
    3673             :   { prototypes::id::Document },
    3674             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3675             :   JSJitInfo::Method,
    3676             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3677             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3678             :   false,  /* isInfallible. False in setters. */
    3679             :   false,  /* isMovable.  Not relevant for setters. */
    3680             :   false, /* isEliminatable.  Not relevant for setters. */
    3681             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3682             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3683             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3684             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3685             : };
    3686             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3687             : static_assert(0 < 1, "There is no slot for us");
    3688             : 
    3689             : static bool
    3690           0 : elementsFromPoint(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    3691             : {
    3692           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3693           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.elementsFromPoint");
    3694             :   }
    3695             :   float arg0;
    3696           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[0], &arg0)) {
    3697           0 :     return false;
    3698           0 :   } else if (!mozilla::IsFinite(arg0)) {
    3699           0 :     ThrowErrorMessage(cx, MSG_NOT_FINITE, "Argument 1 of Document.elementsFromPoint");
    3700           0 :     return false;
    3701             :   }
    3702             :   float arg1;
    3703           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
    3704           0 :     return false;
    3705           0 :   } else if (!mozilla::IsFinite(arg1)) {
    3706           0 :     ThrowErrorMessage(cx, MSG_NOT_FINITE, "Argument 2 of Document.elementsFromPoint");
    3707           0 :     return false;
    3708             :   }
    3709           0 :   nsTArray<StrongPtrForMember<mozilla::dom::Element>::Type> result;
    3710           0 :   self->ElementsFromPoint(arg0, arg1, result);
    3711           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3712             : 
    3713           0 :   uint32_t length = result.Length();
    3714           0 :   JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
    3715           0 :   if (!returnArray) {
    3716           0 :     return false;
    3717             :   }
    3718             :   // Scope for 'tmp'
    3719             :   {
    3720           0 :     JS::Rooted<JS::Value> tmp(cx);
    3721           0 :     for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
    3722             :       // Control block to let us common up the JS_DefineElement calls when there
    3723             :       // are different ways to succeed at wrapping the object.
    3724             :       do {
    3725           0 :         if (!GetOrCreateDOMReflector(cx, result[sequenceIdx0], &tmp)) {
    3726           0 :           MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3727           0 :           return false;
    3728             :         }
    3729           0 :         break;
    3730             :       } while (0);
    3731           0 :       if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
    3732             :                             JSPROP_ENUMERATE)) {
    3733           0 :         return false;
    3734             :       }
    3735             :     }
    3736             :   }
    3737           0 :   args.rval().setObject(*returnArray);
    3738           0 :   return true;
    3739             : }
    3740             : 
    3741             : static const JSJitInfo elementsFromPoint_methodinfo = {
    3742             :   { (JSJitGetterOp)elementsFromPoint },
    3743             :   { prototypes::id::Document },
    3744             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3745             :   JSJitInfo::Method,
    3746             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3747             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3748             :   false,  /* isInfallible. False in setters. */
    3749             :   false,  /* isMovable.  Not relevant for setters. */
    3750             :   false, /* isEliminatable.  Not relevant for setters. */
    3751             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3752             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3753             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3754             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3755             : };
    3756             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3757             : static_assert(0 < 1, "There is no slot for us");
    3758             : 
    3759             : static bool
    3760           0 : caretPositionFromPoint(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    3761             : {
    3762           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3763           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.caretPositionFromPoint");
    3764             :   }
    3765             :   float arg0;
    3766           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[0], &arg0)) {
    3767           0 :     return false;
    3768           0 :   } else if (!mozilla::IsFinite(arg0)) {
    3769           0 :     ThrowErrorMessage(cx, MSG_NOT_FINITE, "Argument 1 of Document.caretPositionFromPoint");
    3770           0 :     return false;
    3771             :   }
    3772             :   float arg1;
    3773           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
    3774           0 :     return false;
    3775           0 :   } else if (!mozilla::IsFinite(arg1)) {
    3776           0 :     ThrowErrorMessage(cx, MSG_NOT_FINITE, "Argument 2 of Document.caretPositionFromPoint");
    3777           0 :     return false;
    3778             :   }
    3779           0 :   auto result(StrongOrRawPtr<nsDOMCaretPosition>(self->CaretPositionFromPoint(arg0, arg1)));
    3780           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3781           0 :   if (!result) {
    3782           0 :     args.rval().setNull();
    3783           0 :     return true;
    3784             :   }
    3785           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3786           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3787           0 :     return false;
    3788             :   }
    3789           0 :   return true;
    3790             : }
    3791             : 
    3792             : static const JSJitInfo caretPositionFromPoint_methodinfo = {
    3793             :   { (JSJitGetterOp)caretPositionFromPoint },
    3794             :   { prototypes::id::Document },
    3795             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3796             :   JSJitInfo::Method,
    3797             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3798             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3799             :   false,  /* isInfallible. False in setters. */
    3800             :   false,  /* isMovable.  Not relevant for setters. */
    3801             :   false, /* isEliminatable.  Not relevant for setters. */
    3802             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3803             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3804             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3805             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3806             : };
    3807             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3808             : static_assert(0 < 1, "There is no slot for us");
    3809             : 
    3810             : static bool
    3811           0 : get_scrollingElement(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    3812             : {
    3813           0 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetScrollingElement()));
    3814           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3815           0 :   if (!result) {
    3816           0 :     args.rval().setNull();
    3817           0 :     return true;
    3818             :   }
    3819           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3820           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3821           0 :     return false;
    3822             :   }
    3823           0 :   return true;
    3824             : }
    3825             : 
    3826             : static const JSJitInfo scrollingElement_getterinfo = {
    3827             :   { (JSJitGetterOp)get_scrollingElement },
    3828             :   { prototypes::id::Document },
    3829             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3830             :   JSJitInfo::Getter,
    3831             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3832             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3833             :   false,  /* isInfallible. False in setters. */
    3834             :   false,  /* isMovable.  Not relevant for setters. */
    3835             :   false, /* isEliminatable.  Not relevant for setters. */
    3836             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3837             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3838             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3839             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3840             : };
    3841             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3842             : static_assert(0 < 1, "There is no slot for us");
    3843             : 
    3844             : static bool
    3845           3 : querySelector(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    3846             : {
    3847           3 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3848           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.querySelector");
    3849             :   }
    3850           6 :   binding_detail::FakeString arg0;
    3851           3 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    3852           0 :     return false;
    3853             :   }
    3854           6 :   binding_detail::FastErrorResult rv;
    3855           3 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->QuerySelector(NonNullHelper(Constify(arg0)), rv)));
    3856           3 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3857           0 :     return false;
    3858             :   }
    3859           3 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3860           3 :   if (!result) {
    3861           0 :     args.rval().setNull();
    3862           0 :     return true;
    3863             :   }
    3864           3 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3865           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3866           0 :     return false;
    3867             :   }
    3868           3 :   return true;
    3869             : }
    3870             : 
    3871             : static const JSJitInfo::ArgType querySelector_methodinfo_argTypes[] = { JSJitInfo::String, JSJitInfo::ArgTypeListEnd };
    3872             : static const JSTypedMethodJitInfo querySelector_methodinfo = {
    3873             :   {
    3874             :     { (JSJitGetterOp)querySelector },
    3875             :     { prototypes::id::Document },
    3876             :     { PrototypeTraits<prototypes::id::Document>::Depth },
    3877             :     JSJitInfo::Method,
    3878             :     JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    3879             :     JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3880             :     false,  /* isInfallible. False in setters. */
    3881             :     false,  /* isMovable.  Not relevant for setters. */
    3882             :     false, /* isEliminatable.  Not relevant for setters. */
    3883             :     false, /* isAlwaysInSlot.  Only relevant for getters. */
    3884             :     false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3885             :     true,  /* isTypedMethod.  Only relevant for methods. */
    3886             :     0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3887             :   },
    3888             :   querySelector_methodinfo_argTypes
    3889             : };
    3890             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3891             : static_assert(0 < 1, "There is no slot for us");
    3892             : 
    3893             : static bool
    3894           3 : querySelectorAll(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    3895             : {
    3896           3 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3897           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.querySelectorAll");
    3898             :   }
    3899           6 :   binding_detail::FakeString arg0;
    3900           3 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    3901           0 :     return false;
    3902             :   }
    3903           6 :   binding_detail::FastErrorResult rv;
    3904           6 :   auto result(StrongOrRawPtr<nsINodeList>(self->QuerySelectorAll(NonNullHelper(Constify(arg0)), rv)));
    3905           3 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3906           0 :     return false;
    3907             :   }
    3908           3 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3909           3 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3910           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3911           0 :     return false;
    3912             :   }
    3913           3 :   return true;
    3914             : }
    3915             : 
    3916             : static const JSJitInfo::ArgType querySelectorAll_methodinfo_argTypes[] = { JSJitInfo::String, JSJitInfo::ArgTypeListEnd };
    3917             : static const JSTypedMethodJitInfo querySelectorAll_methodinfo = {
    3918             :   {
    3919             :     { (JSJitGetterOp)querySelectorAll },
    3920             :     { prototypes::id::Document },
    3921             :     { PrototypeTraits<prototypes::id::Document>::Depth },
    3922             :     JSJitInfo::Method,
    3923             :     JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    3924             :     JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3925             :     false,  /* isInfallible. False in setters. */
    3926             :     false,  /* isMovable.  Not relevant for setters. */
    3927             :     false, /* isEliminatable.  Not relevant for setters. */
    3928             :     false, /* isAlwaysInSlot.  Only relevant for getters. */
    3929             :     false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3930             :     true,  /* isTypedMethod.  Only relevant for methods. */
    3931             :     0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3932             :   },
    3933             :   querySelectorAll_methodinfo_argTypes
    3934             : };
    3935             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3936             : static_assert(0 < 1, "There is no slot for us");
    3937             : 
    3938             : static bool
    3939           0 : get_timeline(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    3940             : {
    3941           0 :   auto result(StrongOrRawPtr<mozilla::dom::DocumentTimeline>(self->Timeline()));
    3942           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3943           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3944           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3945           0 :     return false;
    3946             :   }
    3947           0 :   return true;
    3948             : }
    3949             : 
    3950             : static const JSJitInfo timeline_getterinfo = {
    3951             :   { (JSJitGetterOp)get_timeline },
    3952             :   { prototypes::id::Document },
    3953             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    3954             :   JSJitInfo::Getter,
    3955             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3956             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3957             :   false,  /* isInfallible. False in setters. */
    3958             :   false,  /* isMovable.  Not relevant for setters. */
    3959             :   false, /* isEliminatable.  Not relevant for setters. */
    3960             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3961             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3962             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3963             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3964             : };
    3965             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3966             : static_assert(0 < 1, "There is no slot for us");
    3967             : 
    3968             : static bool
    3969           0 : getAnimations(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    3970             : {
    3971           0 :   nsTArray<StrongPtrForMember<mozilla::dom::Animation>::Type> result;
    3972           0 :   self->GetAnimations(result);
    3973           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3974             : 
    3975           0 :   uint32_t length = result.Length();
    3976           0 :   JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
    3977           0 :   if (!returnArray) {
    3978           0 :     return false;
    3979             :   }
    3980             :   // Scope for 'tmp'
    3981             :   {
    3982           0 :     JS::Rooted<JS::Value> tmp(cx);
    3983           0 :     for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
    3984             :       // Control block to let us common up the JS_DefineElement calls when there
    3985             :       // are different ways to succeed at wrapping the object.
    3986             :       do {
    3987           0 :         if (!GetOrCreateDOMReflector(cx, result[sequenceIdx0], &tmp)) {
    3988           0 :           MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3989           0 :           return false;
    3990             :         }
    3991           0 :         break;
    3992             :       } while (0);
    3993           0 :       if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
    3994             :                             JSPROP_ENUMERATE)) {
    3995           0 :         return false;
    3996             :       }
    3997             :     }
    3998             :   }
    3999           0 :   args.rval().setObject(*returnArray);
    4000           0 :   return true;
    4001             : }
    4002             : 
    4003             : static const JSJitInfo getAnimations_methodinfo = {
    4004             :   { (JSJitGetterOp)getAnimations },
    4005             :   { prototypes::id::Document },
    4006             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4007             :   JSJitInfo::Method,
    4008             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4009             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    4010             :   false,  /* isInfallible. False in setters. */
    4011             :   false,  /* isMovable.  Not relevant for setters. */
    4012             :   false, /* isEliminatable.  Not relevant for setters. */
    4013             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4014             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4015             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4016             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4017             : };
    4018             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4019             : static_assert(0 < 1, "There is no slot for us");
    4020             : 
    4021             : static bool
    4022           0 : get_rootElement(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    4023             : {
    4024           0 :   auto result(StrongOrRawPtr<mozilla::dom::SVGSVGElement>(self->GetSVGRootElement()));
    4025           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4026           0 :   if (!result) {
    4027           0 :     args.rval().setNull();
    4028           0 :     return true;
    4029             :   }
    4030           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    4031           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    4032           0 :     return false;
    4033             :   }
    4034           0 :   return true;
    4035             : }
    4036             : 
    4037             : static const JSJitInfo rootElement_getterinfo = {
    4038             :   { (JSJitGetterOp)get_rootElement },
    4039             :   { prototypes::id::Document },
    4040             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4041             :   JSJitInfo::Getter,
    4042             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4043             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4044             :   false,  /* isInfallible. False in setters. */
    4045             :   false,  /* isMovable.  Not relevant for setters. */
    4046             :   false, /* isEliminatable.  Not relevant for setters. */
    4047             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4048             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4049             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4050             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4051             : };
    4052             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4053             : static_assert(0 < 1, "There is no slot for us");
    4054             : 
    4055             : static bool
    4056           0 : getAnonymousNodes(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    4057             : {
    4058           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    4059           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.getAnonymousNodes");
    4060             :   }
    4061           0 :   NonNull<mozilla::dom::Element> arg0;
    4062           0 :   if (args[0].isObject()) {
    4063             :     {
    4064           0 :       nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[0], arg0);
    4065           0 :       if (NS_FAILED(rv)) {
    4066           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Document.getAnonymousNodes", "Element");
    4067           0 :         return false;
    4068             :       }
    4069             :     }
    4070             :   } else {
    4071           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Document.getAnonymousNodes");
    4072           0 :     return false;
    4073             :   }
    4074           0 :   auto result(StrongOrRawPtr<nsINodeList>(self->GetAnonymousNodes(NonNullHelper(arg0))));
    4075           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4076           0 :   if (!result) {
    4077           0 :     args.rval().setNull();
    4078           0 :     return true;
    4079             :   }
    4080           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    4081           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    4082           0 :     return false;
    4083             :   }
    4084           0 :   return true;
    4085             : }
    4086             : 
    4087             : static const JSJitInfo getAnonymousNodes_methodinfo = {
    4088             :   { (JSJitGetterOp)getAnonymousNodes },
    4089             :   { prototypes::id::Document },
    4090             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4091             :   JSJitInfo::Method,
    4092             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4093             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4094             :   false,  /* isInfallible. False in setters. */
    4095             :   false,  /* isMovable.  Not relevant for setters. */
    4096             :   false, /* isEliminatable.  Not relevant for setters. */
    4097             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4098             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4099             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4100             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4101             : };
    4102             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4103             : static_assert(0 < 1, "There is no slot for us");
    4104             : 
    4105             : static bool
    4106          16 : getAnonymousElementByAttribute(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    4107             : {
    4108          16 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    4109           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.getAnonymousElementByAttribute");
    4110             :   }
    4111          16 :   NonNull<mozilla::dom::Element> arg0;
    4112          16 :   if (args[0].isObject()) {
    4113             :     {
    4114          16 :       nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[0], arg0);
    4115          16 :       if (NS_FAILED(rv)) {
    4116           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Document.getAnonymousElementByAttribute", "Element");
    4117           0 :         return false;
    4118             :       }
    4119             :     }
    4120             :   } else {
    4121           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Document.getAnonymousElementByAttribute");
    4122           0 :     return false;
    4123             :   }
    4124          32 :   binding_detail::FakeString arg1;
    4125          16 :   if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
    4126           0 :     return false;
    4127             :   }
    4128          32 :   binding_detail::FakeString arg2;
    4129          16 :   if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2)) {
    4130           0 :     return false;
    4131             :   }
    4132          16 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetAnonymousElementByAttribute(NonNullHelper(arg0), NonNullHelper(Constify(arg1)), NonNullHelper(Constify(arg2)))));
    4133          16 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4134          16 :   if (!result) {
    4135           0 :     args.rval().setNull();
    4136           0 :     return true;
    4137             :   }
    4138          16 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    4139           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    4140           0 :     return false;
    4141             :   }
    4142          16 :   return true;
    4143             : }
    4144             : 
    4145             : static const JSJitInfo getAnonymousElementByAttribute_methodinfo = {
    4146             :   { (JSJitGetterOp)getAnonymousElementByAttribute },
    4147             :   { prototypes::id::Document },
    4148             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4149             :   JSJitInfo::Method,
    4150             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4151             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4152             :   false,  /* isInfallible. False in setters. */
    4153             :   false,  /* isMovable.  Not relevant for setters. */
    4154             :   false, /* isEliminatable.  Not relevant for setters. */
    4155             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4156             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4157             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4158             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4159             : };
    4160             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4161             : static_assert(0 < 1, "There is no slot for us");
    4162             : 
    4163             : static bool
    4164           2 : getBindingParent(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    4165             : {
    4166           2 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    4167           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.getBindingParent");
    4168             :   }
    4169           2 :   NonNull<nsINode> arg0;
    4170           2 :   if (args[0].isObject()) {
    4171             :     {
    4172           2 :       nsresult rv = UnwrapObject<prototypes::id::Node, nsINode>(args[0], arg0);
    4173           2 :       if (NS_FAILED(rv)) {
    4174           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Document.getBindingParent", "Node");
    4175           0 :         return false;
    4176             :       }
    4177             :     }
    4178             :   } else {
    4179           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Document.getBindingParent");
    4180           0 :     return false;
    4181             :   }
    4182           2 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetBindingParent(NonNullHelper(arg0))));
    4183           2 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4184           2 :   if (!result) {
    4185           0 :     args.rval().setNull();
    4186           0 :     return true;
    4187             :   }
    4188           2 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    4189           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    4190           0 :     return false;
    4191             :   }
    4192           2 :   return true;
    4193             : }
    4194             : 
    4195             : static const JSJitInfo getBindingParent_methodinfo = {
    4196             :   { (JSJitGetterOp)getBindingParent },
    4197             :   { prototypes::id::Document },
    4198             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4199             :   JSJitInfo::Method,
    4200             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4201             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4202             :   false,  /* isInfallible. False in setters. */
    4203             :   false,  /* isMovable.  Not relevant for setters. */
    4204             :   false, /* isEliminatable.  Not relevant for setters. */
    4205             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4206             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4207             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4208             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4209             : };
    4210             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4211             : static_assert(0 < 1, "There is no slot for us");
    4212             : 
    4213             : static bool
    4214           0 : loadBindingDocument(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    4215             : {
    4216           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    4217           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.loadBindingDocument");
    4218             :   }
    4219           0 :   binding_detail::FakeString arg0;
    4220           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    4221           0 :     return false;
    4222             :   }
    4223           0 :   binding_detail::FastErrorResult rv;
    4224           0 :   JSCompartment* compartment = js::GetContextCompartment(cx);
    4225           0 :   MOZ_ASSERT(compartment);
    4226           0 :   JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
    4227             :   // Initializing a nonnull is pretty darn annoying...
    4228           0 :   NonNull<nsIPrincipal> subjectPrincipal;
    4229           0 :   subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
    4230           0 :   self->LoadBindingDocument(NonNullHelper(Constify(arg0)), subjectPrincipal, rv);
    4231           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4232           0 :     return false;
    4233             :   }
    4234           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4235           0 :   args.rval().setUndefined();
    4236           0 :   return true;
    4237             : }
    4238             : 
    4239             : static const JSJitInfo loadBindingDocument_methodinfo = {
    4240             :   { (JSJitGetterOp)loadBindingDocument },
    4241             :   { prototypes::id::Document },
    4242             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4243             :   JSJitInfo::Method,
    4244             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4245             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4246             :   false,  /* isInfallible. False in setters. */
    4247             :   false,  /* isMovable.  Not relevant for setters. */
    4248             :   false, /* isEliminatable.  Not relevant for setters. */
    4249             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4250             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4251             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4252             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4253             : };
    4254             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4255             : static_assert(0 < 1, "There is no slot for us");
    4256             : 
    4257             : static bool
    4258           0 : createTouch(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    4259             : {
    4260             :   nsGlobalWindow* arg0;
    4261           0 :   if (args.hasDefined(0)) {
    4262           0 :     if (args[0].isObject()) {
    4263             :       {
    4264           0 :         nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(args[0], arg0);
    4265           0 :         if (NS_FAILED(rv)) {
    4266           0 :           ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Document.createTouch", "Window");
    4267           0 :           return false;
    4268             :         }
    4269             :       }
    4270           0 :     } else if (args[0].isNullOrUndefined()) {
    4271           0 :       arg0 = nullptr;
    4272             :     } else {
    4273           0 :       ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Document.createTouch");
    4274           0 :       return false;
    4275             :     }
    4276             :   } else {
    4277           0 :     arg0 = nullptr;
    4278             :   }
    4279             :   mozilla::dom::EventTarget* arg1;
    4280           0 :   if (args.hasDefined(1)) {
    4281           0 :     if (args[1].isObject()) {
    4282             :       {
    4283           0 :         nsresult rv = UnwrapObject<prototypes::id::EventTarget, mozilla::dom::EventTarget>(args[1], arg1);
    4284           0 :         if (NS_FAILED(rv)) {
    4285           0 :           RefPtr<mozilla::dom::EventTarget> objPtr;
    4286           0 :           nsresult rv = UnwrapXPConnect<mozilla::dom::EventTarget>(cx, args[1], getter_AddRefs(objPtr));
    4287           0 :           if (NS_FAILED(rv)) {
    4288           0 :             ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of Document.createTouch", "EventTarget");
    4289           0 :             return false;
    4290             :           }
    4291             :           // We should have an object
    4292           0 :           MOZ_ASSERT(objPtr);
    4293           0 :           arg1 = objPtr;
    4294             :         }
    4295             :       }
    4296           0 :     } else if (args[1].isNullOrUndefined()) {
    4297           0 :       arg1 = nullptr;
    4298             :     } else {
    4299           0 :       ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of Document.createTouch");
    4300           0 :       return false;
    4301             :     }
    4302             :   } else {
    4303           0 :     arg1 = nullptr;
    4304             :   }
    4305             :   int32_t arg2;
    4306           0 :   if (args.hasDefined(2)) {
    4307           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    4308           0 :       return false;
    4309             :     }
    4310             :   } else {
    4311           0 :     arg2 = 0;
    4312             :   }
    4313             :   int32_t arg3;
    4314           0 :   if (args.hasDefined(3)) {
    4315           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    4316           0 :       return false;
    4317             :     }
    4318             :   } else {
    4319           0 :     arg3 = 0;
    4320             :   }
    4321             :   int32_t arg4;
    4322           0 :   if (args.hasDefined(4)) {
    4323           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    4324           0 :       return false;
    4325             :     }
    4326             :   } else {
    4327           0 :     arg4 = 0;
    4328             :   }
    4329             :   int32_t arg5;
    4330           0 :   if (args.hasDefined(5)) {
    4331           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    4332           0 :       return false;
    4333             :     }
    4334             :   } else {
    4335           0 :     arg5 = 0;
    4336             :   }
    4337             :   int32_t arg6;
    4338           0 :   if (args.hasDefined(6)) {
    4339           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, args[6], &arg6)) {
    4340           0 :       return false;
    4341             :     }
    4342             :   } else {
    4343           0 :     arg6 = 0;
    4344             :   }
    4345             :   int32_t arg7;
    4346           0 :   if (args.hasDefined(7)) {
    4347           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, args[7], &arg7)) {
    4348           0 :       return false;
    4349             :     }
    4350             :   } else {
    4351           0 :     arg7 = 0;
    4352             :   }
    4353             :   int32_t arg8;
    4354           0 :   if (args.hasDefined(8)) {
    4355           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, args[8], &arg8)) {
    4356           0 :       return false;
    4357             :     }
    4358             :   } else {
    4359           0 :     arg8 = 0;
    4360             :   }
    4361             :   int32_t arg9;
    4362           0 :   if (args.hasDefined(9)) {
    4363           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, args[9], &arg9)) {
    4364           0 :       return false;
    4365             :     }
    4366             :   } else {
    4367           0 :     arg9 = 0;
    4368             :   }
    4369             :   int32_t arg10;
    4370           0 :   if (args.hasDefined(10)) {
    4371           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, args[10], &arg10)) {
    4372           0 :       return false;
    4373             :     }
    4374             :   } else {
    4375           0 :     arg10 = 0;
    4376             :   }
    4377             :   float arg11;
    4378           0 :   if (args.hasDefined(11)) {
    4379           0 :     if (!ValueToPrimitive<float, eDefault>(cx, args[11], &arg11)) {
    4380           0 :       return false;
    4381           0 :     } else if (!mozilla::IsFinite(arg11)) {
    4382           0 :       ThrowErrorMessage(cx, MSG_NOT_FINITE, "Argument 12 of Document.createTouch");
    4383           0 :       return false;
    4384             :     }
    4385             :   } else {
    4386           0 :     arg11 = 0.0F;
    4387             :   }
    4388             :   float arg12;
    4389           0 :   if (args.hasDefined(12)) {
    4390           0 :     if (!ValueToPrimitive<float, eDefault>(cx, args[12], &arg12)) {
    4391           0 :       return false;
    4392           0 :     } else if (!mozilla::IsFinite(arg12)) {
    4393           0 :       ThrowErrorMessage(cx, MSG_NOT_FINITE, "Argument 13 of Document.createTouch");
    4394           0 :       return false;
    4395             :     }
    4396             :   } else {
    4397           0 :     arg12 = 0.0F;
    4398             :   }
    4399           0 :   auto result(StrongOrRawPtr<mozilla::dom::Touch>(self->CreateTouch(Constify(arg0), Constify(arg1), arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12)));
    4400           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4401             :   static_assert(!IsPointer<decltype(result)>::value,
    4402             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    4403           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    4404           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    4405           0 :     return false;
    4406             :   }
    4407           0 :   return true;
    4408             : }
    4409             : 
    4410             : static const JSJitInfo createTouch_methodinfo = {
    4411             :   { (JSJitGetterOp)createTouch },
    4412             :   { prototypes::id::Document },
    4413             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4414             :   JSJitInfo::Method,
    4415             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4416             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    4417             :   false,  /* isInfallible. False in setters. */
    4418             :   false,  /* isMovable.  Not relevant for setters. */
    4419             :   false, /* isEliminatable.  Not relevant for setters. */
    4420             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4421             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4422             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4423             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4424             : };
    4425             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4426             : static_assert(0 < 1, "There is no slot for us");
    4427             : 
    4428             : static bool
    4429           0 : createTouchList(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    4430             : {
    4431           0 :   unsigned argcount = std::min(args.length(), 2u);
    4432           0 :   switch (argcount) {
    4433             :     case 0: {
    4434           0 :       auto result(StrongOrRawPtr<mozilla::dom::TouchList>(self->CreateTouchList()));
    4435           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4436             :       static_assert(!IsPointer<decltype(result)>::value,
    4437             :                     "NewObject implies that we need to keep the object alive with a strong reference.");
    4438           0 :       if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    4439           0 :         MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    4440           0 :         return false;
    4441             :       }
    4442           0 :       return true;
    4443             :       break;
    4444             :     }
    4445             :     case 1: {
    4446           0 :       if (args[0].isObject()) {
    4447             :         do {
    4448           0 :           NonNull<mozilla::dom::Touch> arg0;
    4449             :           {
    4450           0 :             nsresult rv = UnwrapObject<prototypes::id::Touch, mozilla::dom::Touch>(args[0], arg0);
    4451           0 :             if (NS_FAILED(rv)) {
    4452           0 :               break;
    4453             :             }
    4454             :           }
    4455           0 :           binding_detail::AutoSequence<OwningNonNull<mozilla::dom::Touch>> arg1;
    4456           0 :           if (args.length() > 1) {
    4457           0 :             if (!arg1.SetCapacity(args.length() - 1, mozilla::fallible)) {
    4458           0 :               JS_ReportOutOfMemory(cx);
    4459           0 :               return false;
    4460             :             }
    4461           0 :             for (uint32_t variadicArg = 1; variadicArg < args.length(); ++variadicArg) {
    4462           0 :               OwningNonNull<mozilla::dom::Touch>& slot = *arg1.AppendElement(mozilla::fallible);
    4463           0 :               if (args[variadicArg].isObject()) {
    4464             :                 static_assert(IsRefcounted<mozilla::dom::Touch>::value, "We can only store refcounted classes.");{
    4465           0 :                   nsresult rv = UnwrapObject<prototypes::id::Touch, mozilla::dom::Touch>(args[variadicArg], slot);
    4466           0 :                   if (NS_FAILED(rv)) {
    4467           0 :                     ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of Document.createTouchList", "Touch");
    4468           0 :                     return false;
    4469             :                   }
    4470             :                 }
    4471             :               } else {
    4472           0 :                 ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of Document.createTouchList");
    4473           0 :                 return false;
    4474             :               }
    4475             :             }
    4476             :           }
    4477           0 :           auto result(StrongOrRawPtr<mozilla::dom::TouchList>(self->CreateTouchList(NonNullHelper(arg0), NonNullHelper(Constify(arg1)))));
    4478           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4479             :           static_assert(!IsPointer<decltype(result)>::value,
    4480             :                         "NewObject implies that we need to keep the object alive with a strong reference.");
    4481           0 :           if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    4482           0 :             MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    4483           0 :             return false;
    4484             :           }
    4485           0 :           return true;
    4486             :         } while (0);
    4487             :         do {
    4488           0 :           binding_detail::AutoSequence<OwningNonNull<mozilla::dom::Touch>> arg0;
    4489           0 :           JS::ForOfIterator iter(cx);
    4490           0 :           if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) {
    4491           0 :             return false;
    4492             :           }
    4493           0 :           if (!iter.valueIsIterable()) {
    4494           0 :             break;
    4495             :           }
    4496           0 :           binding_detail::AutoSequence<OwningNonNull<mozilla::dom::Touch>> &arr = arg0;
    4497           0 :           JS::Rooted<JS::Value> temp(cx);
    4498             :           while (true) {
    4499             :             bool done;
    4500           0 :             if (!iter.next(&temp, &done)) {
    4501           0 :               return false;
    4502             :             }
    4503           0 :             if (done) {
    4504           0 :               break;
    4505             :             }
    4506           0 :             OwningNonNull<mozilla::dom::Touch>* slotPtr = arr.AppendElement(mozilla::fallible);
    4507           0 :             if (!slotPtr) {
    4508           0 :               JS_ReportOutOfMemory(cx);
    4509           0 :               return false;
    4510             :             }
    4511           0 :             OwningNonNull<mozilla::dom::Touch>& slot = *slotPtr;
    4512           0 :             if (temp.isObject()) {
    4513             :               static_assert(IsRefcounted<mozilla::dom::Touch>::value, "We can only store refcounted classes.");{
    4514           0 :                 nsresult rv = UnwrapObject<prototypes::id::Touch, mozilla::dom::Touch>(&temp, slot);
    4515           0 :                 if (NS_FAILED(rv)) {
    4516           0 :                   ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Element of argument 1 of Document.createTouchList", "Touch");
    4517           0 :                   return false;
    4518             :                 }
    4519             :               }
    4520             :             } else {
    4521           0 :               ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Element of argument 1 of Document.createTouchList");
    4522           0 :               return false;
    4523             :             }
    4524           0 :           }
    4525           0 :           auto result(StrongOrRawPtr<mozilla::dom::TouchList>(self->CreateTouchList(Constify(arg0))));
    4526           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4527             :           static_assert(!IsPointer<decltype(result)>::value,
    4528             :                         "NewObject implies that we need to keep the object alive with a strong reference.");
    4529           0 :           if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    4530           0 :             MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    4531           0 :             return false;
    4532             :           }
    4533           0 :           return true;
    4534             :         } while (0);
    4535             :       }
    4536           0 :       return ThrowErrorMessage(cx, MSG_OVERLOAD_RESOLUTION_FAILED, "1", "1", "Document.createTouchList");
    4537             :       break;
    4538             :     }
    4539             :     case 2: {
    4540           0 :       NonNull<mozilla::dom::Touch> arg0;
    4541           0 :       if (args[0].isObject()) {
    4542             :         {
    4543           0 :           nsresult rv = UnwrapObject<prototypes::id::Touch, mozilla::dom::Touch>(args[0], arg0);
    4544           0 :           if (NS_FAILED(rv)) {
    4545           0 :             ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Document.createTouchList", "Touch");
    4546           0 :             return false;
    4547             :           }
    4548             :         }
    4549             :       } else {
    4550           0 :         ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Document.createTouchList");
    4551           0 :         return false;
    4552             :       }
    4553           0 :       binding_detail::AutoSequence<OwningNonNull<mozilla::dom::Touch>> arg1;
    4554           0 :       if (args.length() > 1) {
    4555           0 :         if (!arg1.SetCapacity(args.length() - 1, mozilla::fallible)) {
    4556           0 :           JS_ReportOutOfMemory(cx);
    4557           0 :           return false;
    4558             :         }
    4559           0 :         for (uint32_t variadicArg = 1; variadicArg < args.length(); ++variadicArg) {
    4560           0 :           OwningNonNull<mozilla::dom::Touch>& slot = *arg1.AppendElement(mozilla::fallible);
    4561           0 :           if (args[variadicArg].isObject()) {
    4562             :             static_assert(IsRefcounted<mozilla::dom::Touch>::value, "We can only store refcounted classes.");{
    4563           0 :               nsresult rv = UnwrapObject<prototypes::id::Touch, mozilla::dom::Touch>(args[variadicArg], slot);
    4564           0 :               if (NS_FAILED(rv)) {
    4565           0 :                 ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of Document.createTouchList", "Touch");
    4566           0 :                 return false;
    4567             :               }
    4568             :             }
    4569             :           } else {
    4570           0 :             ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of Document.createTouchList");
    4571           0 :             return false;
    4572             :           }
    4573             :         }
    4574             :       }
    4575           0 :       auto result(StrongOrRawPtr<mozilla::dom::TouchList>(self->CreateTouchList(NonNullHelper(arg0), NonNullHelper(Constify(arg1)))));
    4576           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4577             :       static_assert(!IsPointer<decltype(result)>::value,
    4578             :                     "NewObject implies that we need to keep the object alive with a strong reference.");
    4579           0 :       if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    4580           0 :         MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    4581           0 :         return false;
    4582             :       }
    4583           0 :       return true;
    4584             :       break;
    4585             :     }
    4586             :     default: {
    4587           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.createTouchList");
    4588             :       break;
    4589             :     }
    4590             :   }
    4591             :   MOZ_CRASH("We have an always-returning default case");
    4592             :   return false;
    4593             : }
    4594             : 
    4595             : static const JSJitInfo createTouchList_methodinfo = {
    4596             :   { (JSJitGetterOp)createTouchList },
    4597             :   { prototypes::id::Document },
    4598             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4599             :   JSJitInfo::Method,
    4600             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4601             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    4602             :   false,  /* isInfallible. False in setters. */
    4603             :   false,  /* isMovable.  Not relevant for setters. */
    4604             :   false, /* isEliminatable.  Not relevant for setters. */
    4605             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4606             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4607             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4608             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4609             : };
    4610             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4611             : static_assert(0 < 1, "There is no slot for us");
    4612             : 
    4613             : static bool
    4614           0 : get_styleSheetChangeEventsEnabled(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    4615             : {
    4616           0 :   bool result(self->StyleSheetChangeEventsEnabled());
    4617           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4618           0 :   args.rval().setBoolean(result);
    4619           0 :   return true;
    4620             : }
    4621             : 
    4622             : static bool
    4623           0 : set_styleSheetChangeEventsEnabled(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    4624             : {
    4625             :   bool arg0;
    4626           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    4627           0 :     return false;
    4628             :   }
    4629           0 :   self->SetStyleSheetChangeEventsEnabled(arg0);
    4630           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4631             : 
    4632           0 :   return true;
    4633             : }
    4634             : 
    4635             : static const JSJitInfo styleSheetChangeEventsEnabled_getterinfo = {
    4636             :   { (JSJitGetterOp)get_styleSheetChangeEventsEnabled },
    4637             :   { prototypes::id::Document },
    4638             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4639             :   JSJitInfo::Getter,
    4640             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4641             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    4642             :   true,  /* isInfallible. False in setters. */
    4643             :   false,  /* isMovable.  Not relevant for setters. */
    4644             :   false, /* isEliminatable.  Not relevant for setters. */
    4645             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4646             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4647             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4648             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4649             : };
    4650             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4651             : static_assert(0 < 1, "There is no slot for us");
    4652             : static const JSJitInfo styleSheetChangeEventsEnabled_setterinfo = {
    4653             :   { (JSJitGetterOp)set_styleSheetChangeEventsEnabled },
    4654             :   { prototypes::id::Document },
    4655             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4656             :   JSJitInfo::Setter,
    4657             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4658             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4659             :   false,  /* isInfallible. False in setters. */
    4660             :   false,  /* isMovable.  Not relevant for setters. */
    4661             :   false, /* isEliminatable.  Not relevant for setters. */
    4662             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4663             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4664             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4665             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4666             : };
    4667             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4668             : static_assert(0 < 1, "There is no slot for us");
    4669             : 
    4670             : static bool
    4671           0 : obsoleteSheet(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    4672             : {
    4673           0 :   unsigned argcount = std::min(args.length(), 1u);
    4674           0 :   switch (argcount) {
    4675             :     case 1: {
    4676           0 :       if (args[0].isObject()) {
    4677             :         do {
    4678             :           nsIURI* arg0;
    4679           0 :           RefPtr<nsIURI> arg0_holder;
    4680           0 :           JS::Rooted<JSObject*> source(cx, &args[0].toObject());
    4681           0 :           if (NS_FAILED(UnwrapArg<nsIURI>(cx, source, getter_AddRefs(arg0_holder)))) {
    4682           0 :             break;
    4683             :           }
    4684           0 :           MOZ_ASSERT(arg0_holder);
    4685           0 :           arg0 = arg0_holder;
    4686           0 :           binding_detail::FastErrorResult rv;
    4687           0 :           self->ObsoleteSheet(NonNullHelper(arg0), rv);
    4688           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4689           0 :             return false;
    4690             :           }
    4691           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4692           0 :           args.rval().setUndefined();
    4693           0 :           return true;
    4694             :         } while (0);
    4695             :       }
    4696           0 :       binding_detail::FakeString arg0;
    4697           0 :       if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    4698           0 :         return false;
    4699             :       }
    4700           0 :       binding_detail::FastErrorResult rv;
    4701           0 :       self->ObsoleteSheet(NonNullHelper(Constify(arg0)), rv);
    4702           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4703           0 :         return false;
    4704             :       }
    4705           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4706           0 :       args.rval().setUndefined();
    4707           0 :       return true;
    4708             :       break;
    4709             :     }
    4710             :     default: {
    4711           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.obsoleteSheet");
    4712             :       break;
    4713             :     }
    4714             :   }
    4715             :   MOZ_CRASH("We have an always-returning default case");
    4716             :   return false;
    4717             : }
    4718             : 
    4719             : static const JSJitInfo obsoleteSheet_methodinfo = {
    4720             :   { (JSJitGetterOp)obsoleteSheet },
    4721             :   { prototypes::id::Document },
    4722             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4723             :   JSJitInfo::Method,
    4724             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4725             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4726             :   false,  /* isInfallible. False in setters. */
    4727             :   false,  /* isMovable.  Not relevant for setters. */
    4728             :   false, /* isEliminatable.  Not relevant for setters. */
    4729             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4730             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4731             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4732             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4733             : };
    4734             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4735             : static_assert(0 < 1, "There is no slot for us");
    4736             : 
    4737             : static bool
    4738           0 : get_docShell(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    4739             : {
    4740           0 :   auto result(StrongOrRawPtr<nsIDocShell>(self->GetDocShell()));
    4741           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4742           0 :   if (!result) {
    4743           0 :     args.rval().setNull();
    4744           0 :     return true;
    4745             :   }
    4746           0 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIDocShell), args.rval())) {
    4747           0 :     return false;
    4748             :   }
    4749           0 :   return true;
    4750             : }
    4751             : 
    4752             : static const JSJitInfo docShell_getterinfo = {
    4753             :   { (JSJitGetterOp)get_docShell },
    4754             :   { prototypes::id::Document },
    4755             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4756             :   JSJitInfo::Getter,
    4757             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4758             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4759             :   false,  /* isInfallible. False in setters. */
    4760             :   false,  /* isMovable.  Not relevant for setters. */
    4761             :   false, /* isEliminatable.  Not relevant for setters. */
    4762             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4763             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4764             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4765             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4766             : };
    4767             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4768             : static_assert(0 < 1, "There is no slot for us");
    4769             : 
    4770             : static bool
    4771           0 : get_contentLanguage(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    4772             : {
    4773           0 :   DOMString result;
    4774           0 :   self->GetContentLanguage(result);
    4775           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4776           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    4777           0 :     return false;
    4778             :   }
    4779           0 :   return true;
    4780             : }
    4781             : 
    4782             : static const JSJitInfo contentLanguage_getterinfo = {
    4783             :   { (JSJitGetterOp)get_contentLanguage },
    4784             :   { prototypes::id::Document },
    4785             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4786             :   JSJitInfo::Getter,
    4787             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4788             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    4789             :   false,  /* isInfallible. False in setters. */
    4790             :   false,  /* isMovable.  Not relevant for setters. */
    4791             :   false, /* isEliminatable.  Not relevant for setters. */
    4792             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4793             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4794             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4795             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4796             : };
    4797             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4798             : static_assert(0 < 1, "There is no slot for us");
    4799             : 
    4800             : static bool
    4801           0 : get_documentLoadGroup(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    4802             : {
    4803           0 :   auto result(StrongOrRawPtr<nsILoadGroup>(self->GetDocumentLoadGroup()));
    4804           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4805           0 :   if (!result) {
    4806           0 :     args.rval().setNull();
    4807           0 :     return true;
    4808             :   }
    4809           0 :   if (!WrapObject(cx, result, &NS_GET_IID(nsILoadGroup), args.rval())) {
    4810           0 :     return false;
    4811             :   }
    4812           0 :   return true;
    4813             : }
    4814             : 
    4815             : static const JSJitInfo documentLoadGroup_getterinfo = {
    4816             :   { (JSJitGetterOp)get_documentLoadGroup },
    4817             :   { prototypes::id::Document },
    4818             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4819             :   JSJitInfo::Getter,
    4820             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4821             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4822             :   false,  /* isInfallible. False in setters. */
    4823             :   false,  /* isMovable.  Not relevant for setters. */
    4824             :   false, /* isEliminatable.  Not relevant for setters. */
    4825             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4826             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4827             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4828             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4829             : };
    4830             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4831             : static_assert(0 < 1, "There is no slot for us");
    4832             : 
    4833             : static bool
    4834           0 : blockParsing(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    4835             : {
    4836           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    4837           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.blockParsing");
    4838             :   }
    4839           0 :   OwningNonNull<Promise> arg0;
    4840             :   { // Scope for our GlobalObject, FastErrorResult, JSAutoCompartment,
    4841             :     // etc.
    4842             : 
    4843           0 :     JS::Rooted<JSObject*> globalObj(cx, JS::CurrentGlobalOrNull(cx));
    4844           0 :     JSAutoCompartment ac(cx, globalObj);
    4845           0 :     GlobalObject promiseGlobal(cx, globalObj);
    4846           0 :     if (promiseGlobal.Failed()) {
    4847           0 :       return false;
    4848             :     }
    4849             : 
    4850           0 :     JS::Rooted<JS::Value> valueToResolve(cx, args[0]);
    4851           0 :     if (!JS_WrapValue(cx, &valueToResolve)) {
    4852           0 :       return false;
    4853             :     }
    4854           0 :     binding_detail::FastErrorResult promiseRv;
    4855             :     nsCOMPtr<nsIGlobalObject> global =
    4856           0 :       do_QueryInterface(promiseGlobal.GetAsSupports());
    4857           0 :     if (!global) {
    4858           0 :       promiseRv.ThrowWithCustomCleanup(NS_ERROR_UNEXPECTED);
    4859           0 :       MOZ_ALWAYS_TRUE(promiseRv.MaybeSetPendingException(cx));
    4860           0 :       return false;
    4861             :     }
    4862           0 :     arg0 = Promise::Resolve(global, cx, valueToResolve,
    4863           0 :                                     promiseRv);
    4864           0 :     if (promiseRv.MaybeSetPendingException(cx)) {
    4865           0 :       return false;
    4866             :     }
    4867             :   }
    4868           0 :   binding_detail::FastErrorResult rv;
    4869           0 :   auto result(StrongOrRawPtr<Promise>(self->BlockParsing(NonNullHelper(arg0), rv)));
    4870           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4871           0 :     return false;
    4872             :   }
    4873           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4874           0 :   if (!ToJSValue(cx, result, args.rval())) {
    4875           0 :     return false;
    4876             :   }
    4877           0 :   return true;
    4878             : }
    4879             : 
    4880             : static bool
    4881           0 : blockParsing_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    4882             : {
    4883             :   // Make sure to save the callee before someone maybe messes
    4884             :   // with rval().
    4885           0 :   JS::Rooted<JSObject*> callee(cx, &args.callee());
    4886           0 :   bool ok = blockParsing(cx, obj, self, args);
    4887           0 :   if (ok) {
    4888           0 :     return true;
    4889             :   }
    4890           0 :   return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
    4891           0 :                                    args.rval());
    4892             : }
    4893             : 
    4894             : static const JSJitInfo blockParsing_methodinfo = {
    4895             :   { (JSJitGetterOp)blockParsing_promiseWrapper },
    4896             :   { prototypes::id::Document },
    4897             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4898             :   JSJitInfo::Method,
    4899             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4900             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    4901             :   false,  /* isInfallible. False in setters. */
    4902             :   false,  /* isMovable.  Not relevant for setters. */
    4903             :   false, /* isEliminatable.  Not relevant for setters. */
    4904             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4905             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4906             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4907             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4908             : };
    4909             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4910             : static_assert(0 < 1, "There is no slot for us");
    4911             : 
    4912             : static bool
    4913           0 : get_mozDocumentURIIfNotForErrorPages(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    4914             : {
    4915           0 :   auto result(StrongOrRawPtr<nsIURI>(self->GetMozDocumentURIIfNotForErrorPages()));
    4916           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4917           0 :   if (!result) {
    4918           0 :     args.rval().setNull();
    4919           0 :     return true;
    4920             :   }
    4921           0 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIURI), args.rval())) {
    4922           0 :     return false;
    4923             :   }
    4924           0 :   return true;
    4925             : }
    4926             : 
    4927             : static const JSJitInfo mozDocumentURIIfNotForErrorPages_getterinfo = {
    4928             :   { (JSJitGetterOp)get_mozDocumentURIIfNotForErrorPages },
    4929             :   { prototypes::id::Document },
    4930             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4931             :   JSJitInfo::Getter,
    4932             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4933             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4934             :   false,  /* isInfallible. False in setters. */
    4935             :   false,  /* isMovable.  Not relevant for setters. */
    4936             :   false, /* isEliminatable.  Not relevant for setters. */
    4937             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4938             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4939             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4940             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4941             : };
    4942             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4943             : static_assert(0 < 1, "There is no slot for us");
    4944             : 
    4945             : static bool
    4946           0 : get_isSrcdocDocument(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    4947             : {
    4948           0 :   bool result(self->IsSrcdocDocument());
    4949           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4950           0 :   args.rval().setBoolean(result);
    4951           0 :   return true;
    4952             : }
    4953             : 
    4954             : static const JSJitInfo isSrcdocDocument_getterinfo = {
    4955             :   { (JSJitGetterOp)get_isSrcdocDocument },
    4956             :   { prototypes::id::Document },
    4957             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4958             :   JSJitInfo::Getter,
    4959             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4960             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    4961             :   true,  /* isInfallible. False in setters. */
    4962             :   false,  /* isMovable.  Not relevant for setters. */
    4963             :   false, /* isEliminatable.  Not relevant for setters. */
    4964             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4965             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4966             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4967             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4968             : };
    4969             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4970             : static_assert(0 < 1, "There is no slot for us");
    4971             : 
    4972             : static bool
    4973           0 : get_sandboxFlagsAsString(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    4974             : {
    4975           0 :   DOMString result;
    4976           0 :   self->GetSandboxFlagsAsString(result);
    4977           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4978           0 :   if (!xpc::StringToJsval(cx, result, args.rval())) {
    4979           0 :     return false;
    4980             :   }
    4981           0 :   return true;
    4982             : }
    4983             : 
    4984             : static const JSJitInfo sandboxFlagsAsString_getterinfo = {
    4985             :   { (JSJitGetterOp)get_sandboxFlagsAsString },
    4986             :   { prototypes::id::Document },
    4987             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    4988             :   JSJitInfo::Getter,
    4989             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4990             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4991             :   false,  /* isInfallible. False in setters. */
    4992             :   false,  /* isMovable.  Not relevant for setters. */
    4993             :   false, /* isEliminatable.  Not relevant for setters. */
    4994             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4995             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4996             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4997             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4998             : };
    4999             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5000             : static_assert(0 < 1, "There is no slot for us");
    5001             : 
    5002             : static bool
    5003           0 : insertAnonymousContent(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    5004             : {
    5005           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    5006           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.insertAnonymousContent");
    5007             :   }
    5008           0 :   NonNull<mozilla::dom::Element> arg0;
    5009           0 :   if (args[0].isObject()) {
    5010             :     {
    5011           0 :       nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[0], arg0);
    5012           0 :       if (NS_FAILED(rv)) {
    5013           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Document.insertAnonymousContent", "Element");
    5014           0 :         return false;
    5015             :       }
    5016             :     }
    5017             :   } else {
    5018           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Document.insertAnonymousContent");
    5019           0 :     return false;
    5020             :   }
    5021           0 :   binding_detail::FastErrorResult rv;
    5022           0 :   auto result(StrongOrRawPtr<mozilla::dom::AnonymousContent>(self->InsertAnonymousContent(NonNullHelper(arg0), rv)));
    5023           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5024           0 :     return false;
    5025             :   }
    5026           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5027             :   static_assert(!IsPointer<decltype(result)>::value,
    5028             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    5029           0 :   if (!WrapNewBindingNonWrapperCachedObject(cx, obj, result, args.rval())) {
    5030           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    5031           0 :     return false;
    5032             :   }
    5033           0 :   return true;
    5034             : }
    5035             : 
    5036             : static const JSJitInfo insertAnonymousContent_methodinfo = {
    5037             :   { (JSJitGetterOp)insertAnonymousContent },
    5038             :   { prototypes::id::Document },
    5039             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5040             :   JSJitInfo::Method,
    5041             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5042             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    5043             :   false,  /* isInfallible. False in setters. */
    5044             :   false,  /* isMovable.  Not relevant for setters. */
    5045             :   false, /* isEliminatable.  Not relevant for setters. */
    5046             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5047             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5048             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5049             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5050             : };
    5051             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5052             : static_assert(0 < 1, "There is no slot for us");
    5053             : 
    5054             : static bool
    5055           0 : removeAnonymousContent(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    5056             : {
    5057           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    5058           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.removeAnonymousContent");
    5059             :   }
    5060           0 :   NonNull<mozilla::dom::AnonymousContent> arg0;
    5061           0 :   if (args[0].isObject()) {
    5062             :     {
    5063           0 :       nsresult rv = UnwrapObject<prototypes::id::AnonymousContent, mozilla::dom::AnonymousContent>(args[0], arg0);
    5064           0 :       if (NS_FAILED(rv)) {
    5065           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Document.removeAnonymousContent", "AnonymousContent");
    5066           0 :         return false;
    5067             :       }
    5068             :     }
    5069             :   } else {
    5070           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Document.removeAnonymousContent");
    5071           0 :     return false;
    5072             :   }
    5073           0 :   binding_detail::FastErrorResult rv;
    5074           0 :   self->RemoveAnonymousContent(NonNullHelper(arg0), rv);
    5075           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5076           0 :     return false;
    5077             :   }
    5078           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5079           0 :   args.rval().setUndefined();
    5080           0 :   return true;
    5081             : }
    5082             : 
    5083             : static const JSJitInfo removeAnonymousContent_methodinfo = {
    5084             :   { (JSJitGetterOp)removeAnonymousContent },
    5085             :   { prototypes::id::Document },
    5086             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5087             :   JSJitInfo::Method,
    5088             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5089             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5090             :   false,  /* isInfallible. False in setters. */
    5091             :   false,  /* isMovable.  Not relevant for setters. */
    5092             :   false, /* isEliminatable.  Not relevant for setters. */
    5093             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5094             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5095             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5096             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5097             : };
    5098             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5099             : static_assert(0 < 1, "There is no slot for us");
    5100             : 
    5101             : static bool
    5102           0 : get_userHasInteracted(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    5103             : {
    5104           0 :   bool result(self->UserHasInteracted());
    5105           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5106           0 :   args.rval().setBoolean(result);
    5107           0 :   return true;
    5108             : }
    5109             : 
    5110             : static const JSJitInfo userHasInteracted_getterinfo = {
    5111             :   { (JSJitGetterOp)get_userHasInteracted },
    5112             :   { prototypes::id::Document },
    5113             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5114             :   JSJitInfo::Getter,
    5115             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5116             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    5117             :   true,  /* isInfallible. False in setters. */
    5118             :   false,  /* isMovable.  Not relevant for setters. */
    5119             :   false, /* isEliminatable.  Not relevant for setters. */
    5120             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5121             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5122             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5123             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5124             : };
    5125             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5126             : static_assert(0 < 1, "There is no slot for us");
    5127             : 
    5128             : static bool
    5129           0 : get_hasScriptsBlockedBySandbox(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    5130             : {
    5131           0 :   bool result(self->HasScriptsBlockedBySandbox());
    5132           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5133           0 :   args.rval().setBoolean(result);
    5134           0 :   return true;
    5135             : }
    5136             : 
    5137             : static const JSJitInfo hasScriptsBlockedBySandbox_getterinfo = {
    5138             :   { (JSJitGetterOp)get_hasScriptsBlockedBySandbox },
    5139             :   { prototypes::id::Document },
    5140             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5141             :   JSJitInfo::Getter,
    5142             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5143             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    5144             :   true,  /* isInfallible. False in setters. */
    5145             :   false,  /* isMovable.  Not relevant for setters. */
    5146             :   false, /* isEliminatable.  Not relevant for setters. */
    5147             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5148             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5149             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5150             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5151             : };
    5152             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5153             : static_assert(0 < 1, "There is no slot for us");
    5154             : 
    5155             : static bool
    5156           0 : get_inlineScriptAllowedByCSP(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    5157             : {
    5158           0 :   bool result(self->InlineScriptAllowedByCSP());
    5159           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5160           0 :   args.rval().setBoolean(result);
    5161           0 :   return true;
    5162             : }
    5163             : 
    5164             : static const JSJitInfo inlineScriptAllowedByCSP_getterinfo = {
    5165             :   { (JSJitGetterOp)get_inlineScriptAllowedByCSP },
    5166             :   { prototypes::id::Document },
    5167             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5168             :   JSJitInfo::Getter,
    5169             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5170             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    5171             :   true,  /* isInfallible. False in setters. */
    5172             :   false,  /* isMovable.  Not relevant for setters. */
    5173             :   false, /* isEliminatable.  Not relevant for setters. */
    5174             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5175             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5176             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5177             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5178             : };
    5179             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5180             : static_assert(0 < 1, "There is no slot for us");
    5181             : 
    5182             : static bool
    5183           0 : get_documentFlashClassification(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    5184             : {
    5185           0 :   FlashClassification result(self->DocumentFlashClassification());
    5186           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5187           0 :   if (!ToJSValue(cx, result, args.rval())) {
    5188           0 :     return false;
    5189             :   }
    5190           0 :   return true;
    5191             : }
    5192             : 
    5193             : static const JSJitInfo documentFlashClassification_getterinfo = {
    5194             :   { (JSJitGetterOp)get_documentFlashClassification },
    5195             :   { prototypes::id::Document },
    5196             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5197             :   JSJitInfo::Getter,
    5198             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5199             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    5200             :   false,  /* isInfallible. False in setters. */
    5201             :   false,  /* isMovable.  Not relevant for setters. */
    5202             :   false, /* isEliminatable.  Not relevant for setters. */
    5203             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5204             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5205             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5206             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5207             : };
    5208             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5209             : static_assert(0 < 1, "There is no slot for us");
    5210             : 
    5211             : static bool
    5212           0 : get_oncopy(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    5213             : {
    5214           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncopy());
    5215           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5216           0 :   if (result) {
    5217           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5218           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5219           0 :       return false;
    5220             :     }
    5221           0 :     return true;
    5222             :   } else {
    5223           0 :     args.rval().setNull();
    5224           0 :     return true;
    5225             :   }
    5226             : }
    5227             : 
    5228             : static bool
    5229           0 : set_oncopy(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    5230             : {
    5231           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5232           0 :   if (args[0].isObject()) {
    5233             :     { // scope for tempRoot
    5234           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5235           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5236             :     }
    5237             :   } else {
    5238           0 :     arg0 = nullptr;
    5239             :   }
    5240           0 :   self->SetOncopy(Constify(arg0));
    5241           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5242             : 
    5243           0 :   return true;
    5244             : }
    5245             : 
    5246             : static const JSJitInfo oncopy_getterinfo = {
    5247             :   { (JSJitGetterOp)get_oncopy },
    5248             :   { prototypes::id::Document },
    5249             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5250             :   JSJitInfo::Getter,
    5251             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5252             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5253             :   false,  /* isInfallible. False in setters. */
    5254             :   false,  /* isMovable.  Not relevant for setters. */
    5255             :   false, /* isEliminatable.  Not relevant for setters. */
    5256             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5257             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5258             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5259             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5260             : };
    5261             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5262             : static_assert(0 < 1, "There is no slot for us");
    5263             : static const JSJitInfo oncopy_setterinfo = {
    5264             :   { (JSJitGetterOp)set_oncopy },
    5265             :   { prototypes::id::Document },
    5266             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5267             :   JSJitInfo::Setter,
    5268             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5269             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5270             :   false,  /* isInfallible. False in setters. */
    5271             :   false,  /* isMovable.  Not relevant for setters. */
    5272             :   false, /* isEliminatable.  Not relevant for setters. */
    5273             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5274             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5275             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5276             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5277             : };
    5278             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5279             : static_assert(0 < 1, "There is no slot for us");
    5280             : 
    5281             : static bool
    5282           0 : get_oncut(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    5283             : {
    5284           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncut());
    5285           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5286           0 :   if (result) {
    5287           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5288           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5289           0 :       return false;
    5290             :     }
    5291           0 :     return true;
    5292             :   } else {
    5293           0 :     args.rval().setNull();
    5294           0 :     return true;
    5295             :   }
    5296             : }
    5297             : 
    5298             : static bool
    5299           0 : set_oncut(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    5300             : {
    5301           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5302           0 :   if (args[0].isObject()) {
    5303             :     { // scope for tempRoot
    5304           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5305           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5306             :     }
    5307             :   } else {
    5308           0 :     arg0 = nullptr;
    5309             :   }
    5310           0 :   self->SetOncut(Constify(arg0));
    5311           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5312             : 
    5313           0 :   return true;
    5314             : }
    5315             : 
    5316             : static const JSJitInfo oncut_getterinfo = {
    5317             :   { (JSJitGetterOp)get_oncut },
    5318             :   { prototypes::id::Document },
    5319             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5320             :   JSJitInfo::Getter,
    5321             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5322             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5323             :   false,  /* isInfallible. False in setters. */
    5324             :   false,  /* isMovable.  Not relevant for setters. */
    5325             :   false, /* isEliminatable.  Not relevant for setters. */
    5326             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5327             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5328             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5329             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5330             : };
    5331             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5332             : static_assert(0 < 1, "There is no slot for us");
    5333             : static const JSJitInfo oncut_setterinfo = {
    5334             :   { (JSJitGetterOp)set_oncut },
    5335             :   { prototypes::id::Document },
    5336             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5337             :   JSJitInfo::Setter,
    5338             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5339             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5340             :   false,  /* isInfallible. False in setters. */
    5341             :   false,  /* isMovable.  Not relevant for setters. */
    5342             :   false, /* isEliminatable.  Not relevant for setters. */
    5343             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5344             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5345             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5346             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5347             : };
    5348             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5349             : static_assert(0 < 1, "There is no slot for us");
    5350             : 
    5351             : static bool
    5352           0 : get_onpaste(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    5353             : {
    5354           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpaste());
    5355           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5356           0 :   if (result) {
    5357           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5358           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5359           0 :       return false;
    5360             :     }
    5361           0 :     return true;
    5362             :   } else {
    5363           0 :     args.rval().setNull();
    5364           0 :     return true;
    5365             :   }
    5366             : }
    5367             : 
    5368             : static bool
    5369           0 : set_onpaste(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    5370             : {
    5371           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5372           0 :   if (args[0].isObject()) {
    5373             :     { // scope for tempRoot
    5374           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5375           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5376             :     }
    5377             :   } else {
    5378           0 :     arg0 = nullptr;
    5379             :   }
    5380           0 :   self->SetOnpaste(Constify(arg0));
    5381           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5382             : 
    5383           0 :   return true;
    5384             : }
    5385             : 
    5386             : static const JSJitInfo onpaste_getterinfo = {
    5387             :   { (JSJitGetterOp)get_onpaste },
    5388             :   { prototypes::id::Document },
    5389             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5390             :   JSJitInfo::Getter,
    5391             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5392             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5393             :   false,  /* isInfallible. False in setters. */
    5394             :   false,  /* isMovable.  Not relevant for setters. */
    5395             :   false, /* isEliminatable.  Not relevant for setters. */
    5396             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5397             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5398             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5399             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5400             : };
    5401             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5402             : static_assert(0 < 1, "There is no slot for us");
    5403             : static const JSJitInfo onpaste_setterinfo = {
    5404             :   { (JSJitGetterOp)set_onpaste },
    5405             :   { prototypes::id::Document },
    5406             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5407             :   JSJitInfo::Setter,
    5408             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5409             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5410             :   false,  /* isInfallible. False in setters. */
    5411             :   false,  /* isMovable.  Not relevant for setters. */
    5412             :   false, /* isEliminatable.  Not relevant for setters. */
    5413             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5414             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5415             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5416             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5417             : };
    5418             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5419             : static_assert(0 < 1, "There is no slot for us");
    5420             : 
    5421             : static bool
    5422           0 : get_fonts(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    5423             : {
    5424           0 :   auto result(StrongOrRawPtr<mozilla::dom::FontFaceSet>(self->Fonts()));
    5425           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5426           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    5427           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    5428           0 :     return false;
    5429             :   }
    5430           0 :   return true;
    5431             : }
    5432             : 
    5433             : static const JSJitInfo fonts_getterinfo = {
    5434             :   { (JSJitGetterOp)get_fonts },
    5435             :   { prototypes::id::Document },
    5436             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5437             :   JSJitInfo::Getter,
    5438             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5439             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    5440             :   false,  /* isInfallible. False in setters. */
    5441             :   false,  /* isMovable.  Not relevant for setters. */
    5442             :   false, /* isEliminatable.  Not relevant for setters. */
    5443             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5444             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5445             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5446             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5447             : };
    5448             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5449             : static_assert(0 < 1, "There is no slot for us");
    5450             : 
    5451             : static bool
    5452           0 : getBoxQuads(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    5453             : {
    5454           0 :   binding_detail::FastBoxQuadOptions arg0;
    5455           0 :   if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue,  "Argument 1 of Document.getBoxQuads", false)) {
    5456           0 :     return false;
    5457             :   }
    5458           0 :   binding_detail::FastErrorResult rv;
    5459           0 :   nsTArray<StrongPtrForMember<mozilla::dom::DOMQuad>::Type> result;
    5460           0 :   self->GetBoxQuads(Constify(arg0), result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    5461           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5462           0 :     return false;
    5463             :   }
    5464           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5465             : 
    5466           0 :   uint32_t length = result.Length();
    5467           0 :   JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
    5468           0 :   if (!returnArray) {
    5469           0 :     return false;
    5470             :   }
    5471             :   // Scope for 'tmp'
    5472             :   {
    5473           0 :     JS::Rooted<JS::Value> tmp(cx);
    5474           0 :     for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
    5475             :       // Control block to let us common up the JS_DefineElement calls when there
    5476             :       // are different ways to succeed at wrapping the object.
    5477             :       do {
    5478           0 :         if (!GetOrCreateDOMReflector(cx, result[sequenceIdx0], &tmp)) {
    5479           0 :           MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    5480           0 :           return false;
    5481             :         }
    5482           0 :         break;
    5483             :       } while (0);
    5484           0 :       if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
    5485             :                             JSPROP_ENUMERATE)) {
    5486           0 :         return false;
    5487             :       }
    5488             :     }
    5489             :   }
    5490           0 :   args.rval().setObject(*returnArray);
    5491           0 :   return true;
    5492             : }
    5493             : 
    5494             : static const JSJitInfo getBoxQuads_methodinfo = {
    5495             :   { (JSJitGetterOp)getBoxQuads },
    5496             :   { prototypes::id::Document },
    5497             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5498             :   JSJitInfo::Method,
    5499             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5500             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    5501             :   false,  /* isInfallible. False in setters. */
    5502             :   false,  /* isMovable.  Not relevant for setters. */
    5503             :   false, /* isEliminatable.  Not relevant for setters. */
    5504             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5505             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5506             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5507             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5508             : };
    5509             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5510             : static_assert(0 < 1, "There is no slot for us");
    5511             : 
    5512             : static bool
    5513           0 : convertQuadFromNode(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    5514             : {
    5515           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    5516           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.convertQuadFromNode");
    5517             :   }
    5518           0 :   NonNull<mozilla::dom::DOMQuad> arg0;
    5519           0 :   if (args[0].isObject()) {
    5520             :     {
    5521           0 :       nsresult rv = UnwrapObject<prototypes::id::DOMQuad, mozilla::dom::DOMQuad>(args[0], arg0);
    5522           0 :       if (NS_FAILED(rv)) {
    5523           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Document.convertQuadFromNode", "DOMQuad");
    5524           0 :         return false;
    5525             :       }
    5526             :     }
    5527             :   } else {
    5528           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Document.convertQuadFromNode");
    5529           0 :     return false;
    5530             :   }
    5531           0 :   TextOrElementOrDocument arg1;
    5532           0 :   TextOrElementOrDocumentArgument arg1_holder(arg1);
    5533             :   {
    5534           0 :     bool done = false, failed = false, tryNext;
    5535           0 :     if (args[1].isObject()) {
    5536           0 :       done = (failed = !arg1_holder.TrySetToText(cx, args[1], tryNext, false)) || !tryNext ||
    5537           0 :              (failed = !arg1_holder.TrySetToElement(cx, args[1], tryNext, false)) || !tryNext ||
    5538           0 :              (failed = !arg1_holder.TrySetToDocument(cx, args[1], tryNext, false)) || !tryNext;
    5539             : 
    5540             :     }
    5541           0 :     if (failed) {
    5542           0 :       return false;
    5543             :     }
    5544           0 :     if (!done) {
    5545           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of Document.convertQuadFromNode", "Text, Element, Document");
    5546           0 :       return false;
    5547             :     }
    5548             :   }
    5549           0 :   binding_detail::FastConvertCoordinateOptions arg2;
    5550           0 :   if (!arg2.Init(cx, (args.hasDefined(2)) ? args[2] : JS::NullHandleValue,  "Argument 3 of Document.convertQuadFromNode", false)) {
    5551           0 :     return false;
    5552             :   }
    5553           0 :   binding_detail::FastErrorResult rv;
    5554           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMQuad>(self->ConvertQuadFromNode(NonNullHelper(arg0), Constify(arg1), Constify(arg2), nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv)));
    5555           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5556           0 :     return false;
    5557             :   }
    5558           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5559           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    5560           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    5561           0 :     return false;
    5562             :   }
    5563           0 :   return true;
    5564             : }
    5565             : 
    5566             : static const JSJitInfo convertQuadFromNode_methodinfo = {
    5567             :   { (JSJitGetterOp)convertQuadFromNode },
    5568             :   { prototypes::id::Document },
    5569             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5570             :   JSJitInfo::Method,
    5571             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5572             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    5573             :   false,  /* isInfallible. False in setters. */
    5574             :   false,  /* isMovable.  Not relevant for setters. */
    5575             :   false, /* isEliminatable.  Not relevant for setters. */
    5576             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5577             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5578             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5579             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5580             : };
    5581             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5582             : static_assert(0 < 1, "There is no slot for us");
    5583             : 
    5584             : static bool
    5585           0 : convertRectFromNode(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    5586             : {
    5587           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    5588           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.convertRectFromNode");
    5589             :   }
    5590           0 :   NonNull<mozilla::dom::DOMRectReadOnly> arg0;
    5591           0 :   if (args[0].isObject()) {
    5592             :     {
    5593           0 :       nsresult rv = UnwrapObject<prototypes::id::DOMRectReadOnly, mozilla::dom::DOMRectReadOnly>(args[0], arg0);
    5594           0 :       if (NS_FAILED(rv)) {
    5595           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Document.convertRectFromNode", "DOMRectReadOnly");
    5596           0 :         return false;
    5597             :       }
    5598             :     }
    5599             :   } else {
    5600           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Document.convertRectFromNode");
    5601           0 :     return false;
    5602             :   }
    5603           0 :   TextOrElementOrDocument arg1;
    5604           0 :   TextOrElementOrDocumentArgument arg1_holder(arg1);
    5605             :   {
    5606           0 :     bool done = false, failed = false, tryNext;
    5607           0 :     if (args[1].isObject()) {
    5608           0 :       done = (failed = !arg1_holder.TrySetToText(cx, args[1], tryNext, false)) || !tryNext ||
    5609           0 :              (failed = !arg1_holder.TrySetToElement(cx, args[1], tryNext, false)) || !tryNext ||
    5610           0 :              (failed = !arg1_holder.TrySetToDocument(cx, args[1], tryNext, false)) || !tryNext;
    5611             : 
    5612             :     }
    5613           0 :     if (failed) {
    5614           0 :       return false;
    5615             :     }
    5616           0 :     if (!done) {
    5617           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of Document.convertRectFromNode", "Text, Element, Document");
    5618           0 :       return false;
    5619             :     }
    5620             :   }
    5621           0 :   binding_detail::FastConvertCoordinateOptions arg2;
    5622           0 :   if (!arg2.Init(cx, (args.hasDefined(2)) ? args[2] : JS::NullHandleValue,  "Argument 3 of Document.convertRectFromNode", false)) {
    5623           0 :     return false;
    5624             :   }
    5625           0 :   binding_detail::FastErrorResult rv;
    5626           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMQuad>(self->ConvertRectFromNode(NonNullHelper(arg0), Constify(arg1), Constify(arg2), nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv)));
    5627           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5628           0 :     return false;
    5629             :   }
    5630           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5631           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    5632           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    5633           0 :     return false;
    5634             :   }
    5635           0 :   return true;
    5636             : }
    5637             : 
    5638             : static const JSJitInfo convertRectFromNode_methodinfo = {
    5639             :   { (JSJitGetterOp)convertRectFromNode },
    5640             :   { prototypes::id::Document },
    5641             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5642             :   JSJitInfo::Method,
    5643             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5644             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    5645             :   false,  /* isInfallible. False in setters. */
    5646             :   false,  /* isMovable.  Not relevant for setters. */
    5647             :   false, /* isEliminatable.  Not relevant for setters. */
    5648             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5649             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5650             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5651             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5652             : };
    5653             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5654             : static_assert(0 < 1, "There is no slot for us");
    5655             : 
    5656             : static bool
    5657           0 : convertPointFromNode(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
    5658             : {
    5659           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    5660           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.convertPointFromNode");
    5661             :   }
    5662           0 :   binding_detail::FastDOMPointInit arg0;
    5663           0 :   if (!arg0.Init(cx, args[0],  "Argument 1 of Document.convertPointFromNode", false)) {
    5664           0 :     return false;
    5665             :   }
    5666           0 :   TextOrElementOrDocument arg1;
    5667           0 :   TextOrElementOrDocumentArgument arg1_holder(arg1);
    5668             :   {
    5669           0 :     bool done = false, failed = false, tryNext;
    5670           0 :     if (args[1].isObject()) {
    5671           0 :       done = (failed = !arg1_holder.TrySetToText(cx, args[1], tryNext, false)) || !tryNext ||
    5672           0 :              (failed = !arg1_holder.TrySetToElement(cx, args[1], tryNext, false)) || !tryNext ||
    5673           0 :              (failed = !arg1_holder.TrySetToDocument(cx, args[1], tryNext, false)) || !tryNext;
    5674             : 
    5675             :     }
    5676           0 :     if (failed) {
    5677           0 :       return false;
    5678             :     }
    5679           0 :     if (!done) {
    5680           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of Document.convertPointFromNode", "Text, Element, Document");
    5681           0 :       return false;
    5682             :     }
    5683             :   }
    5684           0 :   binding_detail::FastConvertCoordinateOptions arg2;
    5685           0 :   if (!arg2.Init(cx, (args.hasDefined(2)) ? args[2] : JS::NullHandleValue,  "Argument 3 of Document.convertPointFromNode", false)) {
    5686           0 :     return false;
    5687             :   }
    5688           0 :   binding_detail::FastErrorResult rv;
    5689           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMPoint>(self->ConvertPointFromNode(Constify(arg0), Constify(arg1), Constify(arg2), nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv)));
    5690           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5691           0 :     return false;
    5692             :   }
    5693           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5694           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    5695           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    5696           0 :     return false;
    5697             :   }
    5698           0 :   return true;
    5699             : }
    5700             : 
    5701             : static const JSJitInfo convertPointFromNode_methodinfo = {
    5702             :   { (JSJitGetterOp)convertPointFromNode },
    5703             :   { prototypes::id::Document },
    5704             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5705             :   JSJitInfo::Method,
    5706             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5707             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    5708             :   false,  /* isInfallible. False in setters. */
    5709             :   false,  /* isMovable.  Not relevant for setters. */
    5710             :   false, /* isEliminatable.  Not relevant for setters. */
    5711             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5712             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5713             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5714             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5715             : };
    5716             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5717             : static_assert(0 < 1, "There is no slot for us");
    5718             : 
    5719             : static bool
    5720           0 : get_onabort(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    5721             : {
    5722           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnabort());
    5723           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5724           0 :   if (result) {
    5725           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5726           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5727           0 :       return false;
    5728             :     }
    5729           0 :     return true;
    5730             :   } else {
    5731           0 :     args.rval().setNull();
    5732           0 :     return true;
    5733             :   }
    5734             : }
    5735             : 
    5736             : static bool
    5737           0 : set_onabort(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    5738             : {
    5739           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5740           0 :   if (args[0].isObject()) {
    5741             :     { // scope for tempRoot
    5742           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5743           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5744             :     }
    5745             :   } else {
    5746           0 :     arg0 = nullptr;
    5747             :   }
    5748           0 :   self->SetOnabort(Constify(arg0));
    5749           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5750             : 
    5751           0 :   return true;
    5752             : }
    5753             : 
    5754             : static const JSJitInfo onabort_getterinfo = {
    5755             :   { (JSJitGetterOp)get_onabort },
    5756             :   { prototypes::id::Document },
    5757             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5758             :   JSJitInfo::Getter,
    5759             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5760             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5761             :   false,  /* isInfallible. False in setters. */
    5762             :   false,  /* isMovable.  Not relevant for setters. */
    5763             :   false, /* isEliminatable.  Not relevant for setters. */
    5764             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5765             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5766             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5767             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5768             : };
    5769             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5770             : static_assert(0 < 1, "There is no slot for us");
    5771             : static const JSJitInfo onabort_setterinfo = {
    5772             :   { (JSJitGetterOp)set_onabort },
    5773             :   { prototypes::id::Document },
    5774             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5775             :   JSJitInfo::Setter,
    5776             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5777             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5778             :   false,  /* isInfallible. False in setters. */
    5779             :   false,  /* isMovable.  Not relevant for setters. */
    5780             :   false, /* isEliminatable.  Not relevant for setters. */
    5781             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5782             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5783             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5784             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5785             : };
    5786             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5787             : static_assert(0 < 1, "There is no slot for us");
    5788             : 
    5789             : static bool
    5790           0 : get_onblur(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    5791             : {
    5792           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnblur());
    5793           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5794           0 :   if (result) {
    5795           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5796           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5797           0 :       return false;
    5798             :     }
    5799           0 :     return true;
    5800             :   } else {
    5801           0 :     args.rval().setNull();
    5802           0 :     return true;
    5803             :   }
    5804             : }
    5805             : 
    5806             : static bool
    5807           0 : set_onblur(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    5808             : {
    5809           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5810           0 :   if (args[0].isObject()) {
    5811             :     { // scope for tempRoot
    5812           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5813           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5814             :     }
    5815             :   } else {
    5816           0 :     arg0 = nullptr;
    5817             :   }
    5818           0 :   self->SetOnblur(Constify(arg0));
    5819           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5820             : 
    5821           0 :   return true;
    5822             : }
    5823             : 
    5824             : static const JSJitInfo onblur_getterinfo = {
    5825             :   { (JSJitGetterOp)get_onblur },
    5826             :   { prototypes::id::Document },
    5827             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5828             :   JSJitInfo::Getter,
    5829             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5830             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5831             :   false,  /* isInfallible. False in setters. */
    5832             :   false,  /* isMovable.  Not relevant for setters. */
    5833             :   false, /* isEliminatable.  Not relevant for setters. */
    5834             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5835             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5836             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5837             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5838             : };
    5839             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5840             : static_assert(0 < 1, "There is no slot for us");
    5841             : static const JSJitInfo onblur_setterinfo = {
    5842             :   { (JSJitGetterOp)set_onblur },
    5843             :   { prototypes::id::Document },
    5844             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5845             :   JSJitInfo::Setter,
    5846             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5847             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5848             :   false,  /* isInfallible. False in setters. */
    5849             :   false,  /* isMovable.  Not relevant for setters. */
    5850             :   false, /* isEliminatable.  Not relevant for setters. */
    5851             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5852             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5853             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5854             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5855             : };
    5856             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5857             : static_assert(0 < 1, "There is no slot for us");
    5858             : 
    5859             : static bool
    5860           0 : get_onfocus(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    5861             : {
    5862           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnfocus());
    5863           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5864           0 :   if (result) {
    5865           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5866           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5867           0 :       return false;
    5868             :     }
    5869           0 :     return true;
    5870             :   } else {
    5871           0 :     args.rval().setNull();
    5872           0 :     return true;
    5873             :   }
    5874             : }
    5875             : 
    5876             : static bool
    5877           0 : set_onfocus(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    5878             : {
    5879           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5880           0 :   if (args[0].isObject()) {
    5881             :     { // scope for tempRoot
    5882           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5883           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5884             :     }
    5885             :   } else {
    5886           0 :     arg0 = nullptr;
    5887             :   }
    5888           0 :   self->SetOnfocus(Constify(arg0));
    5889           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5890             : 
    5891           0 :   return true;
    5892             : }
    5893             : 
    5894             : static const JSJitInfo onfocus_getterinfo = {
    5895             :   { (JSJitGetterOp)get_onfocus },
    5896             :   { prototypes::id::Document },
    5897             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5898             :   JSJitInfo::Getter,
    5899             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5900             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5901             :   false,  /* isInfallible. False in setters. */
    5902             :   false,  /* isMovable.  Not relevant for setters. */
    5903             :   false, /* isEliminatable.  Not relevant for setters. */
    5904             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5905             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5906             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5907             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5908             : };
    5909             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5910             : static_assert(0 < 1, "There is no slot for us");
    5911             : static const JSJitInfo onfocus_setterinfo = {
    5912             :   { (JSJitGetterOp)set_onfocus },
    5913             :   { prototypes::id::Document },
    5914             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5915             :   JSJitInfo::Setter,
    5916             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5917             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5918             :   false,  /* isInfallible. False in setters. */
    5919             :   false,  /* isMovable.  Not relevant for setters. */
    5920             :   false, /* isEliminatable.  Not relevant for setters. */
    5921             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5922             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5923             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5924             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5925             : };
    5926             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5927             : static_assert(0 < 1, "There is no slot for us");
    5928             : 
    5929             : static bool
    5930           0 : get_onauxclick(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    5931             : {
    5932           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnauxclick());
    5933           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5934           0 :   if (result) {
    5935           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5936           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5937           0 :       return false;
    5938             :     }
    5939           0 :     return true;
    5940             :   } else {
    5941           0 :     args.rval().setNull();
    5942           0 :     return true;
    5943             :   }
    5944             : }
    5945             : 
    5946             : static bool
    5947           0 : set_onauxclick(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    5948             : {
    5949           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5950           0 :   if (args[0].isObject()) {
    5951             :     { // scope for tempRoot
    5952           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5953           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5954             :     }
    5955             :   } else {
    5956           0 :     arg0 = nullptr;
    5957             :   }
    5958           0 :   self->SetOnauxclick(Constify(arg0));
    5959           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5960             : 
    5961           0 :   return true;
    5962             : }
    5963             : 
    5964             : static const JSJitInfo onauxclick_getterinfo = {
    5965             :   { (JSJitGetterOp)get_onauxclick },
    5966             :   { prototypes::id::Document },
    5967             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5968             :   JSJitInfo::Getter,
    5969             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5970             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5971             :   false,  /* isInfallible. False in setters. */
    5972             :   false,  /* isMovable.  Not relevant for setters. */
    5973             :   false, /* isEliminatable.  Not relevant for setters. */
    5974             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5975             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5976             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5977             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5978             : };
    5979             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5980             : static_assert(0 < 1, "There is no slot for us");
    5981             : static const JSJitInfo onauxclick_setterinfo = {
    5982             :   { (JSJitGetterOp)set_onauxclick },
    5983             :   { prototypes::id::Document },
    5984             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    5985             :   JSJitInfo::Setter,
    5986             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5987             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5988             :   false,  /* isInfallible. False in setters. */
    5989             :   false,  /* isMovable.  Not relevant for setters. */
    5990             :   false, /* isEliminatable.  Not relevant for setters. */
    5991             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5992             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5993             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5994             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5995             : };
    5996             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5997             : static_assert(0 < 1, "There is no slot for us");
    5998             : 
    5999             : static bool
    6000           0 : get_oncanplay(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6001             : {
    6002           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncanplay());
    6003           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6004           0 :   if (result) {
    6005           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6006           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6007           0 :       return false;
    6008             :     }
    6009           0 :     return true;
    6010             :   } else {
    6011           0 :     args.rval().setNull();
    6012           0 :     return true;
    6013             :   }
    6014             : }
    6015             : 
    6016             : static bool
    6017           0 : set_oncanplay(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6018             : {
    6019           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6020           0 :   if (args[0].isObject()) {
    6021             :     { // scope for tempRoot
    6022           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6023           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6024             :     }
    6025             :   } else {
    6026           0 :     arg0 = nullptr;
    6027             :   }
    6028           0 :   self->SetOncanplay(Constify(arg0));
    6029           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6030             : 
    6031           0 :   return true;
    6032             : }
    6033             : 
    6034             : static const JSJitInfo oncanplay_getterinfo = {
    6035             :   { (JSJitGetterOp)get_oncanplay },
    6036             :   { prototypes::id::Document },
    6037             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6038             :   JSJitInfo::Getter,
    6039             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6040             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6041             :   false,  /* isInfallible. False in setters. */
    6042             :   false,  /* isMovable.  Not relevant for setters. */
    6043             :   false, /* isEliminatable.  Not relevant for setters. */
    6044             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6045             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6046             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6047             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6048             : };
    6049             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6050             : static_assert(0 < 1, "There is no slot for us");
    6051             : static const JSJitInfo oncanplay_setterinfo = {
    6052             :   { (JSJitGetterOp)set_oncanplay },
    6053             :   { prototypes::id::Document },
    6054             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6055             :   JSJitInfo::Setter,
    6056             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6057             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6058             :   false,  /* isInfallible. False in setters. */
    6059             :   false,  /* isMovable.  Not relevant for setters. */
    6060             :   false, /* isEliminatable.  Not relevant for setters. */
    6061             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6062             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6063             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6064             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6065             : };
    6066             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6067             : static_assert(0 < 1, "There is no slot for us");
    6068             : 
    6069             : static bool
    6070           0 : get_oncanplaythrough(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6071             : {
    6072           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncanplaythrough());
    6073           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6074           0 :   if (result) {
    6075           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6076           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6077           0 :       return false;
    6078             :     }
    6079           0 :     return true;
    6080             :   } else {
    6081           0 :     args.rval().setNull();
    6082           0 :     return true;
    6083             :   }
    6084             : }
    6085             : 
    6086             : static bool
    6087           0 : set_oncanplaythrough(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6088             : {
    6089           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6090           0 :   if (args[0].isObject()) {
    6091             :     { // scope for tempRoot
    6092           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6093           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6094             :     }
    6095             :   } else {
    6096           0 :     arg0 = nullptr;
    6097             :   }
    6098           0 :   self->SetOncanplaythrough(Constify(arg0));
    6099           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6100             : 
    6101           0 :   return true;
    6102             : }
    6103             : 
    6104             : static const JSJitInfo oncanplaythrough_getterinfo = {
    6105             :   { (JSJitGetterOp)get_oncanplaythrough },
    6106             :   { prototypes::id::Document },
    6107             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6108             :   JSJitInfo::Getter,
    6109             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6110             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6111             :   false,  /* isInfallible. False in setters. */
    6112             :   false,  /* isMovable.  Not relevant for setters. */
    6113             :   false, /* isEliminatable.  Not relevant for setters. */
    6114             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6115             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6116             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6117             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6118             : };
    6119             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6120             : static_assert(0 < 1, "There is no slot for us");
    6121             : static const JSJitInfo oncanplaythrough_setterinfo = {
    6122             :   { (JSJitGetterOp)set_oncanplaythrough },
    6123             :   { prototypes::id::Document },
    6124             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6125             :   JSJitInfo::Setter,
    6126             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6127             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6128             :   false,  /* isInfallible. False in setters. */
    6129             :   false,  /* isMovable.  Not relevant for setters. */
    6130             :   false, /* isEliminatable.  Not relevant for setters. */
    6131             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6132             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6133             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6134             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6135             : };
    6136             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6137             : static_assert(0 < 1, "There is no slot for us");
    6138             : 
    6139             : static bool
    6140           0 : get_onchange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6141             : {
    6142           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnchange());
    6143           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6144           0 :   if (result) {
    6145           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6146           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6147           0 :       return false;
    6148             :     }
    6149           0 :     return true;
    6150             :   } else {
    6151           0 :     args.rval().setNull();
    6152           0 :     return true;
    6153             :   }
    6154             : }
    6155             : 
    6156             : static bool
    6157           0 : set_onchange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6158             : {
    6159           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6160           0 :   if (args[0].isObject()) {
    6161             :     { // scope for tempRoot
    6162           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6163           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6164             :     }
    6165             :   } else {
    6166           0 :     arg0 = nullptr;
    6167             :   }
    6168           0 :   self->SetOnchange(Constify(arg0));
    6169           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6170             : 
    6171           0 :   return true;
    6172             : }
    6173             : 
    6174             : static const JSJitInfo onchange_getterinfo = {
    6175             :   { (JSJitGetterOp)get_onchange },
    6176             :   { prototypes::id::Document },
    6177             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6178             :   JSJitInfo::Getter,
    6179             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6180             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6181             :   false,  /* isInfallible. False in setters. */
    6182             :   false,  /* isMovable.  Not relevant for setters. */
    6183             :   false, /* isEliminatable.  Not relevant for setters. */
    6184             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6185             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6186             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6187             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6188             : };
    6189             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6190             : static_assert(0 < 1, "There is no slot for us");
    6191             : static const JSJitInfo onchange_setterinfo = {
    6192             :   { (JSJitGetterOp)set_onchange },
    6193             :   { prototypes::id::Document },
    6194             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6195             :   JSJitInfo::Setter,
    6196             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6197             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6198             :   false,  /* isInfallible. False in setters. */
    6199             :   false,  /* isMovable.  Not relevant for setters. */
    6200             :   false, /* isEliminatable.  Not relevant for setters. */
    6201             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6202             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6203             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6204             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6205             : };
    6206             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6207             : static_assert(0 < 1, "There is no slot for us");
    6208             : 
    6209             : static bool
    6210           0 : get_onclick(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6211             : {
    6212           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnclick());
    6213           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6214           0 :   if (result) {
    6215           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6216           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6217           0 :       return false;
    6218             :     }
    6219           0 :     return true;
    6220             :   } else {
    6221           0 :     args.rval().setNull();
    6222           0 :     return true;
    6223             :   }
    6224             : }
    6225             : 
    6226             : static bool
    6227           0 : set_onclick(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6228             : {
    6229           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6230           0 :   if (args[0].isObject()) {
    6231             :     { // scope for tempRoot
    6232           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6233           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6234             :     }
    6235             :   } else {
    6236           0 :     arg0 = nullptr;
    6237             :   }
    6238           0 :   self->SetOnclick(Constify(arg0));
    6239           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6240             : 
    6241           0 :   return true;
    6242             : }
    6243             : 
    6244             : static const JSJitInfo onclick_getterinfo = {
    6245             :   { (JSJitGetterOp)get_onclick },
    6246             :   { prototypes::id::Document },
    6247             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6248             :   JSJitInfo::Getter,
    6249             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6250             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6251             :   false,  /* isInfallible. False in setters. */
    6252             :   false,  /* isMovable.  Not relevant for setters. */
    6253             :   false, /* isEliminatable.  Not relevant for setters. */
    6254             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6255             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6256             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6257             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6258             : };
    6259             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6260             : static_assert(0 < 1, "There is no slot for us");
    6261             : static const JSJitInfo onclick_setterinfo = {
    6262             :   { (JSJitGetterOp)set_onclick },
    6263             :   { prototypes::id::Document },
    6264             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6265             :   JSJitInfo::Setter,
    6266             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6267             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6268             :   false,  /* isInfallible. False in setters. */
    6269             :   false,  /* isMovable.  Not relevant for setters. */
    6270             :   false, /* isEliminatable.  Not relevant for setters. */
    6271             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6272             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6273             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6274             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6275             : };
    6276             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6277             : static_assert(0 < 1, "There is no slot for us");
    6278             : 
    6279             : static bool
    6280           0 : get_onclose(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6281             : {
    6282           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnclose());
    6283           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6284           0 :   if (result) {
    6285           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6286           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6287           0 :       return false;
    6288             :     }
    6289           0 :     return true;
    6290             :   } else {
    6291           0 :     args.rval().setNull();
    6292           0 :     return true;
    6293             :   }
    6294             : }
    6295             : 
    6296             : static bool
    6297           0 : set_onclose(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6298             : {
    6299           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6300           0 :   if (args[0].isObject()) {
    6301             :     { // scope for tempRoot
    6302           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6303           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6304             :     }
    6305             :   } else {
    6306           0 :     arg0 = nullptr;
    6307             :   }
    6308           0 :   self->SetOnclose(Constify(arg0));
    6309           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6310             : 
    6311           0 :   return true;
    6312             : }
    6313             : 
    6314             : static const JSJitInfo onclose_getterinfo = {
    6315             :   { (JSJitGetterOp)get_onclose },
    6316             :   { prototypes::id::Document },
    6317             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6318             :   JSJitInfo::Getter,
    6319             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6320             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6321             :   false,  /* isInfallible. False in setters. */
    6322             :   false,  /* isMovable.  Not relevant for setters. */
    6323             :   false, /* isEliminatable.  Not relevant for setters. */
    6324             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6325             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6326             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6327             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6328             : };
    6329             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6330             : static_assert(0 < 1, "There is no slot for us");
    6331             : static const JSJitInfo onclose_setterinfo = {
    6332             :   { (JSJitGetterOp)set_onclose },
    6333             :   { prototypes::id::Document },
    6334             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6335             :   JSJitInfo::Setter,
    6336             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6337             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6338             :   false,  /* isInfallible. False in setters. */
    6339             :   false,  /* isMovable.  Not relevant for setters. */
    6340             :   false, /* isEliminatable.  Not relevant for setters. */
    6341             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6342             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6343             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6344             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6345             : };
    6346             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6347             : static_assert(0 < 1, "There is no slot for us");
    6348             : 
    6349             : static bool
    6350           0 : get_oncontextmenu(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6351             : {
    6352           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncontextmenu());
    6353           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6354           0 :   if (result) {
    6355           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6356           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6357           0 :       return false;
    6358             :     }
    6359           0 :     return true;
    6360             :   } else {
    6361           0 :     args.rval().setNull();
    6362           0 :     return true;
    6363             :   }
    6364             : }
    6365             : 
    6366             : static bool
    6367           0 : set_oncontextmenu(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6368             : {
    6369           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6370           0 :   if (args[0].isObject()) {
    6371             :     { // scope for tempRoot
    6372           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6373           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6374             :     }
    6375             :   } else {
    6376           0 :     arg0 = nullptr;
    6377             :   }
    6378           0 :   self->SetOncontextmenu(Constify(arg0));
    6379           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6380             : 
    6381           0 :   return true;
    6382             : }
    6383             : 
    6384             : static const JSJitInfo oncontextmenu_getterinfo = {
    6385             :   { (JSJitGetterOp)get_oncontextmenu },
    6386             :   { prototypes::id::Document },
    6387             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6388             :   JSJitInfo::Getter,
    6389             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6390             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6391             :   false,  /* isInfallible. False in setters. */
    6392             :   false,  /* isMovable.  Not relevant for setters. */
    6393             :   false, /* isEliminatable.  Not relevant for setters. */
    6394             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6395             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6396             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6397             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6398             : };
    6399             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6400             : static_assert(0 < 1, "There is no slot for us");
    6401             : static const JSJitInfo oncontextmenu_setterinfo = {
    6402             :   { (JSJitGetterOp)set_oncontextmenu },
    6403             :   { prototypes::id::Document },
    6404             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6405             :   JSJitInfo::Setter,
    6406             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6407             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6408             :   false,  /* isInfallible. False in setters. */
    6409             :   false,  /* isMovable.  Not relevant for setters. */
    6410             :   false, /* isEliminatable.  Not relevant for setters. */
    6411             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6412             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6413             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6414             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6415             : };
    6416             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6417             : static_assert(0 < 1, "There is no slot for us");
    6418             : 
    6419             : static bool
    6420           0 : get_ondblclick(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6421             : {
    6422           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndblclick());
    6423           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6424           0 :   if (result) {
    6425           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6426           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6427           0 :       return false;
    6428             :     }
    6429           0 :     return true;
    6430             :   } else {
    6431           0 :     args.rval().setNull();
    6432           0 :     return true;
    6433             :   }
    6434             : }
    6435             : 
    6436             : static bool
    6437           0 : set_ondblclick(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6438             : {
    6439           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6440           0 :   if (args[0].isObject()) {
    6441             :     { // scope for tempRoot
    6442           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6443           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6444             :     }
    6445             :   } else {
    6446           0 :     arg0 = nullptr;
    6447             :   }
    6448           0 :   self->SetOndblclick(Constify(arg0));
    6449           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6450             : 
    6451           0 :   return true;
    6452             : }
    6453             : 
    6454             : static const JSJitInfo ondblclick_getterinfo = {
    6455             :   { (JSJitGetterOp)get_ondblclick },
    6456             :   { prototypes::id::Document },
    6457             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6458             :   JSJitInfo::Getter,
    6459             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6460             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6461             :   false,  /* isInfallible. False in setters. */
    6462             :   false,  /* isMovable.  Not relevant for setters. */
    6463             :   false, /* isEliminatable.  Not relevant for setters. */
    6464             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6465             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6466             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6467             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6468             : };
    6469             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6470             : static_assert(0 < 1, "There is no slot for us");
    6471             : static const JSJitInfo ondblclick_setterinfo = {
    6472             :   { (JSJitGetterOp)set_ondblclick },
    6473             :   { prototypes::id::Document },
    6474             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6475             :   JSJitInfo::Setter,
    6476             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6477             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6478             :   false,  /* isInfallible. False in setters. */
    6479             :   false,  /* isMovable.  Not relevant for setters. */
    6480             :   false, /* isEliminatable.  Not relevant for setters. */
    6481             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6482             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6483             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6484             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6485             : };
    6486             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6487             : static_assert(0 < 1, "There is no slot for us");
    6488             : 
    6489             : static bool
    6490           0 : get_ondrag(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6491             : {
    6492           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndrag());
    6493           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6494           0 :   if (result) {
    6495           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6496           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6497           0 :       return false;
    6498             :     }
    6499           0 :     return true;
    6500             :   } else {
    6501           0 :     args.rval().setNull();
    6502           0 :     return true;
    6503             :   }
    6504             : }
    6505             : 
    6506             : static bool
    6507           0 : set_ondrag(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6508             : {
    6509           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6510           0 :   if (args[0].isObject()) {
    6511             :     { // scope for tempRoot
    6512           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6513           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6514             :     }
    6515             :   } else {
    6516           0 :     arg0 = nullptr;
    6517             :   }
    6518           0 :   self->SetOndrag(Constify(arg0));
    6519           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6520             : 
    6521           0 :   return true;
    6522             : }
    6523             : 
    6524             : static const JSJitInfo ondrag_getterinfo = {
    6525             :   { (JSJitGetterOp)get_ondrag },
    6526             :   { prototypes::id::Document },
    6527             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6528             :   JSJitInfo::Getter,
    6529             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6530             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6531             :   false,  /* isInfallible. False in setters. */
    6532             :   false,  /* isMovable.  Not relevant for setters. */
    6533             :   false, /* isEliminatable.  Not relevant for setters. */
    6534             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6535             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6536             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6537             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6538             : };
    6539             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6540             : static_assert(0 < 1, "There is no slot for us");
    6541             : static const JSJitInfo ondrag_setterinfo = {
    6542             :   { (JSJitGetterOp)set_ondrag },
    6543             :   { prototypes::id::Document },
    6544             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6545             :   JSJitInfo::Setter,
    6546             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6547             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6548             :   false,  /* isInfallible. False in setters. */
    6549             :   false,  /* isMovable.  Not relevant for setters. */
    6550             :   false, /* isEliminatable.  Not relevant for setters. */
    6551             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6552             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6553             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6554             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6555             : };
    6556             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6557             : static_assert(0 < 1, "There is no slot for us");
    6558             : 
    6559             : static bool
    6560           0 : get_ondragend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6561             : {
    6562           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragend());
    6563           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6564           0 :   if (result) {
    6565           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6566           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6567           0 :       return false;
    6568             :     }
    6569           0 :     return true;
    6570             :   } else {
    6571           0 :     args.rval().setNull();
    6572           0 :     return true;
    6573             :   }
    6574             : }
    6575             : 
    6576             : static bool
    6577           0 : set_ondragend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6578             : {
    6579           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6580           0 :   if (args[0].isObject()) {
    6581             :     { // scope for tempRoot
    6582           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6583           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6584             :     }
    6585             :   } else {
    6586           0 :     arg0 = nullptr;
    6587             :   }
    6588           0 :   self->SetOndragend(Constify(arg0));
    6589           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6590             : 
    6591           0 :   return true;
    6592             : }
    6593             : 
    6594             : static const JSJitInfo ondragend_getterinfo = {
    6595             :   { (JSJitGetterOp)get_ondragend },
    6596             :   { prototypes::id::Document },
    6597             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6598             :   JSJitInfo::Getter,
    6599             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6600             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6601             :   false,  /* isInfallible. False in setters. */
    6602             :   false,  /* isMovable.  Not relevant for setters. */
    6603             :   false, /* isEliminatable.  Not relevant for setters. */
    6604             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6605             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6606             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6607             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6608             : };
    6609             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6610             : static_assert(0 < 1, "There is no slot for us");
    6611             : static const JSJitInfo ondragend_setterinfo = {
    6612             :   { (JSJitGetterOp)set_ondragend },
    6613             :   { prototypes::id::Document },
    6614             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6615             :   JSJitInfo::Setter,
    6616             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6617             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6618             :   false,  /* isInfallible. False in setters. */
    6619             :   false,  /* isMovable.  Not relevant for setters. */
    6620             :   false, /* isEliminatable.  Not relevant for setters. */
    6621             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6622             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6623             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6624             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6625             : };
    6626             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6627             : static_assert(0 < 1, "There is no slot for us");
    6628             : 
    6629             : static bool
    6630           0 : get_ondragenter(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6631             : {
    6632           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragenter());
    6633           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6634           0 :   if (result) {
    6635           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6636           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6637           0 :       return false;
    6638             :     }
    6639           0 :     return true;
    6640             :   } else {
    6641           0 :     args.rval().setNull();
    6642           0 :     return true;
    6643             :   }
    6644             : }
    6645             : 
    6646             : static bool
    6647           0 : set_ondragenter(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6648             : {
    6649           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6650           0 :   if (args[0].isObject()) {
    6651             :     { // scope for tempRoot
    6652           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6653           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6654             :     }
    6655             :   } else {
    6656           0 :     arg0 = nullptr;
    6657             :   }
    6658           0 :   self->SetOndragenter(Constify(arg0));
    6659           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6660             : 
    6661           0 :   return true;
    6662             : }
    6663             : 
    6664             : static const JSJitInfo ondragenter_getterinfo = {
    6665             :   { (JSJitGetterOp)get_ondragenter },
    6666             :   { prototypes::id::Document },
    6667             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6668             :   JSJitInfo::Getter,
    6669             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6670             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6671             :   false,  /* isInfallible. False in setters. */
    6672             :   false,  /* isMovable.  Not relevant for setters. */
    6673             :   false, /* isEliminatable.  Not relevant for setters. */
    6674             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6675             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6676             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6677             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6678             : };
    6679             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6680             : static_assert(0 < 1, "There is no slot for us");
    6681             : static const JSJitInfo ondragenter_setterinfo = {
    6682             :   { (JSJitGetterOp)set_ondragenter },
    6683             :   { prototypes::id::Document },
    6684             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6685             :   JSJitInfo::Setter,
    6686             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6687             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6688             :   false,  /* isInfallible. False in setters. */
    6689             :   false,  /* isMovable.  Not relevant for setters. */
    6690             :   false, /* isEliminatable.  Not relevant for setters. */
    6691             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6692             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6693             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6694             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6695             : };
    6696             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6697             : static_assert(0 < 1, "There is no slot for us");
    6698             : 
    6699             : static bool
    6700           0 : get_ondragexit(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6701             : {
    6702           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragexit());
    6703           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6704           0 :   if (result) {
    6705           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6706           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6707           0 :       return false;
    6708             :     }
    6709           0 :     return true;
    6710             :   } else {
    6711           0 :     args.rval().setNull();
    6712           0 :     return true;
    6713             :   }
    6714             : }
    6715             : 
    6716             : static bool
    6717           0 : set_ondragexit(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6718             : {
    6719           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6720           0 :   if (args[0].isObject()) {
    6721             :     { // scope for tempRoot
    6722           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6723           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6724             :     }
    6725             :   } else {
    6726           0 :     arg0 = nullptr;
    6727             :   }
    6728           0 :   self->SetOndragexit(Constify(arg0));
    6729           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6730             : 
    6731           0 :   return true;
    6732             : }
    6733             : 
    6734             : static const JSJitInfo ondragexit_getterinfo = {
    6735             :   { (JSJitGetterOp)get_ondragexit },
    6736             :   { prototypes::id::Document },
    6737             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6738             :   JSJitInfo::Getter,
    6739             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6740             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6741             :   false,  /* isInfallible. False in setters. */
    6742             :   false,  /* isMovable.  Not relevant for setters. */
    6743             :   false, /* isEliminatable.  Not relevant for setters. */
    6744             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6745             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6746             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6747             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6748             : };
    6749             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6750             : static_assert(0 < 1, "There is no slot for us");
    6751             : static const JSJitInfo ondragexit_setterinfo = {
    6752             :   { (JSJitGetterOp)set_ondragexit },
    6753             :   { prototypes::id::Document },
    6754             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6755             :   JSJitInfo::Setter,
    6756             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6757             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6758             :   false,  /* isInfallible. False in setters. */
    6759             :   false,  /* isMovable.  Not relevant for setters. */
    6760             :   false, /* isEliminatable.  Not relevant for setters. */
    6761             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6762             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6763             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6764             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6765             : };
    6766             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6767             : static_assert(0 < 1, "There is no slot for us");
    6768             : 
    6769             : static bool
    6770           0 : get_ondragleave(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6771             : {
    6772           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragleave());
    6773           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6774           0 :   if (result) {
    6775           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6776           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6777           0 :       return false;
    6778             :     }
    6779           0 :     return true;
    6780             :   } else {
    6781           0 :     args.rval().setNull();
    6782           0 :     return true;
    6783             :   }
    6784             : }
    6785             : 
    6786             : static bool
    6787           0 : set_ondragleave(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6788             : {
    6789           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6790           0 :   if (args[0].isObject()) {
    6791             :     { // scope for tempRoot
    6792           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6793           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6794             :     }
    6795             :   } else {
    6796           0 :     arg0 = nullptr;
    6797             :   }
    6798           0 :   self->SetOndragleave(Constify(arg0));
    6799           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6800             : 
    6801           0 :   return true;
    6802             : }
    6803             : 
    6804             : static const JSJitInfo ondragleave_getterinfo = {
    6805             :   { (JSJitGetterOp)get_ondragleave },
    6806             :   { prototypes::id::Document },
    6807             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6808             :   JSJitInfo::Getter,
    6809             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6810             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6811             :   false,  /* isInfallible. False in setters. */
    6812             :   false,  /* isMovable.  Not relevant for setters. */
    6813             :   false, /* isEliminatable.  Not relevant for setters. */
    6814             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6815             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6816             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6817             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6818             : };
    6819             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6820             : static_assert(0 < 1, "There is no slot for us");
    6821             : static const JSJitInfo ondragleave_setterinfo = {
    6822             :   { (JSJitGetterOp)set_ondragleave },
    6823             :   { prototypes::id::Document },
    6824             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6825             :   JSJitInfo::Setter,
    6826             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6827             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6828             :   false,  /* isInfallible. False in setters. */
    6829             :   false,  /* isMovable.  Not relevant for setters. */
    6830             :   false, /* isEliminatable.  Not relevant for setters. */
    6831             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6832             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6833             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6834             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6835             : };
    6836             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6837             : static_assert(0 < 1, "There is no slot for us");
    6838             : 
    6839             : static bool
    6840           0 : get_ondragover(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6841             : {
    6842           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragover());
    6843           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6844           0 :   if (result) {
    6845           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6846           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6847           0 :       return false;
    6848             :     }
    6849           0 :     return true;
    6850             :   } else {
    6851           0 :     args.rval().setNull();
    6852           0 :     return true;
    6853             :   }
    6854             : }
    6855             : 
    6856             : static bool
    6857           0 : set_ondragover(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6858             : {
    6859           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6860           0 :   if (args[0].isObject()) {
    6861             :     { // scope for tempRoot
    6862           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6863           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6864             :     }
    6865             :   } else {
    6866           0 :     arg0 = nullptr;
    6867             :   }
    6868           0 :   self->SetOndragover(Constify(arg0));
    6869           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6870             : 
    6871           0 :   return true;
    6872             : }
    6873             : 
    6874             : static const JSJitInfo ondragover_getterinfo = {
    6875             :   { (JSJitGetterOp)get_ondragover },
    6876             :   { prototypes::id::Document },
    6877             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6878             :   JSJitInfo::Getter,
    6879             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6880             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6881             :   false,  /* isInfallible. False in setters. */
    6882             :   false,  /* isMovable.  Not relevant for setters. */
    6883             :   false, /* isEliminatable.  Not relevant for setters. */
    6884             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6885             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6886             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6887             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6888             : };
    6889             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6890             : static_assert(0 < 1, "There is no slot for us");
    6891             : static const JSJitInfo ondragover_setterinfo = {
    6892             :   { (JSJitGetterOp)set_ondragover },
    6893             :   { prototypes::id::Document },
    6894             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6895             :   JSJitInfo::Setter,
    6896             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6897             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6898             :   false,  /* isInfallible. False in setters. */
    6899             :   false,  /* isMovable.  Not relevant for setters. */
    6900             :   false, /* isEliminatable.  Not relevant for setters. */
    6901             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6902             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6903             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6904             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6905             : };
    6906             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6907             : static_assert(0 < 1, "There is no slot for us");
    6908             : 
    6909             : static bool
    6910           0 : get_ondragstart(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6911             : {
    6912           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragstart());
    6913           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6914           0 :   if (result) {
    6915           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6916           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6917           0 :       return false;
    6918             :     }
    6919           0 :     return true;
    6920             :   } else {
    6921           0 :     args.rval().setNull();
    6922           0 :     return true;
    6923             :   }
    6924             : }
    6925             : 
    6926             : static bool
    6927           0 : set_ondragstart(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6928             : {
    6929           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6930           0 :   if (args[0].isObject()) {
    6931             :     { // scope for tempRoot
    6932           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6933           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6934             :     }
    6935             :   } else {
    6936           0 :     arg0 = nullptr;
    6937             :   }
    6938           0 :   self->SetOndragstart(Constify(arg0));
    6939           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6940             : 
    6941           0 :   return true;
    6942             : }
    6943             : 
    6944             : static const JSJitInfo ondragstart_getterinfo = {
    6945             :   { (JSJitGetterOp)get_ondragstart },
    6946             :   { prototypes::id::Document },
    6947             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6948             :   JSJitInfo::Getter,
    6949             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6950             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6951             :   false,  /* isInfallible. False in setters. */
    6952             :   false,  /* isMovable.  Not relevant for setters. */
    6953             :   false, /* isEliminatable.  Not relevant for setters. */
    6954             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6955             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6956             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6957             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6958             : };
    6959             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6960             : static_assert(0 < 1, "There is no slot for us");
    6961             : static const JSJitInfo ondragstart_setterinfo = {
    6962             :   { (JSJitGetterOp)set_ondragstart },
    6963             :   { prototypes::id::Document },
    6964             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    6965             :   JSJitInfo::Setter,
    6966             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6967             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6968             :   false,  /* isInfallible. False in setters. */
    6969             :   false,  /* isMovable.  Not relevant for setters. */
    6970             :   false, /* isEliminatable.  Not relevant for setters. */
    6971             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6972             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6973             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6974             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6975             : };
    6976             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6977             : static_assert(0 < 1, "There is no slot for us");
    6978             : 
    6979             : static bool
    6980           0 : get_ondrop(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    6981             : {
    6982           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndrop());
    6983           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6984           0 :   if (result) {
    6985           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6986           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6987           0 :       return false;
    6988             :     }
    6989           0 :     return true;
    6990             :   } else {
    6991           0 :     args.rval().setNull();
    6992           0 :     return true;
    6993             :   }
    6994             : }
    6995             : 
    6996             : static bool
    6997           0 : set_ondrop(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    6998             : {
    6999           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7000           0 :   if (args[0].isObject()) {
    7001             :     { // scope for tempRoot
    7002           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7003           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7004             :     }
    7005             :   } else {
    7006           0 :     arg0 = nullptr;
    7007             :   }
    7008           0 :   self->SetOndrop(Constify(arg0));
    7009           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7010             : 
    7011           0 :   return true;
    7012             : }
    7013             : 
    7014             : static const JSJitInfo ondrop_getterinfo = {
    7015             :   { (JSJitGetterOp)get_ondrop },
    7016             :   { prototypes::id::Document },
    7017             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7018             :   JSJitInfo::Getter,
    7019             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7020             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7021             :   false,  /* isInfallible. False in setters. */
    7022             :   false,  /* isMovable.  Not relevant for setters. */
    7023             :   false, /* isEliminatable.  Not relevant for setters. */
    7024             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7025             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7026             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7027             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7028             : };
    7029             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7030             : static_assert(0 < 1, "There is no slot for us");
    7031             : static const JSJitInfo ondrop_setterinfo = {
    7032             :   { (JSJitGetterOp)set_ondrop },
    7033             :   { prototypes::id::Document },
    7034             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7035             :   JSJitInfo::Setter,
    7036             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7037             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7038             :   false,  /* isInfallible. False in setters. */
    7039             :   false,  /* isMovable.  Not relevant for setters. */
    7040             :   false, /* isEliminatable.  Not relevant for setters. */
    7041             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7042             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7043             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7044             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7045             : };
    7046             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7047             : static_assert(0 < 1, "There is no slot for us");
    7048             : 
    7049             : static bool
    7050           0 : get_ondurationchange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    7051             : {
    7052           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndurationchange());
    7053           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7054           0 :   if (result) {
    7055           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7056           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7057           0 :       return false;
    7058             :     }
    7059           0 :     return true;
    7060             :   } else {
    7061           0 :     args.rval().setNull();
    7062           0 :     return true;
    7063             :   }
    7064             : }
    7065             : 
    7066             : static bool
    7067           0 : set_ondurationchange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    7068             : {
    7069           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7070           0 :   if (args[0].isObject()) {
    7071             :     { // scope for tempRoot
    7072           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7073           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7074             :     }
    7075             :   } else {
    7076           0 :     arg0 = nullptr;
    7077             :   }
    7078           0 :   self->SetOndurationchange(Constify(arg0));
    7079           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7080             : 
    7081           0 :   return true;
    7082             : }
    7083             : 
    7084             : static const JSJitInfo ondurationchange_getterinfo = {
    7085             :   { (JSJitGetterOp)get_ondurationchange },
    7086             :   { prototypes::id::Document },
    7087             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7088             :   JSJitInfo::Getter,
    7089             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7090             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7091             :   false,  /* isInfallible. False in setters. */
    7092             :   false,  /* isMovable.  Not relevant for setters. */
    7093             :   false, /* isEliminatable.  Not relevant for setters. */
    7094             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7095             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7096             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7097             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7098             : };
    7099             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7100             : static_assert(0 < 1, "There is no slot for us");
    7101             : static const JSJitInfo ondurationchange_setterinfo = {
    7102             :   { (JSJitGetterOp)set_ondurationchange },
    7103             :   { prototypes::id::Document },
    7104             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7105             :   JSJitInfo::Setter,
    7106             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7107             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7108             :   false,  /* isInfallible. False in setters. */
    7109             :   false,  /* isMovable.  Not relevant for setters. */
    7110             :   false, /* isEliminatable.  Not relevant for setters. */
    7111             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7112             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7113             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7114             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7115             : };
    7116             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7117             : static_assert(0 < 1, "There is no slot for us");
    7118             : 
    7119             : static bool
    7120           0 : get_onemptied(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    7121             : {
    7122           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnemptied());
    7123           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7124           0 :   if (result) {
    7125           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7126           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7127           0 :       return false;
    7128             :     }
    7129           0 :     return true;
    7130             :   } else {
    7131           0 :     args.rval().setNull();
    7132           0 :     return true;
    7133             :   }
    7134             : }
    7135             : 
    7136             : static bool
    7137           0 : set_onemptied(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    7138             : {
    7139           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7140           0 :   if (args[0].isObject()) {
    7141             :     { // scope for tempRoot
    7142           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7143           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7144             :     }
    7145             :   } else {
    7146           0 :     arg0 = nullptr;
    7147             :   }
    7148           0 :   self->SetOnemptied(Constify(arg0));
    7149           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7150             : 
    7151           0 :   return true;
    7152             : }
    7153             : 
    7154             : static const JSJitInfo onemptied_getterinfo = {
    7155             :   { (JSJitGetterOp)get_onemptied },
    7156             :   { prototypes::id::Document },
    7157             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7158             :   JSJitInfo::Getter,
    7159             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7160             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7161             :   false,  /* isInfallible. False in setters. */
    7162             :   false,  /* isMovable.  Not relevant for setters. */
    7163             :   false, /* isEliminatable.  Not relevant for setters. */
    7164             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7165             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7166             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7167             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7168             : };
    7169             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7170             : static_assert(0 < 1, "There is no slot for us");
    7171             : static const JSJitInfo onemptied_setterinfo = {
    7172             :   { (JSJitGetterOp)set_onemptied },
    7173             :   { prototypes::id::Document },
    7174             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7175             :   JSJitInfo::Setter,
    7176             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7177             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7178             :   false,  /* isInfallible. False in setters. */
    7179             :   false,  /* isMovable.  Not relevant for setters. */
    7180             :   false, /* isEliminatable.  Not relevant for setters. */
    7181             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7182             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7183             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7184             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7185             : };
    7186             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7187             : static_assert(0 < 1, "There is no slot for us");
    7188             : 
    7189             : static bool
    7190           0 : get_onended(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    7191             : {
    7192           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnended());
    7193           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7194           0 :   if (result) {
    7195           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7196           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7197           0 :       return false;
    7198             :     }
    7199           0 :     return true;
    7200             :   } else {
    7201           0 :     args.rval().setNull();
    7202           0 :     return true;
    7203             :   }
    7204             : }
    7205             : 
    7206             : static bool
    7207           0 : set_onended(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    7208             : {
    7209           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7210           0 :   if (args[0].isObject()) {
    7211             :     { // scope for tempRoot
    7212           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7213           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7214             :     }
    7215             :   } else {
    7216           0 :     arg0 = nullptr;
    7217             :   }
    7218           0 :   self->SetOnended(Constify(arg0));
    7219           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7220             : 
    7221           0 :   return true;
    7222             : }
    7223             : 
    7224             : static const JSJitInfo onended_getterinfo = {
    7225             :   { (JSJitGetterOp)get_onended },
    7226             :   { prototypes::id::Document },
    7227             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7228             :   JSJitInfo::Getter,
    7229             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7230             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7231             :   false,  /* isInfallible. False in setters. */
    7232             :   false,  /* isMovable.  Not relevant for setters. */
    7233             :   false, /* isEliminatable.  Not relevant for setters. */
    7234             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7235             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7236             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7237             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7238             : };
    7239             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7240             : static_assert(0 < 1, "There is no slot for us");
    7241             : static const JSJitInfo onended_setterinfo = {
    7242             :   { (JSJitGetterOp)set_onended },
    7243             :   { prototypes::id::Document },
    7244             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7245             :   JSJitInfo::Setter,
    7246             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7247             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7248             :   false,  /* isInfallible. False in setters. */
    7249             :   false,  /* isMovable.  Not relevant for setters. */
    7250             :   false, /* isEliminatable.  Not relevant for setters. */
    7251             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7252             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7253             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7254             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7255             : };
    7256             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7257             : static_assert(0 < 1, "There is no slot for us");
    7258             : 
    7259             : static bool
    7260           0 : get_oninput(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    7261             : {
    7262           0 :   RefPtr<EventHandlerNonNull> result(self->GetOninput());
    7263           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7264           0 :   if (result) {
    7265           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7266           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7267           0 :       return false;
    7268             :     }
    7269           0 :     return true;
    7270             :   } else {
    7271           0 :     args.rval().setNull();
    7272           0 :     return true;
    7273             :   }
    7274             : }
    7275             : 
    7276             : static bool
    7277           0 : set_oninput(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    7278             : {
    7279           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7280           0 :   if (args[0].isObject()) {
    7281             :     { // scope for tempRoot
    7282           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7283           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7284             :     }
    7285             :   } else {
    7286           0 :     arg0 = nullptr;
    7287             :   }
    7288           0 :   self->SetOninput(Constify(arg0));
    7289           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7290             : 
    7291           0 :   return true;
    7292             : }
    7293             : 
    7294             : static const JSJitInfo oninput_getterinfo = {
    7295             :   { (JSJitGetterOp)get_oninput },
    7296             :   { prototypes::id::Document },
    7297             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7298             :   JSJitInfo::Getter,
    7299             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7300             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7301             :   false,  /* isInfallible. False in setters. */
    7302             :   false,  /* isMovable.  Not relevant for setters. */
    7303             :   false, /* isEliminatable.  Not relevant for setters. */
    7304             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7305             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7306             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7307             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7308             : };
    7309             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7310             : static_assert(0 < 1, "There is no slot for us");
    7311             : static const JSJitInfo oninput_setterinfo = {
    7312             :   { (JSJitGetterOp)set_oninput },
    7313             :   { prototypes::id::Document },
    7314             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7315             :   JSJitInfo::Setter,
    7316             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7317             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7318             :   false,  /* isInfallible. False in setters. */
    7319             :   false,  /* isMovable.  Not relevant for setters. */
    7320             :   false, /* isEliminatable.  Not relevant for setters. */
    7321             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7322             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7323             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7324             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7325             : };
    7326             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7327             : static_assert(0 < 1, "There is no slot for us");
    7328             : 
    7329             : static bool
    7330           0 : get_oninvalid(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    7331             : {
    7332           0 :   RefPtr<EventHandlerNonNull> result(self->GetOninvalid());
    7333           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7334           0 :   if (result) {
    7335           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7336           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7337           0 :       return false;
    7338             :     }
    7339           0 :     return true;
    7340             :   } else {
    7341           0 :     args.rval().setNull();
    7342           0 :     return true;
    7343             :   }
    7344             : }
    7345             : 
    7346             : static bool
    7347           0 : set_oninvalid(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    7348             : {
    7349           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7350           0 :   if (args[0].isObject()) {
    7351             :     { // scope for tempRoot
    7352           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7353           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7354             :     }
    7355             :   } else {
    7356           0 :     arg0 = nullptr;
    7357             :   }
    7358           0 :   self->SetOninvalid(Constify(arg0));
    7359           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7360             : 
    7361           0 :   return true;
    7362             : }
    7363             : 
    7364             : static const JSJitInfo oninvalid_getterinfo = {
    7365             :   { (JSJitGetterOp)get_oninvalid },
    7366             :   { prototypes::id::Document },
    7367             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7368             :   JSJitInfo::Getter,
    7369             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7370             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7371             :   false,  /* isInfallible. False in setters. */
    7372             :   false,  /* isMovable.  Not relevant for setters. */
    7373             :   false, /* isEliminatable.  Not relevant for setters. */
    7374             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7375             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7376             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7377             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7378             : };
    7379             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7380             : static_assert(0 < 1, "There is no slot for us");
    7381             : static const JSJitInfo oninvalid_setterinfo = {
    7382             :   { (JSJitGetterOp)set_oninvalid },
    7383             :   { prototypes::id::Document },
    7384             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7385             :   JSJitInfo::Setter,
    7386             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7387             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7388             :   false,  /* isInfallible. False in setters. */
    7389             :   false,  /* isMovable.  Not relevant for setters. */
    7390             :   false, /* isEliminatable.  Not relevant for setters. */
    7391             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7392             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7393             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7394             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7395             : };
    7396             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7397             : static_assert(0 < 1, "There is no slot for us");
    7398             : 
    7399             : static bool
    7400           0 : get_onkeydown(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    7401             : {
    7402           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnkeydown());
    7403           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7404           0 :   if (result) {
    7405           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7406           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7407           0 :       return false;
    7408             :     }
    7409           0 :     return true;
    7410             :   } else {
    7411           0 :     args.rval().setNull();
    7412           0 :     return true;
    7413             :   }
    7414             : }
    7415             : 
    7416             : static bool
    7417           0 : set_onkeydown(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    7418             : {
    7419           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7420           0 :   if (args[0].isObject()) {
    7421             :     { // scope for tempRoot
    7422           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7423           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7424             :     }
    7425             :   } else {
    7426           0 :     arg0 = nullptr;
    7427             :   }
    7428           0 :   self->SetOnkeydown(Constify(arg0));
    7429           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7430             : 
    7431           0 :   return true;
    7432             : }
    7433             : 
    7434             : static const JSJitInfo onkeydown_getterinfo = {
    7435             :   { (JSJitGetterOp)get_onkeydown },
    7436             :   { prototypes::id::Document },
    7437             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7438             :   JSJitInfo::Getter,
    7439             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7440             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7441             :   false,  /* isInfallible. False in setters. */
    7442             :   false,  /* isMovable.  Not relevant for setters. */
    7443             :   false, /* isEliminatable.  Not relevant for setters. */
    7444             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7445             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7446             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7447             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7448             : };
    7449             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7450             : static_assert(0 < 1, "There is no slot for us");
    7451             : static const JSJitInfo onkeydown_setterinfo = {
    7452             :   { (JSJitGetterOp)set_onkeydown },
    7453             :   { prototypes::id::Document },
    7454             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7455             :   JSJitInfo::Setter,
    7456             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7457             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7458             :   false,  /* isInfallible. False in setters. */
    7459             :   false,  /* isMovable.  Not relevant for setters. */
    7460             :   false, /* isEliminatable.  Not relevant for setters. */
    7461             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7462             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7463             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7464             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7465             : };
    7466             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7467             : static_assert(0 < 1, "There is no slot for us");
    7468             : 
    7469             : static bool
    7470           0 : get_onkeypress(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    7471             : {
    7472           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnkeypress());
    7473           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7474           0 :   if (result) {
    7475           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7476           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7477           0 :       return false;
    7478             :     }
    7479           0 :     return true;
    7480             :   } else {
    7481           0 :     args.rval().setNull();
    7482           0 :     return true;
    7483             :   }
    7484             : }
    7485             : 
    7486             : static bool
    7487           0 : set_onkeypress(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    7488             : {
    7489           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7490           0 :   if (args[0].isObject()) {
    7491             :     { // scope for tempRoot
    7492           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7493           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7494             :     }
    7495             :   } else {
    7496           0 :     arg0 = nullptr;
    7497             :   }
    7498           0 :   self->SetOnkeypress(Constify(arg0));
    7499           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7500             : 
    7501           0 :   return true;
    7502             : }
    7503             : 
    7504             : static const JSJitInfo onkeypress_getterinfo = {
    7505             :   { (JSJitGetterOp)get_onkeypress },
    7506             :   { prototypes::id::Document },
    7507             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7508             :   JSJitInfo::Getter,
    7509             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7510             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7511             :   false,  /* isInfallible. False in setters. */
    7512             :   false,  /* isMovable.  Not relevant for setters. */
    7513             :   false, /* isEliminatable.  Not relevant for setters. */
    7514             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7515             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7516             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7517             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7518             : };
    7519             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7520             : static_assert(0 < 1, "There is no slot for us");
    7521             : static const JSJitInfo onkeypress_setterinfo = {
    7522             :   { (JSJitGetterOp)set_onkeypress },
    7523             :   { prototypes::id::Document },
    7524             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7525             :   JSJitInfo::Setter,
    7526             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7527             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7528             :   false,  /* isInfallible. False in setters. */
    7529             :   false,  /* isMovable.  Not relevant for setters. */
    7530             :   false, /* isEliminatable.  Not relevant for setters. */
    7531             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7532             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7533             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7534             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7535             : };
    7536             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7537             : static_assert(0 < 1, "There is no slot for us");
    7538             : 
    7539             : static bool
    7540           0 : get_onkeyup(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    7541             : {
    7542           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnkeyup());
    7543           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7544           0 :   if (result) {
    7545           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7546           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7547           0 :       return false;
    7548             :     }
    7549           0 :     return true;
    7550             :   } else {
    7551           0 :     args.rval().setNull();
    7552           0 :     return true;
    7553             :   }
    7554             : }
    7555             : 
    7556             : static bool
    7557           0 : set_onkeyup(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    7558             : {
    7559           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7560           0 :   if (args[0].isObject()) {
    7561             :     { // scope for tempRoot
    7562           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7563           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7564             :     }
    7565             :   } else {
    7566           0 :     arg0 = nullptr;
    7567             :   }
    7568           0 :   self->SetOnkeyup(Constify(arg0));
    7569           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7570             : 
    7571           0 :   return true;
    7572             : }
    7573             : 
    7574             : static const JSJitInfo onkeyup_getterinfo = {
    7575             :   { (JSJitGetterOp)get_onkeyup },
    7576             :   { prototypes::id::Document },
    7577             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7578             :   JSJitInfo::Getter,
    7579             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7580             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7581             :   false,  /* isInfallible. False in setters. */
    7582             :   false,  /* isMovable.  Not relevant for setters. */
    7583             :   false, /* isEliminatable.  Not relevant for setters. */
    7584             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7585             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7586             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7587             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7588             : };
    7589             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7590             : static_assert(0 < 1, "There is no slot for us");
    7591             : static const JSJitInfo onkeyup_setterinfo = {
    7592             :   { (JSJitGetterOp)set_onkeyup },
    7593             :   { prototypes::id::Document },
    7594             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7595             :   JSJitInfo::Setter,
    7596             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7597             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7598             :   false,  /* isInfallible. False in setters. */
    7599             :   false,  /* isMovable.  Not relevant for setters. */
    7600             :   false, /* isEliminatable.  Not relevant for setters. */
    7601             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7602             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7603             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7604             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7605             : };
    7606             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7607             : static_assert(0 < 1, "There is no slot for us");
    7608             : 
    7609             : static bool
    7610           0 : get_onload(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    7611             : {
    7612           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnload());
    7613           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7614           0 :   if (result) {
    7615           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7616           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7617           0 :       return false;
    7618             :     }
    7619           0 :     return true;
    7620             :   } else {
    7621           0 :     args.rval().setNull();
    7622           0 :     return true;
    7623             :   }
    7624             : }
    7625             : 
    7626             : static bool
    7627           0 : set_onload(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    7628             : {
    7629           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7630           0 :   if (args[0].isObject()) {
    7631             :     { // scope for tempRoot
    7632           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7633           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7634             :     }
    7635             :   } else {
    7636           0 :     arg0 = nullptr;
    7637             :   }
    7638           0 :   self->SetOnload(Constify(arg0));
    7639           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7640             : 
    7641           0 :   return true;
    7642             : }
    7643             : 
    7644             : static const JSJitInfo onload_getterinfo = {
    7645             :   { (JSJitGetterOp)get_onload },
    7646             :   { prototypes::id::Document },
    7647             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7648             :   JSJitInfo::Getter,
    7649             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7650             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7651             :   false,  /* isInfallible. False in setters. */
    7652             :   false,  /* isMovable.  Not relevant for setters. */
    7653             :   false, /* isEliminatable.  Not relevant for setters. */
    7654             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7655             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7656             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7657             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7658             : };
    7659             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7660             : static_assert(0 < 1, "There is no slot for us");
    7661             : static const JSJitInfo onload_setterinfo = {
    7662             :   { (JSJitGetterOp)set_onload },
    7663             :   { prototypes::id::Document },
    7664             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7665             :   JSJitInfo::Setter,
    7666             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7667             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7668             :   false,  /* isInfallible. False in setters. */
    7669             :   false,  /* isMovable.  Not relevant for setters. */
    7670             :   false, /* isEliminatable.  Not relevant for setters. */
    7671             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7672             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7673             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7674             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7675             : };
    7676             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7677             : static_assert(0 < 1, "There is no slot for us");
    7678             : 
    7679             : static bool
    7680           0 : get_onloadeddata(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    7681             : {
    7682           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadeddata());
    7683           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7684           0 :   if (result) {
    7685           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7686           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7687           0 :       return false;
    7688             :     }
    7689           0 :     return true;
    7690             :   } else {
    7691           0 :     args.rval().setNull();
    7692           0 :     return true;
    7693             :   }
    7694             : }
    7695             : 
    7696             : static bool
    7697           0 : set_onloadeddata(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    7698             : {
    7699           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7700           0 :   if (args[0].isObject()) {
    7701             :     { // scope for tempRoot
    7702           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7703           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7704             :     }
    7705             :   } else {
    7706           0 :     arg0 = nullptr;
    7707             :   }
    7708           0 :   self->SetOnloadeddata(Constify(arg0));
    7709           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7710             : 
    7711           0 :   return true;
    7712             : }
    7713             : 
    7714             : static const JSJitInfo onloadeddata_getterinfo = {
    7715             :   { (JSJitGetterOp)get_onloadeddata },
    7716             :   { prototypes::id::Document },
    7717             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7718             :   JSJitInfo::Getter,
    7719             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7720             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7721             :   false,  /* isInfallible. False in setters. */
    7722             :   false,  /* isMovable.  Not relevant for setters. */
    7723             :   false, /* isEliminatable.  Not relevant for setters. */
    7724             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7725             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7726             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7727             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7728             : };
    7729             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7730             : static_assert(0 < 1, "There is no slot for us");
    7731             : static const JSJitInfo onloadeddata_setterinfo = {
    7732             :   { (JSJitGetterOp)set_onloadeddata },
    7733             :   { prototypes::id::Document },
    7734             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7735             :   JSJitInfo::Setter,
    7736             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7737             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7738             :   false,  /* isInfallible. False in setters. */
    7739             :   false,  /* isMovable.  Not relevant for setters. */
    7740             :   false, /* isEliminatable.  Not relevant for setters. */
    7741             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7742             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7743             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7744             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7745             : };
    7746             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7747             : static_assert(0 < 1, "There is no slot for us");
    7748             : 
    7749             : static bool
    7750           0 : get_onloadedmetadata(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    7751             : {
    7752           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadedmetadata());
    7753           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7754           0 :   if (result) {
    7755           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7756           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7757           0 :       return false;
    7758             :     }
    7759           0 :     return true;
    7760             :   } else {
    7761           0 :     args.rval().setNull();
    7762           0 :     return true;
    7763             :   }
    7764             : }
    7765             : 
    7766             : static bool
    7767           0 : set_onloadedmetadata(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    7768             : {
    7769           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7770           0 :   if (args[0].isObject()) {
    7771             :     { // scope for tempRoot
    7772           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7773           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7774             :     }
    7775             :   } else {
    7776           0 :     arg0 = nullptr;
    7777             :   }
    7778           0 :   self->SetOnloadedmetadata(Constify(arg0));
    7779           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7780             : 
    7781           0 :   return true;
    7782             : }
    7783             : 
    7784             : static const JSJitInfo onloadedmetadata_getterinfo = {
    7785             :   { (JSJitGetterOp)get_onloadedmetadata },
    7786             :   { prototypes::id::Document },
    7787             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7788             :   JSJitInfo::Getter,
    7789             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7790             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7791             :   false,  /* isInfallible. False in setters. */
    7792             :   false,  /* isMovable.  Not relevant for setters. */
    7793             :   false, /* isEliminatable.  Not relevant for setters. */
    7794             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7795             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7796             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7797             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7798             : };
    7799             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7800             : static_assert(0 < 1, "There is no slot for us");
    7801             : static const JSJitInfo onloadedmetadata_setterinfo = {
    7802             :   { (JSJitGetterOp)set_onloadedmetadata },
    7803             :   { prototypes::id::Document },
    7804             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7805             :   JSJitInfo::Setter,
    7806             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7807             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7808             :   false,  /* isInfallible. False in setters. */
    7809             :   false,  /* isMovable.  Not relevant for setters. */
    7810             :   false, /* isEliminatable.  Not relevant for setters. */
    7811             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7812             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7813             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7814             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7815             : };
    7816             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7817             : static_assert(0 < 1, "There is no slot for us");
    7818             : 
    7819             : static bool
    7820           0 : get_onloadend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    7821             : {
    7822           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadend());
    7823           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7824           0 :   if (result) {
    7825           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7826           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7827           0 :       return false;
    7828             :     }
    7829           0 :     return true;
    7830             :   } else {
    7831           0 :     args.rval().setNull();
    7832           0 :     return true;
    7833             :   }
    7834             : }
    7835             : 
    7836             : static bool
    7837           0 : set_onloadend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    7838             : {
    7839           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7840           0 :   if (args[0].isObject()) {
    7841             :     { // scope for tempRoot
    7842           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7843           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7844             :     }
    7845             :   } else {
    7846           0 :     arg0 = nullptr;
    7847             :   }
    7848           0 :   self->SetOnloadend(Constify(arg0));
    7849           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7850             : 
    7851           0 :   return true;
    7852             : }
    7853             : 
    7854             : static const JSJitInfo onloadend_getterinfo = {
    7855             :   { (JSJitGetterOp)get_onloadend },
    7856             :   { prototypes::id::Document },
    7857             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7858             :   JSJitInfo::Getter,
    7859             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7860             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7861             :   false,  /* isInfallible. False in setters. */
    7862             :   false,  /* isMovable.  Not relevant for setters. */
    7863             :   false, /* isEliminatable.  Not relevant for setters. */
    7864             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7865             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7866             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7867             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7868             : };
    7869             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7870             : static_assert(0 < 1, "There is no slot for us");
    7871             : static const JSJitInfo onloadend_setterinfo = {
    7872             :   { (JSJitGetterOp)set_onloadend },
    7873             :   { prototypes::id::Document },
    7874             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7875             :   JSJitInfo::Setter,
    7876             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7877             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7878             :   false,  /* isInfallible. False in setters. */
    7879             :   false,  /* isMovable.  Not relevant for setters. */
    7880             :   false, /* isEliminatable.  Not relevant for setters. */
    7881             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7882             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7883             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7884             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7885             : };
    7886             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7887             : static_assert(0 < 1, "There is no slot for us");
    7888             : 
    7889             : static bool
    7890           0 : get_onloadstart(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    7891             : {
    7892           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadstart());
    7893           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7894           0 :   if (result) {
    7895           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7896           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7897           0 :       return false;
    7898             :     }
    7899           0 :     return true;
    7900             :   } else {
    7901           0 :     args.rval().setNull();
    7902           0 :     return true;
    7903             :   }
    7904             : }
    7905             : 
    7906             : static bool
    7907           0 : set_onloadstart(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    7908             : {
    7909           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7910           0 :   if (args[0].isObject()) {
    7911             :     { // scope for tempRoot
    7912           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7913           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7914             :     }
    7915             :   } else {
    7916           0 :     arg0 = nullptr;
    7917             :   }
    7918           0 :   self->SetOnloadstart(Constify(arg0));
    7919           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7920             : 
    7921           0 :   return true;
    7922             : }
    7923             : 
    7924             : static const JSJitInfo onloadstart_getterinfo = {
    7925             :   { (JSJitGetterOp)get_onloadstart },
    7926             :   { prototypes::id::Document },
    7927             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7928             :   JSJitInfo::Getter,
    7929             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7930             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7931             :   false,  /* isInfallible. False in setters. */
    7932             :   false,  /* isMovable.  Not relevant for setters. */
    7933             :   false, /* isEliminatable.  Not relevant for setters. */
    7934             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7935             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7936             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7937             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7938             : };
    7939             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7940             : static_assert(0 < 1, "There is no slot for us");
    7941             : static const JSJitInfo onloadstart_setterinfo = {
    7942             :   { (JSJitGetterOp)set_onloadstart },
    7943             :   { prototypes::id::Document },
    7944             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7945             :   JSJitInfo::Setter,
    7946             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7947             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7948             :   false,  /* isInfallible. False in setters. */
    7949             :   false,  /* isMovable.  Not relevant for setters. */
    7950             :   false, /* isEliminatable.  Not relevant for setters. */
    7951             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7952             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7953             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7954             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7955             : };
    7956             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7957             : static_assert(0 < 1, "There is no slot for us");
    7958             : 
    7959             : static bool
    7960           0 : get_onmousedown(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    7961             : {
    7962           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmousedown());
    7963           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7964           0 :   if (result) {
    7965           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7966           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7967           0 :       return false;
    7968             :     }
    7969           0 :     return true;
    7970             :   } else {
    7971           0 :     args.rval().setNull();
    7972           0 :     return true;
    7973             :   }
    7974             : }
    7975             : 
    7976             : static bool
    7977           0 : set_onmousedown(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    7978             : {
    7979           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7980           0 :   if (args[0].isObject()) {
    7981             :     { // scope for tempRoot
    7982           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7983           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7984             :     }
    7985             :   } else {
    7986           0 :     arg0 = nullptr;
    7987             :   }
    7988           0 :   self->SetOnmousedown(Constify(arg0));
    7989           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7990             : 
    7991           0 :   return true;
    7992             : }
    7993             : 
    7994             : static const JSJitInfo onmousedown_getterinfo = {
    7995             :   { (JSJitGetterOp)get_onmousedown },
    7996             :   { prototypes::id::Document },
    7997             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    7998             :   JSJitInfo::Getter,
    7999             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8000             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8001             :   false,  /* isInfallible. False in setters. */
    8002             :   false,  /* isMovable.  Not relevant for setters. */
    8003             :   false, /* isEliminatable.  Not relevant for setters. */
    8004             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8005             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8006             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8007             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8008             : };
    8009             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8010             : static_assert(0 < 1, "There is no slot for us");
    8011             : static const JSJitInfo onmousedown_setterinfo = {
    8012             :   { (JSJitGetterOp)set_onmousedown },
    8013             :   { prototypes::id::Document },
    8014             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8015             :   JSJitInfo::Setter,
    8016             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8017             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8018             :   false,  /* isInfallible. False in setters. */
    8019             :   false,  /* isMovable.  Not relevant for setters. */
    8020             :   false, /* isEliminatable.  Not relevant for setters. */
    8021             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8022             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8023             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8024             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8025             : };
    8026             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8027             : static_assert(0 < 1, "There is no slot for us");
    8028             : 
    8029             : static bool
    8030           0 : get_onmouseenter(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    8031             : {
    8032           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseenter());
    8033           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8034           0 :   if (result) {
    8035           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8036           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8037           0 :       return false;
    8038             :     }
    8039           0 :     return true;
    8040             :   } else {
    8041           0 :     args.rval().setNull();
    8042           0 :     return true;
    8043             :   }
    8044             : }
    8045             : 
    8046             : static bool
    8047           0 : set_onmouseenter(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    8048             : {
    8049           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8050           0 :   if (args[0].isObject()) {
    8051             :     { // scope for tempRoot
    8052           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8053           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8054             :     }
    8055             :   } else {
    8056           0 :     arg0 = nullptr;
    8057             :   }
    8058           0 :   self->SetOnmouseenter(Constify(arg0));
    8059           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8060             : 
    8061           0 :   return true;
    8062             : }
    8063             : 
    8064             : static const JSJitInfo onmouseenter_getterinfo = {
    8065             :   { (JSJitGetterOp)get_onmouseenter },
    8066             :   { prototypes::id::Document },
    8067             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8068             :   JSJitInfo::Getter,
    8069             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8070             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8071             :   false,  /* isInfallible. False in setters. */
    8072             :   false,  /* isMovable.  Not relevant for setters. */
    8073             :   false, /* isEliminatable.  Not relevant for setters. */
    8074             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8075             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8076             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8077             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8078             : };
    8079             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8080             : static_assert(0 < 1, "There is no slot for us");
    8081             : static const JSJitInfo onmouseenter_setterinfo = {
    8082             :   { (JSJitGetterOp)set_onmouseenter },
    8083             :   { prototypes::id::Document },
    8084             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8085             :   JSJitInfo::Setter,
    8086             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8087             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8088             :   false,  /* isInfallible. False in setters. */
    8089             :   false,  /* isMovable.  Not relevant for setters. */
    8090             :   false, /* isEliminatable.  Not relevant for setters. */
    8091             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8092             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8093             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8094             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8095             : };
    8096             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8097             : static_assert(0 < 1, "There is no slot for us");
    8098             : 
    8099             : static bool
    8100           0 : get_onmouseleave(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    8101             : {
    8102           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseleave());
    8103           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8104           0 :   if (result) {
    8105           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8106           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8107           0 :       return false;
    8108             :     }
    8109           0 :     return true;
    8110             :   } else {
    8111           0 :     args.rval().setNull();
    8112           0 :     return true;
    8113             :   }
    8114             : }
    8115             : 
    8116             : static bool
    8117           0 : set_onmouseleave(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    8118             : {
    8119           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8120           0 :   if (args[0].isObject()) {
    8121             :     { // scope for tempRoot
    8122           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8123           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8124             :     }
    8125             :   } else {
    8126           0 :     arg0 = nullptr;
    8127             :   }
    8128           0 :   self->SetOnmouseleave(Constify(arg0));
    8129           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8130             : 
    8131           0 :   return true;
    8132             : }
    8133             : 
    8134             : static const JSJitInfo onmouseleave_getterinfo = {
    8135             :   { (JSJitGetterOp)get_onmouseleave },
    8136             :   { prototypes::id::Document },
    8137             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8138             :   JSJitInfo::Getter,
    8139             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8140             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8141             :   false,  /* isInfallible. False in setters. */
    8142             :   false,  /* isMovable.  Not relevant for setters. */
    8143             :   false, /* isEliminatable.  Not relevant for setters. */
    8144             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8145             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8146             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8147             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8148             : };
    8149             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8150             : static_assert(0 < 1, "There is no slot for us");
    8151             : static const JSJitInfo onmouseleave_setterinfo = {
    8152             :   { (JSJitGetterOp)set_onmouseleave },
    8153             :   { prototypes::id::Document },
    8154             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8155             :   JSJitInfo::Setter,
    8156             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8157             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8158             :   false,  /* isInfallible. False in setters. */
    8159             :   false,  /* isMovable.  Not relevant for setters. */
    8160             :   false, /* isEliminatable.  Not relevant for setters. */
    8161             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8162             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8163             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8164             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8165             : };
    8166             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8167             : static_assert(0 < 1, "There is no slot for us");
    8168             : 
    8169             : static bool
    8170           0 : get_onmousemove(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    8171             : {
    8172           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmousemove());
    8173           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8174           0 :   if (result) {
    8175           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8176           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8177           0 :       return false;
    8178             :     }
    8179           0 :     return true;
    8180             :   } else {
    8181           0 :     args.rval().setNull();
    8182           0 :     return true;
    8183             :   }
    8184             : }
    8185             : 
    8186             : static bool
    8187           0 : set_onmousemove(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    8188             : {
    8189           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8190           0 :   if (args[0].isObject()) {
    8191             :     { // scope for tempRoot
    8192           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8193           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8194             :     }
    8195             :   } else {
    8196           0 :     arg0 = nullptr;
    8197             :   }
    8198           0 :   self->SetOnmousemove(Constify(arg0));
    8199           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8200             : 
    8201           0 :   return true;
    8202             : }
    8203             : 
    8204             : static const JSJitInfo onmousemove_getterinfo = {
    8205             :   { (JSJitGetterOp)get_onmousemove },
    8206             :   { prototypes::id::Document },
    8207             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8208             :   JSJitInfo::Getter,
    8209             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8210             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8211             :   false,  /* isInfallible. False in setters. */
    8212             :   false,  /* isMovable.  Not relevant for setters. */
    8213             :   false, /* isEliminatable.  Not relevant for setters. */
    8214             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8215             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8216             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8217             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8218             : };
    8219             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8220             : static_assert(0 < 1, "There is no slot for us");
    8221             : static const JSJitInfo onmousemove_setterinfo = {
    8222             :   { (JSJitGetterOp)set_onmousemove },
    8223             :   { prototypes::id::Document },
    8224             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8225             :   JSJitInfo::Setter,
    8226             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8227             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8228             :   false,  /* isInfallible. False in setters. */
    8229             :   false,  /* isMovable.  Not relevant for setters. */
    8230             :   false, /* isEliminatable.  Not relevant for setters. */
    8231             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8232             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8233             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8234             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8235             : };
    8236             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8237             : static_assert(0 < 1, "There is no slot for us");
    8238             : 
    8239             : static bool
    8240           0 : get_onmouseout(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    8241             : {
    8242           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseout());
    8243           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8244           0 :   if (result) {
    8245           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8246           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8247           0 :       return false;
    8248             :     }
    8249           0 :     return true;
    8250             :   } else {
    8251           0 :     args.rval().setNull();
    8252           0 :     return true;
    8253             :   }
    8254             : }
    8255             : 
    8256             : static bool
    8257           0 : set_onmouseout(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    8258             : {
    8259           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8260           0 :   if (args[0].isObject()) {
    8261             :     { // scope for tempRoot
    8262           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8263           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8264             :     }
    8265             :   } else {
    8266           0 :     arg0 = nullptr;
    8267             :   }
    8268           0 :   self->SetOnmouseout(Constify(arg0));
    8269           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8270             : 
    8271           0 :   return true;
    8272             : }
    8273             : 
    8274             : static const JSJitInfo onmouseout_getterinfo = {
    8275             :   { (JSJitGetterOp)get_onmouseout },
    8276             :   { prototypes::id::Document },
    8277             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8278             :   JSJitInfo::Getter,
    8279             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8280             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8281             :   false,  /* isInfallible. False in setters. */
    8282             :   false,  /* isMovable.  Not relevant for setters. */
    8283             :   false, /* isEliminatable.  Not relevant for setters. */
    8284             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8285             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8286             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8287             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8288             : };
    8289             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8290             : static_assert(0 < 1, "There is no slot for us");
    8291             : static const JSJitInfo onmouseout_setterinfo = {
    8292             :   { (JSJitGetterOp)set_onmouseout },
    8293             :   { prototypes::id::Document },
    8294             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8295             :   JSJitInfo::Setter,
    8296             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8297             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8298             :   false,  /* isInfallible. False in setters. */
    8299             :   false,  /* isMovable.  Not relevant for setters. */
    8300             :   false, /* isEliminatable.  Not relevant for setters. */
    8301             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8302             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8303             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8304             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8305             : };
    8306             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8307             : static_assert(0 < 1, "There is no slot for us");
    8308             : 
    8309             : static bool
    8310           0 : get_onmouseover(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    8311             : {
    8312           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseover());
    8313           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8314           0 :   if (result) {
    8315           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8316           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8317           0 :       return false;
    8318             :     }
    8319           0 :     return true;
    8320             :   } else {
    8321           0 :     args.rval().setNull();
    8322           0 :     return true;
    8323             :   }
    8324             : }
    8325             : 
    8326             : static bool
    8327           0 : set_onmouseover(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    8328             : {
    8329           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8330           0 :   if (args[0].isObject()) {
    8331             :     { // scope for tempRoot
    8332           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8333           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8334             :     }
    8335             :   } else {
    8336           0 :     arg0 = nullptr;
    8337             :   }
    8338           0 :   self->SetOnmouseover(Constify(arg0));
    8339           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8340             : 
    8341           0 :   return true;
    8342             : }
    8343             : 
    8344             : static const JSJitInfo onmouseover_getterinfo = {
    8345             :   { (JSJitGetterOp)get_onmouseover },
    8346             :   { prototypes::id::Document },
    8347             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8348             :   JSJitInfo::Getter,
    8349             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8350             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8351             :   false,  /* isInfallible. False in setters. */
    8352             :   false,  /* isMovable.  Not relevant for setters. */
    8353             :   false, /* isEliminatable.  Not relevant for setters. */
    8354             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8355             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8356             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8357             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8358             : };
    8359             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8360             : static_assert(0 < 1, "There is no slot for us");
    8361             : static const JSJitInfo onmouseover_setterinfo = {
    8362             :   { (JSJitGetterOp)set_onmouseover },
    8363             :   { prototypes::id::Document },
    8364             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8365             :   JSJitInfo::Setter,
    8366             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8367             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8368             :   false,  /* isInfallible. False in setters. */
    8369             :   false,  /* isMovable.  Not relevant for setters. */
    8370             :   false, /* isEliminatable.  Not relevant for setters. */
    8371             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8372             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8373             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8374             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8375             : };
    8376             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8377             : static_assert(0 < 1, "There is no slot for us");
    8378             : 
    8379             : static bool
    8380           0 : get_onmouseup(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    8381             : {
    8382           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseup());
    8383           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8384           0 :   if (result) {
    8385           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8386           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8387           0 :       return false;
    8388             :     }
    8389           0 :     return true;
    8390             :   } else {
    8391           0 :     args.rval().setNull();
    8392           0 :     return true;
    8393             :   }
    8394             : }
    8395             : 
    8396             : static bool
    8397           0 : set_onmouseup(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    8398             : {
    8399           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8400           0 :   if (args[0].isObject()) {
    8401             :     { // scope for tempRoot
    8402           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8403           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8404             :     }
    8405             :   } else {
    8406           0 :     arg0 = nullptr;
    8407             :   }
    8408           0 :   self->SetOnmouseup(Constify(arg0));
    8409           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8410             : 
    8411           0 :   return true;
    8412             : }
    8413             : 
    8414             : static const JSJitInfo onmouseup_getterinfo = {
    8415             :   { (JSJitGetterOp)get_onmouseup },
    8416             :   { prototypes::id::Document },
    8417             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8418             :   JSJitInfo::Getter,
    8419             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8420             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8421             :   false,  /* isInfallible. False in setters. */
    8422             :   false,  /* isMovable.  Not relevant for setters. */
    8423             :   false, /* isEliminatable.  Not relevant for setters. */
    8424             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8425             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8426             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8427             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8428             : };
    8429             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8430             : static_assert(0 < 1, "There is no slot for us");
    8431             : static const JSJitInfo onmouseup_setterinfo = {
    8432             :   { (JSJitGetterOp)set_onmouseup },
    8433             :   { prototypes::id::Document },
    8434             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8435             :   JSJitInfo::Setter,
    8436             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8437             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8438             :   false,  /* isInfallible. False in setters. */
    8439             :   false,  /* isMovable.  Not relevant for setters. */
    8440             :   false, /* isEliminatable.  Not relevant for setters. */
    8441             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8442             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8443             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8444             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8445             : };
    8446             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8447             : static_assert(0 < 1, "There is no slot for us");
    8448             : 
    8449             : static bool
    8450           0 : get_onwheel(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    8451             : {
    8452           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwheel());
    8453           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8454           0 :   if (result) {
    8455           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8456           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8457           0 :       return false;
    8458             :     }
    8459           0 :     return true;
    8460             :   } else {
    8461           0 :     args.rval().setNull();
    8462           0 :     return true;
    8463             :   }
    8464             : }
    8465             : 
    8466             : static bool
    8467           0 : set_onwheel(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    8468             : {
    8469           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8470           0 :   if (args[0].isObject()) {
    8471             :     { // scope for tempRoot
    8472           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8473           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8474             :     }
    8475             :   } else {
    8476           0 :     arg0 = nullptr;
    8477             :   }
    8478           0 :   self->SetOnwheel(Constify(arg0));
    8479           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8480             : 
    8481           0 :   return true;
    8482             : }
    8483             : 
    8484             : static const JSJitInfo onwheel_getterinfo = {
    8485             :   { (JSJitGetterOp)get_onwheel },
    8486             :   { prototypes::id::Document },
    8487             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8488             :   JSJitInfo::Getter,
    8489             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8490             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8491             :   false,  /* isInfallible. False in setters. */
    8492             :   false,  /* isMovable.  Not relevant for setters. */
    8493             :   false, /* isEliminatable.  Not relevant for setters. */
    8494             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8495             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8496             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8497             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8498             : };
    8499             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8500             : static_assert(0 < 1, "There is no slot for us");
    8501             : static const JSJitInfo onwheel_setterinfo = {
    8502             :   { (JSJitGetterOp)set_onwheel },
    8503             :   { prototypes::id::Document },
    8504             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8505             :   JSJitInfo::Setter,
    8506             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8507             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8508             :   false,  /* isInfallible. False in setters. */
    8509             :   false,  /* isMovable.  Not relevant for setters. */
    8510             :   false, /* isEliminatable.  Not relevant for setters. */
    8511             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8512             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8513             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8514             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8515             : };
    8516             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8517             : static_assert(0 < 1, "There is no slot for us");
    8518             : 
    8519             : static bool
    8520           0 : get_onpause(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    8521             : {
    8522           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpause());
    8523           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8524           0 :   if (result) {
    8525           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8526           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8527           0 :       return false;
    8528             :     }
    8529           0 :     return true;
    8530             :   } else {
    8531           0 :     args.rval().setNull();
    8532           0 :     return true;
    8533             :   }
    8534             : }
    8535             : 
    8536             : static bool
    8537           0 : set_onpause(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    8538             : {
    8539           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8540           0 :   if (args[0].isObject()) {
    8541             :     { // scope for tempRoot
    8542           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8543           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8544             :     }
    8545             :   } else {
    8546           0 :     arg0 = nullptr;
    8547             :   }
    8548           0 :   self->SetOnpause(Constify(arg0));
    8549           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8550             : 
    8551           0 :   return true;
    8552             : }
    8553             : 
    8554             : static const JSJitInfo onpause_getterinfo = {
    8555             :   { (JSJitGetterOp)get_onpause },
    8556             :   { prototypes::id::Document },
    8557             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8558             :   JSJitInfo::Getter,
    8559             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8560             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8561             :   false,  /* isInfallible. False in setters. */
    8562             :   false,  /* isMovable.  Not relevant for setters. */
    8563             :   false, /* isEliminatable.  Not relevant for setters. */
    8564             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8565             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8566             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8567             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8568             : };
    8569             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8570             : static_assert(0 < 1, "There is no slot for us");
    8571             : static const JSJitInfo onpause_setterinfo = {
    8572             :   { (JSJitGetterOp)set_onpause },
    8573             :   { prototypes::id::Document },
    8574             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8575             :   JSJitInfo::Setter,
    8576             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8577             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8578             :   false,  /* isInfallible. False in setters. */
    8579             :   false,  /* isMovable.  Not relevant for setters. */
    8580             :   false, /* isEliminatable.  Not relevant for setters. */
    8581             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8582             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8583             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8584             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8585             : };
    8586             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8587             : static_assert(0 < 1, "There is no slot for us");
    8588             : 
    8589             : static bool
    8590           0 : get_onplay(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    8591             : {
    8592           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnplay());
    8593           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8594           0 :   if (result) {
    8595           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8596           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8597           0 :       return false;
    8598             :     }
    8599           0 :     return true;
    8600             :   } else {
    8601           0 :     args.rval().setNull();
    8602           0 :     return true;
    8603             :   }
    8604             : }
    8605             : 
    8606             : static bool
    8607           0 : set_onplay(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    8608             : {
    8609           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8610           0 :   if (args[0].isObject()) {
    8611             :     { // scope for tempRoot
    8612           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8613           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8614             :     }
    8615             :   } else {
    8616           0 :     arg0 = nullptr;
    8617             :   }
    8618           0 :   self->SetOnplay(Constify(arg0));
    8619           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8620             : 
    8621           0 :   return true;
    8622             : }
    8623             : 
    8624             : static const JSJitInfo onplay_getterinfo = {
    8625             :   { (JSJitGetterOp)get_onplay },
    8626             :   { prototypes::id::Document },
    8627             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8628             :   JSJitInfo::Getter,
    8629             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8630             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8631             :   false,  /* isInfallible. False in setters. */
    8632             :   false,  /* isMovable.  Not relevant for setters. */
    8633             :   false, /* isEliminatable.  Not relevant for setters. */
    8634             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8635             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8636             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8637             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8638             : };
    8639             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8640             : static_assert(0 < 1, "There is no slot for us");
    8641             : static const JSJitInfo onplay_setterinfo = {
    8642             :   { (JSJitGetterOp)set_onplay },
    8643             :   { prototypes::id::Document },
    8644             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8645             :   JSJitInfo::Setter,
    8646             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8647             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8648             :   false,  /* isInfallible. False in setters. */
    8649             :   false,  /* isMovable.  Not relevant for setters. */
    8650             :   false, /* isEliminatable.  Not relevant for setters. */
    8651             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8652             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8653             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8654             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8655             : };
    8656             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8657             : static_assert(0 < 1, "There is no slot for us");
    8658             : 
    8659             : static bool
    8660           0 : get_onplaying(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    8661             : {
    8662           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnplaying());
    8663           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8664           0 :   if (result) {
    8665           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8666           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8667           0 :       return false;
    8668             :     }
    8669           0 :     return true;
    8670             :   } else {
    8671           0 :     args.rval().setNull();
    8672           0 :     return true;
    8673             :   }
    8674             : }
    8675             : 
    8676             : static bool
    8677           0 : set_onplaying(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    8678             : {
    8679           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8680           0 :   if (args[0].isObject()) {
    8681             :     { // scope for tempRoot
    8682           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8683           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8684             :     }
    8685             :   } else {
    8686           0 :     arg0 = nullptr;
    8687             :   }
    8688           0 :   self->SetOnplaying(Constify(arg0));
    8689           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8690             : 
    8691           0 :   return true;
    8692             : }
    8693             : 
    8694             : static const JSJitInfo onplaying_getterinfo = {
    8695             :   { (JSJitGetterOp)get_onplaying },
    8696             :   { prototypes::id::Document },
    8697             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8698             :   JSJitInfo::Getter,
    8699             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8700             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8701             :   false,  /* isInfallible. False in setters. */
    8702             :   false,  /* isMovable.  Not relevant for setters. */
    8703             :   false, /* isEliminatable.  Not relevant for setters. */
    8704             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8705             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8706             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8707             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8708             : };
    8709             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8710             : static_assert(0 < 1, "There is no slot for us");
    8711             : static const JSJitInfo onplaying_setterinfo = {
    8712             :   { (JSJitGetterOp)set_onplaying },
    8713             :   { prototypes::id::Document },
    8714             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8715             :   JSJitInfo::Setter,
    8716             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8717             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8718             :   false,  /* isInfallible. False in setters. */
    8719             :   false,  /* isMovable.  Not relevant for setters. */
    8720             :   false, /* isEliminatable.  Not relevant for setters. */
    8721             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8722             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8723             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8724             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8725             : };
    8726             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8727             : static_assert(0 < 1, "There is no slot for us");
    8728             : 
    8729             : static bool
    8730           0 : get_onprogress(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    8731             : {
    8732           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnprogress());
    8733           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8734           0 :   if (result) {
    8735           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8736           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8737           0 :       return false;
    8738             :     }
    8739           0 :     return true;
    8740             :   } else {
    8741           0 :     args.rval().setNull();
    8742           0 :     return true;
    8743             :   }
    8744             : }
    8745             : 
    8746             : static bool
    8747           0 : set_onprogress(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    8748             : {
    8749           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8750           0 :   if (args[0].isObject()) {
    8751             :     { // scope for tempRoot
    8752           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8753           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8754             :     }
    8755             :   } else {
    8756           0 :     arg0 = nullptr;
    8757             :   }
    8758           0 :   self->SetOnprogress(Constify(arg0));
    8759           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8760             : 
    8761           0 :   return true;
    8762             : }
    8763             : 
    8764             : static const JSJitInfo onprogress_getterinfo = {
    8765             :   { (JSJitGetterOp)get_onprogress },
    8766             :   { prototypes::id::Document },
    8767             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8768             :   JSJitInfo::Getter,
    8769             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8770             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8771             :   false,  /* isInfallible. False in setters. */
    8772             :   false,  /* isMovable.  Not relevant for setters. */
    8773             :   false, /* isEliminatable.  Not relevant for setters. */
    8774             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8775             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8776             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8777             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8778             : };
    8779             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8780             : static_assert(0 < 1, "There is no slot for us");
    8781             : static const JSJitInfo onprogress_setterinfo = {
    8782             :   { (JSJitGetterOp)set_onprogress },
    8783             :   { prototypes::id::Document },
    8784             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8785             :   JSJitInfo::Setter,
    8786             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8787             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8788             :   false,  /* isInfallible. False in setters. */
    8789             :   false,  /* isMovable.  Not relevant for setters. */
    8790             :   false, /* isEliminatable.  Not relevant for setters. */
    8791             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8792             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8793             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8794             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8795             : };
    8796             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8797             : static_assert(0 < 1, "There is no slot for us");
    8798             : 
    8799             : static bool
    8800           0 : get_onratechange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    8801             : {
    8802           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnratechange());
    8803           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8804           0 :   if (result) {
    8805           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8806           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8807           0 :       return false;
    8808             :     }
    8809           0 :     return true;
    8810             :   } else {
    8811           0 :     args.rval().setNull();
    8812           0 :     return true;
    8813             :   }
    8814             : }
    8815             : 
    8816             : static bool
    8817           0 : set_onratechange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    8818             : {
    8819           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8820           0 :   if (args[0].isObject()) {
    8821             :     { // scope for tempRoot
    8822           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8823           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8824             :     }
    8825             :   } else {
    8826           0 :     arg0 = nullptr;
    8827             :   }
    8828           0 :   self->SetOnratechange(Constify(arg0));
    8829           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8830             : 
    8831           0 :   return true;
    8832             : }
    8833             : 
    8834             : static const JSJitInfo onratechange_getterinfo = {
    8835             :   { (JSJitGetterOp)get_onratechange },
    8836             :   { prototypes::id::Document },
    8837             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8838             :   JSJitInfo::Getter,
    8839             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8840             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8841             :   false,  /* isInfallible. False in setters. */
    8842             :   false,  /* isMovable.  Not relevant for setters. */
    8843             :   false, /* isEliminatable.  Not relevant for setters. */
    8844             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8845             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8846             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8847             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8848             : };
    8849             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8850             : static_assert(0 < 1, "There is no slot for us");
    8851             : static const JSJitInfo onratechange_setterinfo = {
    8852             :   { (JSJitGetterOp)set_onratechange },
    8853             :   { prototypes::id::Document },
    8854             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8855             :   JSJitInfo::Setter,
    8856             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8857             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8858             :   false,  /* isInfallible. False in setters. */
    8859             :   false,  /* isMovable.  Not relevant for setters. */
    8860             :   false, /* isEliminatable.  Not relevant for setters. */
    8861             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8862             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8863             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8864             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8865             : };
    8866             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8867             : static_assert(0 < 1, "There is no slot for us");
    8868             : 
    8869             : static bool
    8870           0 : get_onreset(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    8871             : {
    8872           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnreset());
    8873           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8874           0 :   if (result) {
    8875           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8876           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8877           0 :       return false;
    8878             :     }
    8879           0 :     return true;
    8880             :   } else {
    8881           0 :     args.rval().setNull();
    8882           0 :     return true;
    8883             :   }
    8884             : }
    8885             : 
    8886             : static bool
    8887           0 : set_onreset(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    8888             : {
    8889           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8890           0 :   if (args[0].isObject()) {
    8891             :     { // scope for tempRoot
    8892           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8893           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8894             :     }
    8895             :   } else {
    8896           0 :     arg0 = nullptr;
    8897             :   }
    8898           0 :   self->SetOnreset(Constify(arg0));
    8899           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8900             : 
    8901           0 :   return true;
    8902             : }
    8903             : 
    8904             : static const JSJitInfo onreset_getterinfo = {
    8905             :   { (JSJitGetterOp)get_onreset },
    8906             :   { prototypes::id::Document },
    8907             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8908             :   JSJitInfo::Getter,
    8909             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8910             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8911             :   false,  /* isInfallible. False in setters. */
    8912             :   false,  /* isMovable.  Not relevant for setters. */
    8913             :   false, /* isEliminatable.  Not relevant for setters. */
    8914             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8915             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8916             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8917             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8918             : };
    8919             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8920             : static_assert(0 < 1, "There is no slot for us");
    8921             : static const JSJitInfo onreset_setterinfo = {
    8922             :   { (JSJitGetterOp)set_onreset },
    8923             :   { prototypes::id::Document },
    8924             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8925             :   JSJitInfo::Setter,
    8926             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8927             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8928             :   false,  /* isInfallible. False in setters. */
    8929             :   false,  /* isMovable.  Not relevant for setters. */
    8930             :   false, /* isEliminatable.  Not relevant for setters. */
    8931             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8932             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8933             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8934             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8935             : };
    8936             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8937             : static_assert(0 < 1, "There is no slot for us");
    8938             : 
    8939             : static bool
    8940           0 : get_onresize(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    8941             : {
    8942           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnresize());
    8943           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8944           0 :   if (result) {
    8945           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8946           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8947           0 :       return false;
    8948             :     }
    8949           0 :     return true;
    8950             :   } else {
    8951           0 :     args.rval().setNull();
    8952           0 :     return true;
    8953             :   }
    8954             : }
    8955             : 
    8956             : static bool
    8957           0 : set_onresize(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    8958             : {
    8959           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8960           0 :   if (args[0].isObject()) {
    8961             :     { // scope for tempRoot
    8962           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8963           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8964             :     }
    8965             :   } else {
    8966           0 :     arg0 = nullptr;
    8967             :   }
    8968           0 :   self->SetOnresize(Constify(arg0));
    8969           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8970             : 
    8971           0 :   return true;
    8972             : }
    8973             : 
    8974             : static const JSJitInfo onresize_getterinfo = {
    8975             :   { (JSJitGetterOp)get_onresize },
    8976             :   { prototypes::id::Document },
    8977             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8978             :   JSJitInfo::Getter,
    8979             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8980             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8981             :   false,  /* isInfallible. False in setters. */
    8982             :   false,  /* isMovable.  Not relevant for setters. */
    8983             :   false, /* isEliminatable.  Not relevant for setters. */
    8984             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8985             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8986             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8987             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8988             : };
    8989             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8990             : static_assert(0 < 1, "There is no slot for us");
    8991             : static const JSJitInfo onresize_setterinfo = {
    8992             :   { (JSJitGetterOp)set_onresize },
    8993             :   { prototypes::id::Document },
    8994             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    8995             :   JSJitInfo::Setter,
    8996             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8997             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8998             :   false,  /* isInfallible. False in setters. */
    8999             :   false,  /* isMovable.  Not relevant for setters. */
    9000             :   false, /* isEliminatable.  Not relevant for setters. */
    9001             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9002             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9003             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9004             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9005             : };
    9006             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9007             : static_assert(0 < 1, "There is no slot for us");
    9008             : 
    9009             : static bool
    9010           0 : get_onscroll(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9011             : {
    9012           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnscroll());
    9013           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9014           0 :   if (result) {
    9015           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9016           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9017           0 :       return false;
    9018             :     }
    9019           0 :     return true;
    9020             :   } else {
    9021           0 :     args.rval().setNull();
    9022           0 :     return true;
    9023             :   }
    9024             : }
    9025             : 
    9026             : static bool
    9027           0 : set_onscroll(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    9028             : {
    9029           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9030           0 :   if (args[0].isObject()) {
    9031             :     { // scope for tempRoot
    9032           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9033           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9034             :     }
    9035             :   } else {
    9036           0 :     arg0 = nullptr;
    9037             :   }
    9038           0 :   self->SetOnscroll(Constify(arg0));
    9039           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9040             : 
    9041           0 :   return true;
    9042             : }
    9043             : 
    9044             : static const JSJitInfo onscroll_getterinfo = {
    9045             :   { (JSJitGetterOp)get_onscroll },
    9046             :   { prototypes::id::Document },
    9047             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9048             :   JSJitInfo::Getter,
    9049             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9050             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9051             :   false,  /* isInfallible. False in setters. */
    9052             :   false,  /* isMovable.  Not relevant for setters. */
    9053             :   false, /* isEliminatable.  Not relevant for setters. */
    9054             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9055             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9056             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9057             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9058             : };
    9059             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9060             : static_assert(0 < 1, "There is no slot for us");
    9061             : static const JSJitInfo onscroll_setterinfo = {
    9062             :   { (JSJitGetterOp)set_onscroll },
    9063             :   { prototypes::id::Document },
    9064             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9065             :   JSJitInfo::Setter,
    9066             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9067             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9068             :   false,  /* isInfallible. False in setters. */
    9069             :   false,  /* isMovable.  Not relevant for setters. */
    9070             :   false, /* isEliminatable.  Not relevant for setters. */
    9071             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9072             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9073             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9074             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9075             : };
    9076             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9077             : static_assert(0 < 1, "There is no slot for us");
    9078             : 
    9079             : static bool
    9080           0 : get_onseeked(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9081             : {
    9082           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnseeked());
    9083           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9084           0 :   if (result) {
    9085           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9086           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9087           0 :       return false;
    9088             :     }
    9089           0 :     return true;
    9090             :   } else {
    9091           0 :     args.rval().setNull();
    9092           0 :     return true;
    9093             :   }
    9094             : }
    9095             : 
    9096             : static bool
    9097           0 : set_onseeked(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    9098             : {
    9099           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9100           0 :   if (args[0].isObject()) {
    9101             :     { // scope for tempRoot
    9102           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9103           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9104             :     }
    9105             :   } else {
    9106           0 :     arg0 = nullptr;
    9107             :   }
    9108           0 :   self->SetOnseeked(Constify(arg0));
    9109           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9110             : 
    9111           0 :   return true;
    9112             : }
    9113             : 
    9114             : static const JSJitInfo onseeked_getterinfo = {
    9115             :   { (JSJitGetterOp)get_onseeked },
    9116             :   { prototypes::id::Document },
    9117             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9118             :   JSJitInfo::Getter,
    9119             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9120             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9121             :   false,  /* isInfallible. False in setters. */
    9122             :   false,  /* isMovable.  Not relevant for setters. */
    9123             :   false, /* isEliminatable.  Not relevant for setters. */
    9124             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9125             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9126             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9127             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9128             : };
    9129             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9130             : static_assert(0 < 1, "There is no slot for us");
    9131             : static const JSJitInfo onseeked_setterinfo = {
    9132             :   { (JSJitGetterOp)set_onseeked },
    9133             :   { prototypes::id::Document },
    9134             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9135             :   JSJitInfo::Setter,
    9136             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9137             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9138             :   false,  /* isInfallible. False in setters. */
    9139             :   false,  /* isMovable.  Not relevant for setters. */
    9140             :   false, /* isEliminatable.  Not relevant for setters. */
    9141             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9142             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9143             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9144             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9145             : };
    9146             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9147             : static_assert(0 < 1, "There is no slot for us");
    9148             : 
    9149             : static bool
    9150           0 : get_onseeking(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9151             : {
    9152           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnseeking());
    9153           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9154           0 :   if (result) {
    9155           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9156           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9157           0 :       return false;
    9158             :     }
    9159           0 :     return true;
    9160             :   } else {
    9161           0 :     args.rval().setNull();
    9162           0 :     return true;
    9163             :   }
    9164             : }
    9165             : 
    9166             : static bool
    9167           0 : set_onseeking(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    9168             : {
    9169           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9170           0 :   if (args[0].isObject()) {
    9171             :     { // scope for tempRoot
    9172           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9173           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9174             :     }
    9175             :   } else {
    9176           0 :     arg0 = nullptr;
    9177             :   }
    9178           0 :   self->SetOnseeking(Constify(arg0));
    9179           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9180             : 
    9181           0 :   return true;
    9182             : }
    9183             : 
    9184             : static const JSJitInfo onseeking_getterinfo = {
    9185             :   { (JSJitGetterOp)get_onseeking },
    9186             :   { prototypes::id::Document },
    9187             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9188             :   JSJitInfo::Getter,
    9189             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9190             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9191             :   false,  /* isInfallible. False in setters. */
    9192             :   false,  /* isMovable.  Not relevant for setters. */
    9193             :   false, /* isEliminatable.  Not relevant for setters. */
    9194             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9195             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9196             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9197             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9198             : };
    9199             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9200             : static_assert(0 < 1, "There is no slot for us");
    9201             : static const JSJitInfo onseeking_setterinfo = {
    9202             :   { (JSJitGetterOp)set_onseeking },
    9203             :   { prototypes::id::Document },
    9204             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9205             :   JSJitInfo::Setter,
    9206             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9207             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9208             :   false,  /* isInfallible. False in setters. */
    9209             :   false,  /* isMovable.  Not relevant for setters. */
    9210             :   false, /* isEliminatable.  Not relevant for setters. */
    9211             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9212             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9213             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9214             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9215             : };
    9216             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9217             : static_assert(0 < 1, "There is no slot for us");
    9218             : 
    9219             : static bool
    9220           0 : get_onselect(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9221             : {
    9222           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnselect());
    9223           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9224           0 :   if (result) {
    9225           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9226           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9227           0 :       return false;
    9228             :     }
    9229           0 :     return true;
    9230             :   } else {
    9231           0 :     args.rval().setNull();
    9232           0 :     return true;
    9233             :   }
    9234             : }
    9235             : 
    9236             : static bool
    9237           0 : set_onselect(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    9238             : {
    9239           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9240           0 :   if (args[0].isObject()) {
    9241             :     { // scope for tempRoot
    9242           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9243           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9244             :     }
    9245             :   } else {
    9246           0 :     arg0 = nullptr;
    9247             :   }
    9248           0 :   self->SetOnselect(Constify(arg0));
    9249           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9250             : 
    9251           0 :   return true;
    9252             : }
    9253             : 
    9254             : static const JSJitInfo onselect_getterinfo = {
    9255             :   { (JSJitGetterOp)get_onselect },
    9256             :   { prototypes::id::Document },
    9257             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9258             :   JSJitInfo::Getter,
    9259             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9260             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9261             :   false,  /* isInfallible. False in setters. */
    9262             :   false,  /* isMovable.  Not relevant for setters. */
    9263             :   false, /* isEliminatable.  Not relevant for setters. */
    9264             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9265             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9266             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9267             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9268             : };
    9269             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9270             : static_assert(0 < 1, "There is no slot for us");
    9271             : static const JSJitInfo onselect_setterinfo = {
    9272             :   { (JSJitGetterOp)set_onselect },
    9273             :   { prototypes::id::Document },
    9274             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9275             :   JSJitInfo::Setter,
    9276             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9277             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9278             :   false,  /* isInfallible. False in setters. */
    9279             :   false,  /* isMovable.  Not relevant for setters. */
    9280             :   false, /* isEliminatable.  Not relevant for setters. */
    9281             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9282             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9283             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9284             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9285             : };
    9286             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9287             : static_assert(0 < 1, "There is no slot for us");
    9288             : 
    9289             : static bool
    9290           0 : get_onshow(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9291             : {
    9292           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnshow());
    9293           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9294           0 :   if (result) {
    9295           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9296           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9297           0 :       return false;
    9298             :     }
    9299           0 :     return true;
    9300             :   } else {
    9301           0 :     args.rval().setNull();
    9302           0 :     return true;
    9303             :   }
    9304             : }
    9305             : 
    9306             : static bool
    9307           0 : set_onshow(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    9308             : {
    9309           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9310           0 :   if (args[0].isObject()) {
    9311             :     { // scope for tempRoot
    9312           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9313           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9314             :     }
    9315             :   } else {
    9316           0 :     arg0 = nullptr;
    9317             :   }
    9318           0 :   self->SetOnshow(Constify(arg0));
    9319           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9320             : 
    9321           0 :   return true;
    9322             : }
    9323             : 
    9324             : static const JSJitInfo onshow_getterinfo = {
    9325             :   { (JSJitGetterOp)get_onshow },
    9326             :   { prototypes::id::Document },
    9327             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9328             :   JSJitInfo::Getter,
    9329             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9330             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9331             :   false,  /* isInfallible. False in setters. */
    9332             :   false,  /* isMovable.  Not relevant for setters. */
    9333             :   false, /* isEliminatable.  Not relevant for setters. */
    9334             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9335             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9336             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9337             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9338             : };
    9339             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9340             : static_assert(0 < 1, "There is no slot for us");
    9341             : static const JSJitInfo onshow_setterinfo = {
    9342             :   { (JSJitGetterOp)set_onshow },
    9343             :   { prototypes::id::Document },
    9344             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9345             :   JSJitInfo::Setter,
    9346             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9347             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9348             :   false,  /* isInfallible. False in setters. */
    9349             :   false,  /* isMovable.  Not relevant for setters. */
    9350             :   false, /* isEliminatable.  Not relevant for setters. */
    9351             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9352             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9353             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9354             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9355             : };
    9356             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9357             : static_assert(0 < 1, "There is no slot for us");
    9358             : 
    9359             : static bool
    9360           0 : get_onstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9361             : {
    9362           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnstalled());
    9363           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9364           0 :   if (result) {
    9365           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9366           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9367           0 :       return false;
    9368             :     }
    9369           0 :     return true;
    9370             :   } else {
    9371           0 :     args.rval().setNull();
    9372           0 :     return true;
    9373             :   }
    9374             : }
    9375             : 
    9376             : static bool
    9377           0 : set_onstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    9378             : {
    9379           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9380           0 :   if (args[0].isObject()) {
    9381             :     { // scope for tempRoot
    9382           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9383           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9384             :     }
    9385             :   } else {
    9386           0 :     arg0 = nullptr;
    9387             :   }
    9388           0 :   self->SetOnstalled(Constify(arg0));
    9389           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9390             : 
    9391           0 :   return true;
    9392             : }
    9393             : 
    9394             : static const JSJitInfo onstalled_getterinfo = {
    9395             :   { (JSJitGetterOp)get_onstalled },
    9396             :   { prototypes::id::Document },
    9397             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9398             :   JSJitInfo::Getter,
    9399             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9400             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9401             :   false,  /* isInfallible. False in setters. */
    9402             :   false,  /* isMovable.  Not relevant for setters. */
    9403             :   false, /* isEliminatable.  Not relevant for setters. */
    9404             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9405             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9406             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9407             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9408             : };
    9409             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9410             : static_assert(0 < 1, "There is no slot for us");
    9411             : static const JSJitInfo onstalled_setterinfo = {
    9412             :   { (JSJitGetterOp)set_onstalled },
    9413             :   { prototypes::id::Document },
    9414             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9415             :   JSJitInfo::Setter,
    9416             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9417             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9418             :   false,  /* isInfallible. False in setters. */
    9419             :   false,  /* isMovable.  Not relevant for setters. */
    9420             :   false, /* isEliminatable.  Not relevant for setters. */
    9421             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9422             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9423             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9424             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9425             : };
    9426             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9427             : static_assert(0 < 1, "There is no slot for us");
    9428             : 
    9429             : static bool
    9430           0 : get_onsubmit(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9431             : {
    9432           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnsubmit());
    9433           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9434           0 :   if (result) {
    9435           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9436           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9437           0 :       return false;
    9438             :     }
    9439           0 :     return true;
    9440             :   } else {
    9441           0 :     args.rval().setNull();
    9442           0 :     return true;
    9443             :   }
    9444             : }
    9445             : 
    9446             : static bool
    9447           0 : set_onsubmit(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    9448             : {
    9449           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9450           0 :   if (args[0].isObject()) {
    9451             :     { // scope for tempRoot
    9452           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9453           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9454             :     }
    9455             :   } else {
    9456           0 :     arg0 = nullptr;
    9457             :   }
    9458           0 :   self->SetOnsubmit(Constify(arg0));
    9459           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9460             : 
    9461           0 :   return true;
    9462             : }
    9463             : 
    9464             : static const JSJitInfo onsubmit_getterinfo = {
    9465             :   { (JSJitGetterOp)get_onsubmit },
    9466             :   { prototypes::id::Document },
    9467             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9468             :   JSJitInfo::Getter,
    9469             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9470             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9471             :   false,  /* isInfallible. False in setters. */
    9472             :   false,  /* isMovable.  Not relevant for setters. */
    9473             :   false, /* isEliminatable.  Not relevant for setters. */
    9474             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9475             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9476             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9477             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9478             : };
    9479             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9480             : static_assert(0 < 1, "There is no slot for us");
    9481             : static const JSJitInfo onsubmit_setterinfo = {
    9482             :   { (JSJitGetterOp)set_onsubmit },
    9483             :   { prototypes::id::Document },
    9484             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9485             :   JSJitInfo::Setter,
    9486             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9487             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9488             :   false,  /* isInfallible. False in setters. */
    9489             :   false,  /* isMovable.  Not relevant for setters. */
    9490             :   false, /* isEliminatable.  Not relevant for setters. */
    9491             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9492             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9493             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9494             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9495             : };
    9496             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9497             : static_assert(0 < 1, "There is no slot for us");
    9498             : 
    9499             : static bool
    9500           0 : get_onsuspend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9501             : {
    9502           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnsuspend());
    9503           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9504           0 :   if (result) {
    9505           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9506           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9507           0 :       return false;
    9508             :     }
    9509           0 :     return true;
    9510             :   } else {
    9511           0 :     args.rval().setNull();
    9512           0 :     return true;
    9513             :   }
    9514             : }
    9515             : 
    9516             : static bool
    9517           0 : set_onsuspend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    9518             : {
    9519           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9520           0 :   if (args[0].isObject()) {
    9521             :     { // scope for tempRoot
    9522           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9523           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9524             :     }
    9525             :   } else {
    9526           0 :     arg0 = nullptr;
    9527             :   }
    9528           0 :   self->SetOnsuspend(Constify(arg0));
    9529           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9530             : 
    9531           0 :   return true;
    9532             : }
    9533             : 
    9534             : static const JSJitInfo onsuspend_getterinfo = {
    9535             :   { (JSJitGetterOp)get_onsuspend },
    9536             :   { prototypes::id::Document },
    9537             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9538             :   JSJitInfo::Getter,
    9539             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9540             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9541             :   false,  /* isInfallible. False in setters. */
    9542             :   false,  /* isMovable.  Not relevant for setters. */
    9543             :   false, /* isEliminatable.  Not relevant for setters. */
    9544             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9545             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9546             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9547             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9548             : };
    9549             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9550             : static_assert(0 < 1, "There is no slot for us");
    9551             : static const JSJitInfo onsuspend_setterinfo = {
    9552             :   { (JSJitGetterOp)set_onsuspend },
    9553             :   { prototypes::id::Document },
    9554             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9555             :   JSJitInfo::Setter,
    9556             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9557             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9558             :   false,  /* isInfallible. False in setters. */
    9559             :   false,  /* isMovable.  Not relevant for setters. */
    9560             :   false, /* isEliminatable.  Not relevant for setters. */
    9561             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9562             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9563             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9564             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9565             : };
    9566             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9567             : static_assert(0 < 1, "There is no slot for us");
    9568             : 
    9569             : static bool
    9570           0 : get_ontimeupdate(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9571             : {
    9572           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntimeupdate());
    9573           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9574           0 :   if (result) {
    9575           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9576           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9577           0 :       return false;
    9578             :     }
    9579           0 :     return true;
    9580             :   } else {
    9581           0 :     args.rval().setNull();
    9582           0 :     return true;
    9583             :   }
    9584             : }
    9585             : 
    9586             : static bool
    9587           0 : set_ontimeupdate(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    9588             : {
    9589           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9590           0 :   if (args[0].isObject()) {
    9591             :     { // scope for tempRoot
    9592           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9593           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9594             :     }
    9595             :   } else {
    9596           0 :     arg0 = nullptr;
    9597             :   }
    9598           0 :   self->SetOntimeupdate(Constify(arg0));
    9599           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9600             : 
    9601           0 :   return true;
    9602             : }
    9603             : 
    9604             : static const JSJitInfo ontimeupdate_getterinfo = {
    9605             :   { (JSJitGetterOp)get_ontimeupdate },
    9606             :   { prototypes::id::Document },
    9607             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9608             :   JSJitInfo::Getter,
    9609             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9610             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9611             :   false,  /* isInfallible. False in setters. */
    9612             :   false,  /* isMovable.  Not relevant for setters. */
    9613             :   false, /* isEliminatable.  Not relevant for setters. */
    9614             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9615             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9616             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9617             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9618             : };
    9619             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9620             : static_assert(0 < 1, "There is no slot for us");
    9621             : static const JSJitInfo ontimeupdate_setterinfo = {
    9622             :   { (JSJitGetterOp)set_ontimeupdate },
    9623             :   { prototypes::id::Document },
    9624             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9625             :   JSJitInfo::Setter,
    9626             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9627             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9628             :   false,  /* isInfallible. False in setters. */
    9629             :   false,  /* isMovable.  Not relevant for setters. */
    9630             :   false, /* isEliminatable.  Not relevant for setters. */
    9631             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9632             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9633             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9634             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9635             : };
    9636             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9637             : static_assert(0 < 1, "There is no slot for us");
    9638             : 
    9639             : static bool
    9640           0 : get_onvolumechange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9641             : {
    9642           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnvolumechange());
    9643           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9644           0 :   if (result) {
    9645           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9646           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9647           0 :       return false;
    9648             :     }
    9649           0 :     return true;
    9650             :   } else {
    9651           0 :     args.rval().setNull();
    9652           0 :     return true;
    9653             :   }
    9654             : }
    9655             : 
    9656             : static bool
    9657           0 : set_onvolumechange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    9658             : {
    9659           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9660           0 :   if (args[0].isObject()) {
    9661             :     { // scope for tempRoot
    9662           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9663           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9664             :     }
    9665             :   } else {
    9666           0 :     arg0 = nullptr;
    9667             :   }
    9668           0 :   self->SetOnvolumechange(Constify(arg0));
    9669           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9670             : 
    9671           0 :   return true;
    9672             : }
    9673             : 
    9674             : static const JSJitInfo onvolumechange_getterinfo = {
    9675             :   { (JSJitGetterOp)get_onvolumechange },
    9676             :   { prototypes::id::Document },
    9677             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9678             :   JSJitInfo::Getter,
    9679             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9680             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9681             :   false,  /* isInfallible. False in setters. */
    9682             :   false,  /* isMovable.  Not relevant for setters. */
    9683             :   false, /* isEliminatable.  Not relevant for setters. */
    9684             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9685             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9686             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9687             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9688             : };
    9689             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9690             : static_assert(0 < 1, "There is no slot for us");
    9691             : static const JSJitInfo onvolumechange_setterinfo = {
    9692             :   { (JSJitGetterOp)set_onvolumechange },
    9693             :   { prototypes::id::Document },
    9694             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9695             :   JSJitInfo::Setter,
    9696             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9697             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9698             :   false,  /* isInfallible. False in setters. */
    9699             :   false,  /* isMovable.  Not relevant for setters. */
    9700             :   false, /* isEliminatable.  Not relevant for setters. */
    9701             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9702             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9703             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9704             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9705             : };
    9706             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9707             : static_assert(0 < 1, "There is no slot for us");
    9708             : 
    9709             : static bool
    9710           0 : get_onwaiting(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9711             : {
    9712           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwaiting());
    9713           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9714           0 :   if (result) {
    9715           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9716           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9717           0 :       return false;
    9718             :     }
    9719           0 :     return true;
    9720             :   } else {
    9721           0 :     args.rval().setNull();
    9722           0 :     return true;
    9723             :   }
    9724             : }
    9725             : 
    9726             : static bool
    9727           0 : set_onwaiting(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    9728             : {
    9729           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9730           0 :   if (args[0].isObject()) {
    9731             :     { // scope for tempRoot
    9732           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9733           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9734             :     }
    9735             :   } else {
    9736           0 :     arg0 = nullptr;
    9737             :   }
    9738           0 :   self->SetOnwaiting(Constify(arg0));
    9739           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9740             : 
    9741           0 :   return true;
    9742             : }
    9743             : 
    9744             : static const JSJitInfo onwaiting_getterinfo = {
    9745             :   { (JSJitGetterOp)get_onwaiting },
    9746             :   { prototypes::id::Document },
    9747             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9748             :   JSJitInfo::Getter,
    9749             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9750             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9751             :   false,  /* isInfallible. False in setters. */
    9752             :   false,  /* isMovable.  Not relevant for setters. */
    9753             :   false, /* isEliminatable.  Not relevant for setters. */
    9754             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9755             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9756             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9757             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9758             : };
    9759             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9760             : static_assert(0 < 1, "There is no slot for us");
    9761             : static const JSJitInfo onwaiting_setterinfo = {
    9762             :   { (JSJitGetterOp)set_onwaiting },
    9763             :   { prototypes::id::Document },
    9764             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9765             :   JSJitInfo::Setter,
    9766             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9767             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9768             :   false,  /* isInfallible. False in setters. */
    9769             :   false,  /* isMovable.  Not relevant for setters. */
    9770             :   false, /* isEliminatable.  Not relevant for setters. */
    9771             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9772             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9773             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9774             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9775             : };
    9776             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9777             : static_assert(0 < 1, "There is no slot for us");
    9778             : 
    9779             : static bool
    9780           0 : get_onselectstart(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9781             : {
    9782           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnselectstart());
    9783           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9784           0 :   if (result) {
    9785           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9786           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9787           0 :       return false;
    9788             :     }
    9789           0 :     return true;
    9790             :   } else {
    9791           0 :     args.rval().setNull();
    9792           0 :     return true;
    9793             :   }
    9794             : }
    9795             : 
    9796             : static bool
    9797           0 : set_onselectstart(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    9798             : {
    9799           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9800           0 :   if (args[0].isObject()) {
    9801             :     { // scope for tempRoot
    9802           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9803           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9804             :     }
    9805             :   } else {
    9806           0 :     arg0 = nullptr;
    9807             :   }
    9808           0 :   self->SetOnselectstart(Constify(arg0));
    9809           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9810             : 
    9811           0 :   return true;
    9812             : }
    9813             : 
    9814             : static const JSJitInfo onselectstart_getterinfo = {
    9815             :   { (JSJitGetterOp)get_onselectstart },
    9816             :   { prototypes::id::Document },
    9817             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9818             :   JSJitInfo::Getter,
    9819             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9820             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9821             :   false,  /* isInfallible. False in setters. */
    9822             :   false,  /* isMovable.  Not relevant for setters. */
    9823             :   false, /* isEliminatable.  Not relevant for setters. */
    9824             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9825             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9826             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9827             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9828             : };
    9829             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9830             : static_assert(0 < 1, "There is no slot for us");
    9831             : static const JSJitInfo onselectstart_setterinfo = {
    9832             :   { (JSJitGetterOp)set_onselectstart },
    9833             :   { prototypes::id::Document },
    9834             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9835             :   JSJitInfo::Setter,
    9836             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9837             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9838             :   false,  /* isInfallible. False in setters. */
    9839             :   false,  /* isMovable.  Not relevant for setters. */
    9840             :   false, /* isEliminatable.  Not relevant for setters. */
    9841             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9842             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9843             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9844             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9845             : };
    9846             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9847             : static_assert(0 < 1, "There is no slot for us");
    9848             : 
    9849             : static bool
    9850           0 : get_ontoggle(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9851             : {
    9852           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntoggle());
    9853           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9854           0 :   if (result) {
    9855           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9856           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9857           0 :       return false;
    9858             :     }
    9859           0 :     return true;
    9860             :   } else {
    9861           0 :     args.rval().setNull();
    9862           0 :     return true;
    9863             :   }
    9864             : }
    9865             : 
    9866             : static bool
    9867           0 : set_ontoggle(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    9868             : {
    9869           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9870           0 :   if (args[0].isObject()) {
    9871             :     { // scope for tempRoot
    9872           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9873           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9874             :     }
    9875             :   } else {
    9876           0 :     arg0 = nullptr;
    9877             :   }
    9878           0 :   self->SetOntoggle(Constify(arg0));
    9879           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9880             : 
    9881           0 :   return true;
    9882             : }
    9883             : 
    9884             : static const JSJitInfo ontoggle_getterinfo = {
    9885             :   { (JSJitGetterOp)get_ontoggle },
    9886             :   { prototypes::id::Document },
    9887             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9888             :   JSJitInfo::Getter,
    9889             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9890             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9891             :   false,  /* isInfallible. False in setters. */
    9892             :   false,  /* isMovable.  Not relevant for setters. */
    9893             :   false, /* isEliminatable.  Not relevant for setters. */
    9894             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9895             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9896             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9897             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9898             : };
    9899             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9900             : static_assert(0 < 1, "There is no slot for us");
    9901             : static const JSJitInfo ontoggle_setterinfo = {
    9902             :   { (JSJitGetterOp)set_ontoggle },
    9903             :   { prototypes::id::Document },
    9904             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9905             :   JSJitInfo::Setter,
    9906             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9907             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9908             :   false,  /* isInfallible. False in setters. */
    9909             :   false,  /* isMovable.  Not relevant for setters. */
    9910             :   false, /* isEliminatable.  Not relevant for setters. */
    9911             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9912             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9913             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9914             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9915             : };
    9916             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9917             : static_assert(0 < 1, "There is no slot for us");
    9918             : 
    9919             : static bool
    9920           0 : get_onpointercancel(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9921             : {
    9922           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointercancel());
    9923           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9924           0 :   if (result) {
    9925           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9926           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9927           0 :       return false;
    9928             :     }
    9929           0 :     return true;
    9930             :   } else {
    9931           0 :     args.rval().setNull();
    9932           0 :     return true;
    9933             :   }
    9934             : }
    9935             : 
    9936             : static bool
    9937           0 : set_onpointercancel(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
    9938             : {
    9939           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9940           0 :   if (args[0].isObject()) {
    9941             :     { // scope for tempRoot
    9942           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9943           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9944             :     }
    9945             :   } else {
    9946           0 :     arg0 = nullptr;
    9947             :   }
    9948           0 :   self->SetOnpointercancel(Constify(arg0));
    9949           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9950             : 
    9951           0 :   return true;
    9952             : }
    9953             : 
    9954             : static const JSJitInfo onpointercancel_getterinfo = {
    9955             :   { (JSJitGetterOp)get_onpointercancel },
    9956             :   { prototypes::id::Document },
    9957             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9958             :   JSJitInfo::Getter,
    9959             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9960             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9961             :   false,  /* isInfallible. False in setters. */
    9962             :   false,  /* isMovable.  Not relevant for setters. */
    9963             :   false, /* isEliminatable.  Not relevant for setters. */
    9964             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9965             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9966             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9967             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9968             : };
    9969             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9970             : static_assert(0 < 1, "There is no slot for us");
    9971             : static const JSJitInfo onpointercancel_setterinfo = {
    9972             :   { (JSJitGetterOp)set_onpointercancel },
    9973             :   { prototypes::id::Document },
    9974             :   { PrototypeTraits<prototypes::id::Document>::Depth },
    9975             :   JSJitInfo::Setter,
    9976             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9977             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9978             :   false,  /* isInfallible. False in setters. */
    9979             :   false,  /* isMovable.  Not relevant for setters. */
    9980             :   false, /* isEliminatable.  Not relevant for setters. */
    9981             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9982             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9983             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9984             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9985             : };
    9986             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9987             : static_assert(0 < 1, "There is no slot for us");
    9988             : 
    9989             : static bool
    9990           0 : get_onpointerdown(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
    9991             : {
    9992           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerdown());
    9993           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9994           0 :   if (result) {
    9995           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9996           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9997           0 :       return false;
    9998             :     }
    9999           0 :     return true;
   10000             :   } else {
   10001           0 :     args.rval().setNull();
   10002           0 :     return true;
   10003             :   }
   10004             : }
   10005             : 
   10006             : static bool
   10007           0 : set_onpointerdown(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10008             : {
   10009           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10010           0 :   if (args[0].isObject()) {
   10011             :     { // scope for tempRoot
   10012           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10013           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10014             :     }
   10015             :   } else {
   10016           0 :     arg0 = nullptr;
   10017             :   }
   10018           0 :   self->SetOnpointerdown(Constify(arg0));
   10019           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10020             : 
   10021           0 :   return true;
   10022             : }
   10023             : 
   10024             : static const JSJitInfo onpointerdown_getterinfo = {
   10025             :   { (JSJitGetterOp)get_onpointerdown },
   10026             :   { prototypes::id::Document },
   10027             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10028             :   JSJitInfo::Getter,
   10029             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10030             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10031             :   false,  /* isInfallible. False in setters. */
   10032             :   false,  /* isMovable.  Not relevant for setters. */
   10033             :   false, /* isEliminatable.  Not relevant for setters. */
   10034             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10035             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10036             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10037             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10038             : };
   10039             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10040             : static_assert(0 < 1, "There is no slot for us");
   10041             : static const JSJitInfo onpointerdown_setterinfo = {
   10042             :   { (JSJitGetterOp)set_onpointerdown },
   10043             :   { prototypes::id::Document },
   10044             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10045             :   JSJitInfo::Setter,
   10046             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10047             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10048             :   false,  /* isInfallible. False in setters. */
   10049             :   false,  /* isMovable.  Not relevant for setters. */
   10050             :   false, /* isEliminatable.  Not relevant for setters. */
   10051             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10052             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10053             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10054             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10055             : };
   10056             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10057             : static_assert(0 < 1, "There is no slot for us");
   10058             : 
   10059             : static bool
   10060           0 : get_onpointerup(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   10061             : {
   10062           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerup());
   10063           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10064           0 :   if (result) {
   10065           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10066           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10067           0 :       return false;
   10068             :     }
   10069           0 :     return true;
   10070             :   } else {
   10071           0 :     args.rval().setNull();
   10072           0 :     return true;
   10073             :   }
   10074             : }
   10075             : 
   10076             : static bool
   10077           0 : set_onpointerup(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10078             : {
   10079           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10080           0 :   if (args[0].isObject()) {
   10081             :     { // scope for tempRoot
   10082           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10083           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10084             :     }
   10085             :   } else {
   10086           0 :     arg0 = nullptr;
   10087             :   }
   10088           0 :   self->SetOnpointerup(Constify(arg0));
   10089           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10090             : 
   10091           0 :   return true;
   10092             : }
   10093             : 
   10094             : static const JSJitInfo onpointerup_getterinfo = {
   10095             :   { (JSJitGetterOp)get_onpointerup },
   10096             :   { prototypes::id::Document },
   10097             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10098             :   JSJitInfo::Getter,
   10099             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10100             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10101             :   false,  /* isInfallible. False in setters. */
   10102             :   false,  /* isMovable.  Not relevant for setters. */
   10103             :   false, /* isEliminatable.  Not relevant for setters. */
   10104             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10105             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10106             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10107             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10108             : };
   10109             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10110             : static_assert(0 < 1, "There is no slot for us");
   10111             : static const JSJitInfo onpointerup_setterinfo = {
   10112             :   { (JSJitGetterOp)set_onpointerup },
   10113             :   { prototypes::id::Document },
   10114             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10115             :   JSJitInfo::Setter,
   10116             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10117             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10118             :   false,  /* isInfallible. False in setters. */
   10119             :   false,  /* isMovable.  Not relevant for setters. */
   10120             :   false, /* isEliminatable.  Not relevant for setters. */
   10121             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10122             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10123             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10124             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10125             : };
   10126             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10127             : static_assert(0 < 1, "There is no slot for us");
   10128             : 
   10129             : static bool
   10130           0 : get_onpointermove(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   10131             : {
   10132           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointermove());
   10133           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10134           0 :   if (result) {
   10135           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10136           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10137           0 :       return false;
   10138             :     }
   10139           0 :     return true;
   10140             :   } else {
   10141           0 :     args.rval().setNull();
   10142           0 :     return true;
   10143             :   }
   10144             : }
   10145             : 
   10146             : static bool
   10147           0 : set_onpointermove(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10148             : {
   10149           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10150           0 :   if (args[0].isObject()) {
   10151             :     { // scope for tempRoot
   10152           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10153           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10154             :     }
   10155             :   } else {
   10156           0 :     arg0 = nullptr;
   10157             :   }
   10158           0 :   self->SetOnpointermove(Constify(arg0));
   10159           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10160             : 
   10161           0 :   return true;
   10162             : }
   10163             : 
   10164             : static const JSJitInfo onpointermove_getterinfo = {
   10165             :   { (JSJitGetterOp)get_onpointermove },
   10166             :   { prototypes::id::Document },
   10167             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10168             :   JSJitInfo::Getter,
   10169             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10170             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10171             :   false,  /* isInfallible. False in setters. */
   10172             :   false,  /* isMovable.  Not relevant for setters. */
   10173             :   false, /* isEliminatable.  Not relevant for setters. */
   10174             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10175             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10176             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10177             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10178             : };
   10179             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10180             : static_assert(0 < 1, "There is no slot for us");
   10181             : static const JSJitInfo onpointermove_setterinfo = {
   10182             :   { (JSJitGetterOp)set_onpointermove },
   10183             :   { prototypes::id::Document },
   10184             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10185             :   JSJitInfo::Setter,
   10186             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10187             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10188             :   false,  /* isInfallible. False in setters. */
   10189             :   false,  /* isMovable.  Not relevant for setters. */
   10190             :   false, /* isEliminatable.  Not relevant for setters. */
   10191             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10192             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10193             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10194             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10195             : };
   10196             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10197             : static_assert(0 < 1, "There is no slot for us");
   10198             : 
   10199             : static bool
   10200           0 : get_onpointerout(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   10201             : {
   10202           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerout());
   10203           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10204           0 :   if (result) {
   10205           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10206           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10207           0 :       return false;
   10208             :     }
   10209           0 :     return true;
   10210             :   } else {
   10211           0 :     args.rval().setNull();
   10212           0 :     return true;
   10213             :   }
   10214             : }
   10215             : 
   10216             : static bool
   10217           0 : set_onpointerout(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10218             : {
   10219           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10220           0 :   if (args[0].isObject()) {
   10221             :     { // scope for tempRoot
   10222           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10223           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10224             :     }
   10225             :   } else {
   10226           0 :     arg0 = nullptr;
   10227             :   }
   10228           0 :   self->SetOnpointerout(Constify(arg0));
   10229           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10230             : 
   10231           0 :   return true;
   10232             : }
   10233             : 
   10234             : static const JSJitInfo onpointerout_getterinfo = {
   10235             :   { (JSJitGetterOp)get_onpointerout },
   10236             :   { prototypes::id::Document },
   10237             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10238             :   JSJitInfo::Getter,
   10239             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10240             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10241             :   false,  /* isInfallible. False in setters. */
   10242             :   false,  /* isMovable.  Not relevant for setters. */
   10243             :   false, /* isEliminatable.  Not relevant for setters. */
   10244             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10245             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10246             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10247             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10248             : };
   10249             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10250             : static_assert(0 < 1, "There is no slot for us");
   10251             : static const JSJitInfo onpointerout_setterinfo = {
   10252             :   { (JSJitGetterOp)set_onpointerout },
   10253             :   { prototypes::id::Document },
   10254             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10255             :   JSJitInfo::Setter,
   10256             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10257             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10258             :   false,  /* isInfallible. False in setters. */
   10259             :   false,  /* isMovable.  Not relevant for setters. */
   10260             :   false, /* isEliminatable.  Not relevant for setters. */
   10261             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10262             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10263             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10264             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10265             : };
   10266             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10267             : static_assert(0 < 1, "There is no slot for us");
   10268             : 
   10269             : static bool
   10270           0 : get_onpointerover(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   10271             : {
   10272           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerover());
   10273           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10274           0 :   if (result) {
   10275           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10276           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10277           0 :       return false;
   10278             :     }
   10279           0 :     return true;
   10280             :   } else {
   10281           0 :     args.rval().setNull();
   10282           0 :     return true;
   10283             :   }
   10284             : }
   10285             : 
   10286             : static bool
   10287           0 : set_onpointerover(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10288             : {
   10289           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10290           0 :   if (args[0].isObject()) {
   10291             :     { // scope for tempRoot
   10292           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10293           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10294             :     }
   10295             :   } else {
   10296           0 :     arg0 = nullptr;
   10297             :   }
   10298           0 :   self->SetOnpointerover(Constify(arg0));
   10299           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10300             : 
   10301           0 :   return true;
   10302             : }
   10303             : 
   10304             : static const JSJitInfo onpointerover_getterinfo = {
   10305             :   { (JSJitGetterOp)get_onpointerover },
   10306             :   { prototypes::id::Document },
   10307             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10308             :   JSJitInfo::Getter,
   10309             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10310             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10311             :   false,  /* isInfallible. False in setters. */
   10312             :   false,  /* isMovable.  Not relevant for setters. */
   10313             :   false, /* isEliminatable.  Not relevant for setters. */
   10314             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10315             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10316             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10317             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10318             : };
   10319             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10320             : static_assert(0 < 1, "There is no slot for us");
   10321             : static const JSJitInfo onpointerover_setterinfo = {
   10322             :   { (JSJitGetterOp)set_onpointerover },
   10323             :   { prototypes::id::Document },
   10324             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10325             :   JSJitInfo::Setter,
   10326             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10327             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10328             :   false,  /* isInfallible. False in setters. */
   10329             :   false,  /* isMovable.  Not relevant for setters. */
   10330             :   false, /* isEliminatable.  Not relevant for setters. */
   10331             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10332             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10333             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10334             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10335             : };
   10336             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10337             : static_assert(0 < 1, "There is no slot for us");
   10338             : 
   10339             : static bool
   10340           0 : get_onpointerenter(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   10341             : {
   10342           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerenter());
   10343           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10344           0 :   if (result) {
   10345           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10346           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10347           0 :       return false;
   10348             :     }
   10349           0 :     return true;
   10350             :   } else {
   10351           0 :     args.rval().setNull();
   10352           0 :     return true;
   10353             :   }
   10354             : }
   10355             : 
   10356             : static bool
   10357           0 : set_onpointerenter(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10358             : {
   10359           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10360           0 :   if (args[0].isObject()) {
   10361             :     { // scope for tempRoot
   10362           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10363           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10364             :     }
   10365             :   } else {
   10366           0 :     arg0 = nullptr;
   10367             :   }
   10368           0 :   self->SetOnpointerenter(Constify(arg0));
   10369           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10370             : 
   10371           0 :   return true;
   10372             : }
   10373             : 
   10374             : static const JSJitInfo onpointerenter_getterinfo = {
   10375             :   { (JSJitGetterOp)get_onpointerenter },
   10376             :   { prototypes::id::Document },
   10377             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10378             :   JSJitInfo::Getter,
   10379             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10380             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10381             :   false,  /* isInfallible. False in setters. */
   10382             :   false,  /* isMovable.  Not relevant for setters. */
   10383             :   false, /* isEliminatable.  Not relevant for setters. */
   10384             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10385             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10386             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10387             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10388             : };
   10389             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10390             : static_assert(0 < 1, "There is no slot for us");
   10391             : static const JSJitInfo onpointerenter_setterinfo = {
   10392             :   { (JSJitGetterOp)set_onpointerenter },
   10393             :   { prototypes::id::Document },
   10394             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10395             :   JSJitInfo::Setter,
   10396             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10397             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10398             :   false,  /* isInfallible. False in setters. */
   10399             :   false,  /* isMovable.  Not relevant for setters. */
   10400             :   false, /* isEliminatable.  Not relevant for setters. */
   10401             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10402             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10403             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10404             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10405             : };
   10406             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10407             : static_assert(0 < 1, "There is no slot for us");
   10408             : 
   10409             : static bool
   10410           0 : get_onpointerleave(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   10411             : {
   10412           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerleave());
   10413           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10414           0 :   if (result) {
   10415           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10416           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10417           0 :       return false;
   10418             :     }
   10419           0 :     return true;
   10420             :   } else {
   10421           0 :     args.rval().setNull();
   10422           0 :     return true;
   10423             :   }
   10424             : }
   10425             : 
   10426             : static bool
   10427           0 : set_onpointerleave(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10428             : {
   10429           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10430           0 :   if (args[0].isObject()) {
   10431             :     { // scope for tempRoot
   10432           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10433           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10434             :     }
   10435             :   } else {
   10436           0 :     arg0 = nullptr;
   10437             :   }
   10438           0 :   self->SetOnpointerleave(Constify(arg0));
   10439           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10440             : 
   10441           0 :   return true;
   10442             : }
   10443             : 
   10444             : static const JSJitInfo onpointerleave_getterinfo = {
   10445             :   { (JSJitGetterOp)get_onpointerleave },
   10446             :   { prototypes::id::Document },
   10447             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10448             :   JSJitInfo::Getter,
   10449             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10450             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10451             :   false,  /* isInfallible. False in setters. */
   10452             :   false,  /* isMovable.  Not relevant for setters. */
   10453             :   false, /* isEliminatable.  Not relevant for setters. */
   10454             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10455             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10456             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10457             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10458             : };
   10459             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10460             : static_assert(0 < 1, "There is no slot for us");
   10461             : static const JSJitInfo onpointerleave_setterinfo = {
   10462             :   { (JSJitGetterOp)set_onpointerleave },
   10463             :   { prototypes::id::Document },
   10464             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10465             :   JSJitInfo::Setter,
   10466             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10467             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10468             :   false,  /* isInfallible. False in setters. */
   10469             :   false,  /* isMovable.  Not relevant for setters. */
   10470             :   false, /* isEliminatable.  Not relevant for setters. */
   10471             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10472             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10473             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10474             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10475             : };
   10476             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10477             : static_assert(0 < 1, "There is no slot for us");
   10478             : 
   10479             : static bool
   10480           0 : get_ongotpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   10481             : {
   10482           0 :   RefPtr<EventHandlerNonNull> result(self->GetOngotpointercapture());
   10483           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10484           0 :   if (result) {
   10485           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10486           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10487           0 :       return false;
   10488             :     }
   10489           0 :     return true;
   10490             :   } else {
   10491           0 :     args.rval().setNull();
   10492           0 :     return true;
   10493             :   }
   10494             : }
   10495             : 
   10496             : static bool
   10497           0 : set_ongotpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10498             : {
   10499           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10500           0 :   if (args[0].isObject()) {
   10501             :     { // scope for tempRoot
   10502           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10503           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10504             :     }
   10505             :   } else {
   10506           0 :     arg0 = nullptr;
   10507             :   }
   10508           0 :   self->SetOngotpointercapture(Constify(arg0));
   10509           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10510             : 
   10511           0 :   return true;
   10512             : }
   10513             : 
   10514             : static const JSJitInfo ongotpointercapture_getterinfo = {
   10515             :   { (JSJitGetterOp)get_ongotpointercapture },
   10516             :   { prototypes::id::Document },
   10517             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10518             :   JSJitInfo::Getter,
   10519             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10520             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10521             :   false,  /* isInfallible. False in setters. */
   10522             :   false,  /* isMovable.  Not relevant for setters. */
   10523             :   false, /* isEliminatable.  Not relevant for setters. */
   10524             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10525             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10526             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10527             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10528             : };
   10529             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10530             : static_assert(0 < 1, "There is no slot for us");
   10531             : static const JSJitInfo ongotpointercapture_setterinfo = {
   10532             :   { (JSJitGetterOp)set_ongotpointercapture },
   10533             :   { prototypes::id::Document },
   10534             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10535             :   JSJitInfo::Setter,
   10536             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10537             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10538             :   false,  /* isInfallible. False in setters. */
   10539             :   false,  /* isMovable.  Not relevant for setters. */
   10540             :   false, /* isEliminatable.  Not relevant for setters. */
   10541             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10542             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10543             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10544             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10545             : };
   10546             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10547             : static_assert(0 < 1, "There is no slot for us");
   10548             : 
   10549             : static bool
   10550           0 : get_onlostpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   10551             : {
   10552           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnlostpointercapture());
   10553           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10554           0 :   if (result) {
   10555           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10556           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10557           0 :       return false;
   10558             :     }
   10559           0 :     return true;
   10560             :   } else {
   10561           0 :     args.rval().setNull();
   10562           0 :     return true;
   10563             :   }
   10564             : }
   10565             : 
   10566             : static bool
   10567           0 : set_onlostpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10568             : {
   10569           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10570           0 :   if (args[0].isObject()) {
   10571             :     { // scope for tempRoot
   10572           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10573           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10574             :     }
   10575             :   } else {
   10576           0 :     arg0 = nullptr;
   10577             :   }
   10578           0 :   self->SetOnlostpointercapture(Constify(arg0));
   10579           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10580             : 
   10581           0 :   return true;
   10582             : }
   10583             : 
   10584             : static const JSJitInfo onlostpointercapture_getterinfo = {
   10585             :   { (JSJitGetterOp)get_onlostpointercapture },
   10586             :   { prototypes::id::Document },
   10587             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10588             :   JSJitInfo::Getter,
   10589             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10590             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10591             :   false,  /* isInfallible. False in setters. */
   10592             :   false,  /* isMovable.  Not relevant for setters. */
   10593             :   false, /* isEliminatable.  Not relevant for setters. */
   10594             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10595             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10596             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10597             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10598             : };
   10599             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10600             : static_assert(0 < 1, "There is no slot for us");
   10601             : static const JSJitInfo onlostpointercapture_setterinfo = {
   10602             :   { (JSJitGetterOp)set_onlostpointercapture },
   10603             :   { prototypes::id::Document },
   10604             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10605             :   JSJitInfo::Setter,
   10606             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10607             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10608             :   false,  /* isInfallible. False in setters. */
   10609             :   false,  /* isMovable.  Not relevant for setters. */
   10610             :   false, /* isEliminatable.  Not relevant for setters. */
   10611             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10612             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10613             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10614             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10615             : };
   10616             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10617             : static_assert(0 < 1, "There is no slot for us");
   10618             : 
   10619             : static bool
   10620           0 : get_onmozfullscreenchange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   10621             : {
   10622           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmozfullscreenchange());
   10623           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10624           0 :   if (result) {
   10625           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10626           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10627           0 :       return false;
   10628             :     }
   10629           0 :     return true;
   10630             :   } else {
   10631           0 :     args.rval().setNull();
   10632           0 :     return true;
   10633             :   }
   10634             : }
   10635             : 
   10636             : static bool
   10637           0 : set_onmozfullscreenchange(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10638             : {
   10639           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10640           0 :   if (args[0].isObject()) {
   10641             :     { // scope for tempRoot
   10642           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10643           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10644             :     }
   10645             :   } else {
   10646           0 :     arg0 = nullptr;
   10647             :   }
   10648           0 :   self->SetOnmozfullscreenchange(Constify(arg0));
   10649           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10650             : 
   10651           0 :   return true;
   10652             : }
   10653             : 
   10654             : static const JSJitInfo onmozfullscreenchange_getterinfo = {
   10655             :   { (JSJitGetterOp)get_onmozfullscreenchange },
   10656             :   { prototypes::id::Document },
   10657             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10658             :   JSJitInfo::Getter,
   10659             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10660             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10661             :   false,  /* isInfallible. False in setters. */
   10662             :   false,  /* isMovable.  Not relevant for setters. */
   10663             :   false, /* isEliminatable.  Not relevant for setters. */
   10664             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10665             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10666             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10667             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10668             : };
   10669             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10670             : static_assert(0 < 1, "There is no slot for us");
   10671             : static const JSJitInfo onmozfullscreenchange_setterinfo = {
   10672             :   { (JSJitGetterOp)set_onmozfullscreenchange },
   10673             :   { prototypes::id::Document },
   10674             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10675             :   JSJitInfo::Setter,
   10676             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10677             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10678             :   false,  /* isInfallible. False in setters. */
   10679             :   false,  /* isMovable.  Not relevant for setters. */
   10680             :   false, /* isEliminatable.  Not relevant for setters. */
   10681             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10682             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10683             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10684             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10685             : };
   10686             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10687             : static_assert(0 < 1, "There is no slot for us");
   10688             : 
   10689             : static bool
   10690           0 : get_onmozfullscreenerror(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   10691             : {
   10692           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmozfullscreenerror());
   10693           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10694           0 :   if (result) {
   10695           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10696           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10697           0 :       return false;
   10698             :     }
   10699           0 :     return true;
   10700             :   } else {
   10701           0 :     args.rval().setNull();
   10702           0 :     return true;
   10703             :   }
   10704             : }
   10705             : 
   10706             : static bool
   10707           0 : set_onmozfullscreenerror(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10708             : {
   10709           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10710           0 :   if (args[0].isObject()) {
   10711             :     { // scope for tempRoot
   10712           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10713           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10714             :     }
   10715             :   } else {
   10716           0 :     arg0 = nullptr;
   10717             :   }
   10718           0 :   self->SetOnmozfullscreenerror(Constify(arg0));
   10719           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10720             : 
   10721           0 :   return true;
   10722             : }
   10723             : 
   10724             : static const JSJitInfo onmozfullscreenerror_getterinfo = {
   10725             :   { (JSJitGetterOp)get_onmozfullscreenerror },
   10726             :   { prototypes::id::Document },
   10727             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10728             :   JSJitInfo::Getter,
   10729             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10730             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10731             :   false,  /* isInfallible. False in setters. */
   10732             :   false,  /* isMovable.  Not relevant for setters. */
   10733             :   false, /* isEliminatable.  Not relevant for setters. */
   10734             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10735             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10736             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10737             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10738             : };
   10739             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10740             : static_assert(0 < 1, "There is no slot for us");
   10741             : static const JSJitInfo onmozfullscreenerror_setterinfo = {
   10742             :   { (JSJitGetterOp)set_onmozfullscreenerror },
   10743             :   { prototypes::id::Document },
   10744             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10745             :   JSJitInfo::Setter,
   10746             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10747             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10748             :   false,  /* isInfallible. False in setters. */
   10749             :   false,  /* isMovable.  Not relevant for setters. */
   10750             :   false, /* isEliminatable.  Not relevant for setters. */
   10751             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10752             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10753             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10754             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10755             : };
   10756             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10757             : static_assert(0 < 1, "There is no slot for us");
   10758             : 
   10759             : static bool
   10760           0 : get_onanimationcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   10761             : {
   10762           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationcancel());
   10763           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10764           0 :   if (result) {
   10765           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10766           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10767           0 :       return false;
   10768             :     }
   10769           0 :     return true;
   10770             :   } else {
   10771           0 :     args.rval().setNull();
   10772           0 :     return true;
   10773             :   }
   10774             : }
   10775             : 
   10776             : static bool
   10777           0 : set_onanimationcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10778             : {
   10779           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10780           0 :   if (args[0].isObject()) {
   10781             :     { // scope for tempRoot
   10782           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10783           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10784             :     }
   10785             :   } else {
   10786           0 :     arg0 = nullptr;
   10787             :   }
   10788           0 :   self->SetOnanimationcancel(Constify(arg0));
   10789           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10790             : 
   10791           0 :   return true;
   10792             : }
   10793             : 
   10794             : static const JSJitInfo onanimationcancel_getterinfo = {
   10795             :   { (JSJitGetterOp)get_onanimationcancel },
   10796             :   { prototypes::id::Document },
   10797             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10798             :   JSJitInfo::Getter,
   10799             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10800             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10801             :   false,  /* isInfallible. False in setters. */
   10802             :   false,  /* isMovable.  Not relevant for setters. */
   10803             :   false, /* isEliminatable.  Not relevant for setters. */
   10804             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10805             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10806             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10807             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10808             : };
   10809             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10810             : static_assert(0 < 1, "There is no slot for us");
   10811             : static const JSJitInfo onanimationcancel_setterinfo = {
   10812             :   { (JSJitGetterOp)set_onanimationcancel },
   10813             :   { prototypes::id::Document },
   10814             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10815             :   JSJitInfo::Setter,
   10816             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10817             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10818             :   false,  /* isInfallible. False in setters. */
   10819             :   false,  /* isMovable.  Not relevant for setters. */
   10820             :   false, /* isEliminatable.  Not relevant for setters. */
   10821             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10822             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10823             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10824             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10825             : };
   10826             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10827             : static_assert(0 < 1, "There is no slot for us");
   10828             : 
   10829             : static bool
   10830           0 : get_onanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   10831             : {
   10832           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationend());
   10833           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10834           0 :   if (result) {
   10835           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10836           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10837           0 :       return false;
   10838             :     }
   10839           0 :     return true;
   10840             :   } else {
   10841           0 :     args.rval().setNull();
   10842           0 :     return true;
   10843             :   }
   10844             : }
   10845             : 
   10846             : static bool
   10847           0 : set_onanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10848             : {
   10849           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10850           0 :   if (args[0].isObject()) {
   10851             :     { // scope for tempRoot
   10852           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10853           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10854             :     }
   10855             :   } else {
   10856           0 :     arg0 = nullptr;
   10857             :   }
   10858           0 :   self->SetOnanimationend(Constify(arg0));
   10859           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10860             : 
   10861           0 :   return true;
   10862             : }
   10863             : 
   10864             : static const JSJitInfo onanimationend_getterinfo = {
   10865             :   { (JSJitGetterOp)get_onanimationend },
   10866             :   { prototypes::id::Document },
   10867             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10868             :   JSJitInfo::Getter,
   10869             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10870             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10871             :   false,  /* isInfallible. False in setters. */
   10872             :   false,  /* isMovable.  Not relevant for setters. */
   10873             :   false, /* isEliminatable.  Not relevant for setters. */
   10874             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10875             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10876             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10877             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10878             : };
   10879             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10880             : static_assert(0 < 1, "There is no slot for us");
   10881             : static const JSJitInfo onanimationend_setterinfo = {
   10882             :   { (JSJitGetterOp)set_onanimationend },
   10883             :   { prototypes::id::Document },
   10884             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10885             :   JSJitInfo::Setter,
   10886             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10887             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10888             :   false,  /* isInfallible. False in setters. */
   10889             :   false,  /* isMovable.  Not relevant for setters. */
   10890             :   false, /* isEliminatable.  Not relevant for setters. */
   10891             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10892             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10893             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10894             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10895             : };
   10896             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10897             : static_assert(0 < 1, "There is no slot for us");
   10898             : 
   10899             : static bool
   10900           0 : get_onanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   10901             : {
   10902           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationiteration());
   10903           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10904           0 :   if (result) {
   10905           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10906           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10907           0 :       return false;
   10908             :     }
   10909           0 :     return true;
   10910             :   } else {
   10911           0 :     args.rval().setNull();
   10912           0 :     return true;
   10913             :   }
   10914             : }
   10915             : 
   10916             : static bool
   10917           0 : set_onanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10918             : {
   10919           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10920           0 :   if (args[0].isObject()) {
   10921             :     { // scope for tempRoot
   10922           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10923           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10924             :     }
   10925             :   } else {
   10926           0 :     arg0 = nullptr;
   10927             :   }
   10928           0 :   self->SetOnanimationiteration(Constify(arg0));
   10929           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10930             : 
   10931           0 :   return true;
   10932             : }
   10933             : 
   10934             : static const JSJitInfo onanimationiteration_getterinfo = {
   10935             :   { (JSJitGetterOp)get_onanimationiteration },
   10936             :   { prototypes::id::Document },
   10937             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10938             :   JSJitInfo::Getter,
   10939             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10940             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10941             :   false,  /* isInfallible. False in setters. */
   10942             :   false,  /* isMovable.  Not relevant for setters. */
   10943             :   false, /* isEliminatable.  Not relevant for setters. */
   10944             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10945             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10946             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10947             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10948             : };
   10949             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10950             : static_assert(0 < 1, "There is no slot for us");
   10951             : static const JSJitInfo onanimationiteration_setterinfo = {
   10952             :   { (JSJitGetterOp)set_onanimationiteration },
   10953             :   { prototypes::id::Document },
   10954             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   10955             :   JSJitInfo::Setter,
   10956             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10957             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10958             :   false,  /* isInfallible. False in setters. */
   10959             :   false,  /* isMovable.  Not relevant for setters. */
   10960             :   false, /* isEliminatable.  Not relevant for setters. */
   10961             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10962             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10963             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10964             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10965             : };
   10966             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10967             : static_assert(0 < 1, "There is no slot for us");
   10968             : 
   10969             : static bool
   10970           0 : get_onanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   10971             : {
   10972           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationstart());
   10973           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10974           0 :   if (result) {
   10975           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10976           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10977           0 :       return false;
   10978             :     }
   10979           0 :     return true;
   10980             :   } else {
   10981           0 :     args.rval().setNull();
   10982           0 :     return true;
   10983             :   }
   10984             : }
   10985             : 
   10986             : static bool
   10987           0 : set_onanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   10988             : {
   10989           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10990           0 :   if (args[0].isObject()) {
   10991             :     { // scope for tempRoot
   10992           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10993           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10994             :     }
   10995             :   } else {
   10996           0 :     arg0 = nullptr;
   10997             :   }
   10998           0 :   self->SetOnanimationstart(Constify(arg0));
   10999           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11000             : 
   11001           0 :   return true;
   11002             : }
   11003             : 
   11004             : static const JSJitInfo onanimationstart_getterinfo = {
   11005             :   { (JSJitGetterOp)get_onanimationstart },
   11006             :   { prototypes::id::Document },
   11007             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11008             :   JSJitInfo::Getter,
   11009             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11010             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11011             :   false,  /* isInfallible. False in setters. */
   11012             :   false,  /* isMovable.  Not relevant for setters. */
   11013             :   false, /* isEliminatable.  Not relevant for setters. */
   11014             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11015             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11016             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11017             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11018             : };
   11019             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11020             : static_assert(0 < 1, "There is no slot for us");
   11021             : static const JSJitInfo onanimationstart_setterinfo = {
   11022             :   { (JSJitGetterOp)set_onanimationstart },
   11023             :   { prototypes::id::Document },
   11024             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11025             :   JSJitInfo::Setter,
   11026             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11027             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11028             :   false,  /* isInfallible. False in setters. */
   11029             :   false,  /* isMovable.  Not relevant for setters. */
   11030             :   false, /* isEliminatable.  Not relevant for setters. */
   11031             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11032             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11033             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11034             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11035             : };
   11036             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11037             : static_assert(0 < 1, "There is no slot for us");
   11038             : 
   11039             : static bool
   11040           0 : get_ontransitioncancel(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11041             : {
   11042           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitioncancel());
   11043           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11044           0 :   if (result) {
   11045           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11046           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11047           0 :       return false;
   11048             :     }
   11049           0 :     return true;
   11050             :   } else {
   11051           0 :     args.rval().setNull();
   11052           0 :     return true;
   11053             :   }
   11054             : }
   11055             : 
   11056             : static bool
   11057           0 : set_ontransitioncancel(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   11058             : {
   11059           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11060           0 :   if (args[0].isObject()) {
   11061             :     { // scope for tempRoot
   11062           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11063           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11064             :     }
   11065             :   } else {
   11066           0 :     arg0 = nullptr;
   11067             :   }
   11068           0 :   self->SetOntransitioncancel(Constify(arg0));
   11069           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11070             : 
   11071           0 :   return true;
   11072             : }
   11073             : 
   11074             : static const JSJitInfo ontransitioncancel_getterinfo = {
   11075             :   { (JSJitGetterOp)get_ontransitioncancel },
   11076             :   { prototypes::id::Document },
   11077             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11078             :   JSJitInfo::Getter,
   11079             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11080             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11081             :   false,  /* isInfallible. False in setters. */
   11082             :   false,  /* isMovable.  Not relevant for setters. */
   11083             :   false, /* isEliminatable.  Not relevant for setters. */
   11084             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11085             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11086             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11087             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11088             : };
   11089             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11090             : static_assert(0 < 1, "There is no slot for us");
   11091             : static const JSJitInfo ontransitioncancel_setterinfo = {
   11092             :   { (JSJitGetterOp)set_ontransitioncancel },
   11093             :   { prototypes::id::Document },
   11094             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11095             :   JSJitInfo::Setter,
   11096             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11097             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11098             :   false,  /* isInfallible. False in setters. */
   11099             :   false,  /* isMovable.  Not relevant for setters. */
   11100             :   false, /* isEliminatable.  Not relevant for setters. */
   11101             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11102             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11103             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11104             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11105             : };
   11106             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11107             : static_assert(0 < 1, "There is no slot for us");
   11108             : 
   11109             : static bool
   11110           0 : get_ontransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11111             : {
   11112           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitionend());
   11113           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11114           0 :   if (result) {
   11115           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11116           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11117           0 :       return false;
   11118             :     }
   11119           0 :     return true;
   11120             :   } else {
   11121           0 :     args.rval().setNull();
   11122           0 :     return true;
   11123             :   }
   11124             : }
   11125             : 
   11126             : static bool
   11127           0 : set_ontransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   11128             : {
   11129           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11130           0 :   if (args[0].isObject()) {
   11131             :     { // scope for tempRoot
   11132           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11133           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11134             :     }
   11135             :   } else {
   11136           0 :     arg0 = nullptr;
   11137             :   }
   11138           0 :   self->SetOntransitionend(Constify(arg0));
   11139           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11140             : 
   11141           0 :   return true;
   11142             : }
   11143             : 
   11144             : static const JSJitInfo ontransitionend_getterinfo = {
   11145             :   { (JSJitGetterOp)get_ontransitionend },
   11146             :   { prototypes::id::Document },
   11147             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11148             :   JSJitInfo::Getter,
   11149             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11150             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11151             :   false,  /* isInfallible. False in setters. */
   11152             :   false,  /* isMovable.  Not relevant for setters. */
   11153             :   false, /* isEliminatable.  Not relevant for setters. */
   11154             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11155             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11156             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11157             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11158             : };
   11159             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11160             : static_assert(0 < 1, "There is no slot for us");
   11161             : static const JSJitInfo ontransitionend_setterinfo = {
   11162             :   { (JSJitGetterOp)set_ontransitionend },
   11163             :   { prototypes::id::Document },
   11164             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11165             :   JSJitInfo::Setter,
   11166             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11167             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11168             :   false,  /* isInfallible. False in setters. */
   11169             :   false,  /* isMovable.  Not relevant for setters. */
   11170             :   false, /* isEliminatable.  Not relevant for setters. */
   11171             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11172             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11173             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11174             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11175             : };
   11176             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11177             : static_assert(0 < 1, "There is no slot for us");
   11178             : 
   11179             : static bool
   11180           0 : get_ontransitionrun(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11181             : {
   11182           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitionrun());
   11183           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11184           0 :   if (result) {
   11185           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11186           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11187           0 :       return false;
   11188             :     }
   11189           0 :     return true;
   11190             :   } else {
   11191           0 :     args.rval().setNull();
   11192           0 :     return true;
   11193             :   }
   11194             : }
   11195             : 
   11196             : static bool
   11197           0 : set_ontransitionrun(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   11198             : {
   11199           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11200           0 :   if (args[0].isObject()) {
   11201             :     { // scope for tempRoot
   11202           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11203           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11204             :     }
   11205             :   } else {
   11206           0 :     arg0 = nullptr;
   11207             :   }
   11208           0 :   self->SetOntransitionrun(Constify(arg0));
   11209           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11210             : 
   11211           0 :   return true;
   11212             : }
   11213             : 
   11214             : static const JSJitInfo ontransitionrun_getterinfo = {
   11215             :   { (JSJitGetterOp)get_ontransitionrun },
   11216             :   { prototypes::id::Document },
   11217             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11218             :   JSJitInfo::Getter,
   11219             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11220             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11221             :   false,  /* isInfallible. False in setters. */
   11222             :   false,  /* isMovable.  Not relevant for setters. */
   11223             :   false, /* isEliminatable.  Not relevant for setters. */
   11224             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11225             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11226             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11227             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11228             : };
   11229             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11230             : static_assert(0 < 1, "There is no slot for us");
   11231             : static const JSJitInfo ontransitionrun_setterinfo = {
   11232             :   { (JSJitGetterOp)set_ontransitionrun },
   11233             :   { prototypes::id::Document },
   11234             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11235             :   JSJitInfo::Setter,
   11236             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11237             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11238             :   false,  /* isInfallible. False in setters. */
   11239             :   false,  /* isMovable.  Not relevant for setters. */
   11240             :   false, /* isEliminatable.  Not relevant for setters. */
   11241             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11242             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11243             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11244             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11245             : };
   11246             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11247             : static_assert(0 < 1, "There is no slot for us");
   11248             : 
   11249             : static bool
   11250           0 : get_ontransitionstart(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11251             : {
   11252           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitionstart());
   11253           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11254           0 :   if (result) {
   11255           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11256           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11257           0 :       return false;
   11258             :     }
   11259           0 :     return true;
   11260             :   } else {
   11261           0 :     args.rval().setNull();
   11262           0 :     return true;
   11263             :   }
   11264             : }
   11265             : 
   11266             : static bool
   11267           0 : set_ontransitionstart(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   11268             : {
   11269           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11270           0 :   if (args[0].isObject()) {
   11271             :     { // scope for tempRoot
   11272           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11273           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11274             :     }
   11275             :   } else {
   11276           0 :     arg0 = nullptr;
   11277             :   }
   11278           0 :   self->SetOntransitionstart(Constify(arg0));
   11279           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11280             : 
   11281           0 :   return true;
   11282             : }
   11283             : 
   11284             : static const JSJitInfo ontransitionstart_getterinfo = {
   11285             :   { (JSJitGetterOp)get_ontransitionstart },
   11286             :   { prototypes::id::Document },
   11287             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11288             :   JSJitInfo::Getter,
   11289             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11290             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11291             :   false,  /* isInfallible. False in setters. */
   11292             :   false,  /* isMovable.  Not relevant for setters. */
   11293             :   false, /* isEliminatable.  Not relevant for setters. */
   11294             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11295             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11296             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11297             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11298             : };
   11299             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11300             : static_assert(0 < 1, "There is no slot for us");
   11301             : static const JSJitInfo ontransitionstart_setterinfo = {
   11302             :   { (JSJitGetterOp)set_ontransitionstart },
   11303             :   { prototypes::id::Document },
   11304             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11305             :   JSJitInfo::Setter,
   11306             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11307             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11308             :   false,  /* isInfallible. False in setters. */
   11309             :   false,  /* isMovable.  Not relevant for setters. */
   11310             :   false, /* isEliminatable.  Not relevant for setters. */
   11311             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11312             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11313             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11314             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11315             : };
   11316             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11317             : static_assert(0 < 1, "There is no slot for us");
   11318             : 
   11319             : static bool
   11320           0 : get_onwebkitanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11321             : {
   11322           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationend());
   11323           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11324           0 :   if (result) {
   11325           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11326           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11327           0 :       return false;
   11328             :     }
   11329           0 :     return true;
   11330             :   } else {
   11331           0 :     args.rval().setNull();
   11332           0 :     return true;
   11333             :   }
   11334             : }
   11335             : 
   11336             : static bool
   11337           0 : set_onwebkitanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   11338             : {
   11339           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11340           0 :   if (args[0].isObject()) {
   11341             :     { // scope for tempRoot
   11342           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11343           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11344             :     }
   11345             :   } else {
   11346           0 :     arg0 = nullptr;
   11347             :   }
   11348           0 :   self->SetOnwebkitanimationend(Constify(arg0));
   11349           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11350             : 
   11351           0 :   return true;
   11352             : }
   11353             : 
   11354             : static const JSJitInfo onwebkitanimationend_getterinfo = {
   11355             :   { (JSJitGetterOp)get_onwebkitanimationend },
   11356             :   { prototypes::id::Document },
   11357             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11358             :   JSJitInfo::Getter,
   11359             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11360             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11361             :   false,  /* isInfallible. False in setters. */
   11362             :   false,  /* isMovable.  Not relevant for setters. */
   11363             :   false, /* isEliminatable.  Not relevant for setters. */
   11364             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11365             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11366             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11367             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11368             : };
   11369             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11370             : static_assert(0 < 1, "There is no slot for us");
   11371             : static const JSJitInfo onwebkitanimationend_setterinfo = {
   11372             :   { (JSJitGetterOp)set_onwebkitanimationend },
   11373             :   { prototypes::id::Document },
   11374             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11375             :   JSJitInfo::Setter,
   11376             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11377             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11378             :   false,  /* isInfallible. False in setters. */
   11379             :   false,  /* isMovable.  Not relevant for setters. */
   11380             :   false, /* isEliminatable.  Not relevant for setters. */
   11381             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11382             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11383             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11384             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11385             : };
   11386             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11387             : static_assert(0 < 1, "There is no slot for us");
   11388             : 
   11389             : static bool
   11390           0 : get_onwebkitanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11391             : {
   11392           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationiteration());
   11393           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11394           0 :   if (result) {
   11395           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11396           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11397           0 :       return false;
   11398             :     }
   11399           0 :     return true;
   11400             :   } else {
   11401           0 :     args.rval().setNull();
   11402           0 :     return true;
   11403             :   }
   11404             : }
   11405             : 
   11406             : static bool
   11407           0 : set_onwebkitanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   11408             : {
   11409           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11410           0 :   if (args[0].isObject()) {
   11411             :     { // scope for tempRoot
   11412           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11413           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11414             :     }
   11415             :   } else {
   11416           0 :     arg0 = nullptr;
   11417             :   }
   11418           0 :   self->SetOnwebkitanimationiteration(Constify(arg0));
   11419           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11420             : 
   11421           0 :   return true;
   11422             : }
   11423             : 
   11424             : static const JSJitInfo onwebkitanimationiteration_getterinfo = {
   11425             :   { (JSJitGetterOp)get_onwebkitanimationiteration },
   11426             :   { prototypes::id::Document },
   11427             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11428             :   JSJitInfo::Getter,
   11429             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11430             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11431             :   false,  /* isInfallible. False in setters. */
   11432             :   false,  /* isMovable.  Not relevant for setters. */
   11433             :   false, /* isEliminatable.  Not relevant for setters. */
   11434             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11435             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11436             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11437             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11438             : };
   11439             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11440             : static_assert(0 < 1, "There is no slot for us");
   11441             : static const JSJitInfo onwebkitanimationiteration_setterinfo = {
   11442             :   { (JSJitGetterOp)set_onwebkitanimationiteration },
   11443             :   { prototypes::id::Document },
   11444             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11445             :   JSJitInfo::Setter,
   11446             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11447             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11448             :   false,  /* isInfallible. False in setters. */
   11449             :   false,  /* isMovable.  Not relevant for setters. */
   11450             :   false, /* isEliminatable.  Not relevant for setters. */
   11451             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11452             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11453             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11454             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11455             : };
   11456             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11457             : static_assert(0 < 1, "There is no slot for us");
   11458             : 
   11459             : static bool
   11460           0 : get_onwebkitanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11461             : {
   11462           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationstart());
   11463           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11464           0 :   if (result) {
   11465           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11466           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11467           0 :       return false;
   11468             :     }
   11469           0 :     return true;
   11470             :   } else {
   11471           0 :     args.rval().setNull();
   11472           0 :     return true;
   11473             :   }
   11474             : }
   11475             : 
   11476             : static bool
   11477           0 : set_onwebkitanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   11478             : {
   11479           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11480           0 :   if (args[0].isObject()) {
   11481             :     { // scope for tempRoot
   11482           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11483           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11484             :     }
   11485             :   } else {
   11486           0 :     arg0 = nullptr;
   11487             :   }
   11488           0 :   self->SetOnwebkitanimationstart(Constify(arg0));
   11489           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11490             : 
   11491           0 :   return true;
   11492             : }
   11493             : 
   11494             : static const JSJitInfo onwebkitanimationstart_getterinfo = {
   11495             :   { (JSJitGetterOp)get_onwebkitanimationstart },
   11496             :   { prototypes::id::Document },
   11497             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11498             :   JSJitInfo::Getter,
   11499             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11500             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11501             :   false,  /* isInfallible. False in setters. */
   11502             :   false,  /* isMovable.  Not relevant for setters. */
   11503             :   false, /* isEliminatable.  Not relevant for setters. */
   11504             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11505             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11506             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11507             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11508             : };
   11509             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11510             : static_assert(0 < 1, "There is no slot for us");
   11511             : static const JSJitInfo onwebkitanimationstart_setterinfo = {
   11512             :   { (JSJitGetterOp)set_onwebkitanimationstart },
   11513             :   { prototypes::id::Document },
   11514             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11515             :   JSJitInfo::Setter,
   11516             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11517             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11518             :   false,  /* isInfallible. False in setters. */
   11519             :   false,  /* isMovable.  Not relevant for setters. */
   11520             :   false, /* isEliminatable.  Not relevant for setters. */
   11521             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11522             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11523             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11524             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11525             : };
   11526             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11527             : static_assert(0 < 1, "There is no slot for us");
   11528             : 
   11529             : static bool
   11530           0 : get_onwebkittransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11531             : {
   11532           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkittransitionend());
   11533           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11534           0 :   if (result) {
   11535           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11536           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11537           0 :       return false;
   11538             :     }
   11539           0 :     return true;
   11540             :   } else {
   11541           0 :     args.rval().setNull();
   11542           0 :     return true;
   11543             :   }
   11544             : }
   11545             : 
   11546             : static bool
   11547           0 : set_onwebkittransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   11548             : {
   11549           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11550           0 :   if (args[0].isObject()) {
   11551             :     { // scope for tempRoot
   11552           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11553           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11554             :     }
   11555             :   } else {
   11556           0 :     arg0 = nullptr;
   11557             :   }
   11558           0 :   self->SetOnwebkittransitionend(Constify(arg0));
   11559           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11560             : 
   11561           0 :   return true;
   11562             : }
   11563             : 
   11564             : static const JSJitInfo onwebkittransitionend_getterinfo = {
   11565             :   { (JSJitGetterOp)get_onwebkittransitionend },
   11566             :   { prototypes::id::Document },
   11567             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11568             :   JSJitInfo::Getter,
   11569             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11570             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11571             :   false,  /* isInfallible. False in setters. */
   11572             :   false,  /* isMovable.  Not relevant for setters. */
   11573             :   false, /* isEliminatable.  Not relevant for setters. */
   11574             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11575             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11576             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11577             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11578             : };
   11579             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11580             : static_assert(0 < 1, "There is no slot for us");
   11581             : static const JSJitInfo onwebkittransitionend_setterinfo = {
   11582             :   { (JSJitGetterOp)set_onwebkittransitionend },
   11583             :   { prototypes::id::Document },
   11584             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11585             :   JSJitInfo::Setter,
   11586             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11587             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11588             :   false,  /* isInfallible. False in setters. */
   11589             :   false,  /* isMovable.  Not relevant for setters. */
   11590             :   false, /* isEliminatable.  Not relevant for setters. */
   11591             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11592             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11593             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11594             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11595             : };
   11596             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11597             : static_assert(0 < 1, "There is no slot for us");
   11598             : 
   11599             : static bool
   11600           0 : get_onerror(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11601             : {
   11602           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnerror());
   11603           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11604           0 :   if (result) {
   11605           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11606           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11607           0 :       return false;
   11608             :     }
   11609           0 :     return true;
   11610             :   } else {
   11611           0 :     args.rval().setNull();
   11612           0 :     return true;
   11613             :   }
   11614             : }
   11615             : 
   11616             : static bool
   11617           0 : set_onerror(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   11618             : {
   11619           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11620           0 :   if (args[0].isObject()) {
   11621             :     { // scope for tempRoot
   11622           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11623           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11624             :     }
   11625             :   } else {
   11626           0 :     arg0 = nullptr;
   11627             :   }
   11628           0 :   self->SetOnerror(Constify(arg0));
   11629           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11630             : 
   11631           0 :   return true;
   11632             : }
   11633             : 
   11634             : static const JSJitInfo onerror_getterinfo = {
   11635             :   { (JSJitGetterOp)get_onerror },
   11636             :   { prototypes::id::Document },
   11637             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11638             :   JSJitInfo::Getter,
   11639             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11640             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11641             :   false,  /* isInfallible. False in setters. */
   11642             :   false,  /* isMovable.  Not relevant for setters. */
   11643             :   false, /* isEliminatable.  Not relevant for setters. */
   11644             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11645             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11646             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11647             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11648             : };
   11649             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11650             : static_assert(0 < 1, "There is no slot for us");
   11651             : static const JSJitInfo onerror_setterinfo = {
   11652             :   { (JSJitGetterOp)set_onerror },
   11653             :   { prototypes::id::Document },
   11654             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11655             :   JSJitInfo::Setter,
   11656             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11657             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11658             :   false,  /* isInfallible. False in setters. */
   11659             :   false,  /* isMovable.  Not relevant for setters. */
   11660             :   false, /* isEliminatable.  Not relevant for setters. */
   11661             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11662             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11663             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11664             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11665             : };
   11666             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11667             : static_assert(0 < 1, "There is no slot for us");
   11668             : 
   11669             : static bool
   11670           0 : get_children(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11671             : {
   11672           0 :   auto result(StrongOrRawPtr<nsIHTMLCollection>(self->Children()));
   11673           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11674           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
   11675           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   11676           0 :     return false;
   11677             :   }
   11678           0 :   return true;
   11679             : }
   11680             : 
   11681             : static const JSJitInfo children_getterinfo = {
   11682             :   { (JSJitGetterOp)get_children },
   11683             :   { prototypes::id::Document },
   11684             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11685             :   JSJitInfo::Getter,
   11686             :   JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
   11687             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
   11688             :   false,  /* isInfallible. False in setters. */
   11689             :   true,  /* isMovable.  Not relevant for setters. */
   11690             :   true, /* isEliminatable.  Not relevant for setters. */
   11691             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11692             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11693             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11694             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11695             : };
   11696             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11697             : static_assert(0 < 1, "There is no slot for us");
   11698             : 
   11699             : static bool
   11700           0 : get_firstElementChild(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11701             : {
   11702           0 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetFirstElementChild()));
   11703           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11704           0 :   if (!result) {
   11705           0 :     args.rval().setNull();
   11706           0 :     return true;
   11707             :   }
   11708           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
   11709           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   11710           0 :     return false;
   11711             :   }
   11712           0 :   return true;
   11713             : }
   11714             : 
   11715             : static const JSJitInfo firstElementChild_getterinfo = {
   11716             :   { (JSJitGetterOp)get_firstElementChild },
   11717             :   { prototypes::id::Document },
   11718             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11719             :   JSJitInfo::Getter,
   11720             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
   11721             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11722             :   false,  /* isInfallible. False in setters. */
   11723             :   true,  /* isMovable.  Not relevant for setters. */
   11724             :   true, /* isEliminatable.  Not relevant for setters. */
   11725             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11726             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11727             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11728             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11729             : };
   11730             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11731             : static_assert(0 < 1, "There is no slot for us");
   11732             : 
   11733             : static bool
   11734           0 : get_lastElementChild(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11735             : {
   11736           0 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetLastElementChild()));
   11737           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11738           0 :   if (!result) {
   11739           0 :     args.rval().setNull();
   11740           0 :     return true;
   11741             :   }
   11742           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
   11743           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   11744           0 :     return false;
   11745             :   }
   11746           0 :   return true;
   11747             : }
   11748             : 
   11749             : static const JSJitInfo lastElementChild_getterinfo = {
   11750             :   { (JSJitGetterOp)get_lastElementChild },
   11751             :   { prototypes::id::Document },
   11752             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11753             :   JSJitInfo::Getter,
   11754             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
   11755             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11756             :   false,  /* isInfallible. False in setters. */
   11757             :   true,  /* isMovable.  Not relevant for setters. */
   11758             :   true, /* isEliminatable.  Not relevant for setters. */
   11759             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11760             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11761             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11762             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11763             : };
   11764             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11765             : static_assert(0 < 1, "There is no slot for us");
   11766             : 
   11767             : static bool
   11768           0 : get_childElementCount(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11769             : {
   11770           0 :   uint32_t result(self->ChildElementCount());
   11771           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11772           0 :   args.rval().setNumber(result);
   11773           0 :   return true;
   11774             : }
   11775             : 
   11776             : static const JSJitInfo childElementCount_getterinfo = {
   11777             :   { (JSJitGetterOp)get_childElementCount },
   11778             :   { prototypes::id::Document },
   11779             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11780             :   JSJitInfo::Getter,
   11781             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
   11782             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
   11783             :   true,  /* isInfallible. False in setters. */
   11784             :   true,  /* isMovable.  Not relevant for setters. */
   11785             :   true, /* isEliminatable.  Not relevant for setters. */
   11786             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11787             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11788             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11789             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11790             : };
   11791             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11792             : static_assert(0 < 1, "There is no slot for us");
   11793             : 
   11794             : static bool
   11795           0 : prepend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
   11796             : {
   11797           0 :   binding_detail::AutoSequence<OwningNodeOrString> arg0;
   11798           0 :   if (args.length() > 0) {
   11799           0 :     if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) {
   11800           0 :       JS_ReportOutOfMemory(cx);
   11801           0 :       return false;
   11802             :     }
   11803           0 :     for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) {
   11804           0 :       OwningNodeOrString& slot = *arg0.AppendElement(mozilla::fallible);
   11805             :       {
   11806           0 :         bool done = false, failed = false, tryNext;
   11807           0 :         if (args[variadicArg].isObject()) {
   11808           0 :           done = (failed = !slot.TrySetToNode(cx, args[variadicArg], tryNext, false)) || !tryNext;
   11809             : 
   11810             :         }
   11811           0 :         if (!done) {
   11812             :           do {
   11813           0 :             done = (failed = !slot.TrySetToString(cx, args[variadicArg], tryNext)) || !tryNext;
   11814           0 :             break;
   11815             :           } while (0);
   11816             :         }
   11817           0 :         if (failed) {
   11818           0 :           return false;
   11819             :         }
   11820           0 :         if (!done) {
   11821           0 :           ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 1 of Document.prepend", "Node");
   11822           0 :           return false;
   11823             :         }
   11824             :       }
   11825             :     }
   11826             :   }
   11827           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
   11828           0 :   Maybe<AutoCEReaction> ceReaction;
   11829           0 :   if (reactionsStack) {
   11830           0 :     ceReaction.emplace(reactionsStack);
   11831             :   }
   11832           0 :   binding_detail::FastErrorResult rv;
   11833           0 :   self->Prepend(Constify(arg0), rv);
   11834           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   11835           0 :     return false;
   11836             :   }
   11837           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11838           0 :   args.rval().setUndefined();
   11839           0 :   return true;
   11840             : }
   11841             : 
   11842             : static const JSJitInfo prepend_methodinfo = {
   11843             :   { (JSJitGetterOp)prepend },
   11844             :   { prototypes::id::Document },
   11845             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11846             :   JSJitInfo::Method,
   11847             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11848             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11849             :   false,  /* isInfallible. False in setters. */
   11850             :   false,  /* isMovable.  Not relevant for setters. */
   11851             :   false, /* isEliminatable.  Not relevant for setters. */
   11852             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11853             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11854             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11855             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11856             : };
   11857             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11858             : static_assert(0 < 1, "There is no slot for us");
   11859             : 
   11860             : static bool
   11861           0 : append(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
   11862             : {
   11863           0 :   binding_detail::AutoSequence<OwningNodeOrString> arg0;
   11864           0 :   if (args.length() > 0) {
   11865           0 :     if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) {
   11866           0 :       JS_ReportOutOfMemory(cx);
   11867           0 :       return false;
   11868             :     }
   11869           0 :     for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) {
   11870           0 :       OwningNodeOrString& slot = *arg0.AppendElement(mozilla::fallible);
   11871             :       {
   11872           0 :         bool done = false, failed = false, tryNext;
   11873           0 :         if (args[variadicArg].isObject()) {
   11874           0 :           done = (failed = !slot.TrySetToNode(cx, args[variadicArg], tryNext, false)) || !tryNext;
   11875             : 
   11876             :         }
   11877           0 :         if (!done) {
   11878             :           do {
   11879           0 :             done = (failed = !slot.TrySetToString(cx, args[variadicArg], tryNext)) || !tryNext;
   11880           0 :             break;
   11881             :           } while (0);
   11882             :         }
   11883           0 :         if (failed) {
   11884           0 :           return false;
   11885             :         }
   11886           0 :         if (!done) {
   11887           0 :           ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 1 of Document.append", "Node");
   11888           0 :           return false;
   11889             :         }
   11890             :       }
   11891             :     }
   11892             :   }
   11893           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
   11894           0 :   Maybe<AutoCEReaction> ceReaction;
   11895           0 :   if (reactionsStack) {
   11896           0 :     ceReaction.emplace(reactionsStack);
   11897             :   }
   11898           0 :   binding_detail::FastErrorResult rv;
   11899           0 :   self->Append(Constify(arg0), rv);
   11900           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   11901           0 :     return false;
   11902             :   }
   11903           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11904           0 :   args.rval().setUndefined();
   11905           0 :   return true;
   11906             : }
   11907             : 
   11908             : static const JSJitInfo append_methodinfo = {
   11909             :   { (JSJitGetterOp)append },
   11910             :   { prototypes::id::Document },
   11911             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11912             :   JSJitInfo::Method,
   11913             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11914             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11915             :   false,  /* isInfallible. False in setters. */
   11916             :   false,  /* isMovable.  Not relevant for setters. */
   11917             :   false, /* isEliminatable.  Not relevant for setters. */
   11918             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11919             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11920             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11921             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11922             : };
   11923             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11924             : static_assert(0 < 1, "There is no slot for us");
   11925             : 
   11926             : static bool
   11927           0 : get_ontouchstart(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11928             : {
   11929           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchstart());
   11930           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11931           0 :   if (result) {
   11932           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11933           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11934           0 :       return false;
   11935             :     }
   11936           0 :     return true;
   11937             :   } else {
   11938           0 :     args.rval().setNull();
   11939           0 :     return true;
   11940             :   }
   11941             : }
   11942             : 
   11943             : static bool
   11944           0 : set_ontouchstart(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   11945             : {
   11946           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11947           0 :   if (args[0].isObject()) {
   11948             :     { // scope for tempRoot
   11949           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11950           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11951             :     }
   11952             :   } else {
   11953           0 :     arg0 = nullptr;
   11954             :   }
   11955           0 :   self->SetOntouchstart(Constify(arg0));
   11956           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11957             : 
   11958           0 :   return true;
   11959             : }
   11960             : 
   11961             : static const JSJitInfo ontouchstart_getterinfo = {
   11962             :   { (JSJitGetterOp)get_ontouchstart },
   11963             :   { prototypes::id::Document },
   11964             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11965             :   JSJitInfo::Getter,
   11966             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11967             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11968             :   false,  /* isInfallible. False in setters. */
   11969             :   false,  /* isMovable.  Not relevant for setters. */
   11970             :   false, /* isEliminatable.  Not relevant for setters. */
   11971             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11972             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11973             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11974             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11975             : };
   11976             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11977             : static_assert(0 < 1, "There is no slot for us");
   11978             : static const JSJitInfo ontouchstart_setterinfo = {
   11979             :   { (JSJitGetterOp)set_ontouchstart },
   11980             :   { prototypes::id::Document },
   11981             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   11982             :   JSJitInfo::Setter,
   11983             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11984             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11985             :   false,  /* isInfallible. False in setters. */
   11986             :   false,  /* isMovable.  Not relevant for setters. */
   11987             :   false, /* isEliminatable.  Not relevant for setters. */
   11988             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11989             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11990             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11991             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11992             : };
   11993             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11994             : static_assert(0 < 1, "There is no slot for us");
   11995             : 
   11996             : static bool
   11997           0 : get_ontouchend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   11998             : {
   11999           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchend());
   12000           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12001           0 :   if (result) {
   12002           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12003           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12004           0 :       return false;
   12005             :     }
   12006           0 :     return true;
   12007             :   } else {
   12008           0 :     args.rval().setNull();
   12009           0 :     return true;
   12010             :   }
   12011             : }
   12012             : 
   12013             : static bool
   12014           0 : set_ontouchend(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   12015             : {
   12016           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12017           0 :   if (args[0].isObject()) {
   12018             :     { // scope for tempRoot
   12019           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12020           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12021             :     }
   12022             :   } else {
   12023           0 :     arg0 = nullptr;
   12024             :   }
   12025           0 :   self->SetOntouchend(Constify(arg0));
   12026           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12027             : 
   12028           0 :   return true;
   12029             : }
   12030             : 
   12031             : static const JSJitInfo ontouchend_getterinfo = {
   12032             :   { (JSJitGetterOp)get_ontouchend },
   12033             :   { prototypes::id::Document },
   12034             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   12035             :   JSJitInfo::Getter,
   12036             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12037             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12038             :   false,  /* isInfallible. False in setters. */
   12039             :   false,  /* isMovable.  Not relevant for setters. */
   12040             :   false, /* isEliminatable.  Not relevant for setters. */
   12041             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12042             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12043             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12044             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12045             : };
   12046             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12047             : static_assert(0 < 1, "There is no slot for us");
   12048             : static const JSJitInfo ontouchend_setterinfo = {
   12049             :   { (JSJitGetterOp)set_ontouchend },
   12050             :   { prototypes::id::Document },
   12051             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   12052             :   JSJitInfo::Setter,
   12053             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12054             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12055             :   false,  /* isInfallible. False in setters. */
   12056             :   false,  /* isMovable.  Not relevant for setters. */
   12057             :   false, /* isEliminatable.  Not relevant for setters. */
   12058             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12059             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12060             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12061             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12062             : };
   12063             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12064             : static_assert(0 < 1, "There is no slot for us");
   12065             : 
   12066             : static bool
   12067           0 : get_ontouchmove(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   12068             : {
   12069           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchmove());
   12070           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12071           0 :   if (result) {
   12072           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12073           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12074           0 :       return false;
   12075             :     }
   12076           0 :     return true;
   12077             :   } else {
   12078           0 :     args.rval().setNull();
   12079           0 :     return true;
   12080             :   }
   12081             : }
   12082             : 
   12083             : static bool
   12084           0 : set_ontouchmove(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   12085             : {
   12086           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12087           0 :   if (args[0].isObject()) {
   12088             :     { // scope for tempRoot
   12089           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12090           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12091             :     }
   12092             :   } else {
   12093           0 :     arg0 = nullptr;
   12094             :   }
   12095           0 :   self->SetOntouchmove(Constify(arg0));
   12096           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12097             : 
   12098           0 :   return true;
   12099             : }
   12100             : 
   12101             : static const JSJitInfo ontouchmove_getterinfo = {
   12102             :   { (JSJitGetterOp)get_ontouchmove },
   12103             :   { prototypes::id::Document },
   12104             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   12105             :   JSJitInfo::Getter,
   12106             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12107             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12108             :   false,  /* isInfallible. False in setters. */
   12109             :   false,  /* isMovable.  Not relevant for setters. */
   12110             :   false, /* isEliminatable.  Not relevant for setters. */
   12111             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12112             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12113             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12114             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12115             : };
   12116             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12117             : static_assert(0 < 1, "There is no slot for us");
   12118             : static const JSJitInfo ontouchmove_setterinfo = {
   12119             :   { (JSJitGetterOp)set_ontouchmove },
   12120             :   { prototypes::id::Document },
   12121             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   12122             :   JSJitInfo::Setter,
   12123             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12124             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12125             :   false,  /* isInfallible. False in setters. */
   12126             :   false,  /* isMovable.  Not relevant for setters. */
   12127             :   false, /* isEliminatable.  Not relevant for setters. */
   12128             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12129             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12130             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12131             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12132             : };
   12133             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12134             : static_assert(0 < 1, "There is no slot for us");
   12135             : 
   12136             : static bool
   12137           0 : get_ontouchcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitGetterCallArgs args)
   12138             : {
   12139           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchcancel());
   12140           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12141           0 :   if (result) {
   12142           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12143           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12144           0 :       return false;
   12145             :     }
   12146           0 :     return true;
   12147             :   } else {
   12148           0 :     args.rval().setNull();
   12149           0 :     return true;
   12150             :   }
   12151             : }
   12152             : 
   12153             : static bool
   12154           0 : set_ontouchcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, JSJitSetterCallArgs args)
   12155             : {
   12156           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12157           0 :   if (args[0].isObject()) {
   12158             :     { // scope for tempRoot
   12159           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12160           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12161             :     }
   12162             :   } else {
   12163           0 :     arg0 = nullptr;
   12164             :   }
   12165           0 :   self->SetOntouchcancel(Constify(arg0));
   12166           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12167             : 
   12168           0 :   return true;
   12169             : }
   12170             : 
   12171             : static const JSJitInfo ontouchcancel_getterinfo = {
   12172             :   { (JSJitGetterOp)get_ontouchcancel },
   12173             :   { prototypes::id::Document },
   12174             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   12175             :   JSJitInfo::Getter,
   12176             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12177             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12178             :   false,  /* isInfallible. False in setters. */
   12179             :   false,  /* isMovable.  Not relevant for setters. */
   12180             :   false, /* isEliminatable.  Not relevant for setters. */
   12181             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12182             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12183             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12184             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12185             : };
   12186             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12187             : static_assert(0 < 1, "There is no slot for us");
   12188             : static const JSJitInfo ontouchcancel_setterinfo = {
   12189             :   { (JSJitGetterOp)set_ontouchcancel },
   12190             :   { prototypes::id::Document },
   12191             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   12192             :   JSJitInfo::Setter,
   12193             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12194             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12195             :   false,  /* isInfallible. False in setters. */
   12196             :   false,  /* isMovable.  Not relevant for setters. */
   12197             :   false, /* isEliminatable.  Not relevant for setters. */
   12198             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12199             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12200             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12201             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12202             : };
   12203             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12204             : static_assert(0 < 1, "There is no slot for us");
   12205             : 
   12206             : static bool
   12207           0 : createExpression(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
   12208             : {
   12209           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   12210           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.createExpression");
   12211             :   }
   12212           0 :   binding_detail::FakeString arg0;
   12213           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
   12214           0 :     return false;
   12215             :   }
   12216           0 :   RootedCallback<RefPtr<binding_detail::FastXPathNSResolver>> arg1(cx);
   12217           0 :   if (args[1].isObject()) {
   12218             :     { // scope for tempRoot
   12219           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[1].toObject());
   12220           0 :       arg1 = new binding_detail::FastXPathNSResolver(tempRoot);
   12221             :     }
   12222           0 :   } else if (args[1].isNullOrUndefined()) {
   12223           0 :     arg1 = nullptr;
   12224             :   } else {
   12225           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of Document.createExpression");
   12226           0 :     return false;
   12227             :   }
   12228           0 :   binding_detail::FastErrorResult rv;
   12229           0 :   auto result(StrongOrRawPtr<mozilla::dom::XPathExpression>(self->CreateExpression(NonNullHelper(Constify(arg0)), Constify(arg1), rv)));
   12230           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   12231           0 :     return false;
   12232             :   }
   12233           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12234             :   static_assert(!IsPointer<decltype(result)>::value,
   12235             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
   12236           0 :   if (!WrapNewBindingNonWrapperCachedObject(cx, obj, result, args.rval())) {
   12237           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   12238           0 :     return false;
   12239             :   }
   12240           0 :   return true;
   12241             : }
   12242             : 
   12243             : static const JSJitInfo createExpression_methodinfo = {
   12244             :   { (JSJitGetterOp)createExpression },
   12245             :   { prototypes::id::Document },
   12246             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   12247             :   JSJitInfo::Method,
   12248             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12249             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
   12250             :   false,  /* isInfallible. False in setters. */
   12251             :   false,  /* isMovable.  Not relevant for setters. */
   12252             :   false, /* isEliminatable.  Not relevant for setters. */
   12253             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12254             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12255             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12256             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12257             : };
   12258             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12259             : static_assert(0 < 1, "There is no slot for us");
   12260             : 
   12261             : static bool
   12262           0 : createNSResolver(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
   12263             : {
   12264           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   12265           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.createNSResolver");
   12266             :   }
   12267           0 :   NonNull<nsINode> arg0;
   12268           0 :   if (args[0].isObject()) {
   12269             :     {
   12270           0 :       nsresult rv = UnwrapObject<prototypes::id::Node, nsINode>(args[0], arg0);
   12271           0 :       if (NS_FAILED(rv)) {
   12272           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Document.createNSResolver", "Node");
   12273           0 :         return false;
   12274             :       }
   12275             :     }
   12276             :   } else {
   12277           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Document.createNSResolver");
   12278           0 :     return false;
   12279             :   }
   12280           0 :   auto result(StrongOrRawPtr<nsINode>(self->CreateNSResolver(NonNullHelper(arg0))));
   12281           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12282           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
   12283           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   12284           0 :     return false;
   12285             :   }
   12286           0 :   return true;
   12287             : }
   12288             : 
   12289             : static const JSJitInfo::ArgType createNSResolver_methodinfo_argTypes[] = { JSJitInfo::Object, JSJitInfo::ArgTypeListEnd };
   12290             : static const JSTypedMethodJitInfo createNSResolver_methodinfo = {
   12291             :   {
   12292             :     { (JSJitGetterOp)createNSResolver },
   12293             :     { prototypes::id::Document },
   12294             :     { PrototypeTraits<prototypes::id::Document>::Depth },
   12295             :     JSJitInfo::Method,
   12296             :     JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
   12297             :     JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
   12298             :     false,  /* isInfallible. False in setters. */
   12299             :     true,  /* isMovable.  Not relevant for setters. */
   12300             :     true, /* isEliminatable.  Not relevant for setters. */
   12301             :     false, /* isAlwaysInSlot.  Only relevant for getters. */
   12302             :     false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12303             :     true,  /* isTypedMethod.  Only relevant for methods. */
   12304             :     0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12305             :   },
   12306             :   createNSResolver_methodinfo_argTypes
   12307             : };
   12308             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12309             : static_assert(0 < 1, "There is no slot for us");
   12310             : 
   12311             : static bool
   12312           0 : evaluate(JSContext* cx, JS::Handle<JSObject*> obj, nsIDocument* self, const JSJitMethodCallArgs& args)
   12313             : {
   12314           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
   12315           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document.evaluate");
   12316             :   }
   12317           0 :   binding_detail::FakeString arg0;
   12318           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
   12319           0 :     return false;
   12320             :   }
   12321           0 :   NonNull<nsINode> arg1;
   12322           0 :   if (args[1].isObject()) {
   12323             :     {
   12324           0 :       nsresult rv = UnwrapObject<prototypes::id::Node, nsINode>(args[1], arg1);
   12325           0 :       if (NS_FAILED(rv)) {
   12326           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of Document.evaluate", "Node");
   12327           0 :         return false;
   12328             :       }
   12329             :     }
   12330             :   } else {
   12331           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of Document.evaluate");
   12332           0 :     return false;
   12333             :   }
   12334           0 :   RootedCallback<RefPtr<binding_detail::FastXPathNSResolver>> arg2(cx);
   12335           0 :   if (args[2].isObject()) {
   12336             :     { // scope for tempRoot
   12337           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[2].toObject());
   12338           0 :       arg2 = new binding_detail::FastXPathNSResolver(tempRoot);
   12339             :     }
   12340           0 :   } else if (args[2].isNullOrUndefined()) {
   12341           0 :     arg2 = nullptr;
   12342             :   } else {
   12343           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 3 of Document.evaluate");
   12344           0 :     return false;
   12345             :   }
   12346             :   uint16_t arg3;
   12347           0 :   if (!ValueToPrimitive<uint16_t, eDefault>(cx, args[3], &arg3)) {
   12348           0 :     return false;
   12349             :   }
   12350           0 :   JS::Rooted<JSObject*> arg4(cx);
   12351           0 :   if (args[4].isObject()) {
   12352           0 :     arg4 = &args[4].toObject();
   12353           0 :   } else if (args[4].isNullOrUndefined()) {
   12354           0 :     arg4 = nullptr;
   12355             :   } else {
   12356           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 5 of Document.evaluate");
   12357           0 :     return false;
   12358             :   }
   12359           0 :   binding_detail::FastErrorResult rv;
   12360           0 :   auto result(StrongOrRawPtr<mozilla::dom::XPathResult>(self->Evaluate(cx, NonNullHelper(Constify(arg0)), NonNullHelper(arg1), Constify(arg2), arg3, arg4, rv)));
   12361           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   12362           0 :     return false;
   12363             :   }
   12364           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12365           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
   12366           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   12367           0 :     return false;
   12368             :   }
   12369           0 :   return true;
   12370             : }
   12371             : 
   12372             : static const JSJitInfo evaluate_methodinfo = {
   12373             :   { (JSJitGetterOp)evaluate },
   12374             :   { prototypes::id::Document },
   12375             :   { PrototypeTraits<prototypes::id::Document>::Depth },
   12376             :   JSJitInfo::Method,
   12377             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12378             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
   12379             :   false,  /* isInfallible. False in setters. */
   12380             :   false,  /* isMovable.  Not relevant for setters. */
   12381             :   false, /* isEliminatable.  Not relevant for setters. */
   12382             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12383             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12384             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12385             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12386             : };
   12387             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12388             : static_assert(0 < 1, "There is no slot for us");
   12389             : 
   12390             : static bool
   12391           0 : genericLenientGetter(JSContext* cx, unsigned argc, JS::Value* vp)
   12392             : {
   12393           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
   12394           0 :   if (!args.thisv().isObject()) {
   12395           0 :     MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12396           0 :     if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
   12397           0 :       return false;
   12398             :     }
   12399           0 :     args.rval().set(JS::UndefinedValue());
   12400           0 :     return true;
   12401             :   }
   12402           0 :   JS::Rooted<JSObject*> obj(cx, &args.thisv().toObject());
   12403             : 
   12404             :   nsIDocument* self;
   12405           0 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
   12406             :   {
   12407           0 :     nsresult rv = UnwrapObject<prototypes::id::Document, nsIDocument>(&rootSelf, self);
   12408           0 :     if (NS_FAILED(rv)) {
   12409           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12410           0 :       if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
   12411           0 :         return false;
   12412             :       }
   12413           0 :       args.rval().set(JS::UndefinedValue());
   12414           0 :       return true;
   12415             :     }
   12416             :   }
   12417           0 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
   12418           0 :   MOZ_ASSERT(info->type() == JSJitInfo::Getter);
   12419           0 :   JSJitGetterOp getter = info->getter;
   12420           0 :   bool ok = getter(cx, obj, self, JSJitGetterCallArgs(args));
   12421             : #ifdef DEBUG
   12422           0 :   if (ok) {
   12423           0 :     AssertReturnTypeMatchesJitinfo(info, args.rval());
   12424             :   }
   12425             : #endif
   12426           0 :   return ok;
   12427             : }
   12428             : 
   12429             : static bool
   12430           0 : genericLenientSetter(JSContext* cx, unsigned argc, JS::Value* vp)
   12431             : {
   12432           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
   12433           0 :   if (!args.thisv().isObject()) {
   12434           0 :     MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12435           0 :     if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
   12436           0 :       return false;
   12437             :     }
   12438           0 :     args.rval().set(JS::UndefinedValue());
   12439           0 :     return true;
   12440             :   }
   12441           0 :   JS::Rooted<JSObject*> obj(cx, &args.thisv().toObject());
   12442             : 
   12443             :   nsIDocument* self;
   12444           0 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
   12445             :   {
   12446           0 :     nsresult rv = UnwrapObject<prototypes::id::Document, nsIDocument>(&rootSelf, self);
   12447           0 :     if (NS_FAILED(rv)) {
   12448           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12449           0 :       if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
   12450           0 :         return false;
   12451             :       }
   12452           0 :       args.rval().set(JS::UndefinedValue());
   12453           0 :       return true;
   12454             :     }
   12455             :   }
   12456           0 :   if (args.length() == 0) {
   12457           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Document attribute setter");
   12458             :   }
   12459           0 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
   12460           0 :   MOZ_ASSERT(info->type() == JSJitInfo::Setter);
   12461           0 :   JSJitSetterOp setter = info->setter;
   12462           0 :   if (!setter(cx, obj, self, JSJitSetterCallArgs(args))) {
   12463           0 :     return false;
   12464             :   }
   12465           0 :   args.rval().setUndefined();
   12466             : #ifdef DEBUG
   12467           0 :   AssertReturnTypeMatchesJitinfo(info, args.rval());
   12468             : #endif
   12469           0 :   return true;
   12470             : }
   12471             : 
   12472             : static bool
   12473           7 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
   12474             : {
   12475           7 :   nsIDocument* self = UnwrapPossiblyNotInitializedDOMObject<nsIDocument>(obj);
   12476             :   // We don't want to preserve if we don't have a wrapper, and we
   12477             :   // obviously can't preserve if we're not initialized.
   12478           7 :   if (self && self->GetWrapperPreserveColor()) {
   12479           0 :     PreserveWrapper(self);
   12480             :   }
   12481           7 :   return true;
   12482             : }
   12483             : 
   12484             : static void
   12485           0 : _finalize(js::FreeOp* fop, JSObject* obj)
   12486             : {
   12487           0 :   nsIDocument* self = UnwrapPossiblyNotInitializedDOMObject<nsIDocument>(obj);
   12488           0 :   if (self) {
   12489           0 :     ClearWrapper(self, self, obj);
   12490           0 :     AddForDeferredFinalization<nsIDocument>(self);
   12491             :   }
   12492           0 : }
   12493             : 
   12494             : static void
   12495           0 : _objectMoved(JSObject* obj, const JSObject* old)
   12496             : {
   12497           0 :   nsIDocument* self = UnwrapPossiblyNotInitializedDOMObject<nsIDocument>(obj);
   12498           0 :   if (self) {
   12499           0 :     UpdateWrapper(self, self, obj, old);
   12500             :   }
   12501           0 : }
   12502             : 
   12503             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
   12504             : #if defined(__clang__)
   12505             : #pragma clang diagnostic push
   12506             : #pragma clang diagnostic ignored "-Wmissing-braces"
   12507             : #endif
   12508             : static const JSFunctionSpec sMethods_specs[] = {
   12509             :   JS_FNSPEC("getElementsByTagName", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getElementsByTagName_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12510             :   JS_FNSPEC("getElementsByTagNameNS", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getElementsByTagNameNS_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   12511             :   JS_FNSPEC("getElementsByClassName", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getElementsByClassName_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12512             :   JS_FNSPEC("getElementById", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getElementById_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12513             :   JS_FNSPEC("createElement", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createElement_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12514             :   JS_FNSPEC("createElementNS", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createElementNS_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   12515             :   JS_FNSPEC("createDocumentFragment", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createDocumentFragment_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   12516             :   JS_FNSPEC("createTextNode", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createTextNode_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12517             :   JS_FNSPEC("createComment", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createComment_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12518             :   JS_FNSPEC("createProcessingInstruction", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createProcessingInstruction_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   12519             :   JS_FNSPEC("importNode", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&importNode_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12520             :   JS_FNSPEC("adoptNode", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&adoptNode_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12521             :   JS_FNSPEC("createEvent", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createEvent_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12522             :   JS_FNSPEC("createRange", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createRange_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   12523             :   JS_FNSPEC("createNodeIterator", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createNodeIterator_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12524             :   JS_FNSPEC("createTreeWalker", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createTreeWalker_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12525             :   JS_FNSPEC("createCDATASection", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createCDATASection_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12526             :   JS_FNSPEC("createAttribute", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createAttribute_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12527             :   JS_FNSPEC("createAttributeNS", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createAttributeNS_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   12528             :   JS_FNSPEC("hasFocus", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&hasFocus_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   12529             :   JS_FNSPEC("releaseCapture", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&releaseCapture_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   12530             :   JS_FNSPEC("mozSetImageElement", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozSetImageElement_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   12531             :   JS_FS_END,
   12532             :   JS_FNSPEC("exitFullscreen", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&exitFullscreen_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   12533             :   JS_FS_END,
   12534             :   JS_FNSPEC("mozCancelFullScreen", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozCancelFullScreen_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   12535             :   JS_FNSPEC("exitPointerLock", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&exitPointerLock_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   12536             :   JS_FS_END,
   12537             :   JS_FNSPEC("registerElement", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&registerElement_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12538             :   JS_FS_END,
   12539             :   JS_FNSPEC("enableStyleSheetsForSet", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&enableStyleSheetsForSet_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12540             :   JS_FNSPEC("elementFromPoint", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&elementFromPoint_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   12541             :   JS_FNSPEC("elementsFromPoint", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&elementsFromPoint_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   12542             :   JS_FNSPEC("caretPositionFromPoint", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&caretPositionFromPoint_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   12543             :   JS_FNSPEC("querySelector", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&querySelector_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12544             :   JS_FNSPEC("querySelectorAll", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&querySelectorAll_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12545             :   JS_FS_END,
   12546             :   JS_FNSPEC("getAnimations", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getAnimations_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   12547             :   JS_FS_END,
   12548             :   JS_FNSPEC("getAnonymousNodes", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getAnonymousNodes_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12549             :   JS_FNSPEC("getAnonymousElementByAttribute", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getAnonymousElementByAttribute_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   12550             :   JS_FNSPEC("getBindingParent", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getBindingParent_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12551             :   JS_FNSPEC("loadBindingDocument", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&loadBindingDocument_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12552             :   JS_FS_END,
   12553             :   JS_FNSPEC("createTouch", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createTouch_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   12554             :   JS_FNSPEC("createTouchList", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createTouchList_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   12555             :   JS_FS_END,
   12556             :   JS_FNSPEC("getBoxQuads", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getBoxQuads_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   12557             :   JS_FS_END,
   12558             :   JS_FNSPEC("convertQuadFromNode", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&convertQuadFromNode_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   12559             :   JS_FNSPEC("convertRectFromNode", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&convertRectFromNode_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   12560             :   JS_FNSPEC("convertPointFromNode", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&convertPointFromNode_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   12561             :   JS_FS_END,
   12562             :   JS_FNSPEC("QueryInterface", QueryInterface, nullptr, 1, 0, nullptr),
   12563             :   JS_FS_END,
   12564             :   JS_FNSPEC("prepend", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&prepend_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   12565             :   JS_FNSPEC("append", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&append_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   12566             :   JS_FNSPEC("createExpression", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createExpression_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   12567             :   JS_FNSPEC("createNSResolver", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createNSResolver_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12568             :   JS_FNSPEC("evaluate", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&evaluate_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   12569             :   JS_FS_END
   12570             : };
   12571             : #if defined(__clang__)
   12572             : #pragma clang diagnostic pop
   12573             : #endif
   12574             : 
   12575             : static PrefableDisablers sMethods_disablers23 = {
   12576             :   true, false, 0, &nsDocument::IsUnprefixedFullscreenEnabled
   12577             : };
   12578             : 
   12579             : static PrefableDisablers sMethods_disablers28 = {
   12580             :   true, false, 0, &CustomElementRegistry::IsCustomElementEnabled
   12581             : };
   12582             : 
   12583             : static PrefableDisablers sMethods_disablers37 = {
   12584             :   true, false, 0, &nsDocument::IsWebAnimationsEnabled
   12585             : };
   12586             : 
   12587             : static PrefableDisablers sMethods_disablers39 = {
   12588             :   true, false, 0, &IsChromeOrXBL
   12589             : };
   12590             : 
   12591             : static PrefableDisablers sMethods_disablers44 = {
   12592             :   true, false, 0, &nsGenericHTMLElement::TouchEventsEnabled
   12593             : };
   12594             : 
   12595             : static PrefableDisablers sMethods_disablers47 = {
   12596             :   true, false, 0, &nsINode::HasBoxQuadsSupport
   12597             : };
   12598             : 
   12599             : static PrefableDisablers sMethods_disablers49 = {
   12600             :   true, false, 0, nullptr
   12601             : };
   12602             : 
   12603             : static PrefableDisablers sMethods_disablers53 = {
   12604             :   true, false, 0, &WantsQueryInterface<nsIDocument>::Enabled
   12605             : };
   12606             : 
   12607             : // Can't be const because the pref-enabled boolean needs to be writable
   12608             : static Prefable<const JSFunctionSpec> sMethods[] = {
   12609             :   { nullptr, &sMethods_specs[0] },
   12610             :   { &sMethods_disablers23, &sMethods_specs[23] },
   12611             :   { nullptr, &sMethods_specs[25] },
   12612             :   { &sMethods_disablers28, &sMethods_specs[28] },
   12613             :   { nullptr, &sMethods_specs[30] },
   12614             :   { &sMethods_disablers37, &sMethods_specs[37] },
   12615             :   { &sMethods_disablers39, &sMethods_specs[39] },
   12616             :   { &sMethods_disablers44, &sMethods_specs[44] },
   12617             :   { &sMethods_disablers47, &sMethods_specs[47] },
   12618             :   { &sMethods_disablers49, &sMethods_specs[49] },
   12619             :   { &sMethods_disablers53, &sMethods_specs[53] },
   12620             :   { nullptr, &sMethods_specs[55] },
   12621             :   { nullptr, nullptr }
   12622             : };
   12623             : 
   12624             : static_assert(12 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
   12625             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
   12626             : static_assert(22 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
   12627             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
   12628             : 
   12629             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
   12630             : #if defined(__clang__)
   12631             : #pragma clang diagnostic push
   12632             : #pragma clang diagnostic ignored "-Wmissing-braces"
   12633             : #endif
   12634             : static const JSFunctionSpec sChromeMethods_specs[] = {
   12635             :   JS_FNSPEC("obsoleteSheet", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&obsoleteSheet_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12636             :   JS_FNSPEC("blockParsing", GenericPromiseReturningBindingMethod, reinterpret_cast<const JSJitInfo*>(&blockParsing_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12637             :   JS_FNSPEC("insertAnonymousContent", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&insertAnonymousContent_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12638             :   JS_FNSPEC("removeAnonymousContent", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&removeAnonymousContent_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   12639             :   JS_FS_END
   12640             : };
   12641             : #if defined(__clang__)
   12642             : #pragma clang diagnostic pop
   12643             : #endif
   12644             : 
   12645             : 
   12646             : // Can't be const because the pref-enabled boolean needs to be writable
   12647             : static Prefable<const JSFunctionSpec> sChromeMethods[] = {
   12648             :   { nullptr, &sChromeMethods_specs[0] },
   12649             :   { nullptr, nullptr }
   12650             : };
   12651             : 
   12652             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
   12653             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
   12654             : static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
   12655             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
   12656             : 
   12657             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
   12658             : #if defined(__clang__)
   12659             : #pragma clang diagnostic push
   12660             : #pragma clang diagnostic ignored "-Wmissing-braces"
   12661             : #endif
   12662             : static const JSPropertySpec sAttributes_specs[] = {
   12663             :   { "implementation", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &implementation_getterinfo, nullptr, nullptr },
   12664             :   { "URL", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &URL_getterinfo, nullptr, nullptr },
   12665             :   { "documentURI", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &documentURI_getterinfo, nullptr, nullptr },
   12666             :   { "compatMode", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &compatMode_getterinfo, nullptr, nullptr },
   12667             :   { "characterSet", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &characterSet_getterinfo, nullptr, nullptr },
   12668             :   { "charset", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &charset_getterinfo, nullptr, nullptr },
   12669             :   { "inputEncoding", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &inputEncoding_getterinfo, nullptr, nullptr },
   12670             :   { "contentType", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &contentType_getterinfo, nullptr, nullptr },
   12671             :   { "doctype", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &doctype_getterinfo, nullptr, nullptr },
   12672             :   { "documentElement", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &documentElement_getterinfo, nullptr, nullptr },
   12673             :   { "referrer", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &referrer_getterinfo, nullptr, nullptr },
   12674             :   { "lastModified", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &lastModified_getterinfo, nullptr, nullptr },
   12675             :   { "readyState", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &readyState_getterinfo, nullptr, nullptr },
   12676             :   { "title", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &title_getterinfo, GenericBindingSetter, &title_setterinfo },
   12677             :   { "dir", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &dir_getterinfo, GenericBindingSetter, &dir_setterinfo },
   12678             :   { "defaultView", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &defaultView_getterinfo, nullptr, nullptr },
   12679             :   { "activeElement", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &activeElement_getterinfo, nullptr, nullptr },
   12680             :   { "onreadystatechange", JSPROP_SHARED | JSPROP_ENUMERATE, genericLenientGetter, &onreadystatechange_getterinfo, genericLenientSetter, &onreadystatechange_setterinfo },
   12681             :   { "onbeforescriptexecute", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onbeforescriptexecute_getterinfo, GenericBindingSetter, &onbeforescriptexecute_setterinfo },
   12682             :   { "onafterscriptexecute", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onafterscriptexecute_getterinfo, GenericBindingSetter, &onafterscriptexecute_setterinfo },
   12683             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12684             :   { "onselectionchange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onselectionchange_getterinfo, GenericBindingSetter, &onselectionchange_setterinfo },
   12685             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12686             :   { "mozSyntheticDocument", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mozSyntheticDocument_getterinfo, nullptr, nullptr },
   12687             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12688             :   { "currentScript", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &currentScript_getterinfo, nullptr, nullptr },
   12689             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12690             :   { "fullscreen", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &fullscreen_getterinfo, GenericBindingSetter, &fullscreen_setterinfo },
   12691             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12692             :   { "mozFullScreen", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mozFullScreen_getterinfo, nullptr, nullptr },
   12693             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12694             :   { "fullscreenEnabled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &fullscreenEnabled_getterinfo, GenericBindingSetter, &fullscreenEnabled_setterinfo },
   12695             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12696             :   { "mozFullScreenEnabled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mozFullScreenEnabled_getterinfo, nullptr, nullptr },
   12697             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12698             :   { "fullscreenElement", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &fullscreenElement_getterinfo, GenericBindingSetter, &fullscreenElement_setterinfo },
   12699             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12700             :   { "mozFullScreenElement", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mozFullScreenElement_getterinfo, nullptr, nullptr },
   12701             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12702             :   { "onfullscreenchange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onfullscreenchange_getterinfo, GenericBindingSetter, &onfullscreenchange_setterinfo },
   12703             :   { "onfullscreenerror", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onfullscreenerror_getterinfo, GenericBindingSetter, &onfullscreenerror_setterinfo },
   12704             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12705             :   { "pointerLockElement", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &pointerLockElement_getterinfo, nullptr, nullptr },
   12706             :   { "onpointerlockchange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerlockchange_getterinfo, GenericBindingSetter, &onpointerlockchange_setterinfo },
   12707             :   { "onpointerlockerror", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerlockerror_getterinfo, GenericBindingSetter, &onpointerlockerror_setterinfo },
   12708             :   { "hidden", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &hidden_getterinfo, nullptr, nullptr },
   12709             :   { "visibilityState", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &visibilityState_getterinfo, nullptr, nullptr },
   12710             :   { "styleSheets", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &styleSheets_getterinfo, nullptr, nullptr },
   12711             :   { "selectedStyleSheetSet", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &selectedStyleSheetSet_getterinfo, GenericBindingSetter, &selectedStyleSheetSet_setterinfo },
   12712             :   { "lastStyleSheetSet", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &lastStyleSheetSet_getterinfo, nullptr, nullptr },
   12713             :   { "preferredStyleSheetSet", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &preferredStyleSheetSet_getterinfo, nullptr, nullptr },
   12714             :   { "styleSheetSets", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &styleSheetSets_getterinfo, nullptr, nullptr },
   12715             :   { "scrollingElement", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &scrollingElement_getterinfo, nullptr, nullptr },
   12716             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12717             :   { "timeline", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &timeline_getterinfo, nullptr, nullptr },
   12718             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12719             :   { "rootElement", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &rootElement_getterinfo, nullptr, nullptr },
   12720             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12721             :   { "hasScriptsBlockedBySandbox", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &hasScriptsBlockedBySandbox_getterinfo, nullptr, nullptr },
   12722             :   { "inlineScriptAllowedByCSP", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &inlineScriptAllowedByCSP_getterinfo, nullptr, nullptr },
   12723             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12724             :   { "oncopy", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oncopy_getterinfo, GenericBindingSetter, &oncopy_setterinfo },
   12725             :   { "oncut", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oncut_getterinfo, GenericBindingSetter, &oncut_setterinfo },
   12726             :   { "onpaste", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpaste_getterinfo, GenericBindingSetter, &onpaste_setterinfo },
   12727             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12728             :   { "fonts", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &fonts_getterinfo, nullptr, nullptr },
   12729             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12730             :   { "onabort", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onabort_getterinfo, GenericBindingSetter, &onabort_setterinfo },
   12731             :   { "onblur", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onblur_getterinfo, GenericBindingSetter, &onblur_setterinfo },
   12732             :   { "onfocus", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onfocus_getterinfo, GenericBindingSetter, &onfocus_setterinfo },
   12733             :   { "onauxclick", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onauxclick_getterinfo, GenericBindingSetter, &onauxclick_setterinfo },
   12734             :   { "oncanplay", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oncanplay_getterinfo, GenericBindingSetter, &oncanplay_setterinfo },
   12735             :   { "oncanplaythrough", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oncanplaythrough_getterinfo, GenericBindingSetter, &oncanplaythrough_setterinfo },
   12736             :   { "onchange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onchange_getterinfo, GenericBindingSetter, &onchange_setterinfo },
   12737             :   { "onclick", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onclick_getterinfo, GenericBindingSetter, &onclick_setterinfo },
   12738             :   { "onclose", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onclose_getterinfo, GenericBindingSetter, &onclose_setterinfo },
   12739             :   { "oncontextmenu", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oncontextmenu_getterinfo, GenericBindingSetter, &oncontextmenu_setterinfo },
   12740             :   { "ondblclick", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondblclick_getterinfo, GenericBindingSetter, &ondblclick_setterinfo },
   12741             :   { "ondrag", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondrag_getterinfo, GenericBindingSetter, &ondrag_setterinfo },
   12742             :   { "ondragend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragend_getterinfo, GenericBindingSetter, &ondragend_setterinfo },
   12743             :   { "ondragenter", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragenter_getterinfo, GenericBindingSetter, &ondragenter_setterinfo },
   12744             :   { "ondragexit", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragexit_getterinfo, GenericBindingSetter, &ondragexit_setterinfo },
   12745             :   { "ondragleave", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragleave_getterinfo, GenericBindingSetter, &ondragleave_setterinfo },
   12746             :   { "ondragover", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragover_getterinfo, GenericBindingSetter, &ondragover_setterinfo },
   12747             :   { "ondragstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragstart_getterinfo, GenericBindingSetter, &ondragstart_setterinfo },
   12748             :   { "ondrop", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondrop_getterinfo, GenericBindingSetter, &ondrop_setterinfo },
   12749             :   { "ondurationchange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondurationchange_getterinfo, GenericBindingSetter, &ondurationchange_setterinfo },
   12750             :   { "onemptied", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onemptied_getterinfo, GenericBindingSetter, &onemptied_setterinfo },
   12751             :   { "onended", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onended_getterinfo, GenericBindingSetter, &onended_setterinfo },
   12752             :   { "oninput", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oninput_getterinfo, GenericBindingSetter, &oninput_setterinfo },
   12753             :   { "oninvalid", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oninvalid_getterinfo, GenericBindingSetter, &oninvalid_setterinfo },
   12754             :   { "onkeydown", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onkeydown_getterinfo, GenericBindingSetter, &onkeydown_setterinfo },
   12755             :   { "onkeypress", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onkeypress_getterinfo, GenericBindingSetter, &onkeypress_setterinfo },
   12756             :   { "onkeyup", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onkeyup_getterinfo, GenericBindingSetter, &onkeyup_setterinfo },
   12757             :   { "onload", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onload_getterinfo, GenericBindingSetter, &onload_setterinfo },
   12758             :   { "onloadeddata", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onloadeddata_getterinfo, GenericBindingSetter, &onloadeddata_setterinfo },
   12759             :   { "onloadedmetadata", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onloadedmetadata_getterinfo, GenericBindingSetter, &onloadedmetadata_setterinfo },
   12760             :   { "onloadend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onloadend_getterinfo, GenericBindingSetter, &onloadend_setterinfo },
   12761             :   { "onloadstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onloadstart_getterinfo, GenericBindingSetter, &onloadstart_setterinfo },
   12762             :   { "onmousedown", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmousedown_getterinfo, GenericBindingSetter, &onmousedown_setterinfo },
   12763             :   { "onmouseenter", JSPROP_SHARED | JSPROP_ENUMERATE, genericLenientGetter, &onmouseenter_getterinfo, genericLenientSetter, &onmouseenter_setterinfo },
   12764             :   { "onmouseleave", JSPROP_SHARED | JSPROP_ENUMERATE, genericLenientGetter, &onmouseleave_getterinfo, genericLenientSetter, &onmouseleave_setterinfo },
   12765             :   { "onmousemove", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmousemove_getterinfo, GenericBindingSetter, &onmousemove_setterinfo },
   12766             :   { "onmouseout", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmouseout_getterinfo, GenericBindingSetter, &onmouseout_setterinfo },
   12767             :   { "onmouseover", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmouseover_getterinfo, GenericBindingSetter, &onmouseover_setterinfo },
   12768             :   { "onmouseup", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmouseup_getterinfo, GenericBindingSetter, &onmouseup_setterinfo },
   12769             :   { "onwheel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwheel_getterinfo, GenericBindingSetter, &onwheel_setterinfo },
   12770             :   { "onpause", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpause_getterinfo, GenericBindingSetter, &onpause_setterinfo },
   12771             :   { "onplay", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onplay_getterinfo, GenericBindingSetter, &onplay_setterinfo },
   12772             :   { "onplaying", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onplaying_getterinfo, GenericBindingSetter, &onplaying_setterinfo },
   12773             :   { "onprogress", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onprogress_getterinfo, GenericBindingSetter, &onprogress_setterinfo },
   12774             :   { "onratechange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onratechange_getterinfo, GenericBindingSetter, &onratechange_setterinfo },
   12775             :   { "onreset", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onreset_getterinfo, GenericBindingSetter, &onreset_setterinfo },
   12776             :   { "onresize", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onresize_getterinfo, GenericBindingSetter, &onresize_setterinfo },
   12777             :   { "onscroll", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onscroll_getterinfo, GenericBindingSetter, &onscroll_setterinfo },
   12778             :   { "onseeked", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onseeked_getterinfo, GenericBindingSetter, &onseeked_setterinfo },
   12779             :   { "onseeking", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onseeking_getterinfo, GenericBindingSetter, &onseeking_setterinfo },
   12780             :   { "onselect", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onselect_getterinfo, GenericBindingSetter, &onselect_setterinfo },
   12781             :   { "onshow", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onshow_getterinfo, GenericBindingSetter, &onshow_setterinfo },
   12782             :   { "onstalled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onstalled_getterinfo, GenericBindingSetter, &onstalled_setterinfo },
   12783             :   { "onsubmit", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onsubmit_getterinfo, GenericBindingSetter, &onsubmit_setterinfo },
   12784             :   { "onsuspend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onsuspend_getterinfo, GenericBindingSetter, &onsuspend_setterinfo },
   12785             :   { "ontimeupdate", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontimeupdate_getterinfo, GenericBindingSetter, &ontimeupdate_setterinfo },
   12786             :   { "onvolumechange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onvolumechange_getterinfo, GenericBindingSetter, &onvolumechange_setterinfo },
   12787             :   { "onwaiting", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwaiting_getterinfo, GenericBindingSetter, &onwaiting_setterinfo },
   12788             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12789             :   { "onselectstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onselectstart_getterinfo, GenericBindingSetter, &onselectstart_setterinfo },
   12790             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12791             :   { "ontoggle", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontoggle_getterinfo, GenericBindingSetter, &ontoggle_setterinfo },
   12792             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12793             :   { "onpointercancel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointercancel_getterinfo, GenericBindingSetter, &onpointercancel_setterinfo },
   12794             :   { "onpointerdown", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerdown_getterinfo, GenericBindingSetter, &onpointerdown_setterinfo },
   12795             :   { "onpointerup", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerup_getterinfo, GenericBindingSetter, &onpointerup_setterinfo },
   12796             :   { "onpointermove", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointermove_getterinfo, GenericBindingSetter, &onpointermove_setterinfo },
   12797             :   { "onpointerout", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerout_getterinfo, GenericBindingSetter, &onpointerout_setterinfo },
   12798             :   { "onpointerover", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerover_getterinfo, GenericBindingSetter, &onpointerover_setterinfo },
   12799             :   { "onpointerenter", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerenter_getterinfo, GenericBindingSetter, &onpointerenter_setterinfo },
   12800             :   { "onpointerleave", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerleave_getterinfo, GenericBindingSetter, &onpointerleave_setterinfo },
   12801             :   { "ongotpointercapture", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ongotpointercapture_getterinfo, GenericBindingSetter, &ongotpointercapture_setterinfo },
   12802             :   { "onlostpointercapture", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onlostpointercapture_getterinfo, GenericBindingSetter, &onlostpointercapture_setterinfo },
   12803             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12804             :   { "onmozfullscreenchange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmozfullscreenchange_getterinfo, GenericBindingSetter, &onmozfullscreenchange_setterinfo },
   12805             :   { "onmozfullscreenerror", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmozfullscreenerror_getterinfo, GenericBindingSetter, &onmozfullscreenerror_setterinfo },
   12806             :   { "onanimationcancel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onanimationcancel_getterinfo, GenericBindingSetter, &onanimationcancel_setterinfo },
   12807             :   { "onanimationend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onanimationend_getterinfo, GenericBindingSetter, &onanimationend_setterinfo },
   12808             :   { "onanimationiteration", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onanimationiteration_getterinfo, GenericBindingSetter, &onanimationiteration_setterinfo },
   12809             :   { "onanimationstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onanimationstart_getterinfo, GenericBindingSetter, &onanimationstart_setterinfo },
   12810             :   { "ontransitioncancel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontransitioncancel_getterinfo, GenericBindingSetter, &ontransitioncancel_setterinfo },
   12811             :   { "ontransitionend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontransitionend_getterinfo, GenericBindingSetter, &ontransitionend_setterinfo },
   12812             :   { "ontransitionrun", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontransitionrun_getterinfo, GenericBindingSetter, &ontransitionrun_setterinfo },
   12813             :   { "ontransitionstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontransitionstart_getterinfo, GenericBindingSetter, &ontransitionstart_setterinfo },
   12814             :   { "onwebkitanimationend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwebkitanimationend_getterinfo, GenericBindingSetter, &onwebkitanimationend_setterinfo },
   12815             :   { "onwebkitanimationiteration", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwebkitanimationiteration_getterinfo, GenericBindingSetter, &onwebkitanimationiteration_setterinfo },
   12816             :   { "onwebkitanimationstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwebkitanimationstart_getterinfo, GenericBindingSetter, &onwebkitanimationstart_setterinfo },
   12817             :   { "onwebkittransitionend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwebkittransitionend_getterinfo, GenericBindingSetter, &onwebkittransitionend_setterinfo },
   12818             :   { "onerror", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onerror_getterinfo, GenericBindingSetter, &onerror_setterinfo },
   12819             :   { "children", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &children_getterinfo, nullptr, nullptr },
   12820             :   { "firstElementChild", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &firstElementChild_getterinfo, nullptr, nullptr },
   12821             :   { "lastElementChild", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &lastElementChild_getterinfo, nullptr, nullptr },
   12822             :   { "childElementCount", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &childElementCount_getterinfo, nullptr, nullptr },
   12823             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   12824             :   { "ontouchstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontouchstart_getterinfo, GenericBindingSetter, &ontouchstart_setterinfo },
   12825             :   { "ontouchend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontouchend_getterinfo, GenericBindingSetter, &ontouchend_setterinfo },
   12826             :   { "ontouchmove", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontouchmove_getterinfo, GenericBindingSetter, &ontouchmove_setterinfo },
   12827             :   { "ontouchcancel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontouchcancel_getterinfo, GenericBindingSetter, &ontouchcancel_setterinfo },
   12828             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
   12829             : };
   12830             : #if defined(__clang__)
   12831             : #pragma clang diagnostic pop
   12832             : #endif
   12833             : 
   12834             : static PrefableDisablers sAttributes_disablers21 = {
   12835             :   true, false, 0, nullptr
   12836             : };
   12837             : 
   12838             : static PrefableDisablers sAttributes_disablers23 = {
   12839             :   true, false, 0, &IsChromeOrXBL
   12840             : };
   12841             : 
   12842             : static PrefableDisablers sAttributes_disablers27 = {
   12843             :   true, false, 0, &nsDocument::IsUnprefixedFullscreenEnabled
   12844             : };
   12845             : 
   12846             : static PrefableDisablers sAttributes_disablers31 = {
   12847             :   true, false, 0, &nsDocument::IsUnprefixedFullscreenEnabled
   12848             : };
   12849             : 
   12850             : static PrefableDisablers sAttributes_disablers35 = {
   12851             :   true, false, 0, &nsDocument::IsUnprefixedFullscreenEnabled
   12852             : };
   12853             : 
   12854             : static PrefableDisablers sAttributes_disablers39 = {
   12855             :   true, false, 0, &nsDocument::IsUnprefixedFullscreenEnabled
   12856             : };
   12857             : 
   12858             : static PrefableDisablers sAttributes_disablers54 = {
   12859             :   true, false, 0, &nsDocument::IsWebAnimationsEnabled
   12860             : };
   12861             : 
   12862             : static PrefableDisablers sAttributes_disablers58 = {
   12863             :   true, false, 0, &IsChromeOrXBL
   12864             : };
   12865             : 
   12866             : static PrefableDisablers sAttributes_disablers65 = {
   12867             :   true, false, 0, nullptr
   12868             : };
   12869             : 
   12870             : static PrefableDisablers sAttributes_disablers126 = {
   12871             :   true, false, 0, nullptr
   12872             : };
   12873             : 
   12874             : static PrefableDisablers sAttributes_disablers130 = {
   12875             :   true, false, 0, nullptr
   12876             : };
   12877             : 
   12878             : static PrefableDisablers sAttributes_disablers161 = {
   12879             :   true, false, 0, &nsGenericHTMLElement::TouchEventsEnabled
   12880             : };
   12881             : 
   12882             : // Can't be const because the pref-enabled boolean needs to be writable
   12883             : static Prefable<const JSPropertySpec> sAttributes[] = {
   12884             :   { nullptr, &sAttributes_specs[0] },
   12885             :   { &sAttributes_disablers21, &sAttributes_specs[21] },
   12886             :   { &sAttributes_disablers23, &sAttributes_specs[23] },
   12887             :   { nullptr, &sAttributes_specs[25] },
   12888             :   { &sAttributes_disablers27, &sAttributes_specs[27] },
   12889             :   { nullptr, &sAttributes_specs[29] },
   12890             :   { &sAttributes_disablers31, &sAttributes_specs[31] },
   12891             :   { nullptr, &sAttributes_specs[33] },
   12892             :   { &sAttributes_disablers35, &sAttributes_specs[35] },
   12893             :   { nullptr, &sAttributes_specs[37] },
   12894             :   { &sAttributes_disablers39, &sAttributes_specs[39] },
   12895             :   { nullptr, &sAttributes_specs[42] },
   12896             :   { &sAttributes_disablers54, &sAttributes_specs[54] },
   12897             :   { nullptr, &sAttributes_specs[56] },
   12898             :   { &sAttributes_disablers58, &sAttributes_specs[58] },
   12899             :   { nullptr, &sAttributes_specs[61] },
   12900             :   { &sAttributes_disablers65, &sAttributes_specs[65] },
   12901             :   { nullptr, &sAttributes_specs[67] },
   12902             :   { &sAttributes_disablers126, &sAttributes_specs[126] },
   12903             :   { nullptr, &sAttributes_specs[128] },
   12904             :   { &sAttributes_disablers130, &sAttributes_specs[130] },
   12905             :   { nullptr, &sAttributes_specs[141] },
   12906             :   { &sAttributes_disablers161, &sAttributes_specs[161] },
   12907             :   { nullptr, nullptr }
   12908             : };
   12909             : 
   12910             : static_assert(23 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
   12911             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
   12912             : static_assert(58 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
   12913             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
   12914             : 
   12915             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
   12916             : #if defined(__clang__)
   12917             : #pragma clang diagnostic push
   12918             : #pragma clang diagnostic ignored "-Wmissing-braces"
   12919             : #endif
   12920             : static const JSPropertySpec sChromeAttributes_specs[] = {
   12921             :   { "documentURIObject", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &documentURIObject_getterinfo, nullptr, nullptr },
   12922             :   { "referrerPolicy", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &referrerPolicy_getterinfo, nullptr, nullptr },
   12923             :   { "styleSheetChangeEventsEnabled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &styleSheetChangeEventsEnabled_getterinfo, GenericBindingSetter, &styleSheetChangeEventsEnabled_setterinfo },
   12924             :   { "docShell", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &docShell_getterinfo, nullptr, nullptr },
   12925             :   { "contentLanguage", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &contentLanguage_getterinfo, nullptr, nullptr },
   12926             :   { "documentLoadGroup", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &documentLoadGroup_getterinfo, nullptr, nullptr },
   12927             :   { "mozDocumentURIIfNotForErrorPages", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mozDocumentURIIfNotForErrorPages_getterinfo, nullptr, nullptr },
   12928             :   { "isSrcdocDocument", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &isSrcdocDocument_getterinfo, nullptr, nullptr },
   12929             :   { "sandboxFlagsAsString", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &sandboxFlagsAsString_getterinfo, nullptr, nullptr },
   12930             :   { "userHasInteracted", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &userHasInteracted_getterinfo, nullptr, nullptr },
   12931             :   { "documentFlashClassification", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &documentFlashClassification_getterinfo, nullptr, nullptr },
   12932             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
   12933             : };
   12934             : #if defined(__clang__)
   12935             : #pragma clang diagnostic pop
   12936             : #endif
   12937             : 
   12938             : 
   12939             : // Can't be const because the pref-enabled boolean needs to be writable
   12940             : static Prefable<const JSPropertySpec> sChromeAttributes[] = {
   12941             :   { nullptr, &sChromeAttributes_specs[0] },
   12942             :   { nullptr, nullptr }
   12943             : };
   12944             : 
   12945             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
   12946             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
   12947             : static_assert(11 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
   12948             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
   12949             : 
   12950             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
   12951             : #if defined(__clang__)
   12952             : #pragma clang diagnostic push
   12953             : #pragma clang diagnostic ignored "-Wmissing-braces"
   12954             : #endif
   12955             : static const JSPropertySpec sUnforgeableAttributes_specs[] = {
   12956             :   { "location", JSPROP_SHARED | JSPROP_ENUMERATE | JSPROP_PERMANENT, GenericBindingGetter, &location_getterinfo, GenericBindingSetter, &location_setterinfo },
   12957             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
   12958             : };
   12959             : #if defined(__clang__)
   12960             : #pragma clang diagnostic pop
   12961             : #endif
   12962             : 
   12963             : 
   12964             : // Can't be const because the pref-enabled boolean needs to be writable
   12965             : static Prefable<const JSPropertySpec> sUnforgeableAttributes[] = {
   12966             :   { nullptr, &sUnforgeableAttributes_specs[0] },
   12967             :   { nullptr, nullptr }
   12968             : };
   12969             : 
   12970             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
   12971             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
   12972             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
   12973             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
   12974             : 
   12975             : 
   12976             : static uint16_t sNativeProperties_sortedPropertyIndices[193];
   12977             : static PropertyInfo sNativeProperties_propertyInfos[193];
   12978             : 
   12979             : static const NativePropertiesN<3> sNativeProperties = {
   12980             :   false, 0,
   12981             :   false, 0,
   12982             :   true,  0 /* sMethods */,
   12983             :   true,  1 /* sAttributes */,
   12984             :   false, 0,
   12985             :   true,  2 /* sUnforgeableAttributes */,
   12986             :   false, 0,
   12987             :   -1,
   12988             :   193,
   12989             :   sNativeProperties_sortedPropertyIndices,
   12990             :   {
   12991             :     { sMethods, &sNativeProperties_propertyInfos[0] },
   12992             :     { sAttributes, &sNativeProperties_propertyInfos[49] },
   12993             :     { sUnforgeableAttributes, &sNativeProperties_propertyInfos[192] }
   12994             :   }
   12995             : };
   12996             : static_assert(193 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
   12997             :     "We have a property info count that is oversized");
   12998             : 
   12999             : static uint16_t sChromeOnlyNativeProperties_sortedPropertyIndices[15];
   13000             : static PropertyInfo sChromeOnlyNativeProperties_propertyInfos[15];
   13001             : 
   13002             : static const NativePropertiesN<2> sChromeOnlyNativeProperties = {
   13003             :   false, 0,
   13004             :   false, 0,
   13005             :   true,  0 /* sChromeMethods */,
   13006             :   true,  1 /* sChromeAttributes */,
   13007             :   false, 0,
   13008             :   false, 0,
   13009             :   false, 0,
   13010             :   -1,
   13011             :   15,
   13012             :   sChromeOnlyNativeProperties_sortedPropertyIndices,
   13013             :   {
   13014             :     { sChromeMethods, &sChromeOnlyNativeProperties_propertyInfos[0] },
   13015             :     { sChromeAttributes, &sChromeOnlyNativeProperties_propertyInfos[4] }
   13016             :   }
   13017             : };
   13018             : static_assert(15 < 1ull << CHAR_BIT * sizeof(sChromeOnlyNativeProperties.propertyInfoCount),
   13019             :     "We have a property info count that is oversized");
   13020             : 
   13021             : static bool
   13022           0 : _constructor(JSContext* cx, unsigned argc, JS::Value* vp)
   13023             : {
   13024           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
   13025           0 :   JS::Rooted<JSObject*> obj(cx, &args.callee());
   13026           0 :   if (!args.isConstructing()) {
   13027             :     // XXXbz wish I could get the name from the callee instead of
   13028             :     // Adding more relocations
   13029           0 :     return ThrowConstructorWithoutNew(cx, "Document");
   13030             :   }
   13031             : 
   13032           0 :   GlobalObject global(cx, obj);
   13033           0 :   if (global.Failed()) {
   13034           0 :     return false;
   13035             :   }
   13036             : 
   13037           0 :   JS::Rooted<JSObject*> desiredProto(cx);
   13038           0 :   if (!GetDesiredProto(cx, args, &desiredProto)) {
   13039           0 :     return false;
   13040             :   }
   13041             : 
   13042           0 :   bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
   13043           0 :   Maybe<JSAutoCompartment> ac;
   13044           0 :   if (objIsXray) {
   13045           0 :     obj = js::CheckedUnwrap(obj);
   13046           0 :     if (!obj) {
   13047           0 :       return false;
   13048             :     }
   13049           0 :     ac.emplace(cx, obj);
   13050           0 :     if (!JS_WrapObject(cx, &desiredProto)) {
   13051           0 :       return false;
   13052             :     }
   13053             :   }
   13054           0 :   binding_detail::FastErrorResult rv;
   13055           0 :   auto result(StrongOrRawPtr<nsIDocument>(nsIDocument::Constructor(global, rv)));
   13056           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   13057           0 :     return false;
   13058             :   }
   13059           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13060             :   static_assert(!IsPointer<decltype(result)>::value,
   13061             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
   13062           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
   13063           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   13064           0 :     return false;
   13065             :   }
   13066           0 :   return true;
   13067             : }
   13068             : 
   13069             : static const js::ClassOps sInterfaceObjectClassOps = {
   13070             :     nullptr,               /* addProperty */
   13071             :     nullptr,               /* delProperty */
   13072             :     nullptr,               /* getProperty */
   13073             :     nullptr,               /* setProperty */
   13074             :     nullptr,               /* enumerate */
   13075             :     nullptr,               /* newEnumerate */
   13076             :     nullptr,               /* resolve */
   13077             :     nullptr,               /* mayResolve */
   13078             :     nullptr,               /* finalize */
   13079             :     _constructor, /* call */
   13080             :     nullptr,               /* hasInstance */
   13081             :     _constructor, /* construct */
   13082             :     nullptr,               /* trace */
   13083             : };
   13084             : 
   13085             : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
   13086             :   {
   13087             :     "Function",
   13088             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
   13089             :     &sInterfaceObjectClassOps,
   13090             :     JS_NULL_CLASS_SPEC,
   13091             :     JS_NULL_CLASS_EXT,
   13092             :     &sInterfaceObjectClassObjectOps
   13093             :   },
   13094             :   eInterface,
   13095             :   true,
   13096             :   prototypes::id::Document,
   13097             :   PrototypeTraits<prototypes::id::Document>::Depth,
   13098             :   sNativePropertyHooks,
   13099             :   "function Document() {\n    [native code]\n}",
   13100             :   NodeBinding::GetConstructorObject
   13101             : };
   13102             : 
   13103             : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
   13104             :   {
   13105             :     "DocumentPrototype",
   13106             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE + 1 /* slot for the JSObject holding the unforgeable properties */),
   13107             :     JS_NULL_CLASS_OPS,
   13108             :     JS_NULL_CLASS_SPEC,
   13109             :     JS_NULL_CLASS_EXT,
   13110             :     JS_NULL_OBJECT_OPS
   13111             :   },
   13112             :   eInterfacePrototype,
   13113             :   false,
   13114             :   prototypes::id::Document,
   13115             :   PrototypeTraits<prototypes::id::Document>::Depth,
   13116             :   sNativePropertyHooks,
   13117             :   "[object DocumentPrototype]",
   13118             :   NodeBinding::GetProtoObject
   13119             : };
   13120             : 
   13121             : JSObject*
   13122           0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
   13123             : {
   13124           0 :   return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
   13125             : }
   13126             : 
   13127             : static const js::ClassOps sClassOps = {
   13128             :   _addProperty, /* addProperty */
   13129             :   nullptr,               /* delProperty */
   13130             :   nullptr,               /* getProperty */
   13131             :   nullptr,               /* setProperty */
   13132             :   nullptr,               /* enumerate */
   13133             :   nullptr, /* newEnumerate */
   13134             :   nullptr, /* resolve */
   13135             :   nullptr, /* mayResolve */
   13136             :   _finalize, /* finalize */
   13137             :   nullptr, /* call */
   13138             :   nullptr,               /* hasInstance */
   13139             :   nullptr,               /* construct */
   13140             :   nullptr, /* trace */
   13141             : };
   13142             : 
   13143             : static const js::ClassExtension sClassExtension = {
   13144             :   nullptr, /* weakmapKeyDelegateOp */
   13145             :   _objectMoved /* objectMovedOp */
   13146             : };
   13147             : 
   13148             : static const DOMJSClass sClass = {
   13149             :   { "Document",
   13150             :     JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
   13151             :     &sClassOps,
   13152             :     JS_NULL_CLASS_SPEC,
   13153             :     &sClassExtension,
   13154             :     JS_NULL_OBJECT_OPS
   13155             :   },
   13156             :   { prototypes::id::EventTarget, prototypes::id::Node, prototypes::id::Document, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
   13157             :   IsBaseOf<nsISupports, nsIDocument >::value,
   13158             :   sNativePropertyHooks,
   13159             :   FindAssociatedGlobalForNative<nsIDocument>::Get,
   13160             :   GetProtoObjectHandle,
   13161             :   GetCCParticipant<nsIDocument>::Get()
   13162             : };
   13163             : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
   13164             :               "Must have the right minimal number of reserved slots.");
   13165             : static_assert(1 >= 1,
   13166             :               "Must have enough reserved slots.");
   13167             : 
   13168             : const JSClass*
   13169           0 : GetJSClass()
   13170             : {
   13171           0 :   return sClass.ToJSClass();
   13172             : }
   13173             : 
   13174             : bool
   13175           0 : Wrap(JSContext* aCx, nsIDocument* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
   13176             : {
   13177             :   MOZ_ASSERT(static_cast<nsIDocument*>(aObject) ==
   13178             :              reinterpret_cast<nsIDocument*>(aObject),
   13179             :              "Multiple inheritance for nsIDocument is broken.");
   13180             :   MOZ_ASSERT(static_cast<nsINode*>(aObject) ==
   13181             :              reinterpret_cast<nsINode*>(aObject),
   13182             :              "Multiple inheritance for nsINode is broken.");
   13183             :   MOZ_ASSERT(static_cast<mozilla::dom::EventTarget*>(aObject) ==
   13184             :              reinterpret_cast<mozilla::dom::EventTarget*>(aObject),
   13185             :              "Multiple inheritance for mozilla::dom::EventTarget is broken.");
   13186           0 :   MOZ_ASSERT(ToSupportsIsCorrect(aObject));
   13187           0 :   MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
   13188           0 :   MOZ_ASSERT(!aCache->GetWrapper(),
   13189             :              "You should probably not be using Wrap() directly; use "
   13190             :              "GetOrCreateDOMReflector instead");
   13191             : 
   13192           0 :   MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
   13193             :              "nsISupports must be on our primary inheritance chain");
   13194             : 
   13195           0 :   JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
   13196           0 :   if (!global) {
   13197           0 :     return false;
   13198             :   }
   13199           0 :   MOZ_ASSERT(JS_IsGlobalObject(global));
   13200           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(global));
   13201             : 
   13202             :   // That might have ended up wrapping us already, due to the wonders
   13203             :   // of XBL.  Check for that, and bail out as needed.
   13204           0 :   aReflector.set(aCache->GetWrapper());
   13205           0 :   if (aReflector) {
   13206             : #ifdef DEBUG
   13207           0 :     binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
   13208             : #endif // DEBUG
   13209           0 :     return true;
   13210             :   }
   13211             : 
   13212           0 :   JSAutoCompartment ac(aCx, global);
   13213           0 :   JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
   13214           0 :   if (!canonicalProto) {
   13215           0 :     return false;
   13216             :   }
   13217           0 :   JS::Rooted<JSObject*> proto(aCx);
   13218           0 :   if (aGivenProto) {
   13219           0 :     proto = aGivenProto;
   13220             :     // Unfortunately, while aGivenProto was in the compartment of aCx
   13221             :     // coming in, we changed compartments to that of "parent" so may need
   13222             :     // to wrap the proto here.
   13223           0 :     if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
   13224           0 :       if (!JS_WrapObject(aCx, &proto)) {
   13225           0 :         return false;
   13226             :       }
   13227             :     }
   13228             :   } else {
   13229           0 :     proto = canonicalProto;
   13230             :   }
   13231             : 
   13232           0 :   BindingJSObjectCreator<nsIDocument> creator(aCx);
   13233           0 :   creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
   13234           0 :   if (!aReflector) {
   13235           0 :     return false;
   13236             :   }
   13237             : 
   13238           0 :   aCache->SetWrapper(aReflector);
   13239             : 
   13240             :   // Important: do unforgeable property setup after we have handed
   13241             :   // over ownership of the C++ object to obj as needed, so that if
   13242             :   // we fail and it ends up GCed it won't have problems in the
   13243             :   // finalizer trying to drop its ownership of the C++ object.
   13244             :   JS::Rooted<JSObject*> unforgeableHolder(aCx,
   13245           0 :     &js::GetReservedSlot(canonicalProto, DOM_INTERFACE_PROTO_SLOTS_BASE).toObject());
   13246           0 :   if (!JS_InitializePropertiesFromCompatibleNativeObject(aCx, aReflector, unforgeableHolder)) {
   13247           0 :     aCache->ReleaseWrapper(aObject);
   13248           0 :     aCache->ClearWrapper();
   13249           0 :     return false;
   13250             :   }
   13251           0 :   creator.InitializationSucceeded();
   13252             : 
   13253           0 :   MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
   13254             :              aCache->GetWrapperPreserveColor() == aReflector);
   13255             :   // If proto != canonicalProto, we have to preserve our wrapper;
   13256             :   // otherwise we won't be able to properly recreate it later, since
   13257             :   // we won't know what proto to use.  Note that we don't check
   13258             :   // aGivenProto here, since it's entirely possible (and even
   13259             :   // somewhat common) to have a non-null aGivenProto which is the
   13260             :   // same as canonicalProto.
   13261           0 :   if (proto != canonicalProto) {
   13262           0 :     PreserveWrapper(aObject);
   13263             :   }
   13264             : 
   13265           0 :   return true;
   13266             : }
   13267             : 
   13268             : const NativePropertyHooks sNativePropertyHooks[] = { {
   13269             :   nullptr,
   13270             :   nullptr,
   13271             :   nullptr,
   13272             :   { sNativeProperties.Upcast(), sChromeOnlyNativeProperties.Upcast() },
   13273             :   prototypes::id::Document,
   13274             :   constructors::id::Document,
   13275             :   NodeBinding::sNativePropertyHooks,
   13276             :   &DefaultXrayExpandoObjectClass
   13277             : } };
   13278             : 
   13279             : static const char* const unscopableNames[] = {
   13280             :   "prepend",
   13281             :   "append",
   13282             :   nullptr
   13283             : };
   13284             : 
   13285             : void
   13286           7 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
   13287             : {
   13288           7 :   JS::Handle<JSObject*> parentProto(NodeBinding::GetProtoObjectHandle(aCx));
   13289           7 :   if (!parentProto) {
   13290           0 :     return;
   13291             :   }
   13292             : 
   13293           7 :   JS::Handle<JSObject*> constructorProto(NodeBinding::GetConstructorObjectHandle(aCx));
   13294           7 :   if (!constructorProto) {
   13295           0 :     return;
   13296             :   }
   13297             : 
   13298             :   static bool sIdsInited = false;
   13299           7 :   if (!sIdsInited && NS_IsMainThread()) {
   13300           2 :     if (!InitIds(aCx, sNativeProperties.Upcast())) {
   13301           0 :       return;
   13302             :     }
   13303           2 :     if (!InitIds(aCx, sChromeOnlyNativeProperties.Upcast())) {
   13304           0 :       return;
   13305             :     }
   13306           2 :     sIdsInited = true;
   13307             :   }
   13308             : 
   13309             :   static bool sPrefCachesInited = false;
   13310           7 :   if (!sPrefCachesInited && NS_IsMainThread()) {
   13311           2 :     sPrefCachesInited = true;
   13312           2 :     Preferences::AddBoolVarCache(&sMethods[9].disablers->enabled, "layout.css.convertFromNode.enabled");
   13313           2 :     Preferences::AddBoolVarCache(&sAttributes[1].disablers->enabled, "dom.select_events.enabled");
   13314           2 :     Preferences::AddBoolVarCache(&sAttributes[16].disablers->enabled, "layout.css.font-loading-api.enabled");
   13315           2 :     Preferences::AddBoolVarCache(&sAttributes[18].disablers->enabled, "dom.select_events.enabled");
   13316           2 :     Preferences::AddBoolVarCache(&sAttributes[20].disablers->enabled, "dom.w3c_pointer_events.enabled");
   13317             :   }
   13318             : 
   13319           7 :   JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::Document);
   13320           7 :   JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::Document);
   13321          14 :   dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
   13322             :                               &sPrototypeClass.mBase, protoCache,
   13323             :                               constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
   13324             :                               interfaceCache,
   13325             :                               sNativeProperties.Upcast(),
   13326           7 :                               nsContentUtils::ThreadsafeIsSystemCaller(aCx) ? sChromeOnlyNativeProperties.Upcast() : nullptr,
   13327             :                               "Document", aDefineOnGlobal,
   13328             :                               unscopableNames,
   13329           7 :                               false);
   13330             : 
   13331          14 :   JS::Rooted<JSObject*> unforgeableHolder(aCx);
   13332             :   {
   13333          14 :     JS::Rooted<JSObject*> holderProto(aCx, *protoCache);
   13334           7 :     unforgeableHolder = JS_NewObjectWithoutMetadata(aCx, sClass.ToJSClass(), holderProto);
   13335           7 :     if (!unforgeableHolder) {
   13336           0 :       *protoCache = nullptr;
   13337           0 :       if (interfaceCache) {
   13338           0 :         *interfaceCache = nullptr;
   13339             :       }
   13340           0 :       return;
   13341             :     }
   13342             :   }
   13343             : 
   13344           7 :   if (!DefineUnforgeableAttributes(aCx, unforgeableHolder, sUnforgeableAttributes)) {
   13345           0 :     *protoCache = nullptr;
   13346           0 :     if (interfaceCache) {
   13347           0 :       *interfaceCache = nullptr;
   13348             :     }
   13349           0 :     return;
   13350             :   }
   13351             : 
   13352           7 :   if (*protoCache) {
   13353           7 :     js::SetReservedSlot(*protoCache, DOM_INTERFACE_PROTO_SLOTS_BASE,
   13354          14 :                         JS::ObjectValue(*unforgeableHolder));
   13355             :   }
   13356             : }
   13357             : 
   13358             : JS::Handle<JSObject*>
   13359          16 : GetProtoObjectHandle(JSContext* aCx)
   13360             : {
   13361             :   /* Get the interface prototype object for this class.  This will create the
   13362             :      object as needed. */
   13363          16 :   bool aDefineOnGlobal = true;
   13364             : 
   13365             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
   13366          16 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
   13367          16 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
   13368           0 :     return nullptr;
   13369             :   }
   13370             : 
   13371             :   /* Check to see whether the interface objects are already installed */
   13372          16 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
   13373          16 :   if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::Document)) {
   13374          14 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
   13375           7 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
   13376             :   }
   13377             : 
   13378             :   /*
   13379             :    * The object might _still_ be null, but that's OK.
   13380             :    *
   13381             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
   13382             :    * traced by TraceProtoAndIfaceCache() and its contents are never
   13383             :    * changed after they have been set.
   13384             :    *
   13385             :    * Calling address() avoids the read read barrier that does gray
   13386             :    * unmarking, but it's not possible for the object to be gray here.
   13387             :    */
   13388             : 
   13389          16 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::Document);
   13390          16 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
   13391          16 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
   13392             : }
   13393             : 
   13394             : JSObject*
   13395           8 : GetProtoObject(JSContext* aCx)
   13396             : {
   13397           8 :   return GetProtoObjectHandle(aCx);
   13398             : }
   13399             : 
   13400             : JS::Handle<JSObject*>
   13401           8 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
   13402             : {
   13403             :   /* Get the interface object for this class.  This will create the object as
   13404             :      needed. */
   13405             : 
   13406             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
   13407           8 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
   13408           8 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
   13409           0 :     return nullptr;
   13410             :   }
   13411             : 
   13412             :   /* Check to see whether the interface objects are already installed */
   13413           8 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
   13414           8 :   if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::Document)) {
   13415           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
   13416           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
   13417             :   }
   13418             : 
   13419             :   /*
   13420             :    * The object might _still_ be null, but that's OK.
   13421             :    *
   13422             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
   13423             :    * traced by TraceProtoAndIfaceCache() and its contents are never
   13424             :    * changed after they have been set.
   13425             :    *
   13426             :    * Calling address() avoids the read read barrier that does gray
   13427             :    * unmarking, but it's not possible for the object to be gray here.
   13428             :    */
   13429             : 
   13430           8 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::Document);
   13431           8 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
   13432           8 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
   13433             : }
   13434             : 
   13435             : JSObject*
   13436           0 : GetConstructorObject(JSContext* aCx)
   13437             : {
   13438           0 :   return GetConstructorObjectHandle(aCx);
   13439             : }
   13440             : 
   13441             : } // namespace DocumentBinding
   13442             : 
   13443             : 
   13444             : 
   13445             : } // namespace dom
   13446             : } // namespace mozilla

Generated by: LCOV version 1.13