LCOV - code coverage report
Current view: top level - obj-x86_64-pc-linux-gnu/dom/bindings - WindowBinding.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 547 5133 10.7 %
Date: 2017-07-14 16:53:18 Functions: 47 470 10.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* THIS FILE IS AUTOGENERATED FROM Window.webidl BY Codegen.py - DO NOT EDIT */
       2             : 
       3             : #include "AtomList.h"
       4             : #include "Crypto.h"
       5             : #include "CustomElementRegistry.h"
       6             : #include "EventHandlerBinding.h"
       7             : #include "EventTargetBinding.h"
       8             : #include "ExternalBinding.h"
       9             : #include "FunctionBinding.h"
      10             : #include "ImageBitmapBinding.h"
      11             : #include "MozSelfSupportBinding.h"
      12             : #include "Navigator.h"
      13             : #include "RequestBinding.h"
      14             : #include "WindowBinding.h"
      15             : #include "WrapperFactory.h"
      16             : #include "XrayWrapper.h"
      17             : #include "jsapi.h"
      18             : #include "mozilla/FloatingPoint.h"
      19             : #include "mozilla/OwningNonNull.h"
      20             : #include "mozilla/Preferences.h"
      21             : #include "mozilla/UseCounter.h"
      22             : #include "mozilla/dom/BarProps.h"
      23             : #include "mozilla/dom/BindingUtils.h"
      24             : #include "mozilla/dom/CustomElementRegistry.h"
      25             : #include "mozilla/dom/DOMJSClass.h"
      26             : #include "mozilla/dom/Element.h"
      27             : #include "mozilla/dom/Event.h"
      28             : #include "mozilla/dom/IDBFactory.h"
      29             : #include "mozilla/dom/IdleDeadline.h"
      30             : #include "mozilla/dom/IntlUtils.h"
      31             : #include "mozilla/dom/Location.h"
      32             : #include "mozilla/dom/MediaQueryList.h"
      33             : #include "mozilla/dom/NonRefcountedDOMObject.h"
      34             : #include "mozilla/dom/Nullable.h"
      35             : #include "mozilla/dom/Performance.h"
      36             : #include "mozilla/dom/PrimitiveConversions.h"
      37             : #include "mozilla/dom/Promise.h"
      38             : #include "mozilla/dom/ScriptSettings.h"
      39             : #include "mozilla/dom/Selection.h"
      40             : #include "mozilla/dom/SimpleGlobalObject.h"
      41             : #include "mozilla/dom/SpeechSynthesis.h"
      42             : #include "mozilla/dom/Storage.h"
      43             : #include "mozilla/dom/ToJSValue.h"
      44             : #include "mozilla/dom/U2F.h"
      45             : #include "mozilla/dom/UnionConversions.h"
      46             : #include "mozilla/dom/Worklet.h"
      47             : #include "mozilla/dom/XrayExpandoClass.h"
      48             : #include "mozilla/dom/cache/CacheStorage.h"
      49             : #include "nsContentUtils.h"
      50             : #include "nsGenericHTMLElement.h"
      51             : #include "nsGlobalWindow.h"
      52             : #include "nsHistory.h"
      53             : #include "nsIBrowserDOMWindow.h"
      54             : #include "nsICSSDeclaration.h"
      55             : #include "nsIControllers.h"
      56             : #include "nsIDOMOfflineResourceList.h"
      57             : #include "nsIDocument.h"
      58             : #include "nsIMessageManager.h"
      59             : #include "nsISupports.h"
      60             : #include "nsJSUtils.h"
      61             : #include "nsPIDOMWindow.h"
      62             : #include "nsScreen.h"
      63             : #include "nsWindowRoot.h"
      64             : #include "xpcjsid.h"
      65             : 
      66             : namespace mozilla {
      67             : namespace dom {
      68             : 
      69             : namespace ScrollBehaviorValues {
      70             : extern const EnumEntry strings[4] = {
      71             :   {"auto", 4},
      72             :   {"instant", 7},
      73             :   {"smooth", 6},
      74             :   { nullptr, 0 }
      75             : };
      76             : } // namespace ScrollBehaviorValues
      77             : 
      78             : bool
      79           0 : ToJSValue(JSContext* aCx, ScrollBehavior aArgument, JS::MutableHandle<JS::Value> aValue)
      80             : {
      81           0 :   MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(ScrollBehaviorValues::strings));
      82             :   JSString* resultStr =
      83           0 :     JS_NewStringCopyN(aCx, ScrollBehaviorValues::strings[uint32_t(aArgument)].value,
      84           0 :                       ScrollBehaviorValues::strings[uint32_t(aArgument)].length);
      85           0 :   if (!resultStr) {
      86           0 :     return false;
      87             :   }
      88           0 :   aValue.setString(resultStr);
      89           0 :   return true;
      90             : }
      91             : 
      92             : 
      93             : void
      94           0 : ImplCycleCollectionTraverse(nsCycleCollectionTraversalCallback& aCallback, OwningExternalOrWindowProxy& aUnion, const char* aName, uint32_t aFlags)
      95             : {
      96           0 :   if (aUnion.IsExternal()) {
      97           0 :     ImplCycleCollectionTraverse(aCallback, aUnion.GetAsExternal(), "mExternal", aFlags);
      98           0 :   } else if (aUnion.IsWindowProxy()) {
      99           0 :     ImplCycleCollectionTraverse(aCallback, aUnion.GetAsWindowProxy(), "mWindowProxy", aFlags);
     100             :   }
     101           0 : }
     102             : 
     103             : 
     104             : void
     105           0 : ImplCycleCollectionUnlink(OwningExternalOrWindowProxy& aUnion)
     106             : {
     107           0 :   aUnion.Uninit();
     108           0 : }
     109             : 
     110             : 
     111             : bool
     112           0 : ExternalOrWindowProxy::ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const
     113             : {
     114           0 :   switch (mType) {
     115             :     case eUninitialized: {
     116           0 :       return false;
     117             :       break;
     118             :     }
     119             :     case eExternal: {
     120           0 :       if (!GetOrCreateDOMReflector(cx, mValue.mExternal.Value(), rval)) {
     121           0 :         MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     122           0 :         return false;
     123             :       }
     124           0 :       return true;
     125             :       break;
     126             :     }
     127             :     case eWindowProxy: {
     128           0 :       if (!WrapObject(cx, mValue.mWindowProxy.Value(), rval)) {
     129           0 :         return false;
     130             :       }
     131           0 :       return true;
     132             :       break;
     133             :     }
     134             :     default: {
     135           0 :       return false;
     136             :       break;
     137             :     }
     138             :   }
     139             : 
     140             :   return false;
     141             : }
     142             : 
     143             : 
     144             : OwningNonNull<mozilla::dom::External>&
     145           0 : OwningExternalOrWindowProxy::RawSetAsExternal()
     146             : {
     147           0 :   if (mType == eExternal) {
     148           0 :     return mValue.mExternal.Value();
     149             :   }
     150           0 :   MOZ_ASSERT(mType == eUninitialized);
     151           0 :   mType = eExternal;
     152           0 :   return mValue.mExternal.SetValue();
     153             : }
     154             : 
     155             : OwningNonNull<mozilla::dom::External>&
     156           0 : OwningExternalOrWindowProxy::SetAsExternal()
     157             : {
     158           0 :   if (mType == eExternal) {
     159           0 :     return mValue.mExternal.Value();
     160             :   }
     161           0 :   Uninit();
     162           0 :   mType = eExternal;
     163           0 :   return mValue.mExternal.SetValue();
     164             : }
     165             : 
     166             : bool
     167           0 : OwningExternalOrWindowProxy::TrySetToExternal(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl)
     168             : {
     169           0 :   tryNext = false;
     170             :   { // scope for memberSlot
     171           0 :     OwningNonNull<mozilla::dom::External>& memberSlot = RawSetAsExternal();
     172             :     static_assert(IsRefcounted<mozilla::dom::External>::value, "We can only store refcounted classes.");{
     173           0 :       nsresult rv = UnwrapObject<prototypes::id::External, mozilla::dom::External>(value, memberSlot);
     174           0 :       if (NS_FAILED(rv)) {
     175           0 :         DestroyExternal();
     176           0 :         tryNext = true;
     177           0 :         return true;
     178             :       }
     179             :     }
     180             :   }
     181           0 :   return true;
     182             : }
     183             : 
     184             : void
     185           0 : OwningExternalOrWindowProxy::DestroyExternal()
     186             : {
     187           0 :   MOZ_ASSERT(IsExternal(), "Wrong type!");
     188           0 :   mValue.mExternal.Destroy();
     189           0 :   mType = eUninitialized;
     190           0 : }
     191             : 
     192             : 
     193             : 
     194             : 
     195             : RefPtr<nsPIDOMWindowOuter>&
     196           0 : OwningExternalOrWindowProxy::RawSetAsWindowProxy()
     197             : {
     198           0 :   if (mType == eWindowProxy) {
     199           0 :     return mValue.mWindowProxy.Value();
     200             :   }
     201           0 :   MOZ_ASSERT(mType == eUninitialized);
     202           0 :   mType = eWindowProxy;
     203           0 :   return mValue.mWindowProxy.SetValue();
     204             : }
     205             : 
     206             : RefPtr<nsPIDOMWindowOuter>&
     207           0 : OwningExternalOrWindowProxy::SetAsWindowProxy()
     208             : {
     209           0 :   if (mType == eWindowProxy) {
     210           0 :     return mValue.mWindowProxy.Value();
     211             :   }
     212           0 :   Uninit();
     213           0 :   mType = eWindowProxy;
     214           0 :   return mValue.mWindowProxy.SetValue();
     215             : }
     216             : 
     217             : bool
     218           0 : OwningExternalOrWindowProxy::TrySetToWindowProxy(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl)
     219             : {
     220           0 :   tryNext = false;
     221             :   { // scope for memberSlot
     222           0 :     RefPtr<nsPIDOMWindowOuter>& memberSlot = RawSetAsWindowProxy();
     223           0 :     static_assert(IsRefcounted<nsPIDOMWindowOuter>::value, "We can only store refcounted classes.");RefPtr<nsPIDOMWindowOuter> mWindowProxyHolder;
     224           0 :     JS::Rooted<JSObject*> source(cx, &value.toObject());
     225           0 :     if (NS_FAILED(UnwrapArg<nsPIDOMWindowOuter>(cx, source, getter_AddRefs(mWindowProxyHolder)))) {
     226           0 :       DestroyWindowProxy();
     227           0 :       tryNext = true;
     228           0 :       return true;
     229             :     }
     230           0 :     MOZ_ASSERT(mWindowProxyHolder);
     231           0 :     memberSlot = mWindowProxyHolder;
     232             :   }
     233           0 :   return true;
     234             : }
     235             : 
     236             : void
     237           0 : OwningExternalOrWindowProxy::DestroyWindowProxy()
     238             : {
     239           0 :   MOZ_ASSERT(IsWindowProxy(), "Wrong type!");
     240           0 :   mValue.mWindowProxy.Destroy();
     241           0 :   mType = eUninitialized;
     242           0 : }
     243             : 
     244             : 
     245             : 
     246             : 
     247             : void
     248           0 : OwningExternalOrWindowProxy::Uninit()
     249             : {
     250           0 :   switch (mType) {
     251             :     case eUninitialized: {
     252           0 :       break;
     253             :     }
     254             :     case eExternal: {
     255           0 :       DestroyExternal();
     256           0 :       break;
     257             :     }
     258             :     case eWindowProxy: {
     259           0 :       DestroyWindowProxy();
     260           0 :       break;
     261             :     }
     262             :   }
     263           0 : }
     264             : 
     265             : bool
     266           0 : OwningExternalOrWindowProxy::ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const
     267             : {
     268           0 :   switch (mType) {
     269             :     case eUninitialized: {
     270           0 :       return false;
     271             :       break;
     272             :     }
     273             :     case eExternal: {
     274           0 :       if (!GetOrCreateDOMReflector(cx, mValue.mExternal.Value(), rval)) {
     275           0 :         MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     276           0 :         return false;
     277             :       }
     278           0 :       return true;
     279             :       break;
     280             :     }
     281             :     case eWindowProxy: {
     282           0 :       if (!WrapObject(cx, mValue.mWindowProxy.Value(), rval)) {
     283           0 :         return false;
     284             :       }
     285           0 :       return true;
     286             :       break;
     287             :     }
     288             :     default: {
     289           0 :       return false;
     290             :       break;
     291             :     }
     292             :   }
     293             : 
     294             :   return false;
     295             : }
     296             : 
     297             : void
     298           0 : OwningExternalOrWindowProxy::TraceUnion(JSTracer* trc)
     299             : {
     300           0 : }
     301             : 
     302             : OwningExternalOrWindowProxy&
     303           0 : OwningExternalOrWindowProxy::operator=(const OwningExternalOrWindowProxy& aOther)
     304             : {
     305           0 :   switch (aOther.mType) {
     306             :     case eUninitialized: {
     307           0 :       MOZ_ASSERT(mType == eUninitialized,
     308             :                  "We need to destroy ourselves?");
     309           0 :       break;
     310             :     }
     311             :     case eExternal: {
     312           0 :       SetAsExternal() = aOther.GetAsExternal();
     313           0 :       break;
     314             :     }
     315             :     case eWindowProxy: {
     316           0 :       SetAsWindowProxy() = aOther.GetAsWindowProxy();
     317           0 :       break;
     318             :     }
     319             :   }
     320           0 :   return *this;
     321             : }
     322             : 
     323             : 
     324             : 
     325           0 : IdleRequestOptions::IdleRequestOptions()
     326             : {
     327             :   // Safe to pass a null context if we pass a null value
     328           0 :   Init(nullptr, JS::NullHandleValue);
     329           0 : }
     330             : 
     331             : 
     332             : 
     333             : bool
     334           1 : IdleRequestOptions::InitIds(JSContext* cx, IdleRequestOptionsAtoms* atomsCache)
     335             : {
     336           1 :   MOZ_ASSERT(!*reinterpret_cast<jsid**>(atomsCache));
     337             : 
     338             :   // Initialize these in reverse order so that any failure leaves the first one
     339             :   // uninitialized.
     340           1 :   if (!atomsCache->timeout_id.init(cx, "timeout")) {
     341           0 :     return false;
     342             :   }
     343           1 :   return true;
     344             : }
     345             : 
     346             : bool
     347           3 : IdleRequestOptions::Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription, bool passedToJSImpl)
     348             : {
     349             :   // Passing a null JSContext is OK only if we're initing from null,
     350             :   // Since in that case we will not have to do any property gets
     351             :   // Also evaluate isNullOrUndefined in order to avoid false-positive
     352             :   // checkers by static analysis tools
     353           3 :   MOZ_ASSERT_IF(!cx, val.isNull() && val.isNullOrUndefined());
     354           3 :   IdleRequestOptionsAtoms* atomsCache = nullptr;
     355           3 :   if (cx) {
     356           3 :     atomsCache = GetAtomCache<IdleRequestOptionsAtoms>(cx);
     357           3 :     if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
     358           0 :       return false;
     359             :     }
     360             :   }
     361             : 
     362           3 :   if (!IsConvertibleToDictionary(val)) {
     363           0 :     return ThrowErrorMessage(cx, MSG_NOT_DICTIONARY, sourceDescription);
     364             :   }
     365             : 
     366           3 :   bool isNull = val.isNullOrUndefined();
     367             :   // We only need these if !isNull, in which case we have |cx|.
     368           6 :   Maybe<JS::Rooted<JSObject *> > object;
     369           6 :   Maybe<JS::Rooted<JS::Value> > temp;
     370           3 :   if (!isNull) {
     371           2 :     MOZ_ASSERT(cx);
     372           2 :     object.emplace(cx, &val.toObject());
     373           2 :     temp.emplace(cx);
     374             :   }
     375           3 :   if (!isNull) {
     376           2 :     if (!JS_GetPropertyById(cx, *object, atomsCache->timeout_id, temp.ptr())) {
     377           0 :       return false;
     378             :     }
     379             :   }
     380           3 :   if (!isNull && !temp->isUndefined()) {
     381           2 :     mTimeout.Construct();
     382           2 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, temp.ref(), &(mTimeout.Value()))) {
     383           0 :       return false;
     384             :     }
     385           2 :     mIsAnyMemberPresent = true;
     386             :   }
     387           3 :   return true;
     388             : }
     389             : 
     390             : bool
     391           0 : IdleRequestOptions::Init(const nsAString& aJSON)
     392             : {
     393           0 :   AutoJSAPI jsapi;
     394           0 :   JSObject* cleanGlobal = SimpleGlobalObject::Create(SimpleGlobalObject::GlobalType::BindingDetail);
     395           0 :   if (!cleanGlobal) {
     396           0 :     return false;
     397             :   }
     398           0 :   if (!jsapi.Init(cleanGlobal)) {
     399           0 :     return false;
     400             :   }
     401           0 :   JSContext* cx = jsapi.cx();
     402           0 :   JS::Rooted<JS::Value> json(cx);
     403           0 :   bool ok = ParseJSON(cx, aJSON, &json);
     404           0 :   NS_ENSURE_TRUE(ok, false);
     405           0 :   return Init(cx, json);
     406             : }
     407             : 
     408             : bool
     409           0 : IdleRequestOptions::ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const
     410             : {
     411           0 :   IdleRequestOptionsAtoms* atomsCache = GetAtomCache<IdleRequestOptionsAtoms>(cx);
     412           0 :   if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
     413           0 :     return false;
     414             :   }
     415             : 
     416           0 :   JS::Rooted<JSObject*> obj(cx, JS_NewPlainObject(cx));
     417           0 :   if (!obj) {
     418           0 :     return false;
     419             :   }
     420           0 :   rval.set(JS::ObjectValue(*obj));
     421             : 
     422           0 :   if (mTimeout.WasPassed()) {
     423             :     do {
     424             :       // block for our 'break' successCode and scope for 'temp' and 'currentValue'
     425           0 :       JS::Rooted<JS::Value> temp(cx);
     426           0 :       uint32_t const & currentValue = mTimeout.InternalValue();
     427           0 :       temp.setNumber(currentValue);
     428           0 :       if (!JS_DefinePropertyById(cx, obj, atomsCache->timeout_id, temp, JSPROP_ENUMERATE)) {
     429           0 :         return false;
     430             :       }
     431           0 :       break;
     432             :     } while(0);
     433             :   }
     434             : 
     435           0 :   return true;
     436             : }
     437             : 
     438             : bool
     439           0 : IdleRequestOptions::ToJSON(nsAString& aJSON) const
     440             : {
     441           0 :   AutoJSAPI jsapi;
     442           0 :   jsapi.Init();
     443           0 :   JSContext *cx = jsapi.cx();
     444             :   // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here
     445             :   // because we'll only be creating objects, in ways that have no
     446             :   // side-effects, followed by a call to JS::ToJSONMaybeSafely,
     447             :   // which likewise guarantees no side-effects for the sorts of
     448             :   // things we will pass it.
     449           0 :   JSAutoCompartment ac(cx, binding_detail::UnprivilegedJunkScopeOrWorkerGlobal());
     450           0 :   JS::Rooted<JS::Value> val(cx);
     451           0 :   if (!ToObjectInternal(cx, &val)) {
     452           0 :     return false;
     453             :   }
     454           0 :   JS::Rooted<JSObject*> obj(cx, &val.toObject());
     455           0 :   return StringifyToJSON(cx, obj, aJSON);
     456             : }
     457             : 
     458             : void
     459           0 : IdleRequestOptions::TraceDictionary(JSTracer* trc)
     460             : {
     461           0 : }
     462             : 
     463             : IdleRequestOptions&
     464           0 : IdleRequestOptions::operator=(const IdleRequestOptions& aOther)
     465             : {
     466           0 :   mTimeout.Reset();
     467           0 :   if (aOther.mTimeout.WasPassed()) {
     468           0 :     mTimeout.Construct(aOther.mTimeout.Value());
     469             :   }
     470           0 :   return *this;
     471             : }
     472             : 
     473             : namespace binding_detail {
     474             : } // namespace binding_detail
     475             : 
     476             : 
     477             : 
     478           0 : ScrollOptions::ScrollOptions()
     479             : {
     480             :   // Safe to pass a null context if we pass a null value
     481           0 :   Init(nullptr, JS::NullHandleValue);
     482           0 : }
     483             : 
     484             : 
     485             : 
     486             : bool
     487           0 : ScrollOptions::InitIds(JSContext* cx, ScrollOptionsAtoms* atomsCache)
     488             : {
     489           0 :   MOZ_ASSERT(!*reinterpret_cast<jsid**>(atomsCache));
     490             : 
     491             :   // Initialize these in reverse order so that any failure leaves the first one
     492             :   // uninitialized.
     493           0 :   if (!atomsCache->behavior_id.init(cx, "behavior")) {
     494           0 :     return false;
     495             :   }
     496           0 :   return true;
     497             : }
     498             : 
     499             : bool
     500           0 : ScrollOptions::Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription, bool passedToJSImpl)
     501             : {
     502             :   // Passing a null JSContext is OK only if we're initing from null,
     503             :   // Since in that case we will not have to do any property gets
     504             :   // Also evaluate isNullOrUndefined in order to avoid false-positive
     505             :   // checkers by static analysis tools
     506           0 :   MOZ_ASSERT_IF(!cx, val.isNull() && val.isNullOrUndefined());
     507           0 :   ScrollOptionsAtoms* atomsCache = nullptr;
     508           0 :   if (cx) {
     509           0 :     atomsCache = GetAtomCache<ScrollOptionsAtoms>(cx);
     510           0 :     if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
     511           0 :       return false;
     512             :     }
     513             :   }
     514             : 
     515           0 :   if (!IsConvertibleToDictionary(val)) {
     516           0 :     return ThrowErrorMessage(cx, MSG_NOT_DICTIONARY, sourceDescription);
     517             :   }
     518             : 
     519           0 :   bool isNull = val.isNullOrUndefined();
     520             :   // We only need these if !isNull, in which case we have |cx|.
     521           0 :   Maybe<JS::Rooted<JSObject *> > object;
     522           0 :   Maybe<JS::Rooted<JS::Value> > temp;
     523           0 :   if (!isNull) {
     524           0 :     MOZ_ASSERT(cx);
     525           0 :     object.emplace(cx, &val.toObject());
     526           0 :     temp.emplace(cx);
     527             :   }
     528           0 :   if (!isNull) {
     529           0 :     if (!JS_GetPropertyById(cx, *object, atomsCache->behavior_id, temp.ptr())) {
     530           0 :       return false;
     531             :     }
     532             :   }
     533           0 :   if (!isNull && !temp->isUndefined()) {
     534             :     {
     535             :       int index;
     536           0 :       if (!FindEnumStringIndex<true>(cx, temp.ref(), ScrollBehaviorValues::strings, "ScrollBehavior", "'behavior' member of ScrollOptions", &index)) {
     537           0 :         return false;
     538             :       }
     539           0 :       MOZ_ASSERT(index >= 0);
     540           0 :       mBehavior = static_cast<ScrollBehavior>(index);
     541             :     }
     542             :   } else {
     543           0 :     mBehavior = ScrollBehavior::Auto;
     544             :   }
     545           0 :   mIsAnyMemberPresent = true;
     546           0 :   return true;
     547             : }
     548             : 
     549             : bool
     550           0 : ScrollOptions::Init(const nsAString& aJSON)
     551             : {
     552           0 :   AutoJSAPI jsapi;
     553           0 :   JSObject* cleanGlobal = SimpleGlobalObject::Create(SimpleGlobalObject::GlobalType::BindingDetail);
     554           0 :   if (!cleanGlobal) {
     555           0 :     return false;
     556             :   }
     557           0 :   if (!jsapi.Init(cleanGlobal)) {
     558           0 :     return false;
     559             :   }
     560           0 :   JSContext* cx = jsapi.cx();
     561           0 :   JS::Rooted<JS::Value> json(cx);
     562           0 :   bool ok = ParseJSON(cx, aJSON, &json);
     563           0 :   NS_ENSURE_TRUE(ok, false);
     564           0 :   return Init(cx, json);
     565             : }
     566             : 
     567             : bool
     568           0 : ScrollOptions::ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const
     569             : {
     570           0 :   ScrollOptionsAtoms* atomsCache = GetAtomCache<ScrollOptionsAtoms>(cx);
     571           0 :   if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
     572           0 :     return false;
     573             :   }
     574             : 
     575           0 :   JS::Rooted<JSObject*> obj(cx, JS_NewPlainObject(cx));
     576           0 :   if (!obj) {
     577           0 :     return false;
     578             :   }
     579           0 :   rval.set(JS::ObjectValue(*obj));
     580             : 
     581             :   do {
     582             :     // block for our 'break' successCode and scope for 'temp' and 'currentValue'
     583           0 :     JS::Rooted<JS::Value> temp(cx);
     584           0 :     ScrollBehavior const & currentValue = mBehavior;
     585           0 :     if (!ToJSValue(cx, currentValue, &temp)) {
     586           0 :       return false;
     587             :     }
     588           0 :     if (!JS_DefinePropertyById(cx, obj, atomsCache->behavior_id, temp, JSPROP_ENUMERATE)) {
     589           0 :       return false;
     590             :     }
     591           0 :     break;
     592             :   } while(0);
     593             : 
     594           0 :   return true;
     595             : }
     596             : 
     597             : bool
     598           0 : ScrollOptions::ToJSON(nsAString& aJSON) const
     599             : {
     600           0 :   AutoJSAPI jsapi;
     601           0 :   jsapi.Init();
     602           0 :   JSContext *cx = jsapi.cx();
     603             :   // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here
     604             :   // because we'll only be creating objects, in ways that have no
     605             :   // side-effects, followed by a call to JS::ToJSONMaybeSafely,
     606             :   // which likewise guarantees no side-effects for the sorts of
     607             :   // things we will pass it.
     608           0 :   JSAutoCompartment ac(cx, binding_detail::UnprivilegedJunkScopeOrWorkerGlobal());
     609           0 :   JS::Rooted<JS::Value> val(cx);
     610           0 :   if (!ToObjectInternal(cx, &val)) {
     611           0 :     return false;
     612             :   }
     613           0 :   JS::Rooted<JSObject*> obj(cx, &val.toObject());
     614           0 :   return StringifyToJSON(cx, obj, aJSON);
     615             : }
     616             : 
     617             : void
     618           0 : ScrollOptions::TraceDictionary(JSTracer* trc)
     619             : {
     620           0 : }
     621             : 
     622             : ScrollOptions&
     623           0 : ScrollOptions::operator=(const ScrollOptions& aOther)
     624             : {
     625           0 :   mBehavior = aOther.mBehavior;
     626           0 :   return *this;
     627             : }
     628             : 
     629             : namespace binding_detail {
     630             : } // namespace binding_detail
     631             : 
     632             : 
     633             : 
     634           0 : ScrollToOptions::ScrollToOptions()
     635           0 :   : ScrollOptions(FastDictionaryInitializer())
     636             : {
     637             :   // Safe to pass a null context if we pass a null value
     638           0 :   Init(nullptr, JS::NullHandleValue);
     639           0 : }
     640             : 
     641             : 
     642             : 
     643             : bool
     644           0 : ScrollToOptions::InitIds(JSContext* cx, ScrollToOptionsAtoms* atomsCache)
     645             : {
     646           0 :   MOZ_ASSERT(!*reinterpret_cast<jsid**>(atomsCache));
     647             : 
     648             :   // Initialize these in reverse order so that any failure leaves the first one
     649             :   // uninitialized.
     650           0 :   if (!atomsCache->top_id.init(cx, "top") ||
     651           0 :       !atomsCache->left_id.init(cx, "left")) {
     652           0 :     return false;
     653             :   }
     654           0 :   return true;
     655             : }
     656             : 
     657             : bool
     658           0 : ScrollToOptions::Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription, bool passedToJSImpl)
     659             : {
     660             :   // Passing a null JSContext is OK only if we're initing from null,
     661             :   // Since in that case we will not have to do any property gets
     662             :   // Also evaluate isNullOrUndefined in order to avoid false-positive
     663             :   // checkers by static analysis tools
     664           0 :   MOZ_ASSERT_IF(!cx, val.isNull() && val.isNullOrUndefined());
     665           0 :   ScrollToOptionsAtoms* atomsCache = nullptr;
     666           0 :   if (cx) {
     667           0 :     atomsCache = GetAtomCache<ScrollToOptionsAtoms>(cx);
     668           0 :     if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
     669           0 :       return false;
     670             :     }
     671             :   }
     672             : 
     673             :   // Per spec, we init the parent's members first
     674           0 :   if (!ScrollOptions::Init(cx, val)) {
     675           0 :     return false;
     676             :   }
     677             : 
     678           0 :   bool isNull = val.isNullOrUndefined();
     679             :   // We only need these if !isNull, in which case we have |cx|.
     680           0 :   Maybe<JS::Rooted<JSObject *> > object;
     681           0 :   Maybe<JS::Rooted<JS::Value> > temp;
     682           0 :   if (!isNull) {
     683           0 :     MOZ_ASSERT(cx);
     684           0 :     object.emplace(cx, &val.toObject());
     685           0 :     temp.emplace(cx);
     686             :   }
     687           0 :   if (!isNull) {
     688           0 :     if (!JS_GetPropertyById(cx, *object, atomsCache->left_id, temp.ptr())) {
     689           0 :       return false;
     690             :     }
     691             :   }
     692           0 :   if (!isNull && !temp->isUndefined()) {
     693           0 :     mLeft.Construct();
     694           0 :     if (!ValueToPrimitive<double, eDefault>(cx, temp.ref(), &(mLeft.Value()))) {
     695           0 :       return false;
     696             :     }
     697           0 :     mIsAnyMemberPresent = true;
     698             :   }
     699             : 
     700           0 :   if (!isNull) {
     701           0 :     if (!JS_GetPropertyById(cx, *object, atomsCache->top_id, temp.ptr())) {
     702           0 :       return false;
     703             :     }
     704             :   }
     705           0 :   if (!isNull && !temp->isUndefined()) {
     706           0 :     mTop.Construct();
     707           0 :     if (!ValueToPrimitive<double, eDefault>(cx, temp.ref(), &(mTop.Value()))) {
     708           0 :       return false;
     709             :     }
     710           0 :     mIsAnyMemberPresent = true;
     711             :   }
     712           0 :   return true;
     713             : }
     714             : 
     715             : bool
     716           0 : ScrollToOptions::ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const
     717             : {
     718           0 :   ScrollToOptionsAtoms* atomsCache = GetAtomCache<ScrollToOptionsAtoms>(cx);
     719           0 :   if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
     720           0 :     return false;
     721             :   }
     722             : 
     723             :   // Per spec, we define the parent's members first
     724           0 :   if (!ScrollOptions::ToObjectInternal(cx, rval)) {
     725           0 :     return false;
     726             :   }
     727           0 :   JS::Rooted<JSObject*> obj(cx, &rval.toObject());
     728             : 
     729           0 :   if (mLeft.WasPassed()) {
     730             :     do {
     731             :       // block for our 'break' successCode and scope for 'temp' and 'currentValue'
     732           0 :       JS::Rooted<JS::Value> temp(cx);
     733           0 :       double const & currentValue = mLeft.InternalValue();
     734           0 :       temp.set(JS_NumberValue(double(currentValue)));
     735           0 :       if (!JS_DefinePropertyById(cx, obj, atomsCache->left_id, temp, JSPROP_ENUMERATE)) {
     736           0 :         return false;
     737             :       }
     738           0 :       break;
     739             :     } while(0);
     740             :   }
     741             : 
     742           0 :   if (mTop.WasPassed()) {
     743             :     do {
     744             :       // block for our 'break' successCode and scope for 'temp' and 'currentValue'
     745           0 :       JS::Rooted<JS::Value> temp(cx);
     746           0 :       double const & currentValue = mTop.InternalValue();
     747           0 :       temp.set(JS_NumberValue(double(currentValue)));
     748           0 :       if (!JS_DefinePropertyById(cx, obj, atomsCache->top_id, temp, JSPROP_ENUMERATE)) {
     749           0 :         return false;
     750             :       }
     751           0 :       break;
     752             :     } while(0);
     753             :   }
     754             : 
     755           0 :   return true;
     756             : }
     757             : 
     758             : void
     759           0 : ScrollToOptions::TraceDictionary(JSTracer* trc)
     760             : {
     761           0 :   ScrollOptions::TraceDictionary(trc);
     762           0 : }
     763             : 
     764             : ScrollToOptions&
     765           0 : ScrollToOptions::operator=(const ScrollToOptions& aOther)
     766             : {
     767           0 :   ScrollOptions::operator=(aOther);
     768           0 :   mLeft.Reset();
     769           0 :   if (aOther.mLeft.WasPassed()) {
     770           0 :     mLeft.Construct(aOther.mLeft.Value());
     771             :   }
     772           0 :   mTop.Reset();
     773           0 :   if (aOther.mTop.WasPassed()) {
     774           0 :     mTop.Construct(aOther.mTop.Value());
     775             :   }
     776           0 :   return *this;
     777             : }
     778             : 
     779             : namespace binding_detail {
     780             : } // namespace binding_detail
     781             : 
     782             : 
     783             : void
     784           4 : FrameRequestCallback::Call(JSContext* cx, JS::Handle<JS::Value> aThisVal, double time, ErrorResult& aRv)
     785             : {
     786           8 :   JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
     787           8 :   JS::AutoValueVector argv(cx);
     788           4 :   if (!argv.resize(1)) {
     789           0 :     aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
     790           0 :     return;
     791             :   }
     792           4 :   unsigned argc = 1;
     793             : 
     794             :   do {
     795           4 :     argv[0].set(JS_NumberValue(double(time)));
     796           4 :     break;
     797             :   } while (0);
     798             : 
     799           8 :   JS::Rooted<JS::Value> callable(cx, JS::ObjectValue(*mCallback));
     800          12 :   if (!JS::Call(cx, aThisVal, callable,
     801           8 :                 JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
     802           0 :     aRv.NoteJSContextException(cx);
     803           0 :     return;
     804             :   }
     805             : }
     806             : 
     807             : 
     808             : 
     809             : void
     810           1 : IdleRequestCallback::Call(JSContext* cx, JS::Handle<JS::Value> aThisVal, IdleDeadline& deadline, ErrorResult& aRv)
     811             : {
     812           2 :   JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
     813           2 :   JS::AutoValueVector argv(cx);
     814           1 :   if (!argv.resize(1)) {
     815           0 :     aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
     816           0 :     return;
     817             :   }
     818           1 :   unsigned argc = 1;
     819             : 
     820             :   do {
     821           1 :     if (!GetOrCreateDOMReflector(cx, deadline, argv[0])) {
     822           0 :       MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     823           0 :       aRv.Throw(NS_ERROR_UNEXPECTED);
     824           0 :       return;
     825             :     }
     826           1 :     break;
     827             :   } while (0);
     828             : 
     829           2 :   JS::Rooted<JS::Value> callable(cx, JS::ObjectValue(*mCallback));
     830           3 :   if (!JS::Call(cx, aThisVal, callable,
     831           2 :                 JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
     832           0 :     aRv.NoteJSContextException(cx);
     833           0 :     return;
     834             :   }
     835             : }
     836             : 
     837             : 
     838             : 
     839             : namespace binding_detail {
     840             : } // namespace binding_detail
     841             : 
     842             : 
     843             : namespace binding_detail {
     844             : } // namespace binding_detail
     845             : 
     846             : 
     847             : namespace ChromeWindowBinding {
     848             : 
     849             : static bool
     850           0 : _hasInstance(JSContext* cx, unsigned argc, JS::Value* vp)
     851             : {
     852           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
     853           0 :   if (!args.get(0).isObject()) {
     854           0 :     args.rval().setBoolean(false);
     855           0 :     return true;
     856             :   }
     857             : 
     858           0 :   JS::Rooted<JSObject*> instance(cx, &args[0].toObject());
     859             : 
     860           0 :   const DOMJSClass* domClass = GetDOMClass(js::UncheckedUnwrap(instance, /* stopAtWindowProxy = */ false));
     861           0 :   if (!domClass) {
     862             :     // Not a DOM object, so certainly not an instance of this interface
     863           0 :     args.rval().setBoolean(false);
     864           0 :     return true;
     865             :   }
     866             : 
     867           0 :   if (domClass->mInterfaceChain[PrototypeTraits<prototypes::id::Window>::Depth] == prototypes::id::Window) {
     868           0 :     args.rval().setBoolean(UnwrapDOMObject<nsGlobalWindow>(js::UncheckedUnwrap(instance, /* stopAtWindowProxy = */ false))->IsChromeWindow());
     869           0 :     return true;
     870             :   }
     871           0 :   args.rval().setBoolean(false);
     872           0 :   return true;
     873             : }
     874             : 
     875             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
     876             : #if defined(__clang__)
     877             : #pragma clang diagnostic push
     878             : #pragma clang diagnostic ignored "-Wmissing-braces"
     879             : #endif
     880             : static const JSFunctionSpec sStaticMethods_specs[] = {
     881             :   JS_SYM_FNSPEC(hasInstance, _hasInstance, nullptr, 1, JSPROP_READONLY | JSPROP_PERMANENT, nullptr),
     882             :   JS_FS_END
     883             : };
     884             : #if defined(__clang__)
     885             : #pragma clang diagnostic pop
     886             : #endif
     887             : 
     888             : 
     889             : // Can't be const because the pref-enabled boolean needs to be writable
     890             : static Prefable<const JSFunctionSpec> sStaticMethods[] = {
     891             :   { nullptr, &sStaticMethods_specs[0] },
     892             :   { nullptr, nullptr }
     893             : };
     894             : 
     895             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
     896             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
     897             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
     898             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
     899             : 
     900             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
     901             : #if defined(__clang__)
     902             : #pragma clang diagnostic push
     903             : #pragma clang diagnostic ignored "-Wmissing-braces"
     904             : #endif
     905             : static const ConstantSpec sConstants_specs[] = {
     906             :   { "STATE_MAXIMIZED", JS::Int32Value(1) },
     907             :   { "STATE_MINIMIZED", JS::Int32Value(2) },
     908             :   { "STATE_NORMAL", JS::Int32Value(3) },
     909             :   { "STATE_FULLSCREEN", JS::Int32Value(4) },
     910             :   { 0, JS::UndefinedValue() }
     911             : };
     912             : #if defined(__clang__)
     913             : #pragma clang diagnostic pop
     914             : #endif
     915             : 
     916             : static PrefableDisablers sConstants_disablers0 = {
     917             :   true, false, 0, &nsGlobalWindow::IsPrivilegedChromeWindow
     918             : };
     919             : 
     920             : // Can't be const because the pref-enabled boolean needs to be writable
     921             : static Prefable<const ConstantSpec> sConstants[] = {
     922             :   { &sConstants_disablers0, &sConstants_specs[0] },
     923             :   { nullptr, nullptr }
     924             : };
     925             : 
     926             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
     927             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
     928             : static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
     929             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
     930             : 
     931             : 
     932             : static uint16_t sNativeProperties_sortedPropertyIndices[5];
     933             : static PropertyInfo sNativeProperties_propertyInfos[5];
     934             : 
     935             : static const NativePropertiesN<2> sNativeProperties = {
     936             :   true,  0 /* sStaticMethods */,
     937             :   false, 0,
     938             :   false, 0,
     939             :   false, 0,
     940             :   false, 0,
     941             :   false, 0,
     942             :   true,  1 /* sConstants */,
     943             :   -1,
     944             :   5,
     945             :   sNativeProperties_sortedPropertyIndices,
     946             :   {
     947             :     { sStaticMethods, &sNativeProperties_propertyInfos[0] },
     948             :     { sConstants, &sNativeProperties_propertyInfos[1] }
     949             :   }
     950             : };
     951             : static_assert(5 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
     952             :     "We have a property info count that is oversized");
     953             : 
     954             : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
     955             :   {
     956             :     "Function",
     957             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
     958             :     &sBoringInterfaceObjectClassClassOps,
     959             :     JS_NULL_CLASS_SPEC,
     960             :     JS_NULL_CLASS_EXT,
     961             :     &sInterfaceObjectClassObjectOps
     962             :   },
     963             :   eInterface,
     964             :   false,
     965             :   prototypes::id::_ID_Count,
     966             :   0,
     967             :   sNativePropertyHooks,
     968             :   "function ChromeWindow() {\n    [native code]\n}",
     969             :   JS::GetRealmFunctionPrototype
     970             : };
     971             : 
     972             : bool
     973           0 : ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
     974             : {
     975           0 :   return IsChromeOrXBL(aCx, aObj);
     976             : }
     977             : 
     978             : JSObject*
     979           0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
     980             : {
     981           0 :   return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
     982             : }
     983             : 
     984             : const NativePropertyHooks sNativePropertyHooks[] = { {
     985             :   nullptr,
     986             :   nullptr,
     987             :   nullptr,
     988             :   { sNativeProperties.Upcast(), nullptr },
     989             :   prototypes::id::_ID_Count,
     990             :   constructors::id::ChromeWindow,
     991             :   nullptr,
     992             :   &DefaultXrayExpandoObjectClass
     993             : } };
     994             : 
     995             : void
     996           0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
     997             : {
     998           0 :   JS::Rooted<JSObject*> constructorProto(aCx, JS::GetRealmFunctionPrototype(aCx));
     999           0 :   if (!constructorProto) {
    1000           0 :     return;
    1001             :   }
    1002             : 
    1003             :   static bool sIdsInited = false;
    1004           0 :   if (!sIdsInited && NS_IsMainThread()) {
    1005           0 :     if (!InitIds(aCx, sNativeProperties.Upcast())) {
    1006           0 :       return;
    1007             :     }
    1008           0 :     sIdsInited = true;
    1009             :   }
    1010             : 
    1011           0 :   JS::Heap<JSObject*>* protoCache = nullptr;
    1012           0 :   JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::ChromeWindow);
    1013           0 :   dom::CreateInterfaceObjects(aCx, aGlobal, nullptr,
    1014             :                               nullptr, protoCache,
    1015             :                               constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
    1016             :                               interfaceCache,
    1017             :                               sNativeProperties.Upcast(),
    1018             :                               nullptr,
    1019             :                               "ChromeWindow", aDefineOnGlobal,
    1020             :                               nullptr,
    1021           0 :                               false);
    1022             : }
    1023             : 
    1024             : JS::Handle<JSObject*>
    1025           0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
    1026             : {
    1027             :   /* Get the interface object for this class.  This will create the object as
    1028             :      needed. */
    1029             : 
    1030             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    1031           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    1032           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    1033           0 :     return nullptr;
    1034             :   }
    1035             : 
    1036             :   /* Check to see whether the interface objects are already installed */
    1037           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    1038           0 :   if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::ChromeWindow)) {
    1039           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    1040           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    1041             :   }
    1042             : 
    1043             :   /*
    1044             :    * The object might _still_ be null, but that's OK.
    1045             :    *
    1046             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    1047             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    1048             :    * changed after they have been set.
    1049             :    *
    1050             :    * Calling address() avoids the read read barrier that does gray
    1051             :    * unmarking, but it's not possible for the object to be gray here.
    1052             :    */
    1053             : 
    1054           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::ChromeWindow);
    1055           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    1056           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    1057             : }
    1058             : 
    1059             : JSObject*
    1060           0 : GetConstructorObject(JSContext* aCx)
    1061             : {
    1062           0 :   return GetConstructorObjectHandle(aCx);
    1063             : }
    1064             : 
    1065             : } // namespace ChromeWindowBinding
    1066             : 
    1067             : 
    1068             : 
    1069             : namespace WindowBinding {
    1070             : 
    1071             : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<EventTargetBinding::NativeType>::value,
    1072             :               "Can't inherit from an interface with a different ownership model.");
    1073             : 
    1074             : static bool
    1075         157 : get_window(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1076             : {
    1077             :   // Have to either root across the getter call or reget after.
    1078         314 :   JS::Rooted<JSObject*> slotStorage(cx, js::UncheckedUnwrap(obj, /* stopAtWindowProxy = */ false));
    1079         157 :   MOZ_ASSERT(IsDOMObject(slotStorage));
    1080         157 :   const size_t slotIndex = (DOM_INSTANCE_RESERVED_SLOTS + 0);
    1081         157 :   MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
    1082             :   {
    1083             :     // Scope for cachedVal
    1084         157 :     JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
    1085         157 :     if (!cachedVal.isUndefined()) {
    1086         150 :       args.rval().set(cachedVal);
    1087             :       // The cached value is in the compartment of slotStorage,
    1088             :       // so wrap into the caller compartment as needed.
    1089         150 :       return MaybeWrapValue(cx, args.rval());
    1090             :     }
    1091             :   }
    1092             : 
    1093           7 :   auto result(StrongOrRawPtr<nsGlobalWindow>(self->Window()));
    1094           7 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1095             :   {
    1096          14 :     JS::Rooted<JSObject*> conversionScope(cx, slotStorage);
    1097          14 :     JSAutoCompartment ac(cx, conversionScope);
    1098             :     do { // block we break out of when done wrapping
    1099           7 :       if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1100           0 :         MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1101           0 :         return false;
    1102             :       }
    1103           7 :       break;
    1104             :     } while (0);
    1105             :   }
    1106             :   { // And now store things in the compartment of our slotStorage.
    1107          14 :     JSAutoCompartment ac(cx, slotStorage);
    1108             :     // Make a copy so that we don't do unnecessary wrapping on args.rval().
    1109          14 :     JS::Rooted<JS::Value> storedVal(cx, args.rval());
    1110           7 :     if (!MaybeWrapValue(cx, &storedVal)) {
    1111           0 :       return false;
    1112             :     }
    1113           7 :     js::SetReservedSlot(slotStorage, slotIndex, storedVal);
    1114             :   }
    1115             :   // And now make sure args.rval() is in the caller compartment
    1116           7 :   return MaybeWrapValue(cx, args.rval());
    1117             : }
    1118             : 
    1119             : static const JSJitInfo window_getterinfo = {
    1120             :   { (JSJitGetterOp)get_window },
    1121             :   { prototypes::id::Window },
    1122             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1123             :   JSJitInfo::Getter,
    1124             :   JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
    1125             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1126             :   false,  /* isInfallible. False in setters. */
    1127             :   true,  /* isMovable.  Not relevant for setters. */
    1128             :   true, /* isEliminatable.  Not relevant for setters. */
    1129             :   true, /* isAlwaysInSlot.  Only relevant for getters. */
    1130             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1131             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1132             :   (DOM_INSTANCE_RESERVED_SLOTS + 0)   /* Reserved slot index, if we're stored in a slot, else 0. */
    1133             : };
    1134             : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 0) <= JSJitInfo::maxSlotIndex, "We won't fit");
    1135             : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 0) < 5, "There is no slot for us");
    1136             : 
    1137             : static bool
    1138           7 : get_self(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1139             : {
    1140             :   // Have to either root across the getter call or reget after.
    1141          14 :   JS::Rooted<JSObject*> slotStorage(cx, js::UncheckedUnwrap(obj, /* stopAtWindowProxy = */ false));
    1142           7 :   MOZ_ASSERT(IsDOMObject(slotStorage));
    1143           7 :   const size_t slotIndex = (DOM_INSTANCE_RESERVED_SLOTS + 1);
    1144           7 :   MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
    1145             :   {
    1146             :     // Scope for cachedVal
    1147           7 :     JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
    1148           7 :     if (!cachedVal.isUndefined()) {
    1149           0 :       args.rval().set(cachedVal);
    1150             :       // The cached value is in the compartment of slotStorage,
    1151             :       // so wrap into the caller compartment as needed.
    1152           0 :       return MaybeWrapValue(cx, args.rval());
    1153             :     }
    1154             :   }
    1155             : 
    1156           7 :   auto result(StrongOrRawPtr<nsGlobalWindow>(self->Self()));
    1157           7 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1158             :   {
    1159          14 :     JS::Rooted<JSObject*> conversionScope(cx, slotStorage);
    1160          14 :     JSAutoCompartment ac(cx, conversionScope);
    1161             :     do { // block we break out of when done wrapping
    1162           7 :       if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1163           0 :         MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1164           0 :         return false;
    1165             :       }
    1166           7 :       break;
    1167             :     } while (0);
    1168             :   }
    1169             :   { // And now store things in the compartment of our slotStorage.
    1170          14 :     JSAutoCompartment ac(cx, slotStorage);
    1171             :     // Make a copy so that we don't do unnecessary wrapping on args.rval().
    1172          14 :     JS::Rooted<JS::Value> storedVal(cx, args.rval());
    1173           7 :     if (!MaybeWrapValue(cx, &storedVal)) {
    1174           0 :       return false;
    1175             :     }
    1176           7 :     js::SetReservedSlot(slotStorage, slotIndex, storedVal);
    1177             :   }
    1178             :   // And now make sure args.rval() is in the caller compartment
    1179           7 :   return MaybeWrapValue(cx, args.rval());
    1180             : }
    1181             : 
    1182             : static bool
    1183           0 : set_self(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    1184             : {
    1185           0 :   return JS_DefineProperty(cx, obj, "self", args[0], JSPROP_ENUMERATE);
    1186             : }
    1187             : 
    1188             : static const JSJitInfo self_getterinfo = {
    1189             :   { (JSJitGetterOp)get_self },
    1190             :   { prototypes::id::Window },
    1191             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1192             :   JSJitInfo::Getter,
    1193             :   JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
    1194             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1195             :   false,  /* isInfallible. False in setters. */
    1196             :   true,  /* isMovable.  Not relevant for setters. */
    1197             :   true, /* isEliminatable.  Not relevant for setters. */
    1198             :   true, /* isAlwaysInSlot.  Only relevant for getters. */
    1199             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1200             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1201             :   (DOM_INSTANCE_RESERVED_SLOTS + 1)   /* Reserved slot index, if we're stored in a slot, else 0. */
    1202             : };
    1203             : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 1) <= JSJitInfo::maxSlotIndex, "We won't fit");
    1204             : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 1) < 5, "There is no slot for us");
    1205             : static const JSJitInfo self_setterinfo = {
    1206             :   { (JSJitGetterOp)set_self },
    1207             :   { prototypes::id::Window },
    1208             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1209             :   JSJitInfo::Setter,
    1210             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1211             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1212             :   false,  /* isInfallible. False in setters. */
    1213             :   false,  /* isMovable.  Not relevant for setters. */
    1214             :   false, /* isEliminatable.  Not relevant for setters. */
    1215             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1216             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1217             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1218             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1219             : };
    1220             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1221             : static_assert(0 < 5, "There is no slot for us");
    1222             : 
    1223             : static bool
    1224         329 : get_document(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1225             : {
    1226             :   // Have to either root across the getter call or reget after.
    1227         658 :   JS::Rooted<JSObject*> slotStorage(cx, js::UncheckedUnwrap(obj, /* stopAtWindowProxy = */ false));
    1228         329 :   MOZ_ASSERT(IsDOMObject(slotStorage));
    1229         329 :   const size_t slotIndex = (DOM_INSTANCE_RESERVED_SLOTS + 2);
    1230         329 :   MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
    1231             :   {
    1232             :     // Scope for cachedVal
    1233         329 :     JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
    1234         329 :     if (!cachedVal.isUndefined()) {
    1235         314 :       args.rval().set(cachedVal);
    1236             :       // The cached value is in the compartment of slotStorage,
    1237             :       // so wrap into the caller compartment as needed.
    1238         314 :       return MaybeWrapValue(cx, args.rval());
    1239             :     }
    1240             :   }
    1241             : 
    1242          15 :   auto result(StrongOrRawPtr<nsIDocument>(self->GetDocument()));
    1243          15 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1244             :   {
    1245          30 :     JS::Rooted<JSObject*> conversionScope(cx, slotStorage);
    1246          30 :     JSAutoCompartment ac(cx, conversionScope);
    1247             :     do { // block we break out of when done wrapping
    1248          15 :       if (!result) {
    1249           7 :         args.rval().setNull();
    1250           7 :         break;
    1251             :       }
    1252           8 :       if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1253           0 :         MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1254           0 :         return false;
    1255             :       }
    1256           8 :       break;
    1257             :     } while (0);
    1258             :   }
    1259             :   { // And now store things in the compartment of our slotStorage.
    1260          30 :     JSAutoCompartment ac(cx, slotStorage);
    1261             :     // Make a copy so that we don't do unnecessary wrapping on args.rval().
    1262          30 :     JS::Rooted<JS::Value> storedVal(cx, args.rval());
    1263          15 :     if (!MaybeWrapValue(cx, &storedVal)) {
    1264           0 :       return false;
    1265             :     }
    1266          15 :     js::SetReservedSlot(slotStorage, slotIndex, storedVal);
    1267             :   }
    1268             :   // And now make sure args.rval() is in the caller compartment
    1269          15 :   return MaybeWrapValue(cx, args.rval());
    1270             : }
    1271             : 
    1272             : static const JSJitInfo document_getterinfo = {
    1273             :   { (JSJitGetterOp)get_document },
    1274             :   { prototypes::id::Window },
    1275             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1276             :   JSJitInfo::Getter,
    1277             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1278             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1279             :   false,  /* isInfallible. False in setters. */
    1280             :   true,  /* isMovable.  Not relevant for setters. */
    1281             :   true, /* isEliminatable.  Not relevant for setters. */
    1282             :   true, /* isAlwaysInSlot.  Only relevant for getters. */
    1283             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1284             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1285             :   (DOM_INSTANCE_RESERVED_SLOTS + 2)   /* Reserved slot index, if we're stored in a slot, else 0. */
    1286             : };
    1287             : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 2) <= JSJitInfo::maxSlotIndex, "We won't fit");
    1288             : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 2) < 5, "There is no slot for us");
    1289             : 
    1290             : static bool
    1291           0 : get_name(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1292             : {
    1293           0 :   binding_detail::FastErrorResult rv;
    1294           0 :   DOMString result;
    1295           0 :   self->GetName(result, rv);
    1296           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1297           0 :     return false;
    1298             :   }
    1299           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1300           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1301           0 :     return false;
    1302             :   }
    1303           0 :   return true;
    1304             : }
    1305             : 
    1306             : static bool
    1307           0 : set_name(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    1308             : {
    1309           0 :   binding_detail::FakeString arg0;
    1310           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1311           0 :     return false;
    1312             :   }
    1313           0 :   binding_detail::FastErrorResult rv;
    1314           0 :   self->SetName(NonNullHelper(Constify(arg0)), rv);
    1315           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1316           0 :     return false;
    1317             :   }
    1318           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1319             : 
    1320           0 :   return true;
    1321             : }
    1322             : 
    1323             : static const JSJitInfo name_getterinfo = {
    1324             :   { (JSJitGetterOp)get_name },
    1325             :   { prototypes::id::Window },
    1326             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1327             :   JSJitInfo::Getter,
    1328             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1329             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1330             :   false,  /* isInfallible. False in setters. */
    1331             :   false,  /* isMovable.  Not relevant for setters. */
    1332             :   false, /* isEliminatable.  Not relevant for setters. */
    1333             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1334             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1335             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1336             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1337             : };
    1338             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1339             : static_assert(0 < 5, "There is no slot for us");
    1340             : static const JSJitInfo name_setterinfo = {
    1341             :   { (JSJitGetterOp)set_name },
    1342             :   { prototypes::id::Window },
    1343             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1344             :   JSJitInfo::Setter,
    1345             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1346             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1347             :   false,  /* isInfallible. False in setters. */
    1348             :   false,  /* isMovable.  Not relevant for setters. */
    1349             :   false, /* isEliminatable.  Not relevant for setters. */
    1350             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1351             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1352             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1353             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1354             : };
    1355             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1356             : static_assert(0 < 5, "There is no slot for us");
    1357             : 
    1358             : static bool
    1359           7 : get_location(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1360             : {
    1361           7 :   auto result(StrongOrRawPtr<mozilla::dom::Location>(self->GetLocation()));
    1362           7 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1363           7 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1364           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1365           0 :     return false;
    1366             :   }
    1367           7 :   return true;
    1368             : }
    1369             : 
    1370             : static bool
    1371           0 : set_location(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    1372             : {
    1373           0 :   JS::Rooted<JS::Value> v(cx);
    1374           0 :   if (!JS_GetProperty(cx, obj, "location", &v)) {
    1375           0 :     return false;
    1376             :   }
    1377             : 
    1378           0 :   if (!v.isObject()) {
    1379           0 :     return ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Window.location");
    1380             :   }
    1381             : 
    1382           0 :   JS::Rooted<JSObject*> targetObj(cx, &v.toObject());
    1383           0 :   return JS_SetProperty(cx, targetObj, "href", args[0]);
    1384             : }
    1385             : 
    1386             : static const JSJitInfo location_getterinfo = {
    1387             :   { (JSJitGetterOp)get_location },
    1388             :   { prototypes::id::Window },
    1389             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1390             :   JSJitInfo::Getter,
    1391             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1392             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1393             :   false,  /* isInfallible. False in setters. */
    1394             :   false,  /* isMovable.  Not relevant for setters. */
    1395             :   false, /* isEliminatable.  Not relevant for setters. */
    1396             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1397             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1398             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1399             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1400             : };
    1401             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1402             : static_assert(0 < 5, "There is no slot for us");
    1403             : static const JSJitInfo location_setterinfo = {
    1404             :   { (JSJitGetterOp)set_location },
    1405             :   { prototypes::id::Window },
    1406             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1407             :   JSJitInfo::Setter,
    1408             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1409             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1410             :   false,  /* isInfallible. False in setters. */
    1411             :   false,  /* isMovable.  Not relevant for setters. */
    1412             :   false, /* isEliminatable.  Not relevant for setters. */
    1413             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1414             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1415             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1416             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1417             : };
    1418             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1419             : static_assert(0 < 5, "There is no slot for us");
    1420             : 
    1421             : static bool
    1422           0 : get_history(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1423             : {
    1424           0 :   binding_detail::FastErrorResult rv;
    1425           0 :   auto result(StrongOrRawPtr<nsHistory>(self->GetHistory(rv)));
    1426           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1427           0 :     return false;
    1428             :   }
    1429           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1430           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1431           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1432           0 :     return false;
    1433             :   }
    1434           0 :   return true;
    1435             : }
    1436             : 
    1437             : static const JSJitInfo history_getterinfo = {
    1438             :   { (JSJitGetterOp)get_history },
    1439             :   { prototypes::id::Window },
    1440             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1441             :   JSJitInfo::Getter,
    1442             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1443             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1444             :   false,  /* isInfallible. False in setters. */
    1445             :   false,  /* isMovable.  Not relevant for setters. */
    1446             :   false, /* isEliminatable.  Not relevant for setters. */
    1447             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1448             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1449             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1450             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1451             : };
    1452             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1453             : static_assert(0 < 5, "There is no slot for us");
    1454             : 
    1455             : static bool
    1456           0 : get_customElements(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1457             : {
    1458           0 :   auto result(StrongOrRawPtr<mozilla::dom::CustomElementRegistry>(self->CustomElements()));
    1459           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1460           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1461           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1462           0 :     return false;
    1463             :   }
    1464           0 :   return true;
    1465             : }
    1466             : 
    1467             : static const JSJitInfo customElements_getterinfo = {
    1468             :   { (JSJitGetterOp)get_customElements },
    1469             :   { prototypes::id::Window },
    1470             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1471             :   JSJitInfo::Getter,
    1472             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1473             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1474             :   false,  /* isInfallible. False in setters. */
    1475             :   false,  /* isMovable.  Not relevant for setters. */
    1476             :   false, /* isEliminatable.  Not relevant for setters. */
    1477             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1478             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1479             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1480             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1481             : };
    1482             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1483             : static_assert(0 < 5, "There is no slot for us");
    1484             : 
    1485             : static bool
    1486           0 : get_locationbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1487             : {
    1488           0 :   binding_detail::FastErrorResult rv;
    1489           0 :   auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetLocationbar(rv)));
    1490           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1491           0 :     return false;
    1492             :   }
    1493           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1494           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1495           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1496           0 :     return false;
    1497             :   }
    1498           0 :   return true;
    1499             : }
    1500             : 
    1501             : static bool
    1502           0 : set_locationbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    1503             : {
    1504           0 :   return JS_DefineProperty(cx, obj, "locationbar", args[0], JSPROP_ENUMERATE);
    1505             : }
    1506             : 
    1507             : static const JSJitInfo locationbar_getterinfo = {
    1508             :   { (JSJitGetterOp)get_locationbar },
    1509             :   { prototypes::id::Window },
    1510             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1511             :   JSJitInfo::Getter,
    1512             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1513             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1514             :   false,  /* isInfallible. False in setters. */
    1515             :   false,  /* isMovable.  Not relevant for setters. */
    1516             :   false, /* isEliminatable.  Not relevant for setters. */
    1517             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1518             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1519             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1520             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1521             : };
    1522             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1523             : static_assert(0 < 5, "There is no slot for us");
    1524             : static const JSJitInfo locationbar_setterinfo = {
    1525             :   { (JSJitGetterOp)set_locationbar },
    1526             :   { prototypes::id::Window },
    1527             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1528             :   JSJitInfo::Setter,
    1529             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1530             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1531             :   false,  /* isInfallible. False in setters. */
    1532             :   false,  /* isMovable.  Not relevant for setters. */
    1533             :   false, /* isEliminatable.  Not relevant for setters. */
    1534             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1535             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1536             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1537             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1538             : };
    1539             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1540             : static_assert(0 < 5, "There is no slot for us");
    1541             : 
    1542             : static bool
    1543           0 : get_menubar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1544             : {
    1545           0 :   binding_detail::FastErrorResult rv;
    1546           0 :   auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetMenubar(rv)));
    1547           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1548           0 :     return false;
    1549             :   }
    1550           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1551           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1552           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1553           0 :     return false;
    1554             :   }
    1555           0 :   return true;
    1556             : }
    1557             : 
    1558             : static bool
    1559           0 : set_menubar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    1560             : {
    1561           0 :   return JS_DefineProperty(cx, obj, "menubar", args[0], JSPROP_ENUMERATE);
    1562             : }
    1563             : 
    1564             : static const JSJitInfo menubar_getterinfo = {
    1565             :   { (JSJitGetterOp)get_menubar },
    1566             :   { prototypes::id::Window },
    1567             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1568             :   JSJitInfo::Getter,
    1569             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1570             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1571             :   false,  /* isInfallible. False in setters. */
    1572             :   false,  /* isMovable.  Not relevant for setters. */
    1573             :   false, /* isEliminatable.  Not relevant for setters. */
    1574             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1575             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1576             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1577             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1578             : };
    1579             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1580             : static_assert(0 < 5, "There is no slot for us");
    1581             : static const JSJitInfo menubar_setterinfo = {
    1582             :   { (JSJitGetterOp)set_menubar },
    1583             :   { prototypes::id::Window },
    1584             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1585             :   JSJitInfo::Setter,
    1586             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1587             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1588             :   false,  /* isInfallible. False in setters. */
    1589             :   false,  /* isMovable.  Not relevant for setters. */
    1590             :   false, /* isEliminatable.  Not relevant for setters. */
    1591             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1592             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1593             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1594             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1595             : };
    1596             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1597             : static_assert(0 < 5, "There is no slot for us");
    1598             : 
    1599             : static bool
    1600           0 : get_personalbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1601             : {
    1602           0 :   binding_detail::FastErrorResult rv;
    1603           0 :   auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetPersonalbar(rv)));
    1604           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1605           0 :     return false;
    1606             :   }
    1607           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1608           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1609           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1610           0 :     return false;
    1611             :   }
    1612           0 :   return true;
    1613             : }
    1614             : 
    1615             : static bool
    1616           0 : set_personalbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    1617             : {
    1618           0 :   return JS_DefineProperty(cx, obj, "personalbar", args[0], JSPROP_ENUMERATE);
    1619             : }
    1620             : 
    1621             : static const JSJitInfo personalbar_getterinfo = {
    1622             :   { (JSJitGetterOp)get_personalbar },
    1623             :   { prototypes::id::Window },
    1624             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1625             :   JSJitInfo::Getter,
    1626             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1627             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1628             :   false,  /* isInfallible. False in setters. */
    1629             :   false,  /* isMovable.  Not relevant for setters. */
    1630             :   false, /* isEliminatable.  Not relevant for setters. */
    1631             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1632             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1633             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1634             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1635             : };
    1636             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1637             : static_assert(0 < 5, "There is no slot for us");
    1638             : static const JSJitInfo personalbar_setterinfo = {
    1639             :   { (JSJitGetterOp)set_personalbar },
    1640             :   { prototypes::id::Window },
    1641             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1642             :   JSJitInfo::Setter,
    1643             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1644             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1645             :   false,  /* isInfallible. False in setters. */
    1646             :   false,  /* isMovable.  Not relevant for setters. */
    1647             :   false, /* isEliminatable.  Not relevant for setters. */
    1648             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1649             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1650             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1651             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1652             : };
    1653             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1654             : static_assert(0 < 5, "There is no slot for us");
    1655             : 
    1656             : static bool
    1657           0 : get_scrollbars(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1658             : {
    1659           0 :   binding_detail::FastErrorResult rv;
    1660           0 :   auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetScrollbars(rv)));
    1661           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1662           0 :     return false;
    1663             :   }
    1664           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1665           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1666           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1667           0 :     return false;
    1668             :   }
    1669           0 :   return true;
    1670             : }
    1671             : 
    1672             : static bool
    1673           0 : set_scrollbars(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    1674             : {
    1675           0 :   return JS_DefineProperty(cx, obj, "scrollbars", args[0], JSPROP_ENUMERATE);
    1676             : }
    1677             : 
    1678             : static const JSJitInfo scrollbars_getterinfo = {
    1679             :   { (JSJitGetterOp)get_scrollbars },
    1680             :   { prototypes::id::Window },
    1681             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1682             :   JSJitInfo::Getter,
    1683             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1684             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1685             :   false,  /* isInfallible. False in setters. */
    1686             :   false,  /* isMovable.  Not relevant for setters. */
    1687             :   false, /* isEliminatable.  Not relevant for setters. */
    1688             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1689             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1690             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1691             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1692             : };
    1693             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1694             : static_assert(0 < 5, "There is no slot for us");
    1695             : static const JSJitInfo scrollbars_setterinfo = {
    1696             :   { (JSJitGetterOp)set_scrollbars },
    1697             :   { prototypes::id::Window },
    1698             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1699             :   JSJitInfo::Setter,
    1700             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1701             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1702             :   false,  /* isInfallible. False in setters. */
    1703             :   false,  /* isMovable.  Not relevant for setters. */
    1704             :   false, /* isEliminatable.  Not relevant for setters. */
    1705             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1706             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1707             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1708             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1709             : };
    1710             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1711             : static_assert(0 < 5, "There is no slot for us");
    1712             : 
    1713             : static bool
    1714           0 : get_statusbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1715             : {
    1716           0 :   binding_detail::FastErrorResult rv;
    1717           0 :   auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetStatusbar(rv)));
    1718           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1719           0 :     return false;
    1720             :   }
    1721           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1722           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1723           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1724           0 :     return false;
    1725             :   }
    1726           0 :   return true;
    1727             : }
    1728             : 
    1729             : static bool
    1730           0 : set_statusbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    1731             : {
    1732           0 :   return JS_DefineProperty(cx, obj, "statusbar", args[0], JSPROP_ENUMERATE);
    1733             : }
    1734             : 
    1735             : static const JSJitInfo statusbar_getterinfo = {
    1736             :   { (JSJitGetterOp)get_statusbar },
    1737             :   { prototypes::id::Window },
    1738             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1739             :   JSJitInfo::Getter,
    1740             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1741             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1742             :   false,  /* isInfallible. False in setters. */
    1743             :   false,  /* isMovable.  Not relevant for setters. */
    1744             :   false, /* isEliminatable.  Not relevant for setters. */
    1745             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1746             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1747             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1748             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1749             : };
    1750             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1751             : static_assert(0 < 5, "There is no slot for us");
    1752             : static const JSJitInfo statusbar_setterinfo = {
    1753             :   { (JSJitGetterOp)set_statusbar },
    1754             :   { prototypes::id::Window },
    1755             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1756             :   JSJitInfo::Setter,
    1757             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1758             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1759             :   false,  /* isInfallible. False in setters. */
    1760             :   false,  /* isMovable.  Not relevant for setters. */
    1761             :   false, /* isEliminatable.  Not relevant for setters. */
    1762             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1763             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1764             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1765             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1766             : };
    1767             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1768             : static_assert(0 < 5, "There is no slot for us");
    1769             : 
    1770             : static bool
    1771           5 : get_toolbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1772             : {
    1773          10 :   binding_detail::FastErrorResult rv;
    1774           5 :   auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetToolbar(rv)));
    1775           5 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1776           0 :     return false;
    1777             :   }
    1778           5 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1779           5 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1780           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1781           0 :     return false;
    1782             :   }
    1783           5 :   return true;
    1784             : }
    1785             : 
    1786             : static bool
    1787           0 : set_toolbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    1788             : {
    1789           0 :   return JS_DefineProperty(cx, obj, "toolbar", args[0], JSPROP_ENUMERATE);
    1790             : }
    1791             : 
    1792             : static const JSJitInfo toolbar_getterinfo = {
    1793             :   { (JSJitGetterOp)get_toolbar },
    1794             :   { prototypes::id::Window },
    1795             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1796             :   JSJitInfo::Getter,
    1797             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1798             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1799             :   false,  /* isInfallible. False in setters. */
    1800             :   false,  /* isMovable.  Not relevant for setters. */
    1801             :   false, /* isEliminatable.  Not relevant for setters. */
    1802             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1803             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1804             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1805             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1806             : };
    1807             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1808             : static_assert(0 < 5, "There is no slot for us");
    1809             : static const JSJitInfo toolbar_setterinfo = {
    1810             :   { (JSJitGetterOp)set_toolbar },
    1811             :   { prototypes::id::Window },
    1812             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1813             :   JSJitInfo::Setter,
    1814             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1815             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1816             :   false,  /* isInfallible. False in setters. */
    1817             :   false,  /* isMovable.  Not relevant for setters. */
    1818             :   false, /* isEliminatable.  Not relevant for setters. */
    1819             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1820             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1821             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1822             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1823             : };
    1824             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1825             : static_assert(0 < 5, "There is no slot for us");
    1826             : 
    1827             : static bool
    1828           0 : get_status(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1829             : {
    1830           0 :   binding_detail::FastErrorResult rv;
    1831           0 :   DOMString result;
    1832           0 :   self->GetStatus(result, rv);
    1833           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1834           0 :     return false;
    1835             :   }
    1836           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1837           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1838           0 :     return false;
    1839             :   }
    1840           0 :   return true;
    1841             : }
    1842             : 
    1843             : static bool
    1844           0 : set_status(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    1845             : {
    1846           0 :   binding_detail::FakeString arg0;
    1847           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1848           0 :     return false;
    1849             :   }
    1850           0 :   binding_detail::FastErrorResult rv;
    1851           0 :   self->SetStatus(NonNullHelper(Constify(arg0)), rv);
    1852           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1853           0 :     return false;
    1854             :   }
    1855           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1856             : 
    1857           0 :   return true;
    1858             : }
    1859             : 
    1860             : static const JSJitInfo status_getterinfo = {
    1861             :   { (JSJitGetterOp)get_status },
    1862             :   { prototypes::id::Window },
    1863             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1864             :   JSJitInfo::Getter,
    1865             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1866             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1867             :   false,  /* isInfallible. False in setters. */
    1868             :   false,  /* isMovable.  Not relevant for setters. */
    1869             :   false, /* isEliminatable.  Not relevant for setters. */
    1870             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1871             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1872             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1873             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1874             : };
    1875             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1876             : static_assert(0 < 5, "There is no slot for us");
    1877             : static const JSJitInfo status_setterinfo = {
    1878             :   { (JSJitGetterOp)set_status },
    1879             :   { prototypes::id::Window },
    1880             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1881             :   JSJitInfo::Setter,
    1882             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1883             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1884             :   false,  /* isInfallible. False in setters. */
    1885             :   false,  /* isMovable.  Not relevant for setters. */
    1886             :   false, /* isEliminatable.  Not relevant for setters. */
    1887             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1888             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1889             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1890             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1891             : };
    1892             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1893             : static_assert(0 < 5, "There is no slot for us");
    1894             : 
    1895             : static bool
    1896           0 : close(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    1897             : {
    1898           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1899             :       // Return false from the JSNative in order to trigger
    1900             :       // an uncatchable exception.
    1901           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1902           0 :       return false;
    1903             :   }
    1904           0 :   binding_detail::FastErrorResult rv;
    1905           0 :   self->Close(rv);
    1906           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1907           0 :     return false;
    1908             :   }
    1909           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1910           0 :   args.rval().setUndefined();
    1911           0 :   return true;
    1912             : }
    1913             : 
    1914             : static const JSJitInfo close_methodinfo = {
    1915             :   { (JSJitGetterOp)close },
    1916             :   { prototypes::id::Window },
    1917             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1918             :   JSJitInfo::Method,
    1919             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1920             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1921             :   false,  /* isInfallible. False in setters. */
    1922             :   false,  /* isMovable.  Not relevant for setters. */
    1923             :   false, /* isEliminatable.  Not relevant for setters. */
    1924             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1925             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1926             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1927             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1928             : };
    1929             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1930             : static_assert(0 < 5, "There is no slot for us");
    1931             : 
    1932             : static bool
    1933           6 : get_closed(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    1934             : {
    1935          12 :   binding_detail::FastErrorResult rv;
    1936           6 :   bool result(self->GetClosed(rv));
    1937           6 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1938           0 :     return false;
    1939             :   }
    1940           6 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1941           6 :   args.rval().setBoolean(result);
    1942           6 :   return true;
    1943             : }
    1944             : 
    1945             : static const JSJitInfo closed_getterinfo = {
    1946             :   { (JSJitGetterOp)get_closed },
    1947             :   { prototypes::id::Window },
    1948             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1949             :   JSJitInfo::Getter,
    1950             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1951             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    1952             :   false,  /* isInfallible. False in setters. */
    1953             :   false,  /* isMovable.  Not relevant for setters. */
    1954             :   false, /* isEliminatable.  Not relevant for setters. */
    1955             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1956             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1957             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1958             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1959             : };
    1960             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1961             : static_assert(0 < 5, "There is no slot for us");
    1962             : 
    1963             : static bool
    1964           0 : stop(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    1965             : {
    1966           0 :   binding_detail::FastErrorResult rv;
    1967           0 :   self->Stop(rv);
    1968           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1969           0 :     return false;
    1970             :   }
    1971           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1972           0 :   args.rval().setUndefined();
    1973           0 :   return true;
    1974             : }
    1975             : 
    1976             : static const JSJitInfo stop_methodinfo = {
    1977             :   { (JSJitGetterOp)stop },
    1978             :   { prototypes::id::Window },
    1979             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    1980             :   JSJitInfo::Method,
    1981             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1982             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1983             :   false,  /* isInfallible. False in setters. */
    1984             :   false,  /* isMovable.  Not relevant for setters. */
    1985             :   false, /* isEliminatable.  Not relevant for setters. */
    1986             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1987             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1988             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1989             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1990             : };
    1991             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1992             : static_assert(0 < 5, "There is no slot for us");
    1993             : 
    1994             : static bool
    1995           0 : focus(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    1996             : {
    1997           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    1998             :       // Return false from the JSNative in order to trigger
    1999             :       // an uncatchable exception.
    2000           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2001           0 :       return false;
    2002             :   }
    2003           0 :   binding_detail::FastErrorResult rv;
    2004           0 :   self->Focus(rv);
    2005           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2006           0 :     return false;
    2007             :   }
    2008           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2009           0 :   args.rval().setUndefined();
    2010           0 :   return true;
    2011             : }
    2012             : 
    2013             : static const JSJitInfo focus_methodinfo = {
    2014             :   { (JSJitGetterOp)focus },
    2015             :   { prototypes::id::Window },
    2016             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2017             :   JSJitInfo::Method,
    2018             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2019             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2020             :   false,  /* isInfallible. False in setters. */
    2021             :   false,  /* isMovable.  Not relevant for setters. */
    2022             :   false, /* isEliminatable.  Not relevant for setters. */
    2023             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2024             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2025             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2026             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2027             : };
    2028             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2029             : static_assert(0 < 5, "There is no slot for us");
    2030             : 
    2031             : static bool
    2032           0 : blur(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    2033             : {
    2034           0 :   binding_detail::FastErrorResult rv;
    2035           0 :   self->Blur(rv);
    2036           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2037           0 :     return false;
    2038             :   }
    2039           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2040           0 :   args.rval().setUndefined();
    2041           0 :   return true;
    2042             : }
    2043             : 
    2044             : static const JSJitInfo blur_methodinfo = {
    2045             :   { (JSJitGetterOp)blur },
    2046             :   { prototypes::id::Window },
    2047             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2048             :   JSJitInfo::Method,
    2049             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2050             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2051             :   false,  /* isInfallible. False in setters. */
    2052             :   false,  /* isMovable.  Not relevant for setters. */
    2053             :   false, /* isEliminatable.  Not relevant for setters. */
    2054             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2055             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2056             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2057             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2058             : };
    2059             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2060             : static_assert(0 < 5, "There is no slot for us");
    2061             : 
    2062             : static bool
    2063           8 : get_frames(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    2064             : {
    2065          16 :   binding_detail::FastErrorResult rv;
    2066          16 :   auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->GetFrames(rv)));
    2067           8 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2068           0 :     return false;
    2069             :   }
    2070           8 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2071           8 :   if (!WrapObject(cx, result, args.rval())) {
    2072           0 :     return false;
    2073             :   }
    2074           8 :   return true;
    2075             : }
    2076             : 
    2077             : static bool
    2078           0 : set_frames(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    2079             : {
    2080           0 :   return JS_DefineProperty(cx, obj, "frames", args[0], JSPROP_ENUMERATE);
    2081             : }
    2082             : 
    2083             : static const JSJitInfo frames_getterinfo = {
    2084             :   { (JSJitGetterOp)get_frames },
    2085             :   { prototypes::id::Window },
    2086             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2087             :   JSJitInfo::Getter,
    2088             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2089             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    2090             :   false,  /* isInfallible. False in setters. */
    2091             :   false,  /* isMovable.  Not relevant for setters. */
    2092             :   false, /* isEliminatable.  Not relevant for setters. */
    2093             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2094             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2095             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2096             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2097             : };
    2098             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2099             : static_assert(0 < 5, "There is no slot for us");
    2100             : static const JSJitInfo frames_setterinfo = {
    2101             :   { (JSJitGetterOp)set_frames },
    2102             :   { prototypes::id::Window },
    2103             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2104             :   JSJitInfo::Setter,
    2105             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2106             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2107             :   false,  /* isInfallible. False in setters. */
    2108             :   false,  /* isMovable.  Not relevant for setters. */
    2109             :   false, /* isEliminatable.  Not relevant for setters. */
    2110             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2111             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2112             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2113             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2114             : };
    2115             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2116             : static_assert(0 < 5, "There is no slot for us");
    2117             : 
    2118             : static bool
    2119           8 : get_length(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    2120             : {
    2121           8 :   uint32_t result(self->Length());
    2122           8 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2123           8 :   args.rval().setNumber(result);
    2124           8 :   return true;
    2125             : }
    2126             : 
    2127             : static bool
    2128           0 : set_length(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    2129             : {
    2130           0 :   return JS_DefineProperty(cx, obj, "length", args[0], JSPROP_ENUMERATE);
    2131             : }
    2132             : 
    2133             : static const JSJitInfo length_getterinfo = {
    2134             :   { (JSJitGetterOp)get_length },
    2135             :   { prototypes::id::Window },
    2136             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2137             :   JSJitInfo::Getter,
    2138             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2139             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2140             :   true,  /* isInfallible. False in setters. */
    2141             :   false,  /* isMovable.  Not relevant for setters. */
    2142             :   false, /* isEliminatable.  Not relevant for setters. */
    2143             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2144             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2145             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2146             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2147             : };
    2148             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2149             : static_assert(0 < 5, "There is no slot for us");
    2150             : static const JSJitInfo length_setterinfo = {
    2151             :   { (JSJitGetterOp)set_length },
    2152             :   { prototypes::id::Window },
    2153             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2154             :   JSJitInfo::Setter,
    2155             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2156             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2157             :   false,  /* isInfallible. False in setters. */
    2158             :   false,  /* isMovable.  Not relevant for setters. */
    2159             :   false, /* isEliminatable.  Not relevant for setters. */
    2160             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2161             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2162             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2163             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2164             : };
    2165             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2166             : static_assert(0 < 5, "There is no slot for us");
    2167             : 
    2168             : static bool
    2169          12 : get_top(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    2170             : {
    2171          24 :   binding_detail::FastErrorResult rv;
    2172          24 :   auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->GetTop(rv)));
    2173          12 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2174           0 :     return false;
    2175             :   }
    2176          12 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2177          12 :   if (!result) {
    2178           0 :     args.rval().setNull();
    2179           0 :     return true;
    2180             :   }
    2181          12 :   if (!WrapObject(cx, result, args.rval())) {
    2182           0 :     return false;
    2183             :   }
    2184          12 :   return true;
    2185             : }
    2186             : 
    2187             : static const JSJitInfo top_getterinfo = {
    2188             :   { (JSJitGetterOp)get_top },
    2189             :   { prototypes::id::Window },
    2190             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2191             :   JSJitInfo::Getter,
    2192             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2193             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2194             :   false,  /* isInfallible. False in setters. */
    2195             :   false,  /* isMovable.  Not relevant for setters. */
    2196             :   false, /* isEliminatable.  Not relevant for setters. */
    2197             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2198             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2199             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2200             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2201             : };
    2202             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2203             : static_assert(0 < 5, "There is no slot for us");
    2204             : 
    2205             : static bool
    2206           0 : get_opener(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    2207             : {
    2208           0 :   binding_detail::FastErrorResult rv;
    2209           0 :   JS::Rooted<JS::Value> result(cx);
    2210           0 :   self->GetOpener(cx, &result, rv);
    2211           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2212           0 :     return false;
    2213             :   }
    2214           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2215           0 :   JS::ExposeValueToActiveJS(result);
    2216           0 :   args.rval().set(result);
    2217           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    2218           0 :     return false;
    2219             :   }
    2220           0 :   return true;
    2221             : }
    2222             : 
    2223             : static bool
    2224           0 : set_opener(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    2225             : {
    2226           0 :   JS::Rooted<JS::Value> arg0(cx);
    2227           0 :   arg0 = args[0];
    2228           0 :   binding_detail::FastErrorResult rv;
    2229           0 :   self->SetOpener(cx, arg0, rv);
    2230           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2231           0 :     return false;
    2232             :   }
    2233           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2234             : 
    2235           0 :   return true;
    2236             : }
    2237             : 
    2238             : static const JSJitInfo opener_getterinfo = {
    2239             :   { (JSJitGetterOp)get_opener },
    2240             :   { prototypes::id::Window },
    2241             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2242             :   JSJitInfo::Getter,
    2243             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2244             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2245             :   false,  /* isInfallible. False in setters. */
    2246             :   false,  /* isMovable.  Not relevant for setters. */
    2247             :   false, /* isEliminatable.  Not relevant for setters. */
    2248             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2249             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2250             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2251             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2252             : };
    2253             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2254             : static_assert(0 < 5, "There is no slot for us");
    2255             : static const JSJitInfo opener_setterinfo = {
    2256             :   { (JSJitGetterOp)set_opener },
    2257             :   { prototypes::id::Window },
    2258             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2259             :   JSJitInfo::Setter,
    2260             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2261             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2262             :   false,  /* isInfallible. False in setters. */
    2263             :   false,  /* isMovable.  Not relevant for setters. */
    2264             :   false, /* isEliminatable.  Not relevant for setters. */
    2265             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2266             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2267             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2268             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2269             : };
    2270             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2271             : static_assert(0 < 5, "There is no slot for us");
    2272             : 
    2273             : static bool
    2274           0 : get_parent(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    2275             : {
    2276           0 :   binding_detail::FastErrorResult rv;
    2277           0 :   auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->GetParent(rv)));
    2278           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2279           0 :     return false;
    2280             :   }
    2281           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2282           0 :   if (!result) {
    2283           0 :     args.rval().setNull();
    2284           0 :     return true;
    2285             :   }
    2286           0 :   if (!WrapObject(cx, result, args.rval())) {
    2287           0 :     return false;
    2288             :   }
    2289           0 :   return true;
    2290             : }
    2291             : 
    2292             : static bool
    2293           0 : set_parent(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    2294             : {
    2295           0 :   return JS_DefineProperty(cx, obj, "parent", args[0], JSPROP_ENUMERATE);
    2296             : }
    2297             : 
    2298             : static const JSJitInfo parent_getterinfo = {
    2299             :   { (JSJitGetterOp)get_parent },
    2300             :   { prototypes::id::Window },
    2301             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2302             :   JSJitInfo::Getter,
    2303             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2304             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2305             :   false,  /* isInfallible. False in setters. */
    2306             :   false,  /* isMovable.  Not relevant for setters. */
    2307             :   false, /* isEliminatable.  Not relevant for setters. */
    2308             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2309             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2310             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2311             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2312             : };
    2313             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2314             : static_assert(0 < 5, "There is no slot for us");
    2315             : static const JSJitInfo parent_setterinfo = {
    2316             :   { (JSJitGetterOp)set_parent },
    2317             :   { prototypes::id::Window },
    2318             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2319             :   JSJitInfo::Setter,
    2320             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2321             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2322             :   false,  /* isInfallible. False in setters. */
    2323             :   false,  /* isMovable.  Not relevant for setters. */
    2324             :   false, /* isEliminatable.  Not relevant for setters. */
    2325             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2326             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2327             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2328             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2329             : };
    2330             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2331             : static_assert(0 < 5, "There is no slot for us");
    2332             : 
    2333             : static bool
    2334           0 : get_frameElement(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    2335             : {
    2336           0 :   binding_detail::FastErrorResult rv;
    2337           0 :   JSCompartment* compartment = js::GetContextCompartment(cx);
    2338           0 :   MOZ_ASSERT(compartment);
    2339           0 :   JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
    2340             :   // Initializing a nonnull is pretty darn annoying...
    2341           0 :   NonNull<nsIPrincipal> subjectPrincipal;
    2342           0 :   subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
    2343           0 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetFrameElement(subjectPrincipal, rv)));
    2344           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2345           0 :     return false;
    2346             :   }
    2347           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2348           0 :   if (!result) {
    2349           0 :     args.rval().setNull();
    2350           0 :     return true;
    2351             :   }
    2352           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    2353           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2354           0 :     return false;
    2355             :   }
    2356           0 :   return true;
    2357             : }
    2358             : 
    2359             : static const JSJitInfo frameElement_getterinfo = {
    2360             :   { (JSJitGetterOp)get_frameElement },
    2361             :   { prototypes::id::Window },
    2362             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2363             :   JSJitInfo::Getter,
    2364             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2365             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2366             :   false,  /* isInfallible. False in setters. */
    2367             :   false,  /* isMovable.  Not relevant for setters. */
    2368             :   false, /* isEliminatable.  Not relevant for setters. */
    2369             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2370             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2371             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2372             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2373             : };
    2374             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2375             : static_assert(0 < 5, "There is no slot for us");
    2376             : 
    2377             : static bool
    2378           0 : open(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    2379             : {
    2380           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    2381             :       // Return false from the JSNative in order to trigger
    2382             :       // an uncatchable exception.
    2383           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2384           0 :       return false;
    2385             :   }
    2386           0 :   binding_detail::FakeString arg0;
    2387           0 :   if (args.hasDefined(0)) {
    2388           0 :     if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2389           0 :       return false;
    2390             :     }
    2391             :   } else {
    2392             :     static const char16_t data[] = { 0 };
    2393           0 :     arg0.Rebind(data, ArrayLength(data) - 1);
    2394             :   }
    2395           0 :   binding_detail::FakeString arg1;
    2396           0 :   if (args.hasDefined(1)) {
    2397           0 :     if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
    2398           0 :       return false;
    2399             :     }
    2400             :   } else {
    2401             :     static const char16_t data[] = { 0 };
    2402           0 :     arg1.Rebind(data, ArrayLength(data) - 1);
    2403             :   }
    2404           0 :   binding_detail::FakeString arg2;
    2405           0 :   if (args.hasDefined(2)) {
    2406           0 :     if (!ConvertJSValueToString(cx, args[2], eEmpty, eStringify, arg2)) {
    2407           0 :       return false;
    2408             :     }
    2409             :   } else {
    2410             :     static const char16_t data[] = { 0 };
    2411           0 :     arg2.Rebind(data, ArrayLength(data) - 1);
    2412             :   }
    2413           0 :   binding_detail::FastErrorResult rv;
    2414           0 :   auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->Open(NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)), NonNullHelper(Constify(arg2)), rv)));
    2415           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2416           0 :     return false;
    2417             :   }
    2418           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2419           0 :   if (!result) {
    2420           0 :     args.rval().setNull();
    2421           0 :     return true;
    2422             :   }
    2423           0 :   if (!WrapObject(cx, result, args.rval())) {
    2424           0 :     return false;
    2425             :   }
    2426           0 :   return true;
    2427             : }
    2428             : 
    2429             : static const JSJitInfo open_methodinfo = {
    2430             :   { (JSJitGetterOp)open },
    2431             :   { prototypes::id::Window },
    2432             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2433             :   JSJitInfo::Method,
    2434             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2435             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2436             :   false,  /* isInfallible. False in setters. */
    2437             :   false,  /* isMovable.  Not relevant for setters. */
    2438             :   false, /* isEliminatable.  Not relevant for setters. */
    2439             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2440             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2441             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2442             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2443             : };
    2444             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2445             : static_assert(0 < 5, "There is no slot for us");
    2446             : 
    2447             : static bool
    2448           0 : get_navigator(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    2449             : {
    2450           0 :   auto result(StrongOrRawPtr<mozilla::dom::Navigator>(self->Navigator()));
    2451           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2452           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    2453           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2454           0 :     return false;
    2455             :   }
    2456           0 :   return true;
    2457             : }
    2458             : 
    2459             : static const JSJitInfo navigator_getterinfo = {
    2460             :   { (JSJitGetterOp)get_navigator },
    2461             :   { prototypes::id::Window },
    2462             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2463             :   JSJitInfo::Getter,
    2464             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2465             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    2466             :   false,  /* isInfallible. False in setters. */
    2467             :   false,  /* isMovable.  Not relevant for setters. */
    2468             :   false, /* isEliminatable.  Not relevant for setters. */
    2469             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2470             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2471             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2472             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2473             : };
    2474             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2475             : static_assert(0 < 5, "There is no slot for us");
    2476             : 
    2477             : static bool
    2478           0 : get_external(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    2479             : {
    2480           0 :   binding_detail::FastErrorResult rv;
    2481           0 :   auto result(StrongOrRawPtr<mozilla::dom::External>(self->GetExternal(rv)));
    2482           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2483           0 :     return false;
    2484             :   }
    2485           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2486           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    2487           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2488           0 :     return false;
    2489             :   }
    2490           0 :   return true;
    2491             : }
    2492             : 
    2493             : static bool
    2494           0 : set_external(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    2495             : {
    2496           0 :   return JS_DefineProperty(cx, obj, "external", args[0], JSPROP_ENUMERATE);
    2497             : }
    2498             : 
    2499             : static const JSJitInfo external_getterinfo = {
    2500             :   { (JSJitGetterOp)get_external },
    2501             :   { prototypes::id::Window },
    2502             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2503             :   JSJitInfo::Getter,
    2504             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2505             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    2506             :   false,  /* isInfallible. False in setters. */
    2507             :   false,  /* isMovable.  Not relevant for setters. */
    2508             :   false, /* isEliminatable.  Not relevant for setters. */
    2509             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2510             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2511             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2512             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2513             : };
    2514             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2515             : static_assert(0 < 5, "There is no slot for us");
    2516             : static const JSJitInfo external_setterinfo = {
    2517             :   { (JSJitGetterOp)set_external },
    2518             :   { prototypes::id::Window },
    2519             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2520             :   JSJitInfo::Setter,
    2521             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2522             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2523             :   false,  /* isInfallible. False in setters. */
    2524             :   false,  /* isMovable.  Not relevant for setters. */
    2525             :   false, /* isEliminatable.  Not relevant for setters. */
    2526             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2527             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2528             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2529             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2530             : };
    2531             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2532             : static_assert(0 < 5, "There is no slot for us");
    2533             : 
    2534             : static bool
    2535           0 : get_applicationCache(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    2536             : {
    2537           0 :   binding_detail::FastErrorResult rv;
    2538           0 :   auto result(StrongOrRawPtr<nsIDOMOfflineResourceList>(self->GetApplicationCache(rv)));
    2539           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2540           0 :     return false;
    2541             :   }
    2542           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2543           0 :   if (!WrapObject(cx, result, args.rval())) {
    2544           0 :     return false;
    2545             :   }
    2546           0 :   return true;
    2547             : }
    2548             : 
    2549             : static const JSJitInfo applicationCache_getterinfo = {
    2550             :   { (JSJitGetterOp)get_applicationCache },
    2551             :   { prototypes::id::Window },
    2552             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2553             :   JSJitInfo::Getter,
    2554             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2555             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    2556             :   false,  /* isInfallible. False in setters. */
    2557             :   false,  /* isMovable.  Not relevant for setters. */
    2558             :   false, /* isEliminatable.  Not relevant for setters. */
    2559             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2560             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2561             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2562             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2563             : };
    2564             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2565             : static_assert(0 < 5, "There is no slot for us");
    2566             : 
    2567             : static bool
    2568           0 : alert(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    2569             : {
    2570           0 :   unsigned argcount = std::min(args.length(), 1u);
    2571           0 :   switch (argcount) {
    2572             :     case 0: {
    2573           0 :       if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    2574             :           // Return false from the JSNative in order to trigger
    2575             :           // an uncatchable exception.
    2576           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2577           0 :           return false;
    2578             :       }
    2579           0 :       binding_detail::FastErrorResult rv;
    2580           0 :       JSCompartment* compartment = js::GetContextCompartment(cx);
    2581           0 :       MOZ_ASSERT(compartment);
    2582           0 :       JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
    2583             :       // Initializing a nonnull is pretty darn annoying...
    2584           0 :       NonNull<nsIPrincipal> subjectPrincipal;
    2585           0 :       subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
    2586           0 :       self->Alert(subjectPrincipal, rv);
    2587           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2588           0 :         return false;
    2589             :       }
    2590           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2591           0 :       args.rval().setUndefined();
    2592           0 :       return true;
    2593             :       break;
    2594             :     }
    2595             :     case 1: {
    2596           0 :       if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    2597             :           // Return false from the JSNative in order to trigger
    2598             :           // an uncatchable exception.
    2599           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2600           0 :           return false;
    2601             :       }
    2602           0 :       binding_detail::FakeString arg0;
    2603           0 :       if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2604           0 :         return false;
    2605             :       }
    2606           0 :       binding_detail::FastErrorResult rv;
    2607           0 :       JSCompartment* compartment = js::GetContextCompartment(cx);
    2608           0 :       MOZ_ASSERT(compartment);
    2609           0 :       JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
    2610             :       // Initializing a nonnull is pretty darn annoying...
    2611           0 :       NonNull<nsIPrincipal> subjectPrincipal;
    2612           0 :       subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
    2613           0 :       self->Alert(NonNullHelper(Constify(arg0)), subjectPrincipal, rv);
    2614           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2615           0 :         return false;
    2616             :       }
    2617           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2618           0 :       args.rval().setUndefined();
    2619           0 :       return true;
    2620             :       break;
    2621             :     }
    2622             :     default: {
    2623           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.alert");
    2624             :       break;
    2625             :     }
    2626             :   }
    2627             :   MOZ_CRASH("We have an always-returning default case");
    2628             :   return false;
    2629             : }
    2630             : 
    2631             : static const JSJitInfo alert_methodinfo = {
    2632             :   { (JSJitGetterOp)alert },
    2633             :   { prototypes::id::Window },
    2634             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2635             :   JSJitInfo::Method,
    2636             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2637             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2638             :   false,  /* isInfallible. False in setters. */
    2639             :   false,  /* isMovable.  Not relevant for setters. */
    2640             :   false, /* isEliminatable.  Not relevant for setters. */
    2641             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2642             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2643             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2644             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2645             : };
    2646             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2647             : static_assert(0 < 5, "There is no slot for us");
    2648             : 
    2649             : static bool
    2650           0 : confirm(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    2651             : {
    2652           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    2653             :       // Return false from the JSNative in order to trigger
    2654             :       // an uncatchable exception.
    2655           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2656           0 :       return false;
    2657             :   }
    2658           0 :   binding_detail::FakeString arg0;
    2659           0 :   if (args.hasDefined(0)) {
    2660           0 :     if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2661           0 :       return false;
    2662             :     }
    2663             :   } else {
    2664             :     static const char16_t data[] = { 0 };
    2665           0 :     arg0.Rebind(data, ArrayLength(data) - 1);
    2666             :   }
    2667           0 :   binding_detail::FastErrorResult rv;
    2668           0 :   JSCompartment* compartment = js::GetContextCompartment(cx);
    2669           0 :   MOZ_ASSERT(compartment);
    2670           0 :   JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
    2671             :   // Initializing a nonnull is pretty darn annoying...
    2672           0 :   NonNull<nsIPrincipal> subjectPrincipal;
    2673           0 :   subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
    2674           0 :   bool result(self->Confirm(NonNullHelper(Constify(arg0)), subjectPrincipal, rv));
    2675           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2676           0 :     return false;
    2677             :   }
    2678           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2679           0 :   args.rval().setBoolean(result);
    2680           0 :   return true;
    2681             : }
    2682             : 
    2683             : static const JSJitInfo confirm_methodinfo = {
    2684             :   { (JSJitGetterOp)confirm },
    2685             :   { prototypes::id::Window },
    2686             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2687             :   JSJitInfo::Method,
    2688             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2689             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    2690             :   false,  /* isInfallible. False in setters. */
    2691             :   false,  /* isMovable.  Not relevant for setters. */
    2692             :   false, /* isEliminatable.  Not relevant for setters. */
    2693             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2694             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2695             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2696             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2697             : };
    2698             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2699             : static_assert(0 < 5, "There is no slot for us");
    2700             : 
    2701             : static bool
    2702           0 : prompt(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    2703             : {
    2704           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    2705             :       // Return false from the JSNative in order to trigger
    2706             :       // an uncatchable exception.
    2707           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2708           0 :       return false;
    2709             :   }
    2710           0 :   binding_detail::FakeString arg0;
    2711           0 :   if (args.hasDefined(0)) {
    2712           0 :     if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2713           0 :       return false;
    2714             :     }
    2715             :   } else {
    2716             :     static const char16_t data[] = { 0 };
    2717           0 :     arg0.Rebind(data, ArrayLength(data) - 1);
    2718             :   }
    2719           0 :   binding_detail::FakeString arg1;
    2720           0 :   if (args.hasDefined(1)) {
    2721           0 :     if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
    2722           0 :       return false;
    2723             :     }
    2724             :   } else {
    2725             :     static const char16_t data[] = { 0 };
    2726           0 :     arg1.Rebind(data, ArrayLength(data) - 1);
    2727             :   }
    2728           0 :   binding_detail::FastErrorResult rv;
    2729           0 :   JSCompartment* compartment = js::GetContextCompartment(cx);
    2730           0 :   MOZ_ASSERT(compartment);
    2731           0 :   JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
    2732             :   // Initializing a nonnull is pretty darn annoying...
    2733           0 :   NonNull<nsIPrincipal> subjectPrincipal;
    2734           0 :   subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
    2735           0 :   DOMString result;
    2736           0 :   self->Prompt(NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)), result, subjectPrincipal, rv);
    2737           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2738           0 :     return false;
    2739             :   }
    2740           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2741           0 :   if (!xpc::StringToJsval(cx, result, args.rval())) {
    2742           0 :     return false;
    2743             :   }
    2744           0 :   return true;
    2745             : }
    2746             : 
    2747             : static const JSJitInfo prompt_methodinfo = {
    2748             :   { (JSJitGetterOp)prompt },
    2749             :   { prototypes::id::Window },
    2750             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2751             :   JSJitInfo::Method,
    2752             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2753             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2754             :   false,  /* isInfallible. False in setters. */
    2755             :   false,  /* isMovable.  Not relevant for setters. */
    2756             :   false, /* isEliminatable.  Not relevant for setters. */
    2757             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2758             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2759             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2760             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2761             : };
    2762             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2763             : static_assert(0 < 5, "There is no slot for us");
    2764             : 
    2765             : static bool
    2766           0 : print(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    2767             : {
    2768           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    2769             :       // Return false from the JSNative in order to trigger
    2770             :       // an uncatchable exception.
    2771           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2772           0 :       return false;
    2773             :   }
    2774           0 :   binding_detail::FastErrorResult rv;
    2775           0 :   self->Print(rv);
    2776           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2777           0 :     return false;
    2778             :   }
    2779           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2780           0 :   args.rval().setUndefined();
    2781           0 :   return true;
    2782             : }
    2783             : 
    2784             : static const JSJitInfo print_methodinfo = {
    2785             :   { (JSJitGetterOp)print },
    2786             :   { prototypes::id::Window },
    2787             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2788             :   JSJitInfo::Method,
    2789             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2790             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2791             :   false,  /* isInfallible. False in setters. */
    2792             :   false,  /* isMovable.  Not relevant for setters. */
    2793             :   false, /* isEliminatable.  Not relevant for setters. */
    2794             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2795             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2796             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2797             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2798             : };
    2799             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2800             : static_assert(0 < 5, "There is no slot for us");
    2801             : 
    2802             : static bool
    2803           0 : showModalDialog(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    2804             : {
    2805           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    2806           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.showModalDialog");
    2807             :   }
    2808           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    2809             :       // Return false from the JSNative in order to trigger
    2810             :       // an uncatchable exception.
    2811           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2812           0 :       return false;
    2813             :   }
    2814           0 :   binding_detail::FakeString arg0;
    2815           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2816           0 :     return false;
    2817             :   }
    2818           0 :   JS::Rooted<JS::Value> arg1(cx);
    2819           0 :   if (args.hasDefined(1)) {
    2820           0 :     arg1 = args[1];
    2821             :   } else {
    2822           0 :     arg1 = JS::UndefinedValue();
    2823             :   }
    2824           0 :   binding_detail::FakeString arg2;
    2825           0 :   if (args.hasDefined(2)) {
    2826           0 :     if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2)) {
    2827           0 :       return false;
    2828             :     }
    2829             :   } else {
    2830             :     static const char16_t data[] = { 0 };
    2831           0 :     arg2.Rebind(data, ArrayLength(data) - 1);
    2832             :   }
    2833           0 :   binding_detail::FastErrorResult rv;
    2834           0 :   JSCompartment* compartment = js::GetContextCompartment(cx);
    2835           0 :   MOZ_ASSERT(compartment);
    2836           0 :   JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
    2837             :   // Initializing a nonnull is pretty darn annoying...
    2838           0 :   NonNull<nsIPrincipal> subjectPrincipal;
    2839           0 :   subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
    2840           0 :   JS::Rooted<JS::Value> result(cx);
    2841           0 :   self->ShowModalDialog(cx, NonNullHelper(Constify(arg0)), arg1, NonNullHelper(Constify(arg2)), &result, subjectPrincipal, rv);
    2842           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2843           0 :     return false;
    2844             :   }
    2845           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2846           0 :   JS::ExposeValueToActiveJS(result);
    2847           0 :   args.rval().set(result);
    2848           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    2849           0 :     return false;
    2850             :   }
    2851           0 :   return true;
    2852             : }
    2853             : 
    2854             : static const JSJitInfo showModalDialog_methodinfo = {
    2855             :   { (JSJitGetterOp)showModalDialog },
    2856             :   { prototypes::id::Window },
    2857             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2858             :   JSJitInfo::Method,
    2859             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2860             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2861             :   false,  /* isInfallible. False in setters. */
    2862             :   false,  /* isMovable.  Not relevant for setters. */
    2863             :   false, /* isEliminatable.  Not relevant for setters. */
    2864             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2865             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2866             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2867             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2868             : };
    2869             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2870             : static_assert(0 < 5, "There is no slot for us");
    2871             : 
    2872             : static bool
    2873           0 : postMessage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    2874             : {
    2875           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    2876           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.postMessage");
    2877             :   }
    2878           0 :   JS::Rooted<JS::Value> arg0(cx);
    2879           0 :   arg0 = args[0];
    2880           0 :   binding_detail::FakeString arg1;
    2881           0 :   if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
    2882           0 :     return false;
    2883             :   }
    2884           0 :   binding_detail::AutoSequence<JSObject*> arg2;
    2885           0 :   SequenceRooter<JSObject*> arg2_holder(cx, &arg2);
    2886           0 :   if (args.hasDefined(2)) {
    2887           0 :     if (args[2].isObject()) {
    2888           0 :       JS::ForOfIterator iter(cx);
    2889           0 :       if (!iter.init(args[2], JS::ForOfIterator::AllowNonIterable)) {
    2890           0 :         return false;
    2891             :       }
    2892           0 :       if (!iter.valueIsIterable()) {
    2893           0 :         ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 3 of Window.postMessage");
    2894           0 :         return false;
    2895             :       }
    2896           0 :       binding_detail::AutoSequence<JSObject*> &arr = arg2;
    2897           0 :       JS::Rooted<JS::Value> temp(cx);
    2898             :       while (true) {
    2899             :         bool done;
    2900           0 :         if (!iter.next(&temp, &done)) {
    2901           0 :           return false;
    2902             :         }
    2903           0 :         if (done) {
    2904           0 :           break;
    2905             :         }
    2906           0 :         JSObject** slotPtr = arr.AppendElement(mozilla::fallible);
    2907           0 :         if (!slotPtr) {
    2908           0 :           JS_ReportOutOfMemory(cx);
    2909           0 :           return false;
    2910             :         }
    2911           0 :         JSObject*& slot = *slotPtr;
    2912           0 :         if (temp.isObject()) {
    2913           0 :           slot = &temp.toObject();
    2914             :         } else {
    2915           0 :           ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Element of argument 3 of Window.postMessage");
    2916           0 :           return false;
    2917             :         }
    2918           0 :       }
    2919             :     } else {
    2920           0 :       ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 3 of Window.postMessage");
    2921           0 :       return false;
    2922             :     }
    2923             :   } else {
    2924             :     /* Array is already empty; nothing to do */
    2925             :   }
    2926           0 :   binding_detail::FastErrorResult rv;
    2927           0 :   JSCompartment* compartment = js::GetContextCompartment(cx);
    2928           0 :   MOZ_ASSERT(compartment);
    2929           0 :   JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
    2930             :   // Initializing a nonnull is pretty darn annoying...
    2931           0 :   NonNull<nsIPrincipal> subjectPrincipal;
    2932           0 :   subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
    2933           0 :   self->PostMessageMoz(cx, arg0, NonNullHelper(Constify(arg1)), Constify(arg2), subjectPrincipal, rv);
    2934           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2935           0 :     return false;
    2936             :   }
    2937           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2938           0 :   args.rval().setUndefined();
    2939           0 :   return true;
    2940             : }
    2941             : 
    2942             : static const JSJitInfo postMessage_methodinfo = {
    2943             :   { (JSJitGetterOp)postMessage },
    2944             :   { prototypes::id::Window },
    2945             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2946             :   JSJitInfo::Method,
    2947             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2948             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2949             :   false,  /* isInfallible. False in setters. */
    2950             :   false,  /* isMovable.  Not relevant for setters. */
    2951             :   false, /* isEliminatable.  Not relevant for setters. */
    2952             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2953             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2954             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2955             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2956             : };
    2957             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2958             : static_assert(0 < 5, "There is no slot for us");
    2959             : 
    2960             : static bool
    2961           0 : get_onappinstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    2962             : {
    2963           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnappinstalled());
    2964           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2965           0 :   if (result) {
    2966           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2967           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2968           0 :       return false;
    2969             :     }
    2970           0 :     return true;
    2971             :   } else {
    2972           0 :     args.rval().setNull();
    2973           0 :     return true;
    2974             :   }
    2975             : }
    2976             : 
    2977             : static bool
    2978           0 : set_onappinstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    2979             : {
    2980           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2981           0 :   if (args[0].isObject()) {
    2982             :     { // scope for tempRoot
    2983           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2984           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2985             :     }
    2986             :   } else {
    2987           0 :     arg0 = nullptr;
    2988             :   }
    2989           0 :   self->SetOnappinstalled(Constify(arg0));
    2990           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2991             : 
    2992           0 :   return true;
    2993             : }
    2994             : 
    2995             : static const JSJitInfo onappinstalled_getterinfo = {
    2996             :   { (JSJitGetterOp)get_onappinstalled },
    2997             :   { prototypes::id::Window },
    2998             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    2999             :   JSJitInfo::Getter,
    3000             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3001             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3002             :   false,  /* isInfallible. False in setters. */
    3003             :   false,  /* isMovable.  Not relevant for setters. */
    3004             :   false, /* isEliminatable.  Not relevant for setters. */
    3005             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3006             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3007             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3008             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3009             : };
    3010             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3011             : static_assert(0 < 5, "There is no slot for us");
    3012             : static const JSJitInfo onappinstalled_setterinfo = {
    3013             :   { (JSJitGetterOp)set_onappinstalled },
    3014             :   { prototypes::id::Window },
    3015             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3016             :   JSJitInfo::Setter,
    3017             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3018             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3019             :   false,  /* isInfallible. False in setters. */
    3020             :   false,  /* isMovable.  Not relevant for setters. */
    3021             :   false, /* isEliminatable.  Not relevant for setters. */
    3022             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3023             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3024             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3025             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3026             : };
    3027             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3028             : static_assert(0 < 5, "There is no slot for us");
    3029             : 
    3030             : static bool
    3031           0 : captureEvents(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    3032             : {
    3033           0 :   self->CaptureEvents();
    3034           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3035           0 :   args.rval().setUndefined();
    3036           0 :   return true;
    3037             : }
    3038             : 
    3039             : static const JSJitInfo captureEvents_methodinfo = {
    3040             :   { (JSJitGetterOp)captureEvents },
    3041             :   { prototypes::id::Window },
    3042             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3043             :   JSJitInfo::Method,
    3044             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3045             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3046             :   true,  /* isInfallible. False in setters. */
    3047             :   false,  /* isMovable.  Not relevant for setters. */
    3048             :   false, /* isEliminatable.  Not relevant for setters. */
    3049             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3050             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3051             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3052             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3053             : };
    3054             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3055             : static_assert(0 < 5, "There is no slot for us");
    3056             : 
    3057             : static bool
    3058           0 : releaseEvents(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    3059             : {
    3060           0 :   self->ReleaseEvents();
    3061           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3062           0 :   args.rval().setUndefined();
    3063           0 :   return true;
    3064             : }
    3065             : 
    3066             : static const JSJitInfo releaseEvents_methodinfo = {
    3067             :   { (JSJitGetterOp)releaseEvents },
    3068             :   { prototypes::id::Window },
    3069             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3070             :   JSJitInfo::Method,
    3071             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3072             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3073             :   true,  /* isInfallible. False in setters. */
    3074             :   false,  /* isMovable.  Not relevant for setters. */
    3075             :   false, /* isEliminatable.  Not relevant for setters. */
    3076             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3077             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3078             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3079             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3080             : };
    3081             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3082             : static_assert(0 < 5, "There is no slot for us");
    3083             : 
    3084             : static bool
    3085           0 : getSelection(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    3086             : {
    3087           0 :   binding_detail::FastErrorResult rv;
    3088           0 :   auto result(StrongOrRawPtr<mozilla::dom::Selection>(self->GetSelection(rv)));
    3089           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3090           0 :     return false;
    3091             :   }
    3092           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3093           0 :   if (!result) {
    3094           0 :     args.rval().setNull();
    3095           0 :     return true;
    3096             :   }
    3097           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3098           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3099           0 :     return false;
    3100             :   }
    3101           0 :   return true;
    3102             : }
    3103             : 
    3104             : static const JSJitInfo getSelection_methodinfo = {
    3105             :   { (JSJitGetterOp)getSelection },
    3106             :   { prototypes::id::Window },
    3107             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3108             :   JSJitInfo::Method,
    3109             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3110             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3111             :   false,  /* isInfallible. False in setters. */
    3112             :   false,  /* isMovable.  Not relevant for setters. */
    3113             :   false, /* isEliminatable.  Not relevant for setters. */
    3114             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3115             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3116             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3117             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3118             : };
    3119             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3120             : static_assert(0 < 5, "There is no slot for us");
    3121             : 
    3122             : static bool
    3123           4 : getComputedStyle(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    3124             : {
    3125           4 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3126           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getComputedStyle");
    3127             :   }
    3128           4 :   NonNull<mozilla::dom::Element> arg0;
    3129           4 :   if (args[0].isObject()) {
    3130             :     {
    3131           4 :       nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[0], arg0);
    3132           4 :       if (NS_FAILED(rv)) {
    3133           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.getComputedStyle", "Element");
    3134           0 :         return false;
    3135             :       }
    3136             :     }
    3137             :   } else {
    3138           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.getComputedStyle");
    3139           0 :     return false;
    3140             :   }
    3141           8 :   binding_detail::FakeString arg1;
    3142           4 :   if (args.hasDefined(1)) {
    3143           0 :     if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
    3144           0 :       return false;
    3145             :     }
    3146             :   } else {
    3147             :     static const char16_t data[] = { 0 };
    3148           4 :     arg1.Rebind(data, ArrayLength(data) - 1);
    3149             :   }
    3150           8 :   binding_detail::FastErrorResult rv;
    3151           8 :   auto result(StrongOrRawPtr<nsICSSDeclaration>(self->GetComputedStyle(NonNullHelper(arg0), NonNullHelper(Constify(arg1)), rv)));
    3152           4 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3153           0 :     return false;
    3154             :   }
    3155           4 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3156             :   static_assert(!IsPointer<decltype(result)>::value,
    3157             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    3158           4 :   if (!result) {
    3159           0 :     args.rval().setNull();
    3160           0 :     return true;
    3161             :   }
    3162           4 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3163           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3164           0 :     return false;
    3165             :   }
    3166           4 :   return true;
    3167             : }
    3168             : 
    3169             : static const JSJitInfo getComputedStyle_methodinfo = {
    3170             :   { (JSJitGetterOp)getComputedStyle },
    3171             :   { prototypes::id::Window },
    3172             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3173             :   JSJitInfo::Method,
    3174             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3175             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3176             :   false,  /* isInfallible. False in setters. */
    3177             :   false,  /* isMovable.  Not relevant for setters. */
    3178             :   false, /* isEliminatable.  Not relevant for setters. */
    3179             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3180             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3181             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3182             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3183             : };
    3184             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3185             : static_assert(0 < 5, "There is no slot for us");
    3186             : 
    3187             : static bool
    3188           3 : matchMedia(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    3189             : {
    3190           3 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3191           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.matchMedia");
    3192             :   }
    3193           6 :   binding_detail::FakeString arg0;
    3194           3 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    3195           0 :     return false;
    3196             :   }
    3197           6 :   binding_detail::FastErrorResult rv;
    3198           6 :   auto result(StrongOrRawPtr<mozilla::dom::MediaQueryList>(self->MatchMedia(NonNullHelper(Constify(arg0)), rv)));
    3199           3 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3200           0 :     return false;
    3201             :   }
    3202           3 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3203             :   static_assert(!IsPointer<decltype(result)>::value,
    3204             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    3205           3 :   if (!result) {
    3206           0 :     args.rval().setNull();
    3207           0 :     return true;
    3208             :   }
    3209           3 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3210           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3211           0 :     return false;
    3212             :   }
    3213           3 :   return true;
    3214             : }
    3215             : 
    3216             : static const JSJitInfo matchMedia_methodinfo = {
    3217             :   { (JSJitGetterOp)matchMedia },
    3218             :   { prototypes::id::Window },
    3219             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3220             :   JSJitInfo::Method,
    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 < 5, "There is no slot for us");
    3233             : 
    3234             : static bool
    3235           5 : get_screen(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    3236             : {
    3237          10 :   binding_detail::FastErrorResult rv;
    3238           5 :   auto result(StrongOrRawPtr<nsScreen>(self->GetScreen(rv)));
    3239           5 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3240           0 :     return false;
    3241             :   }
    3242           5 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3243           5 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3244           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3245           0 :     return false;
    3246             :   }
    3247           5 :   return true;
    3248             : }
    3249             : 
    3250             : static bool
    3251           0 : set_screen(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    3252             : {
    3253           0 :   return JS_DefineProperty(cx, obj, "screen", args[0], JSPROP_ENUMERATE);
    3254             : }
    3255             : 
    3256             : static const JSJitInfo screen_getterinfo = {
    3257             :   { (JSJitGetterOp)get_screen },
    3258             :   { prototypes::id::Window },
    3259             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3260             :   JSJitInfo::Getter,
    3261             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3262             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3263             :   false,  /* isInfallible. False in setters. */
    3264             :   false,  /* isMovable.  Not relevant for setters. */
    3265             :   false, /* isEliminatable.  Not relevant for setters. */
    3266             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3267             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3268             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3269             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3270             : };
    3271             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3272             : static_assert(0 < 5, "There is no slot for us");
    3273             : static const JSJitInfo screen_setterinfo = {
    3274             :   { (JSJitGetterOp)set_screen },
    3275             :   { prototypes::id::Window },
    3276             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3277             :   JSJitInfo::Setter,
    3278             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3279             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3280             :   false,  /* isInfallible. False in setters. */
    3281             :   false,  /* isMovable.  Not relevant for setters. */
    3282             :   false, /* isEliminatable.  Not relevant for setters. */
    3283             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3284             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3285             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3286             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3287             : };
    3288             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3289             : static_assert(0 < 5, "There is no slot for us");
    3290             : 
    3291             : static bool
    3292           0 : moveTo(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    3293             : {
    3294           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3295           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.moveTo");
    3296             :   }
    3297           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    3298             :       // Return false from the JSNative in order to trigger
    3299             :       // an uncatchable exception.
    3300           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3301           0 :       return false;
    3302             :   }
    3303             :   int32_t arg0;
    3304           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    3305           0 :     return false;
    3306             :   }
    3307             :   int32_t arg1;
    3308           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    3309           0 :     return false;
    3310             :   }
    3311           0 :   binding_detail::FastErrorResult rv;
    3312           0 :   self->MoveTo(arg0, arg1, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    3313           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3314           0 :     return false;
    3315             :   }
    3316           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3317           0 :   args.rval().setUndefined();
    3318           0 :   return true;
    3319             : }
    3320             : 
    3321             : static const JSJitInfo moveTo_methodinfo = {
    3322             :   { (JSJitGetterOp)moveTo },
    3323             :   { prototypes::id::Window },
    3324             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3325             :   JSJitInfo::Method,
    3326             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3327             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3328             :   false,  /* isInfallible. False in setters. */
    3329             :   false,  /* isMovable.  Not relevant for setters. */
    3330             :   false, /* isEliminatable.  Not relevant for setters. */
    3331             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3332             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3333             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3334             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3335             : };
    3336             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3337             : static_assert(0 < 5, "There is no slot for us");
    3338             : 
    3339             : static bool
    3340           0 : moveBy(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    3341             : {
    3342           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3343           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.moveBy");
    3344             :   }
    3345           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    3346             :       // Return false from the JSNative in order to trigger
    3347             :       // an uncatchable exception.
    3348           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3349           0 :       return false;
    3350             :   }
    3351             :   int32_t arg0;
    3352           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    3353           0 :     return false;
    3354             :   }
    3355             :   int32_t arg1;
    3356           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    3357           0 :     return false;
    3358             :   }
    3359           0 :   binding_detail::FastErrorResult rv;
    3360           0 :   self->MoveBy(arg0, arg1, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    3361           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3362           0 :     return false;
    3363             :   }
    3364           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3365           0 :   args.rval().setUndefined();
    3366           0 :   return true;
    3367             : }
    3368             : 
    3369             : static const JSJitInfo moveBy_methodinfo = {
    3370             :   { (JSJitGetterOp)moveBy },
    3371             :   { prototypes::id::Window },
    3372             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3373             :   JSJitInfo::Method,
    3374             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3375             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3376             :   false,  /* isInfallible. False in setters. */
    3377             :   false,  /* isMovable.  Not relevant for setters. */
    3378             :   false, /* isEliminatable.  Not relevant for setters. */
    3379             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3380             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3381             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3382             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3383             : };
    3384             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3385             : static_assert(0 < 5, "There is no slot for us");
    3386             : 
    3387             : static bool
    3388           0 : resizeTo(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    3389             : {
    3390           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3391           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.resizeTo");
    3392             :   }
    3393           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    3394             :       // Return false from the JSNative in order to trigger
    3395             :       // an uncatchable exception.
    3396           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3397           0 :       return false;
    3398             :   }
    3399             :   int32_t arg0;
    3400           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    3401           0 :     return false;
    3402             :   }
    3403             :   int32_t arg1;
    3404           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    3405           0 :     return false;
    3406             :   }
    3407           0 :   binding_detail::FastErrorResult rv;
    3408           0 :   self->ResizeTo(arg0, arg1, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    3409           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3410           0 :     return false;
    3411             :   }
    3412           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3413           0 :   args.rval().setUndefined();
    3414           0 :   return true;
    3415             : }
    3416             : 
    3417             : static const JSJitInfo resizeTo_methodinfo = {
    3418             :   { (JSJitGetterOp)resizeTo },
    3419             :   { prototypes::id::Window },
    3420             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3421             :   JSJitInfo::Method,
    3422             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3423             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3424             :   false,  /* isInfallible. False in setters. */
    3425             :   false,  /* isMovable.  Not relevant for setters. */
    3426             :   false, /* isEliminatable.  Not relevant for setters. */
    3427             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3428             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3429             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3430             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3431             : };
    3432             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3433             : static_assert(0 < 5, "There is no slot for us");
    3434             : 
    3435             : static bool
    3436           0 : resizeBy(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    3437             : {
    3438           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3439           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.resizeBy");
    3440             :   }
    3441           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    3442             :       // Return false from the JSNative in order to trigger
    3443             :       // an uncatchable exception.
    3444           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3445           0 :       return false;
    3446             :   }
    3447             :   int32_t arg0;
    3448           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    3449           0 :     return false;
    3450             :   }
    3451             :   int32_t arg1;
    3452           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    3453           0 :     return false;
    3454             :   }
    3455           0 :   binding_detail::FastErrorResult rv;
    3456           0 :   self->ResizeBy(arg0, arg1, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    3457           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3458           0 :     return false;
    3459             :   }
    3460           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3461           0 :   args.rval().setUndefined();
    3462           0 :   return true;
    3463             : }
    3464             : 
    3465             : static const JSJitInfo resizeBy_methodinfo = {
    3466             :   { (JSJitGetterOp)resizeBy },
    3467             :   { prototypes::id::Window },
    3468             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3469             :   JSJitInfo::Method,
    3470             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3471             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3472             :   false,  /* isInfallible. False in setters. */
    3473             :   false,  /* isMovable.  Not relevant for setters. */
    3474             :   false, /* isEliminatable.  Not relevant for setters. */
    3475             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3476             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3477             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3478             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3479             : };
    3480             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3481             : static_assert(0 < 5, "There is no slot for us");
    3482             : 
    3483             : static bool
    3484           0 : get_innerWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    3485             : {
    3486           0 :   binding_detail::FastErrorResult rv;
    3487           0 :   JS::Rooted<JS::Value> result(cx);
    3488           0 :   self->GetInnerWidth(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    3489           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3490           0 :     return false;
    3491             :   }
    3492           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3493           0 :   JS::ExposeValueToActiveJS(result);
    3494           0 :   args.rval().set(result);
    3495           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    3496           0 :     return false;
    3497             :   }
    3498           0 :   return true;
    3499             : }
    3500             : 
    3501             : static bool
    3502           0 : set_innerWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    3503             : {
    3504           0 :   JS::Rooted<JS::Value> arg0(cx);
    3505           0 :   arg0 = args[0];
    3506           0 :   binding_detail::FastErrorResult rv;
    3507           0 :   self->SetInnerWidth(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    3508           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3509           0 :     return false;
    3510             :   }
    3511           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3512             : 
    3513           0 :   return true;
    3514             : }
    3515             : 
    3516             : static const JSJitInfo innerWidth_getterinfo = {
    3517             :   { (JSJitGetterOp)get_innerWidth },
    3518             :   { prototypes::id::Window },
    3519             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3520             :   JSJitInfo::Getter,
    3521             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3522             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3523             :   false,  /* isInfallible. False in setters. */
    3524             :   false,  /* isMovable.  Not relevant for setters. */
    3525             :   false, /* isEliminatable.  Not relevant for setters. */
    3526             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3527             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3528             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3529             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3530             : };
    3531             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3532             : static_assert(0 < 5, "There is no slot for us");
    3533             : static const JSJitInfo innerWidth_setterinfo = {
    3534             :   { (JSJitGetterOp)set_innerWidth },
    3535             :   { prototypes::id::Window },
    3536             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3537             :   JSJitInfo::Setter,
    3538             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3539             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3540             :   false,  /* isInfallible. False in setters. */
    3541             :   false,  /* isMovable.  Not relevant for setters. */
    3542             :   false, /* isEliminatable.  Not relevant for setters. */
    3543             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3544             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3545             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3546             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3547             : };
    3548             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3549             : static_assert(0 < 5, "There is no slot for us");
    3550             : 
    3551             : static bool
    3552           0 : get_innerHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    3553             : {
    3554           0 :   binding_detail::FastErrorResult rv;
    3555           0 :   JS::Rooted<JS::Value> result(cx);
    3556           0 :   self->GetInnerHeight(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    3557           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3558           0 :     return false;
    3559             :   }
    3560           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3561           0 :   JS::ExposeValueToActiveJS(result);
    3562           0 :   args.rval().set(result);
    3563           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    3564           0 :     return false;
    3565             :   }
    3566           0 :   return true;
    3567             : }
    3568             : 
    3569             : static bool
    3570           0 : set_innerHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    3571             : {
    3572           0 :   JS::Rooted<JS::Value> arg0(cx);
    3573           0 :   arg0 = args[0];
    3574           0 :   binding_detail::FastErrorResult rv;
    3575           0 :   self->SetInnerHeight(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    3576           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3577           0 :     return false;
    3578             :   }
    3579           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3580             : 
    3581           0 :   return true;
    3582             : }
    3583             : 
    3584             : static const JSJitInfo innerHeight_getterinfo = {
    3585             :   { (JSJitGetterOp)get_innerHeight },
    3586             :   { prototypes::id::Window },
    3587             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3588             :   JSJitInfo::Getter,
    3589             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3590             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3591             :   false,  /* isInfallible. False in setters. */
    3592             :   false,  /* isMovable.  Not relevant for setters. */
    3593             :   false, /* isEliminatable.  Not relevant for setters. */
    3594             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3595             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3596             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3597             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3598             : };
    3599             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3600             : static_assert(0 < 5, "There is no slot for us");
    3601             : static const JSJitInfo innerHeight_setterinfo = {
    3602             :   { (JSJitGetterOp)set_innerHeight },
    3603             :   { prototypes::id::Window },
    3604             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3605             :   JSJitInfo::Setter,
    3606             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3607             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3608             :   false,  /* isInfallible. False in setters. */
    3609             :   false,  /* isMovable.  Not relevant for setters. */
    3610             :   false, /* isEliminatable.  Not relevant for setters. */
    3611             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3612             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3613             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3614             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3615             : };
    3616             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3617             : static_assert(0 < 5, "There is no slot for us");
    3618             : 
    3619             : static bool
    3620           0 : scroll(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    3621             : {
    3622           0 :   unsigned argcount = std::min(args.length(), 2u);
    3623           0 :   switch (argcount) {
    3624             :     case 0: {
    3625             :       MOZ_FALLTHROUGH;
    3626             :     }
    3627             :     case 1: {
    3628           0 :       binding_detail::FastScrollToOptions arg0;
    3629           0 :       if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue,  "Argument 1 of Window.scroll", false)) {
    3630           0 :         return false;
    3631             :       }
    3632           0 :       self->Scroll(Constify(arg0));
    3633           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3634           0 :       args.rval().setUndefined();
    3635           0 :       return true;
    3636             :       break;
    3637             :     }
    3638             :     case 2: {
    3639             :       double arg0;
    3640           0 :       if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    3641           0 :         return false;
    3642             :       }
    3643             :       double arg1;
    3644           0 :       if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    3645           0 :         return false;
    3646             :       }
    3647           0 :       self->Scroll(arg0, arg1);
    3648           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3649           0 :       args.rval().setUndefined();
    3650           0 :       return true;
    3651             :       break;
    3652             :     }
    3653             :     default: {
    3654           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scroll");
    3655             :       break;
    3656             :     }
    3657             :   }
    3658             :   MOZ_CRASH("We have an always-returning default case");
    3659             :   return false;
    3660             : }
    3661             : 
    3662             : static const JSJitInfo scroll_methodinfo = {
    3663             :   { (JSJitGetterOp)scroll },
    3664             :   { prototypes::id::Window },
    3665             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3666             :   JSJitInfo::Method,
    3667             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3668             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3669             :   false,  /* isInfallible. False in setters. */
    3670             :   false,  /* isMovable.  Not relevant for setters. */
    3671             :   false, /* isEliminatable.  Not relevant for setters. */
    3672             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3673             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3674             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3675             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3676             : };
    3677             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3678             : static_assert(0 < 5, "There is no slot for us");
    3679             : 
    3680             : static bool
    3681           0 : scrollTo(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    3682             : {
    3683           0 :   unsigned argcount = std::min(args.length(), 2u);
    3684           0 :   switch (argcount) {
    3685             :     case 0: {
    3686             :       MOZ_FALLTHROUGH;
    3687             :     }
    3688             :     case 1: {
    3689           0 :       binding_detail::FastScrollToOptions arg0;
    3690           0 :       if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue,  "Argument 1 of Window.scrollTo", false)) {
    3691           0 :         return false;
    3692             :       }
    3693           0 :       self->ScrollTo(Constify(arg0));
    3694           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3695           0 :       args.rval().setUndefined();
    3696           0 :       return true;
    3697             :       break;
    3698             :     }
    3699             :     case 2: {
    3700             :       double arg0;
    3701           0 :       if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    3702           0 :         return false;
    3703             :       }
    3704             :       double arg1;
    3705           0 :       if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    3706           0 :         return false;
    3707             :       }
    3708           0 :       self->ScrollTo(arg0, arg1);
    3709           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3710           0 :       args.rval().setUndefined();
    3711           0 :       return true;
    3712             :       break;
    3713             :     }
    3714             :     default: {
    3715           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scrollTo");
    3716             :       break;
    3717             :     }
    3718             :   }
    3719             :   MOZ_CRASH("We have an always-returning default case");
    3720             :   return false;
    3721             : }
    3722             : 
    3723             : static const JSJitInfo scrollTo_methodinfo = {
    3724             :   { (JSJitGetterOp)scrollTo },
    3725             :   { prototypes::id::Window },
    3726             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3727             :   JSJitInfo::Method,
    3728             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3729             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3730             :   false,  /* isInfallible. False in setters. */
    3731             :   false,  /* isMovable.  Not relevant for setters. */
    3732             :   false, /* isEliminatable.  Not relevant for setters. */
    3733             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3734             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3735             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3736             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3737             : };
    3738             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3739             : static_assert(0 < 5, "There is no slot for us");
    3740             : 
    3741             : static bool
    3742           0 : scrollBy(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    3743             : {
    3744           0 :   unsigned argcount = std::min(args.length(), 2u);
    3745           0 :   switch (argcount) {
    3746             :     case 0: {
    3747             :       MOZ_FALLTHROUGH;
    3748             :     }
    3749             :     case 1: {
    3750           0 :       binding_detail::FastScrollToOptions arg0;
    3751           0 :       if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue,  "Argument 1 of Window.scrollBy", false)) {
    3752           0 :         return false;
    3753             :       }
    3754           0 :       self->ScrollBy(Constify(arg0));
    3755           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3756           0 :       args.rval().setUndefined();
    3757           0 :       return true;
    3758             :       break;
    3759             :     }
    3760             :     case 2: {
    3761             :       double arg0;
    3762           0 :       if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    3763           0 :         return false;
    3764             :       }
    3765             :       double arg1;
    3766           0 :       if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    3767           0 :         return false;
    3768             :       }
    3769           0 :       self->ScrollBy(arg0, arg1);
    3770           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3771           0 :       args.rval().setUndefined();
    3772           0 :       return true;
    3773             :       break;
    3774             :     }
    3775             :     default: {
    3776           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scrollBy");
    3777             :       break;
    3778             :     }
    3779             :   }
    3780             :   MOZ_CRASH("We have an always-returning default case");
    3781             :   return false;
    3782             : }
    3783             : 
    3784             : static const JSJitInfo scrollBy_methodinfo = {
    3785             :   { (JSJitGetterOp)scrollBy },
    3786             :   { prototypes::id::Window },
    3787             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3788             :   JSJitInfo::Method,
    3789             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3790             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3791             :   false,  /* isInfallible. False in setters. */
    3792             :   false,  /* isMovable.  Not relevant for setters. */
    3793             :   false, /* isEliminatable.  Not relevant for setters. */
    3794             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3795             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3796             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3797             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3798             : };
    3799             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3800             : static_assert(0 < 5, "There is no slot for us");
    3801             : 
    3802             : static bool
    3803           0 : mozScrollSnap(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    3804             : {
    3805           0 :   self->MozScrollSnap();
    3806           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3807           0 :   args.rval().setUndefined();
    3808           0 :   return true;
    3809             : }
    3810             : 
    3811             : static const JSJitInfo mozScrollSnap_methodinfo = {
    3812             :   { (JSJitGetterOp)mozScrollSnap },
    3813             :   { prototypes::id::Window },
    3814             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3815             :   JSJitInfo::Method,
    3816             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3817             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3818             :   true,  /* isInfallible. False in setters. */
    3819             :   false,  /* isMovable.  Not relevant for setters. */
    3820             :   false, /* isEliminatable.  Not relevant for setters. */
    3821             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3822             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3823             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3824             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3825             : };
    3826             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3827             : static_assert(0 < 5, "There is no slot for us");
    3828             : 
    3829             : static bool
    3830           0 : get_scrollX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    3831             : {
    3832           0 :   binding_detail::FastErrorResult rv;
    3833           0 :   double result(self->GetScrollX(rv));
    3834           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3835           0 :     return false;
    3836             :   }
    3837           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3838           0 :   args.rval().set(JS_NumberValue(double(result)));
    3839           0 :   return true;
    3840             : }
    3841             : 
    3842             : static bool
    3843           0 : set_scrollX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    3844             : {
    3845           0 :   return JS_DefineProperty(cx, obj, "scrollX", args[0], JSPROP_ENUMERATE);
    3846             : }
    3847             : 
    3848             : static const JSJitInfo scrollX_getterinfo = {
    3849             :   { (JSJitGetterOp)get_scrollX },
    3850             :   { prototypes::id::Window },
    3851             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3852             :   JSJitInfo::Getter,
    3853             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3854             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    3855             :   false,  /* isInfallible. False in setters. */
    3856             :   false,  /* isMovable.  Not relevant for setters. */
    3857             :   false, /* isEliminatable.  Not relevant for setters. */
    3858             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3859             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3860             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3861             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3862             : };
    3863             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3864             : static_assert(0 < 5, "There is no slot for us");
    3865             : static const JSJitInfo scrollX_setterinfo = {
    3866             :   { (JSJitGetterOp)set_scrollX },
    3867             :   { prototypes::id::Window },
    3868             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3869             :   JSJitInfo::Setter,
    3870             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3871             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3872             :   false,  /* isInfallible. False in setters. */
    3873             :   false,  /* isMovable.  Not relevant for setters. */
    3874             :   false, /* isEliminatable.  Not relevant for setters. */
    3875             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3876             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3877             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3878             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3879             : };
    3880             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3881             : static_assert(0 < 5, "There is no slot for us");
    3882             : 
    3883             : static bool
    3884           0 : get_pageXOffset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    3885             : {
    3886           0 :   binding_detail::FastErrorResult rv;
    3887           0 :   double result(self->GetPageXOffset(rv));
    3888           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3889           0 :     return false;
    3890             :   }
    3891           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3892           0 :   args.rval().set(JS_NumberValue(double(result)));
    3893           0 :   return true;
    3894             : }
    3895             : 
    3896             : static bool
    3897           0 : set_pageXOffset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    3898             : {
    3899           0 :   return JS_DefineProperty(cx, obj, "pageXOffset", args[0], JSPROP_ENUMERATE);
    3900             : }
    3901             : 
    3902             : static const JSJitInfo pageXOffset_getterinfo = {
    3903             :   { (JSJitGetterOp)get_pageXOffset },
    3904             :   { prototypes::id::Window },
    3905             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3906             :   JSJitInfo::Getter,
    3907             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3908             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    3909             :   false,  /* isInfallible. False in setters. */
    3910             :   false,  /* isMovable.  Not relevant for setters. */
    3911             :   false, /* isEliminatable.  Not relevant for setters. */
    3912             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3913             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3914             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3915             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3916             : };
    3917             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3918             : static_assert(0 < 5, "There is no slot for us");
    3919             : static const JSJitInfo pageXOffset_setterinfo = {
    3920             :   { (JSJitGetterOp)set_pageXOffset },
    3921             :   { prototypes::id::Window },
    3922             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3923             :   JSJitInfo::Setter,
    3924             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3925             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3926             :   false,  /* isInfallible. False in setters. */
    3927             :   false,  /* isMovable.  Not relevant for setters. */
    3928             :   false, /* isEliminatable.  Not relevant for setters. */
    3929             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3930             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3931             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3932             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3933             : };
    3934             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3935             : static_assert(0 < 5, "There is no slot for us");
    3936             : 
    3937             : static bool
    3938           0 : get_scrollY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    3939             : {
    3940           0 :   binding_detail::FastErrorResult rv;
    3941           0 :   double result(self->GetScrollY(rv));
    3942           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3943           0 :     return false;
    3944             :   }
    3945           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3946           0 :   args.rval().set(JS_NumberValue(double(result)));
    3947           0 :   return true;
    3948             : }
    3949             : 
    3950             : static bool
    3951           0 : set_scrollY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    3952             : {
    3953           0 :   return JS_DefineProperty(cx, obj, "scrollY", args[0], JSPROP_ENUMERATE);
    3954             : }
    3955             : 
    3956             : static const JSJitInfo scrollY_getterinfo = {
    3957             :   { (JSJitGetterOp)get_scrollY },
    3958             :   { prototypes::id::Window },
    3959             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3960             :   JSJitInfo::Getter,
    3961             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3962             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    3963             :   false,  /* isInfallible. False in setters. */
    3964             :   false,  /* isMovable.  Not relevant for setters. */
    3965             :   false, /* isEliminatable.  Not relevant for setters. */
    3966             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3967             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3968             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3969             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3970             : };
    3971             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3972             : static_assert(0 < 5, "There is no slot for us");
    3973             : static const JSJitInfo scrollY_setterinfo = {
    3974             :   { (JSJitGetterOp)set_scrollY },
    3975             :   { prototypes::id::Window },
    3976             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    3977             :   JSJitInfo::Setter,
    3978             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3979             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3980             :   false,  /* isInfallible. False in setters. */
    3981             :   false,  /* isMovable.  Not relevant for setters. */
    3982             :   false, /* isEliminatable.  Not relevant for setters. */
    3983             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3984             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3985             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3986             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3987             : };
    3988             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3989             : static_assert(0 < 5, "There is no slot for us");
    3990             : 
    3991             : static bool
    3992           0 : get_pageYOffset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    3993             : {
    3994           0 :   binding_detail::FastErrorResult rv;
    3995           0 :   double result(self->GetPageYOffset(rv));
    3996           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3997           0 :     return false;
    3998             :   }
    3999           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4000           0 :   args.rval().set(JS_NumberValue(double(result)));
    4001           0 :   return true;
    4002             : }
    4003             : 
    4004             : static bool
    4005           0 : set_pageYOffset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    4006             : {
    4007           0 :   return JS_DefineProperty(cx, obj, "pageYOffset", args[0], JSPROP_ENUMERATE);
    4008             : }
    4009             : 
    4010             : static const JSJitInfo pageYOffset_getterinfo = {
    4011             :   { (JSJitGetterOp)get_pageYOffset },
    4012             :   { prototypes::id::Window },
    4013             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4014             :   JSJitInfo::Getter,
    4015             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4016             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    4017             :   false,  /* isInfallible. False in setters. */
    4018             :   false,  /* isMovable.  Not relevant for setters. */
    4019             :   false, /* isEliminatable.  Not relevant for setters. */
    4020             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4021             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4022             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4023             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4024             : };
    4025             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4026             : static_assert(0 < 5, "There is no slot for us");
    4027             : static const JSJitInfo pageYOffset_setterinfo = {
    4028             :   { (JSJitGetterOp)set_pageYOffset },
    4029             :   { prototypes::id::Window },
    4030             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4031             :   JSJitInfo::Setter,
    4032             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4033             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4034             :   false,  /* isInfallible. False in setters. */
    4035             :   false,  /* isMovable.  Not relevant for setters. */
    4036             :   false, /* isEliminatable.  Not relevant for setters. */
    4037             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4038             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4039             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4040             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4041             : };
    4042             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4043             : static_assert(0 < 5, "There is no slot for us");
    4044             : 
    4045             : static bool
    4046           0 : get_screenX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    4047             : {
    4048           0 :   binding_detail::FastErrorResult rv;
    4049           0 :   JS::Rooted<JS::Value> result(cx);
    4050           0 :   self->GetScreenX(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    4051           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4052           0 :     return false;
    4053             :   }
    4054           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4055           0 :   JS::ExposeValueToActiveJS(result);
    4056           0 :   args.rval().set(result);
    4057           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    4058           0 :     return false;
    4059             :   }
    4060           0 :   return true;
    4061             : }
    4062             : 
    4063             : static bool
    4064           0 : set_screenX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    4065             : {
    4066           0 :   JS::Rooted<JS::Value> arg0(cx);
    4067           0 :   arg0 = args[0];
    4068           0 :   binding_detail::FastErrorResult rv;
    4069           0 :   self->SetScreenX(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    4070           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4071           0 :     return false;
    4072             :   }
    4073           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4074             : 
    4075           0 :   return true;
    4076             : }
    4077             : 
    4078             : static const JSJitInfo screenX_getterinfo = {
    4079             :   { (JSJitGetterOp)get_screenX },
    4080             :   { prototypes::id::Window },
    4081             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4082             :   JSJitInfo::Getter,
    4083             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4084             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4085             :   false,  /* isInfallible. False in setters. */
    4086             :   false,  /* isMovable.  Not relevant for setters. */
    4087             :   false, /* isEliminatable.  Not relevant for setters. */
    4088             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4089             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4090             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4091             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4092             : };
    4093             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4094             : static_assert(0 < 5, "There is no slot for us");
    4095             : static const JSJitInfo screenX_setterinfo = {
    4096             :   { (JSJitGetterOp)set_screenX },
    4097             :   { prototypes::id::Window },
    4098             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4099             :   JSJitInfo::Setter,
    4100             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4101             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4102             :   false,  /* isInfallible. False in setters. */
    4103             :   false,  /* isMovable.  Not relevant for setters. */
    4104             :   false, /* isEliminatable.  Not relevant for setters. */
    4105             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4106             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4107             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4108             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4109             : };
    4110             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4111             : static_assert(0 < 5, "There is no slot for us");
    4112             : 
    4113             : static bool
    4114           0 : get_screenY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    4115             : {
    4116           0 :   binding_detail::FastErrorResult rv;
    4117           0 :   JS::Rooted<JS::Value> result(cx);
    4118           0 :   self->GetScreenY(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    4119           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4120           0 :     return false;
    4121             :   }
    4122           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4123           0 :   JS::ExposeValueToActiveJS(result);
    4124           0 :   args.rval().set(result);
    4125           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    4126           0 :     return false;
    4127             :   }
    4128           0 :   return true;
    4129             : }
    4130             : 
    4131             : static bool
    4132           0 : set_screenY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    4133             : {
    4134           0 :   JS::Rooted<JS::Value> arg0(cx);
    4135           0 :   arg0 = args[0];
    4136           0 :   binding_detail::FastErrorResult rv;
    4137           0 :   self->SetScreenY(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    4138           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4139           0 :     return false;
    4140             :   }
    4141           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4142             : 
    4143           0 :   return true;
    4144             : }
    4145             : 
    4146             : static const JSJitInfo screenY_getterinfo = {
    4147             :   { (JSJitGetterOp)get_screenY },
    4148             :   { prototypes::id::Window },
    4149             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4150             :   JSJitInfo::Getter,
    4151             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4152             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4153             :   false,  /* isInfallible. False in setters. */
    4154             :   false,  /* isMovable.  Not relevant for setters. */
    4155             :   false, /* isEliminatable.  Not relevant for setters. */
    4156             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4157             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4158             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4159             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4160             : };
    4161             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4162             : static_assert(0 < 5, "There is no slot for us");
    4163             : static const JSJitInfo screenY_setterinfo = {
    4164             :   { (JSJitGetterOp)set_screenY },
    4165             :   { prototypes::id::Window },
    4166             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4167             :   JSJitInfo::Setter,
    4168             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4169             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4170             :   false,  /* isInfallible. False in setters. */
    4171             :   false,  /* isMovable.  Not relevant for setters. */
    4172             :   false, /* isEliminatable.  Not relevant for setters. */
    4173             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4174             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4175             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4176             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4177             : };
    4178             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4179             : static_assert(0 < 5, "There is no slot for us");
    4180             : 
    4181             : static bool
    4182           0 : get_outerWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    4183             : {
    4184           0 :   binding_detail::FastErrorResult rv;
    4185           0 :   JS::Rooted<JS::Value> result(cx);
    4186           0 :   self->GetOuterWidth(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    4187           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4188           0 :     return false;
    4189             :   }
    4190           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4191           0 :   JS::ExposeValueToActiveJS(result);
    4192           0 :   args.rval().set(result);
    4193           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    4194           0 :     return false;
    4195             :   }
    4196           0 :   return true;
    4197             : }
    4198             : 
    4199             : static bool
    4200           0 : set_outerWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    4201             : {
    4202           0 :   JS::Rooted<JS::Value> arg0(cx);
    4203           0 :   arg0 = args[0];
    4204           0 :   binding_detail::FastErrorResult rv;
    4205           0 :   self->SetOuterWidth(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    4206           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4207           0 :     return false;
    4208             :   }
    4209           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4210             : 
    4211           0 :   return true;
    4212             : }
    4213             : 
    4214             : static const JSJitInfo outerWidth_getterinfo = {
    4215             :   { (JSJitGetterOp)get_outerWidth },
    4216             :   { prototypes::id::Window },
    4217             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4218             :   JSJitInfo::Getter,
    4219             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4220             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4221             :   false,  /* isInfallible. False in setters. */
    4222             :   false,  /* isMovable.  Not relevant for setters. */
    4223             :   false, /* isEliminatable.  Not relevant for setters. */
    4224             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4225             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4226             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4227             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4228             : };
    4229             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4230             : static_assert(0 < 5, "There is no slot for us");
    4231             : static const JSJitInfo outerWidth_setterinfo = {
    4232             :   { (JSJitGetterOp)set_outerWidth },
    4233             :   { prototypes::id::Window },
    4234             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4235             :   JSJitInfo::Setter,
    4236             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4237             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4238             :   false,  /* isInfallible. False in setters. */
    4239             :   false,  /* isMovable.  Not relevant for setters. */
    4240             :   false, /* isEliminatable.  Not relevant for setters. */
    4241             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4242             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4243             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4244             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4245             : };
    4246             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4247             : static_assert(0 < 5, "There is no slot for us");
    4248             : 
    4249             : static bool
    4250           0 : get_outerHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    4251             : {
    4252           0 :   binding_detail::FastErrorResult rv;
    4253           0 :   JS::Rooted<JS::Value> result(cx);
    4254           0 :   self->GetOuterHeight(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    4255           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4256           0 :     return false;
    4257             :   }
    4258           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4259           0 :   JS::ExposeValueToActiveJS(result);
    4260           0 :   args.rval().set(result);
    4261           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    4262           0 :     return false;
    4263             :   }
    4264           0 :   return true;
    4265             : }
    4266             : 
    4267             : static bool
    4268           0 : set_outerHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    4269             : {
    4270           0 :   JS::Rooted<JS::Value> arg0(cx);
    4271           0 :   arg0 = args[0];
    4272           0 :   binding_detail::FastErrorResult rv;
    4273           0 :   self->SetOuterHeight(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    4274           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4275           0 :     return false;
    4276             :   }
    4277           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4278             : 
    4279           0 :   return true;
    4280             : }
    4281             : 
    4282             : static const JSJitInfo outerHeight_getterinfo = {
    4283             :   { (JSJitGetterOp)get_outerHeight },
    4284             :   { prototypes::id::Window },
    4285             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4286             :   JSJitInfo::Getter,
    4287             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4288             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4289             :   false,  /* isInfallible. False in setters. */
    4290             :   false,  /* isMovable.  Not relevant for setters. */
    4291             :   false, /* isEliminatable.  Not relevant for setters. */
    4292             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4293             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4294             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4295             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4296             : };
    4297             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4298             : static_assert(0 < 5, "There is no slot for us");
    4299             : static const JSJitInfo outerHeight_setterinfo = {
    4300             :   { (JSJitGetterOp)set_outerHeight },
    4301             :   { prototypes::id::Window },
    4302             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4303             :   JSJitInfo::Setter,
    4304             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4305             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4306             :   false,  /* isInfallible. False in setters. */
    4307             :   false,  /* isMovable.  Not relevant for setters. */
    4308             :   false, /* isEliminatable.  Not relevant for setters. */
    4309             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4310             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4311             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4312             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4313             : };
    4314             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4315             : static_assert(0 < 5, "There is no slot for us");
    4316             : 
    4317             : static bool
    4318           4 : requestAnimationFrame(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    4319             : {
    4320           4 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    4321           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.requestAnimationFrame");
    4322             :   }
    4323           8 :   RootedCallback<OwningNonNull<binding_detail::FastFrameRequestCallback>> arg0(cx);
    4324           4 :   if (args[0].isObject()) {
    4325           4 :     if (JS::IsCallable(&args[0].toObject())) {
    4326             :     { // scope for tempRoot
    4327           8 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4328           8 :       arg0 = new binding_detail::FastFrameRequestCallback(tempRoot);
    4329             :     }
    4330             :     } else {
    4331           0 :       ThrowErrorMessage(cx, MSG_NOT_CALLABLE, "Argument 1 of Window.requestAnimationFrame");
    4332           0 :       return false;
    4333             :     }
    4334             :   } else {
    4335           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.requestAnimationFrame");
    4336           0 :     return false;
    4337             :   }
    4338           8 :   binding_detail::FastErrorResult rv;
    4339           4 :   int32_t result(self->RequestAnimationFrame(NonNullHelper(arg0), rv));
    4340           4 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4341           0 :     return false;
    4342             :   }
    4343           4 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4344           4 :   args.rval().setInt32(int32_t(result));
    4345           4 :   return true;
    4346             : }
    4347             : 
    4348             : static const JSJitInfo requestAnimationFrame_methodinfo = {
    4349             :   { (JSJitGetterOp)requestAnimationFrame },
    4350             :   { prototypes::id::Window },
    4351             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4352             :   JSJitInfo::Method,
    4353             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4354             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    4355             :   false,  /* isInfallible. False in setters. */
    4356             :   false,  /* isMovable.  Not relevant for setters. */
    4357             :   false, /* isEliminatable.  Not relevant for setters. */
    4358             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4359             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4360             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4361             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4362             : };
    4363             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4364             : static_assert(0 < 5, "There is no slot for us");
    4365             : 
    4366             : static bool
    4367           0 : cancelAnimationFrame(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    4368             : {
    4369           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    4370           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.cancelAnimationFrame");
    4371             :   }
    4372             :   int32_t arg0;
    4373           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    4374           0 :     return false;
    4375             :   }
    4376           0 :   binding_detail::FastErrorResult rv;
    4377           0 :   self->CancelAnimationFrame(arg0, rv);
    4378           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4379           0 :     return false;
    4380             :   }
    4381           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4382           0 :   args.rval().setUndefined();
    4383           0 :   return true;
    4384             : }
    4385             : 
    4386             : static const JSJitInfo cancelAnimationFrame_methodinfo = {
    4387             :   { (JSJitGetterOp)cancelAnimationFrame },
    4388             :   { prototypes::id::Window },
    4389             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4390             :   JSJitInfo::Method,
    4391             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4392             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4393             :   false,  /* isInfallible. False in setters. */
    4394             :   false,  /* isMovable.  Not relevant for setters. */
    4395             :   false, /* isEliminatable.  Not relevant for setters. */
    4396             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4397             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4398             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4399             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4400             : };
    4401             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4402             : static_assert(0 < 5, "There is no slot for us");
    4403             : 
    4404             : static bool
    4405          15 : get_performance(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    4406             : {
    4407             :   // Have to either root across the getter call or reget after.
    4408          30 :   JS::Rooted<JSObject*> slotStorage(cx, js::UncheckedUnwrap(obj, /* stopAtWindowProxy = */ false));
    4409          15 :   MOZ_ASSERT(IsDOMObject(slotStorage));
    4410          15 :   const size_t slotIndex = (DOM_INSTANCE_RESERVED_SLOTS + 3);
    4411          15 :   MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
    4412             :   {
    4413             :     // Scope for cachedVal
    4414          15 :     JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
    4415          15 :     if (!cachedVal.isUndefined()) {
    4416           0 :       args.rval().set(cachedVal);
    4417             :       // The cached value is in the compartment of slotStorage,
    4418             :       // so wrap into the caller compartment as needed.
    4419           0 :       return MaybeWrapValue(cx, args.rval());
    4420             :     }
    4421             :   }
    4422             : 
    4423          15 :   auto result(StrongOrRawPtr<mozilla::dom::Performance>(self->GetPerformance()));
    4424          15 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4425             :   {
    4426          30 :     JS::Rooted<JSObject*> conversionScope(cx, slotStorage);
    4427          30 :     JSAutoCompartment ac(cx, conversionScope);
    4428             :     do { // block we break out of when done wrapping
    4429          15 :       if (!result) {
    4430           7 :         args.rval().setNull();
    4431           7 :         break;
    4432             :       }
    4433           8 :       if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    4434           0 :         MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    4435           0 :         return false;
    4436             :       }
    4437           8 :       break;
    4438             :     } while (0);
    4439             :   }
    4440             :   { // And now store things in the compartment of our slotStorage.
    4441          30 :     JSAutoCompartment ac(cx, slotStorage);
    4442             :     // Make a copy so that we don't do unnecessary wrapping on args.rval().
    4443          30 :     JS::Rooted<JS::Value> storedVal(cx, args.rval());
    4444          15 :     if (!MaybeWrapValue(cx, &storedVal)) {
    4445           0 :       return false;
    4446             :     }
    4447          15 :     js::SetReservedSlot(slotStorage, slotIndex, storedVal);
    4448             :   }
    4449             :   // And now make sure args.rval() is in the caller compartment
    4450          15 :   return MaybeWrapValue(cx, args.rval());
    4451             : }
    4452             : 
    4453             : static bool
    4454           0 : set_performance(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    4455             : {
    4456           0 :   return JS_DefineProperty(cx, obj, "performance", args[0], JSPROP_ENUMERATE);
    4457             : }
    4458             : 
    4459             : static const JSJitInfo performance_getterinfo = {
    4460             :   { (JSJitGetterOp)get_performance },
    4461             :   { prototypes::id::Window },
    4462             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4463             :   JSJitInfo::Getter,
    4464             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    4465             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4466             :   false,  /* isInfallible. False in setters. */
    4467             :   true,  /* isMovable.  Not relevant for setters. */
    4468             :   true, /* isEliminatable.  Not relevant for setters. */
    4469             :   true, /* isAlwaysInSlot.  Only relevant for getters. */
    4470             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4471             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4472             :   (DOM_INSTANCE_RESERVED_SLOTS + 3)   /* Reserved slot index, if we're stored in a slot, else 0. */
    4473             : };
    4474             : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 3) <= JSJitInfo::maxSlotIndex, "We won't fit");
    4475             : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 3) < 5, "There is no slot for us");
    4476             : static const JSJitInfo performance_setterinfo = {
    4477             :   { (JSJitGetterOp)set_performance },
    4478             :   { prototypes::id::Window },
    4479             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4480             :   JSJitInfo::Setter,
    4481             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4482             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4483             :   false,  /* isInfallible. False in setters. */
    4484             :   false,  /* isMovable.  Not relevant for setters. */
    4485             :   false, /* isEliminatable.  Not relevant for setters. */
    4486             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4487             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4488             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4489             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4490             : };
    4491             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4492             : static_assert(0 < 5, "There is no slot for us");
    4493             : 
    4494             : static bool
    4495           0 : getDefaultComputedStyle(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    4496             : {
    4497           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    4498           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getDefaultComputedStyle");
    4499             :   }
    4500           0 :   NonNull<mozilla::dom::Element> arg0;
    4501           0 :   if (args[0].isObject()) {
    4502             :     {
    4503           0 :       nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[0], arg0);
    4504           0 :       if (NS_FAILED(rv)) {
    4505           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.getDefaultComputedStyle", "Element");
    4506           0 :         return false;
    4507             :       }
    4508             :     }
    4509             :   } else {
    4510           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.getDefaultComputedStyle");
    4511           0 :     return false;
    4512             :   }
    4513           0 :   binding_detail::FakeString arg1;
    4514           0 :   if (args.hasDefined(1)) {
    4515           0 :     if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
    4516           0 :       return false;
    4517             :     }
    4518             :   } else {
    4519             :     static const char16_t data[] = { 0 };
    4520           0 :     arg1.Rebind(data, ArrayLength(data) - 1);
    4521             :   }
    4522           0 :   binding_detail::FastErrorResult rv;
    4523           0 :   auto result(StrongOrRawPtr<nsICSSDeclaration>(self->GetDefaultComputedStyle(NonNullHelper(arg0), NonNullHelper(Constify(arg1)), rv)));
    4524           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4525           0 :     return false;
    4526             :   }
    4527           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4528             :   static_assert(!IsPointer<decltype(result)>::value,
    4529             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    4530           0 :   if (!result) {
    4531           0 :     args.rval().setNull();
    4532           0 :     return true;
    4533             :   }
    4534           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    4535           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    4536           0 :     return false;
    4537             :   }
    4538           0 :   return true;
    4539             : }
    4540             : 
    4541             : static const JSJitInfo getDefaultComputedStyle_methodinfo = {
    4542             :   { (JSJitGetterOp)getDefaultComputedStyle },
    4543             :   { prototypes::id::Window },
    4544             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4545             :   JSJitInfo::Method,
    4546             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4547             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4548             :   false,  /* isInfallible. False in setters. */
    4549             :   false,  /* isMovable.  Not relevant for setters. */
    4550             :   false, /* isEliminatable.  Not relevant for setters. */
    4551             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4552             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4553             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4554             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4555             : };
    4556             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4557             : static_assert(0 < 5, "There is no slot for us");
    4558             : 
    4559             : static bool
    4560           0 : scrollByLines(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    4561             : {
    4562           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    4563           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scrollByLines");
    4564             :   }
    4565             :   int32_t arg0;
    4566           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    4567           0 :     return false;
    4568             :   }
    4569           0 :   binding_detail::FastScrollOptions arg1;
    4570           0 :   if (!arg1.Init(cx, (args.hasDefined(1)) ? args[1] : JS::NullHandleValue,  "Argument 2 of Window.scrollByLines", false)) {
    4571           0 :     return false;
    4572             :   }
    4573           0 :   self->ScrollByLines(arg0, Constify(arg1));
    4574           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4575           0 :   args.rval().setUndefined();
    4576           0 :   return true;
    4577             : }
    4578             : 
    4579             : static const JSJitInfo scrollByLines_methodinfo = {
    4580             :   { (JSJitGetterOp)scrollByLines },
    4581             :   { prototypes::id::Window },
    4582             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4583             :   JSJitInfo::Method,
    4584             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4585             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4586             :   false,  /* isInfallible. False in setters. */
    4587             :   false,  /* isMovable.  Not relevant for setters. */
    4588             :   false, /* isEliminatable.  Not relevant for setters. */
    4589             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4590             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4591             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4592             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4593             : };
    4594             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4595             : static_assert(0 < 5, "There is no slot for us");
    4596             : 
    4597             : static bool
    4598           0 : scrollByPages(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    4599             : {
    4600           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    4601           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scrollByPages");
    4602             :   }
    4603             :   int32_t arg0;
    4604           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    4605           0 :     return false;
    4606             :   }
    4607           0 :   binding_detail::FastScrollOptions arg1;
    4608           0 :   if (!arg1.Init(cx, (args.hasDefined(1)) ? args[1] : JS::NullHandleValue,  "Argument 2 of Window.scrollByPages", false)) {
    4609           0 :     return false;
    4610             :   }
    4611           0 :   self->ScrollByPages(arg0, Constify(arg1));
    4612           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4613           0 :   args.rval().setUndefined();
    4614           0 :   return true;
    4615             : }
    4616             : 
    4617             : static const JSJitInfo scrollByPages_methodinfo = {
    4618             :   { (JSJitGetterOp)scrollByPages },
    4619             :   { prototypes::id::Window },
    4620             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4621             :   JSJitInfo::Method,
    4622             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4623             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4624             :   false,  /* isInfallible. False in setters. */
    4625             :   false,  /* isMovable.  Not relevant for setters. */
    4626             :   false, /* isEliminatable.  Not relevant for setters. */
    4627             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4628             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4629             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4630             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4631             : };
    4632             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4633             : static_assert(0 < 5, "There is no slot for us");
    4634             : 
    4635             : static bool
    4636           0 : sizeToContent(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    4637             : {
    4638           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    4639             :       // Return false from the JSNative in order to trigger
    4640             :       // an uncatchable exception.
    4641           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4642           0 :       return false;
    4643             :   }
    4644           0 :   binding_detail::FastErrorResult rv;
    4645           0 :   self->SizeToContent(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    4646           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4647           0 :     return false;
    4648             :   }
    4649           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4650           0 :   args.rval().setUndefined();
    4651           0 :   return true;
    4652             : }
    4653             : 
    4654             : static const JSJitInfo sizeToContent_methodinfo = {
    4655             :   { (JSJitGetterOp)sizeToContent },
    4656             :   { prototypes::id::Window },
    4657             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4658             :   JSJitInfo::Method,
    4659             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4660             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4661             :   false,  /* isInfallible. False in setters. */
    4662             :   false,  /* isMovable.  Not relevant for setters. */
    4663             :   false, /* isEliminatable.  Not relevant for setters. */
    4664             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4665             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4666             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4667             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4668             : };
    4669             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4670             : static_assert(0 < 5, "There is no slot for us");
    4671             : 
    4672             : static bool
    4673           0 : get_controllers(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    4674             : {
    4675           0 :   binding_detail::FastErrorResult rv;
    4676           0 :   auto result(StrongOrRawPtr<nsIControllers>(self->GetControllers(rv)));
    4677           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4678           0 :     return false;
    4679             :   }
    4680           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4681           0 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIControllers), args.rval())) {
    4682           0 :     return false;
    4683             :   }
    4684           0 :   return true;
    4685             : }
    4686             : 
    4687             : static bool
    4688           0 : set_controllers(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    4689             : {
    4690           0 :   return JS_DefineProperty(cx, obj, "controllers", args[0], JSPROP_ENUMERATE);
    4691             : }
    4692             : 
    4693             : static const JSJitInfo controllers_getterinfo = {
    4694             :   { (JSJitGetterOp)get_controllers },
    4695             :   { prototypes::id::Window },
    4696             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4697             :   JSJitInfo::Getter,
    4698             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4699             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    4700             :   false,  /* isInfallible. False in setters. */
    4701             :   false,  /* isMovable.  Not relevant for setters. */
    4702             :   false, /* isEliminatable.  Not relevant for setters. */
    4703             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4704             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4705             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4706             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4707             : };
    4708             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4709             : static_assert(0 < 5, "There is no slot for us");
    4710             : static const JSJitInfo controllers_setterinfo = {
    4711             :   { (JSJitGetterOp)set_controllers },
    4712             :   { prototypes::id::Window },
    4713             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4714             :   JSJitInfo::Setter,
    4715             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4716             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4717             :   false,  /* isInfallible. False in setters. */
    4718             :   false,  /* isMovable.  Not relevant for setters. */
    4719             :   false, /* isEliminatable.  Not relevant for setters. */
    4720             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4721             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4722             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4723             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4724             : };
    4725             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4726             : static_assert(0 < 5, "There is no slot for us");
    4727             : 
    4728             : static bool
    4729           0 : get_realFrameElement(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    4730             : {
    4731           0 :   binding_detail::FastErrorResult rv;
    4732           0 :   auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetRealFrameElement(rv)));
    4733           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4734           0 :     return false;
    4735             :   }
    4736           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4737           0 :   if (!result) {
    4738           0 :     args.rval().setNull();
    4739           0 :     return true;
    4740             :   }
    4741           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    4742           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    4743           0 :     return false;
    4744             :   }
    4745           0 :   return true;
    4746             : }
    4747             : 
    4748             : static const JSJitInfo realFrameElement_getterinfo = {
    4749             :   { (JSJitGetterOp)get_realFrameElement },
    4750             :   { prototypes::id::Window },
    4751             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4752             :   JSJitInfo::Getter,
    4753             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4754             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4755             :   false,  /* isInfallible. False in setters. */
    4756             :   false,  /* isMovable.  Not relevant for setters. */
    4757             :   false, /* isEliminatable.  Not relevant for setters. */
    4758             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4759             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4760             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4761             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4762             : };
    4763             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4764             : static_assert(0 < 5, "There is no slot for us");
    4765             : 
    4766             : static bool
    4767           4 : get_mozInnerScreenX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    4768             : {
    4769           8 :   binding_detail::FastErrorResult rv;
    4770           4 :   float result(self->GetMozInnerScreenX(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv));
    4771           4 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4772           0 :     return false;
    4773             :   }
    4774           4 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4775           4 :   args.rval().set(JS_NumberValue(double(result)));
    4776           4 :   return true;
    4777             : }
    4778             : 
    4779             : static const JSJitInfo mozInnerScreenX_getterinfo = {
    4780             :   { (JSJitGetterOp)get_mozInnerScreenX },
    4781             :   { prototypes::id::Window },
    4782             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4783             :   JSJitInfo::Getter,
    4784             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4785             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    4786             :   false,  /* isInfallible. False in setters. */
    4787             :   false,  /* isMovable.  Not relevant for setters. */
    4788             :   false, /* isEliminatable.  Not relevant for setters. */
    4789             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4790             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4791             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4792             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4793             : };
    4794             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4795             : static_assert(0 < 5, "There is no slot for us");
    4796             : 
    4797             : static bool
    4798           4 : get_mozInnerScreenY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    4799             : {
    4800           8 :   binding_detail::FastErrorResult rv;
    4801           4 :   float result(self->GetMozInnerScreenY(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv));
    4802           4 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4803           0 :     return false;
    4804             :   }
    4805           4 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4806           4 :   args.rval().set(JS_NumberValue(double(result)));
    4807           4 :   return true;
    4808             : }
    4809             : 
    4810             : static const JSJitInfo mozInnerScreenY_getterinfo = {
    4811             :   { (JSJitGetterOp)get_mozInnerScreenY },
    4812             :   { prototypes::id::Window },
    4813             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4814             :   JSJitInfo::Getter,
    4815             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4816             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    4817             :   false,  /* isInfallible. False in setters. */
    4818             :   false,  /* isMovable.  Not relevant for setters. */
    4819             :   false, /* isEliminatable.  Not relevant for setters. */
    4820             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4821             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4822             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4823             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4824             : };
    4825             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4826             : static_assert(0 < 5, "There is no slot for us");
    4827             : 
    4828             : static bool
    4829           1 : get_devicePixelRatio(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    4830             : {
    4831           2 :   binding_detail::FastErrorResult rv;
    4832           1 :   float result(self->GetDevicePixelRatio(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv));
    4833           1 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4834           0 :     return false;
    4835             :   }
    4836           1 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4837           1 :   args.rval().set(JS_NumberValue(double(result)));
    4838           1 :   return true;
    4839             : }
    4840             : 
    4841             : static bool
    4842           0 : set_devicePixelRatio(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    4843             : {
    4844           0 :   return JS_DefineProperty(cx, obj, "devicePixelRatio", args[0], JSPROP_ENUMERATE);
    4845             : }
    4846             : 
    4847             : static const JSJitInfo devicePixelRatio_getterinfo = {
    4848             :   { (JSJitGetterOp)get_devicePixelRatio },
    4849             :   { prototypes::id::Window },
    4850             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4851             :   JSJitInfo::Getter,
    4852             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4853             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    4854             :   false,  /* isInfallible. False in setters. */
    4855             :   false,  /* isMovable.  Not relevant for setters. */
    4856             :   false, /* isEliminatable.  Not relevant for setters. */
    4857             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4858             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4859             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4860             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4861             : };
    4862             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4863             : static_assert(0 < 5, "There is no slot for us");
    4864             : static const JSJitInfo devicePixelRatio_setterinfo = {
    4865             :   { (JSJitGetterOp)set_devicePixelRatio },
    4866             :   { prototypes::id::Window },
    4867             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4868             :   JSJitInfo::Setter,
    4869             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4870             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4871             :   false,  /* isInfallible. False in setters. */
    4872             :   false,  /* isMovable.  Not relevant for setters. */
    4873             :   false, /* isEliminatable.  Not relevant for setters. */
    4874             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4875             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4876             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4877             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4878             : };
    4879             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4880             : static_assert(0 < 5, "There is no slot for us");
    4881             : 
    4882             : static bool
    4883           0 : get_scrollMinX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    4884             : {
    4885           0 :   binding_detail::FastErrorResult rv;
    4886           0 :   int32_t result(self->GetScrollMinX(rv));
    4887           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4888           0 :     return false;
    4889             :   }
    4890           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4891           0 :   args.rval().setInt32(int32_t(result));
    4892           0 :   return true;
    4893             : }
    4894             : 
    4895             : static const JSJitInfo scrollMinX_getterinfo = {
    4896             :   { (JSJitGetterOp)get_scrollMinX },
    4897             :   { prototypes::id::Window },
    4898             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4899             :   JSJitInfo::Getter,
    4900             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4901             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    4902             :   false,  /* isInfallible. False in setters. */
    4903             :   false,  /* isMovable.  Not relevant for setters. */
    4904             :   false, /* isEliminatable.  Not relevant for setters. */
    4905             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4906             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4907             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4908             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4909             : };
    4910             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4911             : static_assert(0 < 5, "There is no slot for us");
    4912             : 
    4913             : static bool
    4914           0 : get_scrollMinY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    4915             : {
    4916           0 :   binding_detail::FastErrorResult rv;
    4917           0 :   int32_t result(self->GetScrollMinY(rv));
    4918           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4919           0 :     return false;
    4920             :   }
    4921           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4922           0 :   args.rval().setInt32(int32_t(result));
    4923           0 :   return true;
    4924             : }
    4925             : 
    4926             : static const JSJitInfo scrollMinY_getterinfo = {
    4927             :   { (JSJitGetterOp)get_scrollMinY },
    4928             :   { prototypes::id::Window },
    4929             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4930             :   JSJitInfo::Getter,
    4931             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4932             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    4933             :   false,  /* isInfallible. False in setters. */
    4934             :   false,  /* isMovable.  Not relevant for setters. */
    4935             :   false, /* isEliminatable.  Not relevant for setters. */
    4936             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4937             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4938             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4939             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4940             : };
    4941             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4942             : static_assert(0 < 5, "There is no slot for us");
    4943             : 
    4944             : static bool
    4945           0 : get_scrollMaxX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    4946             : {
    4947           0 :   binding_detail::FastErrorResult rv;
    4948           0 :   int32_t result(self->GetScrollMaxX(rv));
    4949           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4950           0 :     return false;
    4951             :   }
    4952           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4953           0 :   args.rval().setInt32(int32_t(result));
    4954           0 :   return true;
    4955             : }
    4956             : 
    4957             : static bool
    4958           0 : set_scrollMaxX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    4959             : {
    4960           0 :   return JS_DefineProperty(cx, obj, "scrollMaxX", args[0], JSPROP_ENUMERATE);
    4961             : }
    4962             : 
    4963             : static const JSJitInfo scrollMaxX_getterinfo = {
    4964             :   { (JSJitGetterOp)get_scrollMaxX },
    4965             :   { prototypes::id::Window },
    4966             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4967             :   JSJitInfo::Getter,
    4968             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4969             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    4970             :   false,  /* isInfallible. False in setters. */
    4971             :   false,  /* isMovable.  Not relevant for setters. */
    4972             :   false, /* isEliminatable.  Not relevant for setters. */
    4973             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4974             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4975             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4976             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4977             : };
    4978             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4979             : static_assert(0 < 5, "There is no slot for us");
    4980             : static const JSJitInfo scrollMaxX_setterinfo = {
    4981             :   { (JSJitGetterOp)set_scrollMaxX },
    4982             :   { prototypes::id::Window },
    4983             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    4984             :   JSJitInfo::Setter,
    4985             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4986             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4987             :   false,  /* isInfallible. False in setters. */
    4988             :   false,  /* isMovable.  Not relevant for setters. */
    4989             :   false, /* isEliminatable.  Not relevant for setters. */
    4990             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4991             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4992             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4993             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4994             : };
    4995             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4996             : static_assert(0 < 5, "There is no slot for us");
    4997             : 
    4998             : static bool
    4999           0 : get_scrollMaxY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    5000             : {
    5001           0 :   binding_detail::FastErrorResult rv;
    5002           0 :   int32_t result(self->GetScrollMaxY(rv));
    5003           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5004           0 :     return false;
    5005             :   }
    5006           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5007           0 :   args.rval().setInt32(int32_t(result));
    5008           0 :   return true;
    5009             : }
    5010             : 
    5011             : static bool
    5012           0 : set_scrollMaxY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    5013             : {
    5014           0 :   return JS_DefineProperty(cx, obj, "scrollMaxY", args[0], JSPROP_ENUMERATE);
    5015             : }
    5016             : 
    5017             : static const JSJitInfo scrollMaxY_getterinfo = {
    5018             :   { (JSJitGetterOp)get_scrollMaxY },
    5019             :   { prototypes::id::Window },
    5020             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5021             :   JSJitInfo::Getter,
    5022             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5023             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    5024             :   false,  /* isInfallible. False in setters. */
    5025             :   false,  /* isMovable.  Not relevant for setters. */
    5026             :   false, /* isEliminatable.  Not relevant for setters. */
    5027             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5028             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5029             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5030             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5031             : };
    5032             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5033             : static_assert(0 < 5, "There is no slot for us");
    5034             : static const JSJitInfo scrollMaxY_setterinfo = {
    5035             :   { (JSJitGetterOp)set_scrollMaxY },
    5036             :   { prototypes::id::Window },
    5037             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5038             :   JSJitInfo::Setter,
    5039             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5040             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5041             :   false,  /* isInfallible. False in setters. */
    5042             :   false,  /* isMovable.  Not relevant for setters. */
    5043             :   false, /* isEliminatable.  Not relevant for setters. */
    5044             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5045             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5046             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5047             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5048             : };
    5049             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5050             : static_assert(0 < 5, "There is no slot for us");
    5051             : 
    5052             : static bool
    5053           1 : get_fullScreen(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    5054             : {
    5055           1 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    5056             :       // Return false from the JSNative in order to trigger
    5057             :       // an uncatchable exception.
    5058           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5059           0 :       return false;
    5060             :   }
    5061           2 :   binding_detail::FastErrorResult rv;
    5062           1 :   bool result(self->GetFullScreen(rv));
    5063           1 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5064           0 :     return false;
    5065             :   }
    5066           1 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5067           1 :   args.rval().setBoolean(result);
    5068           1 :   return true;
    5069             : }
    5070             : 
    5071             : static bool
    5072           0 : set_fullScreen(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    5073             : {
    5074           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    5075             :       // Return false from the JSNative in order to trigger
    5076             :       // an uncatchable exception.
    5077           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5078           0 :       return false;
    5079             :   }
    5080             :   bool arg0;
    5081           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    5082           0 :     return false;
    5083             :   }
    5084           0 :   binding_detail::FastErrorResult rv;
    5085           0 :   self->SetFullScreen(arg0, rv);
    5086           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5087           0 :     return false;
    5088             :   }
    5089           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5090             : 
    5091           0 :   return true;
    5092             : }
    5093             : 
    5094             : static const JSJitInfo fullScreen_getterinfo = {
    5095             :   { (JSJitGetterOp)get_fullScreen },
    5096             :   { prototypes::id::Window },
    5097             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5098             :   JSJitInfo::Getter,
    5099             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5100             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    5101             :   false,  /* isInfallible. False in setters. */
    5102             :   false,  /* isMovable.  Not relevant for setters. */
    5103             :   false, /* isEliminatable.  Not relevant for setters. */
    5104             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5105             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5106             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5107             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5108             : };
    5109             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5110             : static_assert(0 < 5, "There is no slot for us");
    5111             : static const JSJitInfo fullScreen_setterinfo = {
    5112             :   { (JSJitGetterOp)set_fullScreen },
    5113             :   { prototypes::id::Window },
    5114             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5115             :   JSJitInfo::Setter,
    5116             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5117             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5118             :   false,  /* isInfallible. False in setters. */
    5119             :   false,  /* isMovable.  Not relevant for setters. */
    5120             :   false, /* isEliminatable.  Not relevant for setters. */
    5121             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5122             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5123             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5124             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5125             : };
    5126             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5127             : static_assert(0 < 5, "There is no slot for us");
    5128             : 
    5129             : static bool
    5130           0 : back(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    5131             : {
    5132           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    5133             :       // Return false from the JSNative in order to trigger
    5134             :       // an uncatchable exception.
    5135           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5136           0 :       return false;
    5137             :   }
    5138           0 :   binding_detail::FastErrorResult rv;
    5139           0 :   self->Back(rv);
    5140           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5141           0 :     return false;
    5142             :   }
    5143           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5144           0 :   args.rval().setUndefined();
    5145           0 :   return true;
    5146             : }
    5147             : 
    5148             : static const JSJitInfo back_methodinfo = {
    5149             :   { (JSJitGetterOp)back },
    5150             :   { prototypes::id::Window },
    5151             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5152             :   JSJitInfo::Method,
    5153             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5154             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5155             :   false,  /* isInfallible. False in setters. */
    5156             :   false,  /* isMovable.  Not relevant for setters. */
    5157             :   false, /* isEliminatable.  Not relevant for setters. */
    5158             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5159             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5160             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5161             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5162             : };
    5163             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5164             : static_assert(0 < 5, "There is no slot for us");
    5165             : 
    5166             : static bool
    5167           0 : forward(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    5168             : {
    5169           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    5170             :       // Return false from the JSNative in order to trigger
    5171             :       // an uncatchable exception.
    5172           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5173           0 :       return false;
    5174             :   }
    5175           0 :   binding_detail::FastErrorResult rv;
    5176           0 :   self->Forward(rv);
    5177           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5178           0 :     return false;
    5179             :   }
    5180           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5181           0 :   args.rval().setUndefined();
    5182           0 :   return true;
    5183             : }
    5184             : 
    5185             : static const JSJitInfo forward_methodinfo = {
    5186             :   { (JSJitGetterOp)forward },
    5187             :   { prototypes::id::Window },
    5188             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5189             :   JSJitInfo::Method,
    5190             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5191             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5192             :   false,  /* isInfallible. False in setters. */
    5193             :   false,  /* isMovable.  Not relevant for setters. */
    5194             :   false, /* isEliminatable.  Not relevant for setters. */
    5195             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5196             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5197             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5198             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5199             : };
    5200             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5201             : static_assert(0 < 5, "There is no slot for us");
    5202             : 
    5203             : static bool
    5204           0 : home(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    5205             : {
    5206           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    5207             :       // Return false from the JSNative in order to trigger
    5208             :       // an uncatchable exception.
    5209           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5210           0 :       return false;
    5211             :   }
    5212           0 :   binding_detail::FastErrorResult rv;
    5213           0 :   JSCompartment* compartment = js::GetContextCompartment(cx);
    5214           0 :   MOZ_ASSERT(compartment);
    5215           0 :   JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
    5216             :   // Initializing a nonnull is pretty darn annoying...
    5217           0 :   NonNull<nsIPrincipal> subjectPrincipal;
    5218           0 :   subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
    5219           0 :   self->Home(subjectPrincipal, rv);
    5220           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5221           0 :     return false;
    5222             :   }
    5223           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5224           0 :   args.rval().setUndefined();
    5225           0 :   return true;
    5226             : }
    5227             : 
    5228             : static const JSJitInfo home_methodinfo = {
    5229             :   { (JSJitGetterOp)home },
    5230             :   { prototypes::id::Window },
    5231             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5232             :   JSJitInfo::Method,
    5233             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5234             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5235             :   false,  /* isInfallible. False in setters. */
    5236             :   false,  /* isMovable.  Not relevant for setters. */
    5237             :   false, /* isEliminatable.  Not relevant for setters. */
    5238             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5239             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5240             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5241             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5242             : };
    5243             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5244             : static_assert(0 < 5, "There is no slot for us");
    5245             : 
    5246             : static bool
    5247           2 : updateCommands(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    5248             : {
    5249           2 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    5250           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.updateCommands");
    5251             :   }
    5252           4 :   binding_detail::FakeString arg0;
    5253           2 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    5254           0 :     return false;
    5255             :   }
    5256             :   mozilla::dom::Selection* arg1;
    5257           2 :   if (args.hasDefined(1)) {
    5258           0 :     if (args[1].isObject()) {
    5259             :       {
    5260           0 :         nsresult rv = UnwrapObject<prototypes::id::Selection, mozilla::dom::Selection>(args[1], arg1);
    5261           0 :         if (NS_FAILED(rv)) {
    5262           0 :           ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of Window.updateCommands", "Selection");
    5263           0 :           return false;
    5264             :         }
    5265             :       }
    5266           0 :     } else if (args[1].isNullOrUndefined()) {
    5267           0 :       arg1 = nullptr;
    5268             :     } else {
    5269           0 :       ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of Window.updateCommands");
    5270           0 :       return false;
    5271             :     }
    5272             :   } else {
    5273           2 :     arg1 = nullptr;
    5274             :   }
    5275             :   int16_t arg2;
    5276           2 :   if (args.hasDefined(2)) {
    5277           0 :     if (!ValueToPrimitive<int16_t, eDefault>(cx, args[2], &arg2)) {
    5278           0 :       return false;
    5279             :     }
    5280             :   } else {
    5281           2 :     arg2 = 0;
    5282             :   }
    5283           2 :   self->UpdateCommands(NonNullHelper(Constify(arg0)), Constify(arg1), arg2);
    5284           2 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5285           2 :   args.rval().setUndefined();
    5286           2 :   return true;
    5287             : }
    5288             : 
    5289             : static const JSJitInfo updateCommands_methodinfo = {
    5290             :   { (JSJitGetterOp)updateCommands },
    5291             :   { prototypes::id::Window },
    5292             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5293             :   JSJitInfo::Method,
    5294             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5295             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5296             :   false,  /* isInfallible. False in setters. */
    5297             :   false,  /* isMovable.  Not relevant for setters. */
    5298             :   false, /* isEliminatable.  Not relevant for setters. */
    5299             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5300             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5301             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5302             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5303             : };
    5304             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5305             : static_assert(0 < 5, "There is no slot for us");
    5306             : 
    5307             : static bool
    5308           0 : find(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    5309             : {
    5310           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    5311             :       // Return false from the JSNative in order to trigger
    5312             :       // an uncatchable exception.
    5313           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5314           0 :       return false;
    5315             :   }
    5316           0 :   binding_detail::FakeString arg0;
    5317           0 :   if (args.hasDefined(0)) {
    5318           0 :     if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    5319           0 :       return false;
    5320             :     }
    5321             :   } else {
    5322             :     static const char16_t data[] = { 0 };
    5323           0 :     arg0.Rebind(data, ArrayLength(data) - 1);
    5324             :   }
    5325             :   bool arg1;
    5326           0 :   if (args.hasDefined(1)) {
    5327           0 :     if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
    5328           0 :       return false;
    5329             :     }
    5330             :   } else {
    5331           0 :     arg1 = false;
    5332             :   }
    5333             :   bool arg2;
    5334           0 :   if (args.hasDefined(2)) {
    5335           0 :     if (!ValueToPrimitive<bool, eDefault>(cx, args[2], &arg2)) {
    5336           0 :       return false;
    5337             :     }
    5338             :   } else {
    5339           0 :     arg2 = false;
    5340             :   }
    5341             :   bool arg3;
    5342           0 :   if (args.hasDefined(3)) {
    5343           0 :     if (!ValueToPrimitive<bool, eDefault>(cx, args[3], &arg3)) {
    5344           0 :       return false;
    5345             :     }
    5346             :   } else {
    5347           0 :     arg3 = false;
    5348             :   }
    5349             :   bool arg4;
    5350           0 :   if (args.hasDefined(4)) {
    5351           0 :     if (!ValueToPrimitive<bool, eDefault>(cx, args[4], &arg4)) {
    5352           0 :       return false;
    5353             :     }
    5354             :   } else {
    5355           0 :     arg4 = false;
    5356             :   }
    5357             :   bool arg5;
    5358           0 :   if (args.hasDefined(5)) {
    5359           0 :     if (!ValueToPrimitive<bool, eDefault>(cx, args[5], &arg5)) {
    5360           0 :       return false;
    5361             :     }
    5362             :   } else {
    5363           0 :     arg5 = false;
    5364             :   }
    5365             :   bool arg6;
    5366           0 :   if (args.hasDefined(6)) {
    5367           0 :     if (!ValueToPrimitive<bool, eDefault>(cx, args[6], &arg6)) {
    5368           0 :       return false;
    5369             :     }
    5370             :   } else {
    5371           0 :     arg6 = false;
    5372             :   }
    5373           0 :   binding_detail::FastErrorResult rv;
    5374           0 :   bool result(self->Find(NonNullHelper(Constify(arg0)), arg1, arg2, arg3, arg4, arg5, arg6, rv));
    5375           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5376           0 :     return false;
    5377             :   }
    5378           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5379           0 :   args.rval().setBoolean(result);
    5380           0 :   return true;
    5381             : }
    5382             : 
    5383             : static const JSJitInfo find_methodinfo = {
    5384             :   { (JSJitGetterOp)find },
    5385             :   { prototypes::id::Window },
    5386             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5387             :   JSJitInfo::Method,
    5388             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5389             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    5390             :   false,  /* isInfallible. False in setters. */
    5391             :   false,  /* isMovable.  Not relevant for setters. */
    5392             :   false, /* isEliminatable.  Not relevant for setters. */
    5393             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5394             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5395             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5396             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5397             : };
    5398             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5399             : static_assert(0 < 5, "There is no slot for us");
    5400             : 
    5401             : static bool
    5402           0 : get_mozPaintCount(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    5403             : {
    5404           0 :   binding_detail::FastErrorResult rv;
    5405           0 :   uint64_t result(self->GetMozPaintCount(rv));
    5406           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5407           0 :     return false;
    5408             :   }
    5409           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5410           0 :   args.rval().set(JS_NumberValue(double(result)));
    5411           0 :   return true;
    5412             : }
    5413             : 
    5414             : static const JSJitInfo mozPaintCount_getterinfo = {
    5415             :   { (JSJitGetterOp)get_mozPaintCount },
    5416             :   { prototypes::id::Window },
    5417             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5418             :   JSJitInfo::Getter,
    5419             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5420             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    5421             :   false,  /* isInfallible. False in setters. */
    5422             :   false,  /* isMovable.  Not relevant for setters. */
    5423             :   false, /* isEliminatable.  Not relevant for setters. */
    5424             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5425             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5426             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5427             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5428             : };
    5429             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5430             : static_assert(0 < 5, "There is no slot for us");
    5431             : 
    5432             : static bool
    5433           0 : get_MozSelfSupport(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    5434             : {
    5435           0 :   binding_detail::FastErrorResult rv;
    5436           0 :   auto result(StrongOrRawPtr<mozilla::dom::MozSelfSupport>(self->GetMozSelfSupport(rv)));
    5437           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5438           0 :     return false;
    5439             :   }
    5440           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5441           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    5442           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    5443           0 :     return false;
    5444             :   }
    5445           0 :   return true;
    5446             : }
    5447             : 
    5448             : static const JSJitInfo MozSelfSupport_getterinfo = {
    5449             :   { (JSJitGetterOp)get_MozSelfSupport },
    5450             :   { prototypes::id::Window },
    5451             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5452             :   JSJitInfo::Getter,
    5453             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5454             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    5455             :   false,  /* isInfallible. False in setters. */
    5456             :   false,  /* isMovable.  Not relevant for setters. */
    5457             :   false, /* isEliminatable.  Not relevant for setters. */
    5458             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5459             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5460             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5461             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5462             : };
    5463             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5464             : static_assert(0 < 5, "There is no slot for us");
    5465             : 
    5466             : static bool
    5467           0 : get_ondevicemotion(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    5468             : {
    5469           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndevicemotion());
    5470           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5471           0 :   if (result) {
    5472           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5473           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5474           0 :       return false;
    5475             :     }
    5476           0 :     return true;
    5477             :   } else {
    5478           0 :     args.rval().setNull();
    5479           0 :     return true;
    5480             :   }
    5481             : }
    5482             : 
    5483             : static bool
    5484           0 : set_ondevicemotion(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    5485             : {
    5486           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5487           0 :   if (args[0].isObject()) {
    5488             :     { // scope for tempRoot
    5489           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5490           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5491             :     }
    5492             :   } else {
    5493           0 :     arg0 = nullptr;
    5494             :   }
    5495           0 :   self->SetOndevicemotion(Constify(arg0));
    5496           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5497             : 
    5498           0 :   return true;
    5499             : }
    5500             : 
    5501             : static const JSJitInfo ondevicemotion_getterinfo = {
    5502             :   { (JSJitGetterOp)get_ondevicemotion },
    5503             :   { prototypes::id::Window },
    5504             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5505             :   JSJitInfo::Getter,
    5506             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5507             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5508             :   false,  /* isInfallible. False in setters. */
    5509             :   false,  /* isMovable.  Not relevant for setters. */
    5510             :   false, /* isEliminatable.  Not relevant for setters. */
    5511             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5512             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5513             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5514             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5515             : };
    5516             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5517             : static_assert(0 < 5, "There is no slot for us");
    5518             : static const JSJitInfo ondevicemotion_setterinfo = {
    5519             :   { (JSJitGetterOp)set_ondevicemotion },
    5520             :   { prototypes::id::Window },
    5521             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5522             :   JSJitInfo::Setter,
    5523             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5524             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5525             :   false,  /* isInfallible. False in setters. */
    5526             :   false,  /* isMovable.  Not relevant for setters. */
    5527             :   false, /* isEliminatable.  Not relevant for setters. */
    5528             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5529             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5530             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5531             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5532             : };
    5533             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5534             : static_assert(0 < 5, "There is no slot for us");
    5535             : 
    5536             : static bool
    5537           0 : get_ondeviceorientation(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    5538             : {
    5539           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndeviceorientation());
    5540           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5541           0 :   if (result) {
    5542           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5543           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5544           0 :       return false;
    5545             :     }
    5546           0 :     return true;
    5547             :   } else {
    5548           0 :     args.rval().setNull();
    5549           0 :     return true;
    5550             :   }
    5551             : }
    5552             : 
    5553             : static bool
    5554           0 : set_ondeviceorientation(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    5555             : {
    5556           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5557           0 :   if (args[0].isObject()) {
    5558             :     { // scope for tempRoot
    5559           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5560           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5561             :     }
    5562             :   } else {
    5563           0 :     arg0 = nullptr;
    5564             :   }
    5565           0 :   self->SetOndeviceorientation(Constify(arg0));
    5566           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5567             : 
    5568           0 :   return true;
    5569             : }
    5570             : 
    5571             : static const JSJitInfo ondeviceorientation_getterinfo = {
    5572             :   { (JSJitGetterOp)get_ondeviceorientation },
    5573             :   { prototypes::id::Window },
    5574             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5575             :   JSJitInfo::Getter,
    5576             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5577             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5578             :   false,  /* isInfallible. False in setters. */
    5579             :   false,  /* isMovable.  Not relevant for setters. */
    5580             :   false, /* isEliminatable.  Not relevant for setters. */
    5581             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5582             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5583             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5584             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5585             : };
    5586             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5587             : static_assert(0 < 5, "There is no slot for us");
    5588             : static const JSJitInfo ondeviceorientation_setterinfo = {
    5589             :   { (JSJitGetterOp)set_ondeviceorientation },
    5590             :   { prototypes::id::Window },
    5591             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5592             :   JSJitInfo::Setter,
    5593             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5594             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5595             :   false,  /* isInfallible. False in setters. */
    5596             :   false,  /* isMovable.  Not relevant for setters. */
    5597             :   false, /* isEliminatable.  Not relevant for setters. */
    5598             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5599             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5600             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5601             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5602             : };
    5603             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5604             : static_assert(0 < 5, "There is no slot for us");
    5605             : 
    5606             : static bool
    5607           0 : get_onabsolutedeviceorientation(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    5608             : {
    5609           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnabsolutedeviceorientation());
    5610           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5611           0 :   if (result) {
    5612           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5613           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5614           0 :       return false;
    5615             :     }
    5616           0 :     return true;
    5617             :   } else {
    5618           0 :     args.rval().setNull();
    5619           0 :     return true;
    5620             :   }
    5621             : }
    5622             : 
    5623             : static bool
    5624           0 : set_onabsolutedeviceorientation(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    5625             : {
    5626           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5627           0 :   if (args[0].isObject()) {
    5628             :     { // scope for tempRoot
    5629           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5630           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5631             :     }
    5632             :   } else {
    5633           0 :     arg0 = nullptr;
    5634             :   }
    5635           0 :   self->SetOnabsolutedeviceorientation(Constify(arg0));
    5636           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5637             : 
    5638           0 :   return true;
    5639             : }
    5640             : 
    5641             : static const JSJitInfo onabsolutedeviceorientation_getterinfo = {
    5642             :   { (JSJitGetterOp)get_onabsolutedeviceorientation },
    5643             :   { prototypes::id::Window },
    5644             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5645             :   JSJitInfo::Getter,
    5646             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5647             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5648             :   false,  /* isInfallible. False in setters. */
    5649             :   false,  /* isMovable.  Not relevant for setters. */
    5650             :   false, /* isEliminatable.  Not relevant for setters. */
    5651             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5652             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5653             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5654             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5655             : };
    5656             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5657             : static_assert(0 < 5, "There is no slot for us");
    5658             : static const JSJitInfo onabsolutedeviceorientation_setterinfo = {
    5659             :   { (JSJitGetterOp)set_onabsolutedeviceorientation },
    5660             :   { prototypes::id::Window },
    5661             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5662             :   JSJitInfo::Setter,
    5663             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5664             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5665             :   false,  /* isInfallible. False in setters. */
    5666             :   false,  /* isMovable.  Not relevant for setters. */
    5667             :   false, /* isEliminatable.  Not relevant for setters. */
    5668             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5669             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5670             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5671             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5672             : };
    5673             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5674             : static_assert(0 < 5, "There is no slot for us");
    5675             : 
    5676             : static bool
    5677           0 : get_ondeviceproximity(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    5678             : {
    5679           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndeviceproximity());
    5680           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5681           0 :   if (result) {
    5682           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5683           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5684           0 :       return false;
    5685             :     }
    5686           0 :     return true;
    5687             :   } else {
    5688           0 :     args.rval().setNull();
    5689           0 :     return true;
    5690             :   }
    5691             : }
    5692             : 
    5693             : static bool
    5694           0 : set_ondeviceproximity(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    5695             : {
    5696           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5697           0 :   if (args[0].isObject()) {
    5698             :     { // scope for tempRoot
    5699           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5700           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5701             :     }
    5702             :   } else {
    5703           0 :     arg0 = nullptr;
    5704             :   }
    5705           0 :   self->SetOndeviceproximity(Constify(arg0));
    5706           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5707             : 
    5708           0 :   return true;
    5709             : }
    5710             : 
    5711             : static const JSJitInfo ondeviceproximity_getterinfo = {
    5712             :   { (JSJitGetterOp)get_ondeviceproximity },
    5713             :   { prototypes::id::Window },
    5714             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5715             :   JSJitInfo::Getter,
    5716             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5717             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5718             :   false,  /* isInfallible. False in setters. */
    5719             :   false,  /* isMovable.  Not relevant for setters. */
    5720             :   false, /* isEliminatable.  Not relevant for setters. */
    5721             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5722             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5723             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5724             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5725             : };
    5726             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5727             : static_assert(0 < 5, "There is no slot for us");
    5728             : static const JSJitInfo ondeviceproximity_setterinfo = {
    5729             :   { (JSJitGetterOp)set_ondeviceproximity },
    5730             :   { prototypes::id::Window },
    5731             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5732             :   JSJitInfo::Setter,
    5733             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5734             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5735             :   false,  /* isInfallible. False in setters. */
    5736             :   false,  /* isMovable.  Not relevant for setters. */
    5737             :   false, /* isEliminatable.  Not relevant for setters. */
    5738             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5739             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5740             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5741             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5742             : };
    5743             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5744             : static_assert(0 < 5, "There is no slot for us");
    5745             : 
    5746             : static bool
    5747           0 : get_onuserproximity(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    5748             : {
    5749           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnuserproximity());
    5750           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5751           0 :   if (result) {
    5752           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5753           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5754           0 :       return false;
    5755             :     }
    5756           0 :     return true;
    5757             :   } else {
    5758           0 :     args.rval().setNull();
    5759           0 :     return true;
    5760             :   }
    5761             : }
    5762             : 
    5763             : static bool
    5764           0 : set_onuserproximity(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    5765             : {
    5766           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5767           0 :   if (args[0].isObject()) {
    5768             :     { // scope for tempRoot
    5769           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5770           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5771             :     }
    5772             :   } else {
    5773           0 :     arg0 = nullptr;
    5774             :   }
    5775           0 :   self->SetOnuserproximity(Constify(arg0));
    5776           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5777             : 
    5778           0 :   return true;
    5779             : }
    5780             : 
    5781             : static const JSJitInfo onuserproximity_getterinfo = {
    5782             :   { (JSJitGetterOp)get_onuserproximity },
    5783             :   { prototypes::id::Window },
    5784             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5785             :   JSJitInfo::Getter,
    5786             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5787             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5788             :   false,  /* isInfallible. False in setters. */
    5789             :   false,  /* isMovable.  Not relevant for setters. */
    5790             :   false, /* isEliminatable.  Not relevant for setters. */
    5791             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5792             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5793             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5794             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5795             : };
    5796             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5797             : static_assert(0 < 5, "There is no slot for us");
    5798             : static const JSJitInfo onuserproximity_setterinfo = {
    5799             :   { (JSJitGetterOp)set_onuserproximity },
    5800             :   { prototypes::id::Window },
    5801             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5802             :   JSJitInfo::Setter,
    5803             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5804             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5805             :   false,  /* isInfallible. False in setters. */
    5806             :   false,  /* isMovable.  Not relevant for setters. */
    5807             :   false, /* isEliminatable.  Not relevant for setters. */
    5808             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5809             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5810             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5811             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5812             : };
    5813             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5814             : static_assert(0 < 5, "There is no slot for us");
    5815             : 
    5816             : static bool
    5817           0 : get_ondevicelight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    5818             : {
    5819           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndevicelight());
    5820           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5821           0 :   if (result) {
    5822           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5823           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5824           0 :       return false;
    5825             :     }
    5826           0 :     return true;
    5827             :   } else {
    5828           0 :     args.rval().setNull();
    5829           0 :     return true;
    5830             :   }
    5831             : }
    5832             : 
    5833             : static bool
    5834           0 : set_ondevicelight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    5835             : {
    5836           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5837           0 :   if (args[0].isObject()) {
    5838             :     { // scope for tempRoot
    5839           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5840           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5841             :     }
    5842             :   } else {
    5843           0 :     arg0 = nullptr;
    5844             :   }
    5845           0 :   self->SetOndevicelight(Constify(arg0));
    5846           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5847             : 
    5848           0 :   return true;
    5849             : }
    5850             : 
    5851             : static const JSJitInfo ondevicelight_getterinfo = {
    5852             :   { (JSJitGetterOp)get_ondevicelight },
    5853             :   { prototypes::id::Window },
    5854             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5855             :   JSJitInfo::Getter,
    5856             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5857             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5858             :   false,  /* isInfallible. False in setters. */
    5859             :   false,  /* isMovable.  Not relevant for setters. */
    5860             :   false, /* isEliminatable.  Not relevant for setters. */
    5861             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5862             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5863             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5864             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5865             : };
    5866             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5867             : static_assert(0 < 5, "There is no slot for us");
    5868             : static const JSJitInfo ondevicelight_setterinfo = {
    5869             :   { (JSJitGetterOp)set_ondevicelight },
    5870             :   { prototypes::id::Window },
    5871             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5872             :   JSJitInfo::Setter,
    5873             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5874             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5875             :   false,  /* isInfallible. False in setters. */
    5876             :   false,  /* isMovable.  Not relevant for setters. */
    5877             :   false, /* isEliminatable.  Not relevant for setters. */
    5878             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5879             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5880             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5881             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5882             : };
    5883             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5884             : static_assert(0 < 5, "There is no slot for us");
    5885             : 
    5886             : static bool
    5887           1 : dump(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    5888             : {
    5889           1 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    5890           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.dump");
    5891             :   }
    5892           2 :   binding_detail::FakeString arg0;
    5893           1 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    5894           0 :     return false;
    5895             :   }
    5896           1 :   self->Dump(NonNullHelper(Constify(arg0)));
    5897           1 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5898           1 :   args.rval().setUndefined();
    5899           1 :   return true;
    5900             : }
    5901             : 
    5902             : static const JSJitInfo dump_methodinfo = {
    5903             :   { (JSJitGetterOp)dump },
    5904             :   { prototypes::id::Window },
    5905             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5906             :   JSJitInfo::Method,
    5907             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5908             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5909             :   false,  /* isInfallible. False in setters. */
    5910             :   false,  /* isMovable.  Not relevant for setters. */
    5911             :   false, /* isEliminatable.  Not relevant for setters. */
    5912             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5913             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5914             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5915             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5916             : };
    5917             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5918             : static_assert(0 < 5, "There is no slot for us");
    5919             : 
    5920             : static bool
    5921           0 : setResizable(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    5922             : {
    5923           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    5924           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.setResizable");
    5925             :   }
    5926             :   bool arg0;
    5927           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    5928           0 :     return false;
    5929             :   }
    5930           0 :   self->SetResizable(arg0);
    5931           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5932           0 :   args.rval().setUndefined();
    5933           0 :   return true;
    5934             : }
    5935             : 
    5936             : static const JSJitInfo setResizable_methodinfo = {
    5937             :   { (JSJitGetterOp)setResizable },
    5938             :   { prototypes::id::Window },
    5939             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    5940             :   JSJitInfo::Method,
    5941             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5942             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5943             :   false,  /* isInfallible. False in setters. */
    5944             :   false,  /* isMovable.  Not relevant for setters. */
    5945             :   false, /* isEliminatable.  Not relevant for setters. */
    5946             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5947             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5948             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5949             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5950             : };
    5951             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5952             : static_assert(0 < 5, "There is no slot for us");
    5953             : 
    5954             : static bool
    5955           0 : openDialog(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    5956             : {
    5957           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    5958             :       // Return false from the JSNative in order to trigger
    5959             :       // an uncatchable exception.
    5960           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5961           0 :       return false;
    5962             :   }
    5963           0 :   binding_detail::FakeString arg0;
    5964           0 :   if (args.hasDefined(0)) {
    5965           0 :     if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    5966           0 :       return false;
    5967             :     }
    5968             :   } else {
    5969             :     static const char16_t data[] = { 0 };
    5970           0 :     arg0.Rebind(data, ArrayLength(data) - 1);
    5971             :   }
    5972           0 :   binding_detail::FakeString arg1;
    5973           0 :   if (args.hasDefined(1)) {
    5974           0 :     if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
    5975           0 :       return false;
    5976             :     }
    5977             :   } else {
    5978             :     static const char16_t data[] = { 0 };
    5979           0 :     arg1.Rebind(data, ArrayLength(data) - 1);
    5980             :   }
    5981           0 :   binding_detail::FakeString arg2;
    5982           0 :   if (args.hasDefined(2)) {
    5983           0 :     if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2)) {
    5984           0 :       return false;
    5985             :     }
    5986             :   } else {
    5987             :     static const char16_t data[] = { 0 };
    5988           0 :     arg2.Rebind(data, ArrayLength(data) - 1);
    5989             :   }
    5990           0 :   binding_detail::AutoSequence<JS::Value> arg3;
    5991           0 :   SequenceRooter<JS::Value> arg3_holder(cx, &arg3);
    5992           0 :   if (args.length() > 3) {
    5993           0 :     if (!arg3.SetCapacity(args.length() - 3, mozilla::fallible)) {
    5994           0 :       JS_ReportOutOfMemory(cx);
    5995           0 :       return false;
    5996             :     }
    5997           0 :     for (uint32_t variadicArg = 3; variadicArg < args.length(); ++variadicArg) {
    5998           0 :       JS::Value& slot = *arg3.AppendElement(mozilla::fallible);
    5999           0 :       slot = args[variadicArg];
    6000             :     }
    6001             :   }
    6002           0 :   binding_detail::FastErrorResult rv;
    6003           0 :   auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->OpenDialog(cx, NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)), NonNullHelper(Constify(arg2)), Constify(arg3), rv)));
    6004           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    6005           0 :     return false;
    6006             :   }
    6007           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6008           0 :   if (!result) {
    6009           0 :     args.rval().setNull();
    6010           0 :     return true;
    6011             :   }
    6012           0 :   if (!WrapObject(cx, result, args.rval())) {
    6013           0 :     return false;
    6014             :   }
    6015           0 :   return true;
    6016             : }
    6017             : 
    6018             : static const JSJitInfo openDialog_methodinfo = {
    6019             :   { (JSJitGetterOp)openDialog },
    6020             :   { prototypes::id::Window },
    6021             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6022             :   JSJitInfo::Method,
    6023             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6024             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6025             :   false,  /* isInfallible. False in setters. */
    6026             :   false,  /* isMovable.  Not relevant for setters. */
    6027             :   false, /* isEliminatable.  Not relevant for setters. */
    6028             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6029             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6030             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6031             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6032             : };
    6033             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6034             : static_assert(0 < 5, "There is no slot for us");
    6035             : 
    6036             : static bool
    6037           0 : get_content(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6038             : {
    6039           0 :   binding_detail::FastErrorResult rv;
    6040           0 :   JS::Rooted<JSObject*> result(cx);
    6041           0 :   self->GetContent(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    6042           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    6043           0 :     return false;
    6044             :   }
    6045           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6046           0 :   if (result) {
    6047           0 :                 JS::ExposeObjectToActiveJS(result);
    6048             :               }
    6049           0 :               args.rval().setObjectOrNull(result);
    6050           0 :   if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6051           0 :     return false;
    6052             :   }
    6053           0 :   return true;
    6054             : }
    6055             : 
    6056             : static bool
    6057           0 : set_content(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    6058             : {
    6059           0 :   return JS_DefineProperty(cx, obj, "content", args[0], JSPROP_ENUMERATE);
    6060             : }
    6061             : 
    6062             : static const JSJitInfo content_getterinfo = {
    6063             :   { (JSJitGetterOp)get_content },
    6064             :   { prototypes::id::Window },
    6065             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6066             :   JSJitInfo::Getter,
    6067             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6068             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6069             :   false,  /* isInfallible. False in setters. */
    6070             :   false,  /* isMovable.  Not relevant for setters. */
    6071             :   false, /* isEliminatable.  Not relevant for setters. */
    6072             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6073             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6074             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6075             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6076             : };
    6077             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6078             : static_assert(0 < 5, "There is no slot for us");
    6079             : static const JSJitInfo content_setterinfo = {
    6080             :   { (JSJitGetterOp)set_content },
    6081             :   { prototypes::id::Window },
    6082             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6083             :   JSJitInfo::Setter,
    6084             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6085             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6086             :   false,  /* isInfallible. False in setters. */
    6087             :   false,  /* isMovable.  Not relevant for setters. */
    6088             :   false, /* isEliminatable.  Not relevant for setters. */
    6089             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6090             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6091             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6092             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6093             : };
    6094             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6095             : static_assert(0 < 5, "There is no slot for us");
    6096             : 
    6097             : static bool
    6098           0 : get__content(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6099             : {
    6100           0 :   binding_detail::FastErrorResult rv;
    6101           0 :   JS::Rooted<JSObject*> result(cx);
    6102           0 :   self->Get_content(cx, &result, SystemCallerGuarantee(), rv);
    6103           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    6104           0 :     return false;
    6105             :   }
    6106           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6107           0 :   if (result) {
    6108           0 :                 JS::ExposeObjectToActiveJS(result);
    6109             :               }
    6110           0 :               args.rval().setObjectOrNull(result);
    6111           0 :   if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6112           0 :     return false;
    6113             :   }
    6114           0 :   return true;
    6115             : }
    6116             : 
    6117             : static const JSJitInfo _content_getterinfo = {
    6118             :   { (JSJitGetterOp)get__content },
    6119             :   { prototypes::id::Window },
    6120             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6121             :   JSJitInfo::Getter,
    6122             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6123             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6124             :   false,  /* isInfallible. False in setters. */
    6125             :   false,  /* isMovable.  Not relevant for setters. */
    6126             :   false, /* isEliminatable.  Not relevant for setters. */
    6127             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6128             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6129             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6130             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6131             : };
    6132             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6133             : static_assert(0 < 5, "There is no slot for us");
    6134             : 
    6135             : static bool
    6136          39 : getInterface(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    6137             : {
    6138          39 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    6139           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getInterface");
    6140             :   }
    6141             :   nsIJSID* arg0;
    6142          78 :   RefPtr<nsIJSID> arg0_holder;
    6143          39 :   if (args[0].isObject()) {
    6144          78 :     JS::Rooted<JSObject*> source(cx, &args[0].toObject());
    6145          39 :     if (NS_FAILED(UnwrapArg<nsIJSID>(cx, source, getter_AddRefs(arg0_holder)))) {
    6146           0 :       ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.getInterface", "IID");
    6147           0 :       return false;
    6148             :     }
    6149          39 :     MOZ_ASSERT(arg0_holder);
    6150          39 :     arg0 = arg0_holder;
    6151             :   } else {
    6152           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.getInterface");
    6153           0 :     return false;
    6154             :   }
    6155          78 :   binding_detail::FastErrorResult rv;
    6156          78 :   JS::Rooted<JS::Value> result(cx);
    6157          39 :   self->GetInterface(cx, NonNullHelper(arg0), &result, rv);
    6158          39 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    6159           0 :     return false;
    6160             :   }
    6161          39 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6162          39 :   JS::ExposeValueToActiveJS(result);
    6163          39 :   args.rval().set(result);
    6164          39 :   if (!MaybeWrapValue(cx, args.rval())) {
    6165           0 :     return false;
    6166             :   }
    6167          39 :   return true;
    6168             : }
    6169             : 
    6170             : static const JSJitInfo getInterface_methodinfo = {
    6171             :   { (JSJitGetterOp)getInterface },
    6172             :   { prototypes::id::Window },
    6173             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6174             :   JSJitInfo::Method,
    6175             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6176             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6177             :   false,  /* isInfallible. False in setters. */
    6178             :   false,  /* isMovable.  Not relevant for setters. */
    6179             :   false, /* isEliminatable.  Not relevant for setters. */
    6180             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6181             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6182             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6183             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6184             : };
    6185             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6186             : static_assert(0 < 5, "There is no slot for us");
    6187             : 
    6188             : static bool
    6189           0 : get_windowRoot(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6190             : {
    6191           0 :   binding_detail::FastErrorResult rv;
    6192           0 :   auto result(StrongOrRawPtr<nsWindowRoot>(self->GetWindowRoot(rv)));
    6193           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    6194           0 :     return false;
    6195             :   }
    6196           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6197           0 :   if (!result) {
    6198           0 :     args.rval().setNull();
    6199           0 :     return true;
    6200             :   }
    6201           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    6202           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    6203           0 :     return false;
    6204             :   }
    6205           0 :   return true;
    6206             : }
    6207             : 
    6208             : static const JSJitInfo windowRoot_getterinfo = {
    6209             :   { (JSJitGetterOp)get_windowRoot },
    6210             :   { prototypes::id::Window },
    6211             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6212             :   JSJitInfo::Getter,
    6213             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6214             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6215             :   false,  /* isInfallible. False in setters. */
    6216             :   false,  /* isMovable.  Not relevant for setters. */
    6217             :   false, /* isEliminatable.  Not relevant for setters. */
    6218             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6219             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6220             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6221             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6222             : };
    6223             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6224             : static_assert(0 < 5, "There is no slot for us");
    6225             : 
    6226             : static bool
    6227           0 : get_sidebar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6228             : {
    6229           0 :   binding_detail::FastErrorResult rv;
    6230           0 :   OwningExternalOrWindowProxy result;
    6231           0 :   self->GetSidebar(result, rv);
    6232           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    6233           0 :     return false;
    6234             :   }
    6235           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6236           0 :   SetDocumentAndPageUseCounter(cx, obj, eUseCounter_Window_sidebar_getter);
    6237           0 :   if (!result.ToJSVal(cx, obj, args.rval())) {
    6238           0 :     return false;
    6239             :   }
    6240           0 :   return true;
    6241             : }
    6242             : 
    6243             : static bool
    6244           0 : set_sidebar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    6245             : {
    6246           0 :   return JS_DefineProperty(cx, obj, "sidebar", args[0], JSPROP_ENUMERATE);
    6247             : }
    6248             : 
    6249             : static const JSJitInfo sidebar_getterinfo = {
    6250             :   { (JSJitGetterOp)get_sidebar },
    6251             :   { prototypes::id::Window },
    6252             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6253             :   JSJitInfo::Getter,
    6254             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6255             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    6256             :   false,  /* isInfallible. False in setters. */
    6257             :   false,  /* isMovable.  Not relevant for setters. */
    6258             :   false, /* isEliminatable.  Not relevant for setters. */
    6259             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6260             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6261             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6262             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6263             : };
    6264             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6265             : static_assert(0 < 5, "There is no slot for us");
    6266             : static const JSJitInfo sidebar_setterinfo = {
    6267             :   { (JSJitGetterOp)set_sidebar },
    6268             :   { prototypes::id::Window },
    6269             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6270             :   JSJitInfo::Setter,
    6271             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6272             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6273             :   false,  /* isInfallible. False in setters. */
    6274             :   false,  /* isMovable.  Not relevant for setters. */
    6275             :   false, /* isEliminatable.  Not relevant for setters. */
    6276             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6277             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6278             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6279             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6280             : };
    6281             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6282             : static_assert(0 < 5, "There is no slot for us");
    6283             : 
    6284             : static bool
    6285           0 : get_onvrdisplayconnect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6286             : {
    6287           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplayconnect());
    6288           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6289           0 :   if (result) {
    6290           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6291           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6292           0 :       return false;
    6293             :     }
    6294           0 :     return true;
    6295             :   } else {
    6296           0 :     args.rval().setNull();
    6297           0 :     return true;
    6298             :   }
    6299             : }
    6300             : 
    6301             : static bool
    6302           0 : set_onvrdisplayconnect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    6303             : {
    6304           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6305           0 :   if (args[0].isObject()) {
    6306             :     { // scope for tempRoot
    6307           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6308           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6309             :     }
    6310             :   } else {
    6311           0 :     arg0 = nullptr;
    6312             :   }
    6313           0 :   self->SetOnvrdisplayconnect(Constify(arg0));
    6314           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6315             : 
    6316           0 :   return true;
    6317             : }
    6318             : 
    6319             : static const JSJitInfo onvrdisplayconnect_getterinfo = {
    6320             :   { (JSJitGetterOp)get_onvrdisplayconnect },
    6321             :   { prototypes::id::Window },
    6322             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6323             :   JSJitInfo::Getter,
    6324             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6325             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6326             :   false,  /* isInfallible. False in setters. */
    6327             :   false,  /* isMovable.  Not relevant for setters. */
    6328             :   false, /* isEliminatable.  Not relevant for setters. */
    6329             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6330             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6331             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6332             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6333             : };
    6334             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6335             : static_assert(0 < 5, "There is no slot for us");
    6336             : static const JSJitInfo onvrdisplayconnect_setterinfo = {
    6337             :   { (JSJitGetterOp)set_onvrdisplayconnect },
    6338             :   { prototypes::id::Window },
    6339             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6340             :   JSJitInfo::Setter,
    6341             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6342             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6343             :   false,  /* isInfallible. False in setters. */
    6344             :   false,  /* isMovable.  Not relevant for setters. */
    6345             :   false, /* isEliminatable.  Not relevant for setters. */
    6346             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6347             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6348             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6349             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6350             : };
    6351             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6352             : static_assert(0 < 5, "There is no slot for us");
    6353             : 
    6354             : static bool
    6355           0 : get_onvrdisplaydisconnect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6356             : {
    6357           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplaydisconnect());
    6358           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6359           0 :   if (result) {
    6360           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6361           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6362           0 :       return false;
    6363             :     }
    6364           0 :     return true;
    6365             :   } else {
    6366           0 :     args.rval().setNull();
    6367           0 :     return true;
    6368             :   }
    6369             : }
    6370             : 
    6371             : static bool
    6372           0 : set_onvrdisplaydisconnect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    6373             : {
    6374           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6375           0 :   if (args[0].isObject()) {
    6376             :     { // scope for tempRoot
    6377           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6378           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6379             :     }
    6380             :   } else {
    6381           0 :     arg0 = nullptr;
    6382             :   }
    6383           0 :   self->SetOnvrdisplaydisconnect(Constify(arg0));
    6384           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6385             : 
    6386           0 :   return true;
    6387             : }
    6388             : 
    6389             : static const JSJitInfo onvrdisplaydisconnect_getterinfo = {
    6390             :   { (JSJitGetterOp)get_onvrdisplaydisconnect },
    6391             :   { prototypes::id::Window },
    6392             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6393             :   JSJitInfo::Getter,
    6394             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6395             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6396             :   false,  /* isInfallible. False in setters. */
    6397             :   false,  /* isMovable.  Not relevant for setters. */
    6398             :   false, /* isEliminatable.  Not relevant for setters. */
    6399             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6400             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6401             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6402             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6403             : };
    6404             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6405             : static_assert(0 < 5, "There is no slot for us");
    6406             : static const JSJitInfo onvrdisplaydisconnect_setterinfo = {
    6407             :   { (JSJitGetterOp)set_onvrdisplaydisconnect },
    6408             :   { prototypes::id::Window },
    6409             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6410             :   JSJitInfo::Setter,
    6411             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6412             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6413             :   false,  /* isInfallible. False in setters. */
    6414             :   false,  /* isMovable.  Not relevant for setters. */
    6415             :   false, /* isEliminatable.  Not relevant for setters. */
    6416             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6417             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6418             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6419             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6420             : };
    6421             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6422             : static_assert(0 < 5, "There is no slot for us");
    6423             : 
    6424             : static bool
    6425           0 : get_onvrdisplayactivate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6426             : {
    6427           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplayactivate());
    6428           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6429           0 :   if (result) {
    6430           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6431           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6432           0 :       return false;
    6433             :     }
    6434           0 :     return true;
    6435             :   } else {
    6436           0 :     args.rval().setNull();
    6437           0 :     return true;
    6438             :   }
    6439             : }
    6440             : 
    6441             : static bool
    6442           0 : set_onvrdisplayactivate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    6443             : {
    6444           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6445           0 :   if (args[0].isObject()) {
    6446             :     { // scope for tempRoot
    6447           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6448           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6449             :     }
    6450             :   } else {
    6451           0 :     arg0 = nullptr;
    6452             :   }
    6453           0 :   self->SetOnvrdisplayactivate(Constify(arg0));
    6454           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6455             : 
    6456           0 :   return true;
    6457             : }
    6458             : 
    6459             : static const JSJitInfo onvrdisplayactivate_getterinfo = {
    6460             :   { (JSJitGetterOp)get_onvrdisplayactivate },
    6461             :   { prototypes::id::Window },
    6462             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6463             :   JSJitInfo::Getter,
    6464             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6465             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6466             :   false,  /* isInfallible. False in setters. */
    6467             :   false,  /* isMovable.  Not relevant for setters. */
    6468             :   false, /* isEliminatable.  Not relevant for setters. */
    6469             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6470             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6471             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6472             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6473             : };
    6474             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6475             : static_assert(0 < 5, "There is no slot for us");
    6476             : static const JSJitInfo onvrdisplayactivate_setterinfo = {
    6477             :   { (JSJitGetterOp)set_onvrdisplayactivate },
    6478             :   { prototypes::id::Window },
    6479             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6480             :   JSJitInfo::Setter,
    6481             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6482             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6483             :   false,  /* isInfallible. False in setters. */
    6484             :   false,  /* isMovable.  Not relevant for setters. */
    6485             :   false, /* isEliminatable.  Not relevant for setters. */
    6486             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6487             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6488             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6489             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6490             : };
    6491             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6492             : static_assert(0 < 5, "There is no slot for us");
    6493             : 
    6494             : static bool
    6495           0 : get_onvrdisplaydeactivate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6496             : {
    6497           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplaydeactivate());
    6498           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6499           0 :   if (result) {
    6500           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6501           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6502           0 :       return false;
    6503             :     }
    6504           0 :     return true;
    6505             :   } else {
    6506           0 :     args.rval().setNull();
    6507           0 :     return true;
    6508             :   }
    6509             : }
    6510             : 
    6511             : static bool
    6512           0 : set_onvrdisplaydeactivate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    6513             : {
    6514           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6515           0 :   if (args[0].isObject()) {
    6516             :     { // scope for tempRoot
    6517           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6518           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6519             :     }
    6520             :   } else {
    6521           0 :     arg0 = nullptr;
    6522             :   }
    6523           0 :   self->SetOnvrdisplaydeactivate(Constify(arg0));
    6524           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6525             : 
    6526           0 :   return true;
    6527             : }
    6528             : 
    6529             : static const JSJitInfo onvrdisplaydeactivate_getterinfo = {
    6530             :   { (JSJitGetterOp)get_onvrdisplaydeactivate },
    6531             :   { prototypes::id::Window },
    6532             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6533             :   JSJitInfo::Getter,
    6534             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6535             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6536             :   false,  /* isInfallible. False in setters. */
    6537             :   false,  /* isMovable.  Not relevant for setters. */
    6538             :   false, /* isEliminatable.  Not relevant for setters. */
    6539             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6540             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6541             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6542             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6543             : };
    6544             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6545             : static_assert(0 < 5, "There is no slot for us");
    6546             : static const JSJitInfo onvrdisplaydeactivate_setterinfo = {
    6547             :   { (JSJitGetterOp)set_onvrdisplaydeactivate },
    6548             :   { prototypes::id::Window },
    6549             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6550             :   JSJitInfo::Setter,
    6551             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6552             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6553             :   false,  /* isInfallible. False in setters. */
    6554             :   false,  /* isMovable.  Not relevant for setters. */
    6555             :   false, /* isEliminatable.  Not relevant for setters. */
    6556             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6557             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6558             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6559             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6560             : };
    6561             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6562             : static_assert(0 < 5, "There is no slot for us");
    6563             : 
    6564             : static bool
    6565           0 : get_onvrdisplaypresentchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6566             : {
    6567           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplaypresentchange());
    6568           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6569           0 :   if (result) {
    6570           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6571           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6572           0 :       return false;
    6573             :     }
    6574           0 :     return true;
    6575             :   } else {
    6576           0 :     args.rval().setNull();
    6577           0 :     return true;
    6578             :   }
    6579             : }
    6580             : 
    6581             : static bool
    6582           0 : set_onvrdisplaypresentchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    6583             : {
    6584           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6585           0 :   if (args[0].isObject()) {
    6586             :     { // scope for tempRoot
    6587           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6588           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6589             :     }
    6590             :   } else {
    6591           0 :     arg0 = nullptr;
    6592             :   }
    6593           0 :   self->SetOnvrdisplaypresentchange(Constify(arg0));
    6594           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6595             : 
    6596           0 :   return true;
    6597             : }
    6598             : 
    6599             : static const JSJitInfo onvrdisplaypresentchange_getterinfo = {
    6600             :   { (JSJitGetterOp)get_onvrdisplaypresentchange },
    6601             :   { prototypes::id::Window },
    6602             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6603             :   JSJitInfo::Getter,
    6604             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6605             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6606             :   false,  /* isInfallible. False in setters. */
    6607             :   false,  /* isMovable.  Not relevant for setters. */
    6608             :   false, /* isEliminatable.  Not relevant for setters. */
    6609             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6610             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6611             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6612             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6613             : };
    6614             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6615             : static_assert(0 < 5, "There is no slot for us");
    6616             : static const JSJitInfo onvrdisplaypresentchange_setterinfo = {
    6617             :   { (JSJitGetterOp)set_onvrdisplaypresentchange },
    6618             :   { prototypes::id::Window },
    6619             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6620             :   JSJitInfo::Setter,
    6621             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6622             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6623             :   false,  /* isInfallible. False in setters. */
    6624             :   false,  /* isMovable.  Not relevant for setters. */
    6625             :   false, /* isEliminatable.  Not relevant for setters. */
    6626             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6627             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6628             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6629             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6630             : };
    6631             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6632             : static_assert(0 < 5, "There is no slot for us");
    6633             : 
    6634             : static bool
    6635           0 : get_audioWorklet(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6636             : {
    6637           0 :   binding_detail::FastErrorResult rv;
    6638           0 :   auto result(StrongOrRawPtr<mozilla::dom::Worklet>(self->GetAudioWorklet(rv)));
    6639           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    6640           0 :     return false;
    6641             :   }
    6642           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6643           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    6644           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    6645           0 :     return false;
    6646             :   }
    6647           0 :   return true;
    6648             : }
    6649             : 
    6650             : static const JSJitInfo audioWorklet_getterinfo = {
    6651             :   { (JSJitGetterOp)get_audioWorklet },
    6652             :   { prototypes::id::Window },
    6653             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6654             :   JSJitInfo::Getter,
    6655             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6656             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    6657             :   false,  /* isInfallible. False in setters. */
    6658             :   false,  /* isMovable.  Not relevant for setters. */
    6659             :   false, /* isEliminatable.  Not relevant for setters. */
    6660             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6661             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6662             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6663             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6664             : };
    6665             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6666             : static_assert(0 < 5, "There is no slot for us");
    6667             : 
    6668             : static bool
    6669           0 : get_paintWorklet(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6670             : {
    6671           0 :   binding_detail::FastErrorResult rv;
    6672           0 :   auto result(StrongOrRawPtr<mozilla::dom::Worklet>(self->GetPaintWorklet(rv)));
    6673           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    6674           0 :     return false;
    6675             :   }
    6676           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6677           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    6678           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    6679           0 :     return false;
    6680             :   }
    6681           0 :   return true;
    6682             : }
    6683             : 
    6684             : static const JSJitInfo paintWorklet_getterinfo = {
    6685             :   { (JSJitGetterOp)get_paintWorklet },
    6686             :   { prototypes::id::Window },
    6687             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6688             :   JSJitInfo::Getter,
    6689             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6690             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    6691             :   false,  /* isInfallible. False in setters. */
    6692             :   false,  /* isMovable.  Not relevant for setters. */
    6693             :   false, /* isEliminatable.  Not relevant for setters. */
    6694             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6695             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6696             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6697             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6698             : };
    6699             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6700             : static_assert(0 < 5, "There is no slot for us");
    6701             : 
    6702             : static bool
    6703           3 : requestIdleCallback(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    6704             : {
    6705           3 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    6706           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.requestIdleCallback");
    6707             :   }
    6708           6 :   RootedCallback<OwningNonNull<binding_detail::FastIdleRequestCallback>> arg0(cx);
    6709           3 :   if (args[0].isObject()) {
    6710           3 :     if (JS::IsCallable(&args[0].toObject())) {
    6711             :     { // scope for tempRoot
    6712           6 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6713           6 :       arg0 = new binding_detail::FastIdleRequestCallback(tempRoot);
    6714             :     }
    6715             :     } else {
    6716           0 :       ThrowErrorMessage(cx, MSG_NOT_CALLABLE, "Argument 1 of Window.requestIdleCallback");
    6717           0 :       return false;
    6718             :     }
    6719             :   } else {
    6720           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.requestIdleCallback");
    6721           0 :     return false;
    6722             :   }
    6723           6 :   binding_detail::FastIdleRequestOptions arg1;
    6724           3 :   if (!arg1.Init(cx, (args.hasDefined(1)) ? args[1] : JS::NullHandleValue,  "Argument 2 of Window.requestIdleCallback", false)) {
    6725           0 :     return false;
    6726             :   }
    6727           6 :   binding_detail::FastErrorResult rv;
    6728           3 :   uint32_t result(self->RequestIdleCallback(cx, NonNullHelper(arg0), Constify(arg1), rv));
    6729           3 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    6730           0 :     return false;
    6731             :   }
    6732           3 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6733           3 :   args.rval().setNumber(result);
    6734           3 :   return true;
    6735             : }
    6736             : 
    6737             : static const JSJitInfo requestIdleCallback_methodinfo = {
    6738             :   { (JSJitGetterOp)requestIdleCallback },
    6739             :   { prototypes::id::Window },
    6740             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6741             :   JSJitInfo::Method,
    6742             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6743             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    6744             :   false,  /* isInfallible. False in setters. */
    6745             :   false,  /* isMovable.  Not relevant for setters. */
    6746             :   false, /* isEliminatable.  Not relevant for setters. */
    6747             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6748             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6749             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6750             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6751             : };
    6752             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6753             : static_assert(0 < 5, "There is no slot for us");
    6754             : 
    6755             : static bool
    6756           0 : cancelIdleCallback(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    6757             : {
    6758           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    6759           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.cancelIdleCallback");
    6760             :   }
    6761             :   uint32_t arg0;
    6762           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    6763           0 :     return false;
    6764             :   }
    6765           0 :   self->CancelIdleCallback(arg0);
    6766           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6767           0 :   args.rval().setUndefined();
    6768           0 :   return true;
    6769             : }
    6770             : 
    6771             : static const JSJitInfo cancelIdleCallback_methodinfo = {
    6772             :   { (JSJitGetterOp)cancelIdleCallback },
    6773             :   { prototypes::id::Window },
    6774             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6775             :   JSJitInfo::Method,
    6776             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6777             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6778             :   false,  /* isInfallible. False in setters. */
    6779             :   false,  /* isMovable.  Not relevant for setters. */
    6780             :   false, /* isEliminatable.  Not relevant for setters. */
    6781             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6782             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6783             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6784             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6785             : };
    6786             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6787             : static_assert(0 < 5, "There is no slot for us");
    6788             : 
    6789             : static bool
    6790           0 : get_isSecureContextIfOpenerIgnored(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6791             : {
    6792           0 :   bool result(self->IsSecureContextIfOpenerIgnored());
    6793           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6794           0 :   args.rval().setBoolean(result);
    6795           0 :   return true;
    6796             : }
    6797             : 
    6798             : static const JSJitInfo isSecureContextIfOpenerIgnored_getterinfo = {
    6799             :   { (JSJitGetterOp)get_isSecureContextIfOpenerIgnored },
    6800             :   { prototypes::id::Window },
    6801             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6802             :   JSJitInfo::Getter,
    6803             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6804             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    6805             :   true,  /* isInfallible. False in setters. */
    6806             :   false,  /* isMovable.  Not relevant for setters. */
    6807             :   false, /* isEliminatable.  Not relevant for setters. */
    6808             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6809             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6810             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6811             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6812             : };
    6813             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6814             : static_assert(0 < 5, "There is no slot for us");
    6815             : 
    6816             : static bool
    6817           0 : getAppLocalesAsBCP47(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    6818             : {
    6819           0 :   nsTArray<nsString> result;
    6820           0 :   self->GetAppLocalesAsBCP47(result);
    6821           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6822             : 
    6823           0 :   uint32_t length = result.Length();
    6824           0 :   JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
    6825           0 :   if (!returnArray) {
    6826           0 :     return false;
    6827             :   }
    6828             :   // Scope for 'tmp'
    6829             :   {
    6830           0 :     JS::Rooted<JS::Value> tmp(cx);
    6831           0 :     for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
    6832             :       // Control block to let us common up the JS_DefineElement calls when there
    6833             :       // are different ways to succeed at wrapping the object.
    6834             :       do {
    6835           0 :         if (!xpc::NonVoidStringToJsval(cx, result[sequenceIdx0], &tmp)) {
    6836           0 :           return false;
    6837             :         }
    6838           0 :         break;
    6839             :       } while (0);
    6840           0 :       if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
    6841             :                             JSPROP_ENUMERATE)) {
    6842           0 :         return false;
    6843             :       }
    6844             :     }
    6845             :   }
    6846           0 :   args.rval().setObject(*returnArray);
    6847           0 :   return true;
    6848             : }
    6849             : 
    6850             : static const JSJitInfo getAppLocalesAsBCP47_methodinfo = {
    6851             :   { (JSJitGetterOp)getAppLocalesAsBCP47 },
    6852             :   { prototypes::id::Window },
    6853             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6854             :   JSJitInfo::Method,
    6855             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6856             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    6857             :   false,  /* isInfallible. False in setters. */
    6858             :   false,  /* isMovable.  Not relevant for setters. */
    6859             :   false, /* isEliminatable.  Not relevant for setters. */
    6860             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6861             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6862             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6863             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6864             : };
    6865             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6866             : static_assert(0 < 5, "There is no slot for us");
    6867             : 
    6868             : static bool
    6869           0 : get_intlUtils(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6870             : {
    6871           0 :   binding_detail::FastErrorResult rv;
    6872           0 :   auto result(StrongOrRawPtr<mozilla::dom::IntlUtils>(self->GetIntlUtils(rv)));
    6873           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    6874           0 :     return false;
    6875             :   }
    6876           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6877           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    6878           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    6879           0 :     return false;
    6880             :   }
    6881           0 :   return true;
    6882             : }
    6883             : 
    6884             : static const JSJitInfo intlUtils_getterinfo = {
    6885             :   { (JSJitGetterOp)get_intlUtils },
    6886             :   { prototypes::id::Window },
    6887             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6888             :   JSJitInfo::Getter,
    6889             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6890             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    6891             :   false,  /* isInfallible. False in setters. */
    6892             :   false,  /* isMovable.  Not relevant for setters. */
    6893             :   false, /* isEliminatable.  Not relevant for setters. */
    6894             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6895             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6896             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6897             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6898             : };
    6899             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6900             : static_assert(0 < 5, "There is no slot for us");
    6901             : 
    6902             : static bool
    6903           4 : get_windowState(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6904             : {
    6905           4 :   uint16_t result(self->WindowState());
    6906           4 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6907           4 :   args.rval().setInt32(int32_t(result));
    6908           4 :   return true;
    6909             : }
    6910             : 
    6911             : static const JSJitInfo windowState_getterinfo = {
    6912             :   { (JSJitGetterOp)get_windowState },
    6913             :   { prototypes::id::Window },
    6914             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6915             :   JSJitInfo::Getter,
    6916             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6917             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    6918             :   true,  /* isInfallible. False in setters. */
    6919             :   false,  /* isMovable.  Not relevant for setters. */
    6920             :   false, /* isEliminatable.  Not relevant for setters. */
    6921             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6922             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6923             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6924             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6925             : };
    6926             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6927             : static_assert(0 < 5, "There is no slot for us");
    6928             : 
    6929             : static bool
    6930           3 : get_isFullyOccluded(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6931             : {
    6932           3 :   bool result(self->IsFullyOccluded());
    6933           3 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6934           3 :   args.rval().setBoolean(result);
    6935           3 :   return true;
    6936             : }
    6937             : 
    6938             : static const JSJitInfo isFullyOccluded_getterinfo = {
    6939             :   { (JSJitGetterOp)get_isFullyOccluded },
    6940             :   { prototypes::id::Window },
    6941             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    6942             :   JSJitInfo::Getter,
    6943             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6944             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    6945             :   true,  /* isInfallible. False in setters. */
    6946             :   false,  /* isMovable.  Not relevant for setters. */
    6947             :   false, /* isEliminatable.  Not relevant for setters. */
    6948             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6949             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6950             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6951             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6952             : };
    6953             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6954             : static_assert(0 < 5, "There is no slot for us");
    6955             : 
    6956             : static bool
    6957           0 : get_browserDOMWindow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    6958             : {
    6959           0 :   binding_detail::FastErrorResult rv;
    6960           0 :   auto result(StrongOrRawPtr<nsIBrowserDOMWindow>(self->GetBrowserDOMWindow(rv)));
    6961           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    6962           0 :     return false;
    6963             :   }
    6964           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6965           0 :   if (!result) {
    6966           0 :     args.rval().setNull();
    6967           0 :     return true;
    6968             :   }
    6969           0 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIBrowserDOMWindow), args.rval())) {
    6970           0 :     return false;
    6971             :   }
    6972           0 :   return true;
    6973             : }
    6974             : 
    6975             : static bool
    6976           1 : set_browserDOMWindow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    6977             : {
    6978             :   nsIBrowserDOMWindow* arg0;
    6979           2 :   RefPtr<nsIBrowserDOMWindow> arg0_holder;
    6980           1 :   if (args[0].isObject()) {
    6981           2 :     JS::Rooted<JSObject*> source(cx, &args[0].toObject());
    6982           1 :     if (NS_FAILED(UnwrapArg<nsIBrowserDOMWindow>(cx, source, getter_AddRefs(arg0_holder)))) {
    6983           0 :       ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Value being assigned to Window.browserDOMWindow", "nsIBrowserDOMWindow");
    6984           0 :       return false;
    6985             :     }
    6986           1 :     MOZ_ASSERT(arg0_holder);
    6987           1 :     arg0 = arg0_holder;
    6988           0 :   } else if (args[0].isNullOrUndefined()) {
    6989           0 :     arg0 = nullptr;
    6990             :   } else {
    6991           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Value being assigned to Window.browserDOMWindow");
    6992           0 :     return false;
    6993             :   }
    6994           2 :   binding_detail::FastErrorResult rv;
    6995           1 :   self->SetBrowserDOMWindow(Constify(arg0), rv);
    6996           1 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    6997           0 :     return false;
    6998             :   }
    6999           1 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7000             : 
    7001           1 :   return true;
    7002             : }
    7003             : 
    7004             : static const JSJitInfo browserDOMWindow_getterinfo = {
    7005             :   { (JSJitGetterOp)get_browserDOMWindow },
    7006             :   { prototypes::id::Window },
    7007             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7008             :   JSJitInfo::Getter,
    7009             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7010             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7011             :   false,  /* isInfallible. False in setters. */
    7012             :   false,  /* isMovable.  Not relevant for setters. */
    7013             :   false, /* isEliminatable.  Not relevant for setters. */
    7014             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7015             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7016             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7017             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7018             : };
    7019             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7020             : static_assert(0 < 5, "There is no slot for us");
    7021             : static const JSJitInfo browserDOMWindow_setterinfo = {
    7022             :   { (JSJitGetterOp)set_browserDOMWindow },
    7023             :   { prototypes::id::Window },
    7024             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7025             :   JSJitInfo::Setter,
    7026             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7027             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7028             :   false,  /* isInfallible. False in setters. */
    7029             :   false,  /* isMovable.  Not relevant for setters. */
    7030             :   false, /* isEliminatable.  Not relevant for setters. */
    7031             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7032             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7033             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7034             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7035             : };
    7036             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7037             : static_assert(0 < 5, "There is no slot for us");
    7038             : 
    7039             : static bool
    7040           0 : getAttention(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    7041             : {
    7042           0 :   binding_detail::FastErrorResult rv;
    7043           0 :   self->GetAttention(rv);
    7044           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    7045           0 :     return false;
    7046             :   }
    7047           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7048           0 :   args.rval().setUndefined();
    7049           0 :   return true;
    7050             : }
    7051             : 
    7052             : static const JSJitInfo getAttention_methodinfo = {
    7053             :   { (JSJitGetterOp)getAttention },
    7054             :   { prototypes::id::Window },
    7055             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7056             :   JSJitInfo::Method,
    7057             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7058             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7059             :   false,  /* isInfallible. False in setters. */
    7060             :   false,  /* isMovable.  Not relevant for setters. */
    7061             :   false, /* isEliminatable.  Not relevant for setters. */
    7062             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7063             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7064             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7065             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7066             : };
    7067             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7068             : static_assert(0 < 5, "There is no slot for us");
    7069             : 
    7070             : static bool
    7071           0 : getAttentionWithCycleCount(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    7072             : {
    7073           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    7074           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getAttentionWithCycleCount");
    7075             :   }
    7076             :   int32_t arg0;
    7077           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    7078           0 :     return false;
    7079             :   }
    7080           0 :   binding_detail::FastErrorResult rv;
    7081           0 :   self->GetAttentionWithCycleCount(arg0, rv);
    7082           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    7083           0 :     return false;
    7084             :   }
    7085           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7086           0 :   args.rval().setUndefined();
    7087           0 :   return true;
    7088             : }
    7089             : 
    7090             : static const JSJitInfo getAttentionWithCycleCount_methodinfo = {
    7091             :   { (JSJitGetterOp)getAttentionWithCycleCount },
    7092             :   { prototypes::id::Window },
    7093             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7094             :   JSJitInfo::Method,
    7095             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7096             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7097             :   false,  /* isInfallible. False in setters. */
    7098             :   false,  /* isMovable.  Not relevant for setters. */
    7099             :   false, /* isEliminatable.  Not relevant for setters. */
    7100             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7101             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7102             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7103             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7104             : };
    7105             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7106             : static_assert(0 < 5, "There is no slot for us");
    7107             : 
    7108             : static bool
    7109           0 : setCursor(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    7110             : {
    7111           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    7112           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.setCursor");
    7113             :   }
    7114           0 :   binding_detail::FakeString arg0;
    7115           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    7116           0 :     return false;
    7117             :   }
    7118           0 :   binding_detail::FastErrorResult rv;
    7119           0 :   self->SetCursor(NonNullHelper(Constify(arg0)), rv);
    7120           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    7121           0 :     return false;
    7122             :   }
    7123           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7124           0 :   args.rval().setUndefined();
    7125           0 :   return true;
    7126             : }
    7127             : 
    7128             : static const JSJitInfo setCursor_methodinfo = {
    7129             :   { (JSJitGetterOp)setCursor },
    7130             :   { prototypes::id::Window },
    7131             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7132             :   JSJitInfo::Method,
    7133             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7134             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7135             :   false,  /* isInfallible. False in setters. */
    7136             :   false,  /* isMovable.  Not relevant for setters. */
    7137             :   false, /* isEliminatable.  Not relevant for setters. */
    7138             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7139             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7140             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7141             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7142             : };
    7143             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7144             : static_assert(0 < 5, "There is no slot for us");
    7145             : 
    7146             : static bool
    7147           0 : maximize(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    7148             : {
    7149           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    7150             :       // Return false from the JSNative in order to trigger
    7151             :       // an uncatchable exception.
    7152           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7153           0 :       return false;
    7154             :   }
    7155           0 :   self->Maximize();
    7156           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7157           0 :   args.rval().setUndefined();
    7158           0 :   return true;
    7159             : }
    7160             : 
    7161             : static const JSJitInfo maximize_methodinfo = {
    7162             :   { (JSJitGetterOp)maximize },
    7163             :   { prototypes::id::Window },
    7164             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7165             :   JSJitInfo::Method,
    7166             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7167             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7168             :   true,  /* isInfallible. False in setters. */
    7169             :   false,  /* isMovable.  Not relevant for setters. */
    7170             :   false, /* isEliminatable.  Not relevant for setters. */
    7171             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7172             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7173             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7174             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7175             : };
    7176             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7177             : static_assert(0 < 5, "There is no slot for us");
    7178             : 
    7179             : static bool
    7180           0 : minimize(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    7181             : {
    7182           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    7183             :       // Return false from the JSNative in order to trigger
    7184             :       // an uncatchable exception.
    7185           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7186           0 :       return false;
    7187             :   }
    7188           0 :   self->Minimize();
    7189           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7190           0 :   args.rval().setUndefined();
    7191           0 :   return true;
    7192             : }
    7193             : 
    7194             : static const JSJitInfo minimize_methodinfo = {
    7195             :   { (JSJitGetterOp)minimize },
    7196             :   { prototypes::id::Window },
    7197             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7198             :   JSJitInfo::Method,
    7199             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7200             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7201             :   true,  /* isInfallible. False in setters. */
    7202             :   false,  /* isMovable.  Not relevant for setters. */
    7203             :   false, /* isEliminatable.  Not relevant for setters. */
    7204             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7205             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7206             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7207             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7208             : };
    7209             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7210             : static_assert(0 < 5, "There is no slot for us");
    7211             : 
    7212             : static bool
    7213           0 : restore(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    7214             : {
    7215           0 :   if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
    7216             :       // Return false from the JSNative in order to trigger
    7217             :       // an uncatchable exception.
    7218           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7219           0 :       return false;
    7220             :   }
    7221           0 :   self->Restore();
    7222           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7223           0 :   args.rval().setUndefined();
    7224           0 :   return true;
    7225             : }
    7226             : 
    7227             : static const JSJitInfo restore_methodinfo = {
    7228             :   { (JSJitGetterOp)restore },
    7229             :   { prototypes::id::Window },
    7230             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7231             :   JSJitInfo::Method,
    7232             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7233             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7234             :   true,  /* isInfallible. False in setters. */
    7235             :   false,  /* isMovable.  Not relevant for setters. */
    7236             :   false, /* isEliminatable.  Not relevant for setters. */
    7237             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7238             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7239             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7240             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7241             : };
    7242             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7243             : static_assert(0 < 5, "There is no slot for us");
    7244             : 
    7245             : static bool
    7246           0 : notifyDefaultButtonLoaded(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    7247             : {
    7248           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    7249           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.notifyDefaultButtonLoaded");
    7250             :   }
    7251           0 :   NonNull<mozilla::dom::Element> arg0;
    7252           0 :   if (args[0].isObject()) {
    7253             :     {
    7254           0 :       nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[0], arg0);
    7255           0 :       if (NS_FAILED(rv)) {
    7256           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.notifyDefaultButtonLoaded", "Element");
    7257           0 :         return false;
    7258             :       }
    7259             :     }
    7260             :   } else {
    7261           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.notifyDefaultButtonLoaded");
    7262           0 :     return false;
    7263             :   }
    7264           0 :   binding_detail::FastErrorResult rv;
    7265           0 :   self->NotifyDefaultButtonLoaded(NonNullHelper(arg0), rv);
    7266           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    7267           0 :     return false;
    7268             :   }
    7269           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7270           0 :   args.rval().setUndefined();
    7271           0 :   return true;
    7272             : }
    7273             : 
    7274             : static const JSJitInfo notifyDefaultButtonLoaded_methodinfo = {
    7275             :   { (JSJitGetterOp)notifyDefaultButtonLoaded },
    7276             :   { prototypes::id::Window },
    7277             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7278             :   JSJitInfo::Method,
    7279             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7280             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7281             :   false,  /* isInfallible. False in setters. */
    7282             :   false,  /* isMovable.  Not relevant for setters. */
    7283             :   false, /* isEliminatable.  Not relevant for setters. */
    7284             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7285             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7286             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7287             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7288             : };
    7289             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7290             : static_assert(0 < 5, "There is no slot for us");
    7291             : 
    7292             : static bool
    7293          26 : get_messageManager(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    7294             : {
    7295          52 :   binding_detail::FastErrorResult rv;
    7296          26 :   auto result(StrongOrRawPtr<nsIMessageBroadcaster>(self->GetMessageManager(rv)));
    7297          26 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    7298           0 :     return false;
    7299             :   }
    7300          26 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7301          26 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIMessageBroadcaster), args.rval())) {
    7302           0 :     return false;
    7303             :   }
    7304          26 :   return true;
    7305             : }
    7306             : 
    7307             : static const JSJitInfo messageManager_getterinfo = {
    7308             :   { (JSJitGetterOp)get_messageManager },
    7309             :   { prototypes::id::Window },
    7310             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7311             :   JSJitInfo::Getter,
    7312             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7313             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    7314             :   false,  /* isInfallible. False in setters. */
    7315             :   false,  /* isMovable.  Not relevant for setters. */
    7316             :   false, /* isEliminatable.  Not relevant for setters. */
    7317             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7318             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7319             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7320             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7321             : };
    7322             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7323             : static_assert(0 < 5, "There is no slot for us");
    7324             : 
    7325             : static bool
    7326           5 : getGroupMessageManager(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    7327             : {
    7328           5 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    7329           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getGroupMessageManager");
    7330             :   }
    7331          10 :   binding_detail::FakeString arg0;
    7332           5 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    7333           0 :     return false;
    7334             :   }
    7335          10 :   binding_detail::FastErrorResult rv;
    7336           5 :   auto result(StrongOrRawPtr<nsIMessageBroadcaster>(self->GetGroupMessageManager(NonNullHelper(Constify(arg0)), rv)));
    7337           5 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    7338           0 :     return false;
    7339             :   }
    7340           5 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7341           5 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIMessageBroadcaster), args.rval())) {
    7342           0 :     return false;
    7343             :   }
    7344           5 :   return true;
    7345             : }
    7346             : 
    7347             : static const JSJitInfo getGroupMessageManager_methodinfo = {
    7348             :   { (JSJitGetterOp)getGroupMessageManager },
    7349             :   { prototypes::id::Window },
    7350             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7351             :   JSJitInfo::Method,
    7352             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7353             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    7354             :   false,  /* isInfallible. False in setters. */
    7355             :   false,  /* isMovable.  Not relevant for setters. */
    7356             :   false, /* isEliminatable.  Not relevant for setters. */
    7357             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7358             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7359             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7360             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7361             : };
    7362             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7363             : static_assert(0 < 5, "There is no slot for us");
    7364             : 
    7365             : static bool
    7366           0 : beginWindowMove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
    7367             : {
    7368           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    7369           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.beginWindowMove");
    7370             :   }
    7371           0 :   NonNull<mozilla::dom::Event> arg0;
    7372           0 :   if (args[0].isObject()) {
    7373             :     {
    7374           0 :       nsresult rv = UnwrapObject<prototypes::id::Event, mozilla::dom::Event>(args[0], arg0);
    7375           0 :       if (NS_FAILED(rv)) {
    7376           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.beginWindowMove", "Event");
    7377           0 :         return false;
    7378             :       }
    7379             :     }
    7380             :   } else {
    7381           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.beginWindowMove");
    7382           0 :     return false;
    7383             :   }
    7384             :   mozilla::dom::Element* arg1;
    7385           0 :   if (args.hasDefined(1)) {
    7386           0 :     if (args[1].isObject()) {
    7387             :       {
    7388           0 :         nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[1], arg1);
    7389           0 :         if (NS_FAILED(rv)) {
    7390           0 :           ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of Window.beginWindowMove", "Element");
    7391           0 :           return false;
    7392             :         }
    7393             :       }
    7394           0 :     } else if (args[1].isNullOrUndefined()) {
    7395           0 :       arg1 = nullptr;
    7396             :     } else {
    7397           0 :       ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of Window.beginWindowMove");
    7398           0 :       return false;
    7399             :     }
    7400             :   } else {
    7401           0 :     arg1 = nullptr;
    7402             :   }
    7403           0 :   binding_detail::FastErrorResult rv;
    7404           0 :   self->BeginWindowMove(NonNullHelper(arg0), Constify(arg1), rv);
    7405           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    7406           0 :     return false;
    7407             :   }
    7408           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7409           0 :   args.rval().setUndefined();
    7410           0 :   return true;
    7411             : }
    7412             : 
    7413             : static const JSJitInfo beginWindowMove_methodinfo = {
    7414             :   { (JSJitGetterOp)beginWindowMove },
    7415             :   { prototypes::id::Window },
    7416             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7417             :   JSJitInfo::Method,
    7418             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7419             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7420             :   false,  /* isInfallible. False in setters. */
    7421             :   false,  /* isMovable.  Not relevant for setters. */
    7422             :   false, /* isEliminatable.  Not relevant for setters. */
    7423             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7424             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7425             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7426             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7427             : };
    7428             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7429             : static_assert(0 < 5, "There is no slot for us");
    7430             : 
    7431             : static bool
    7432           0 : get_crypto(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    7433             : {
    7434           0 :   binding_detail::FastErrorResult rv;
    7435           0 :   auto result(StrongOrRawPtr<mozilla::dom::Crypto>(self->GetCrypto(rv)));
    7436           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    7437           0 :     return false;
    7438             :   }
    7439           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7440           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    7441           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    7442           0 :     return false;
    7443             :   }
    7444           0 :   return true;
    7445             : }
    7446             : 
    7447             : static const JSJitInfo crypto_getterinfo = {
    7448             :   { (JSJitGetterOp)get_crypto },
    7449             :   { prototypes::id::Window },
    7450             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7451             :   JSJitInfo::Getter,
    7452             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7453             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    7454             :   false,  /* isInfallible. False in setters. */
    7455             :   false,  /* isMovable.  Not relevant for setters. */
    7456             :   false, /* isEliminatable.  Not relevant for setters. */
    7457             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7458             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7459             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7460             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7461             : };
    7462             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7463             : static_assert(0 < 5, "There is no slot for us");
    7464             : 
    7465             : static bool
    7466           0 : get_onabort(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    7467             : {
    7468           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnabort());
    7469           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7470           0 :   if (result) {
    7471           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7472           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7473           0 :       return false;
    7474             :     }
    7475           0 :     return true;
    7476             :   } else {
    7477           0 :     args.rval().setNull();
    7478           0 :     return true;
    7479             :   }
    7480             : }
    7481             : 
    7482             : static bool
    7483           0 : set_onabort(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    7484             : {
    7485           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7486           0 :   if (args[0].isObject()) {
    7487             :     { // scope for tempRoot
    7488           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7489           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7490             :     }
    7491             :   } else {
    7492           0 :     arg0 = nullptr;
    7493             :   }
    7494           0 :   self->SetOnabort(Constify(arg0));
    7495           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7496             : 
    7497           0 :   return true;
    7498             : }
    7499             : 
    7500             : static const JSJitInfo onabort_getterinfo = {
    7501             :   { (JSJitGetterOp)get_onabort },
    7502             :   { prototypes::id::Window },
    7503             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7504             :   JSJitInfo::Getter,
    7505             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7506             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7507             :   false,  /* isInfallible. False in setters. */
    7508             :   false,  /* isMovable.  Not relevant for setters. */
    7509             :   false, /* isEliminatable.  Not relevant for setters. */
    7510             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7511             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7512             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7513             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7514             : };
    7515             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7516             : static_assert(0 < 5, "There is no slot for us");
    7517             : static const JSJitInfo onabort_setterinfo = {
    7518             :   { (JSJitGetterOp)set_onabort },
    7519             :   { prototypes::id::Window },
    7520             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7521             :   JSJitInfo::Setter,
    7522             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7523             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7524             :   false,  /* isInfallible. False in setters. */
    7525             :   false,  /* isMovable.  Not relevant for setters. */
    7526             :   false, /* isEliminatable.  Not relevant for setters. */
    7527             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7528             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7529             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7530             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7531             : };
    7532             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7533             : static_assert(0 < 5, "There is no slot for us");
    7534             : 
    7535             : static bool
    7536           0 : get_onblur(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    7537             : {
    7538           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnblur());
    7539           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7540           0 :   if (result) {
    7541           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7542           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7543           0 :       return false;
    7544             :     }
    7545           0 :     return true;
    7546             :   } else {
    7547           0 :     args.rval().setNull();
    7548           0 :     return true;
    7549             :   }
    7550             : }
    7551             : 
    7552             : static bool
    7553           0 : set_onblur(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    7554             : {
    7555           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7556           0 :   if (args[0].isObject()) {
    7557             :     { // scope for tempRoot
    7558           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7559           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7560             :     }
    7561             :   } else {
    7562           0 :     arg0 = nullptr;
    7563             :   }
    7564           0 :   self->SetOnblur(Constify(arg0));
    7565           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7566             : 
    7567           0 :   return true;
    7568             : }
    7569             : 
    7570             : static const JSJitInfo onblur_getterinfo = {
    7571             :   { (JSJitGetterOp)get_onblur },
    7572             :   { prototypes::id::Window },
    7573             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7574             :   JSJitInfo::Getter,
    7575             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7576             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7577             :   false,  /* isInfallible. False in setters. */
    7578             :   false,  /* isMovable.  Not relevant for setters. */
    7579             :   false, /* isEliminatable.  Not relevant for setters. */
    7580             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7581             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7582             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7583             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7584             : };
    7585             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7586             : static_assert(0 < 5, "There is no slot for us");
    7587             : static const JSJitInfo onblur_setterinfo = {
    7588             :   { (JSJitGetterOp)set_onblur },
    7589             :   { prototypes::id::Window },
    7590             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7591             :   JSJitInfo::Setter,
    7592             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7593             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7594             :   false,  /* isInfallible. False in setters. */
    7595             :   false,  /* isMovable.  Not relevant for setters. */
    7596             :   false, /* isEliminatable.  Not relevant for setters. */
    7597             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7598             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7599             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7600             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7601             : };
    7602             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7603             : static_assert(0 < 5, "There is no slot for us");
    7604             : 
    7605             : static bool
    7606           0 : get_onfocus(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    7607             : {
    7608           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnfocus());
    7609           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7610           0 :   if (result) {
    7611           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7612           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7613           0 :       return false;
    7614             :     }
    7615           0 :     return true;
    7616             :   } else {
    7617           0 :     args.rval().setNull();
    7618           0 :     return true;
    7619             :   }
    7620             : }
    7621             : 
    7622             : static bool
    7623           0 : set_onfocus(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    7624             : {
    7625           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7626           0 :   if (args[0].isObject()) {
    7627             :     { // scope for tempRoot
    7628           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7629           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7630             :     }
    7631             :   } else {
    7632           0 :     arg0 = nullptr;
    7633             :   }
    7634           0 :   self->SetOnfocus(Constify(arg0));
    7635           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7636             : 
    7637           0 :   return true;
    7638             : }
    7639             : 
    7640             : static const JSJitInfo onfocus_getterinfo = {
    7641             :   { (JSJitGetterOp)get_onfocus },
    7642             :   { prototypes::id::Window },
    7643             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7644             :   JSJitInfo::Getter,
    7645             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7646             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7647             :   false,  /* isInfallible. False in setters. */
    7648             :   false,  /* isMovable.  Not relevant for setters. */
    7649             :   false, /* isEliminatable.  Not relevant for setters. */
    7650             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7651             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7652             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7653             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7654             : };
    7655             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7656             : static_assert(0 < 5, "There is no slot for us");
    7657             : static const JSJitInfo onfocus_setterinfo = {
    7658             :   { (JSJitGetterOp)set_onfocus },
    7659             :   { prototypes::id::Window },
    7660             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7661             :   JSJitInfo::Setter,
    7662             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7663             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7664             :   false,  /* isInfallible. False in setters. */
    7665             :   false,  /* isMovable.  Not relevant for setters. */
    7666             :   false, /* isEliminatable.  Not relevant for setters. */
    7667             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7668             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7669             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7670             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7671             : };
    7672             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7673             : static_assert(0 < 5, "There is no slot for us");
    7674             : 
    7675             : static bool
    7676           0 : get_onauxclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    7677             : {
    7678           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnauxclick());
    7679           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7680           0 :   if (result) {
    7681           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7682           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7683           0 :       return false;
    7684             :     }
    7685           0 :     return true;
    7686             :   } else {
    7687           0 :     args.rval().setNull();
    7688           0 :     return true;
    7689             :   }
    7690             : }
    7691             : 
    7692             : static bool
    7693           0 : set_onauxclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    7694             : {
    7695           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7696           0 :   if (args[0].isObject()) {
    7697             :     { // scope for tempRoot
    7698           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7699           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7700             :     }
    7701             :   } else {
    7702           0 :     arg0 = nullptr;
    7703             :   }
    7704           0 :   self->SetOnauxclick(Constify(arg0));
    7705           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7706             : 
    7707           0 :   return true;
    7708             : }
    7709             : 
    7710             : static const JSJitInfo onauxclick_getterinfo = {
    7711             :   { (JSJitGetterOp)get_onauxclick },
    7712             :   { prototypes::id::Window },
    7713             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7714             :   JSJitInfo::Getter,
    7715             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7716             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7717             :   false,  /* isInfallible. False in setters. */
    7718             :   false,  /* isMovable.  Not relevant for setters. */
    7719             :   false, /* isEliminatable.  Not relevant for setters. */
    7720             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7721             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7722             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7723             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7724             : };
    7725             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7726             : static_assert(0 < 5, "There is no slot for us");
    7727             : static const JSJitInfo onauxclick_setterinfo = {
    7728             :   { (JSJitGetterOp)set_onauxclick },
    7729             :   { prototypes::id::Window },
    7730             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7731             :   JSJitInfo::Setter,
    7732             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7733             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7734             :   false,  /* isInfallible. False in setters. */
    7735             :   false,  /* isMovable.  Not relevant for setters. */
    7736             :   false, /* isEliminatable.  Not relevant for setters. */
    7737             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7738             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7739             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7740             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7741             : };
    7742             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7743             : static_assert(0 < 5, "There is no slot for us");
    7744             : 
    7745             : static bool
    7746           0 : get_oncanplay(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    7747             : {
    7748           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncanplay());
    7749           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7750           0 :   if (result) {
    7751           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7752           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7753           0 :       return false;
    7754             :     }
    7755           0 :     return true;
    7756             :   } else {
    7757           0 :     args.rval().setNull();
    7758           0 :     return true;
    7759             :   }
    7760             : }
    7761             : 
    7762             : static bool
    7763           0 : set_oncanplay(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    7764             : {
    7765           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7766           0 :   if (args[0].isObject()) {
    7767             :     { // scope for tempRoot
    7768           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7769           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7770             :     }
    7771             :   } else {
    7772           0 :     arg0 = nullptr;
    7773             :   }
    7774           0 :   self->SetOncanplay(Constify(arg0));
    7775           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7776             : 
    7777           0 :   return true;
    7778             : }
    7779             : 
    7780             : static const JSJitInfo oncanplay_getterinfo = {
    7781             :   { (JSJitGetterOp)get_oncanplay },
    7782             :   { prototypes::id::Window },
    7783             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7784             :   JSJitInfo::Getter,
    7785             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7786             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7787             :   false,  /* isInfallible. False in setters. */
    7788             :   false,  /* isMovable.  Not relevant for setters. */
    7789             :   false, /* isEliminatable.  Not relevant for setters. */
    7790             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7791             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7792             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7793             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7794             : };
    7795             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7796             : static_assert(0 < 5, "There is no slot for us");
    7797             : static const JSJitInfo oncanplay_setterinfo = {
    7798             :   { (JSJitGetterOp)set_oncanplay },
    7799             :   { prototypes::id::Window },
    7800             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7801             :   JSJitInfo::Setter,
    7802             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7803             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7804             :   false,  /* isInfallible. False in setters. */
    7805             :   false,  /* isMovable.  Not relevant for setters. */
    7806             :   false, /* isEliminatable.  Not relevant for setters. */
    7807             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7808             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7809             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7810             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7811             : };
    7812             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7813             : static_assert(0 < 5, "There is no slot for us");
    7814             : 
    7815             : static bool
    7816           0 : get_oncanplaythrough(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    7817             : {
    7818           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncanplaythrough());
    7819           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7820           0 :   if (result) {
    7821           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7822           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7823           0 :       return false;
    7824             :     }
    7825           0 :     return true;
    7826             :   } else {
    7827           0 :     args.rval().setNull();
    7828           0 :     return true;
    7829             :   }
    7830             : }
    7831             : 
    7832             : static bool
    7833           0 : set_oncanplaythrough(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    7834             : {
    7835           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7836           0 :   if (args[0].isObject()) {
    7837             :     { // scope for tempRoot
    7838           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7839           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7840             :     }
    7841             :   } else {
    7842           0 :     arg0 = nullptr;
    7843             :   }
    7844           0 :   self->SetOncanplaythrough(Constify(arg0));
    7845           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7846             : 
    7847           0 :   return true;
    7848             : }
    7849             : 
    7850             : static const JSJitInfo oncanplaythrough_getterinfo = {
    7851             :   { (JSJitGetterOp)get_oncanplaythrough },
    7852             :   { prototypes::id::Window },
    7853             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7854             :   JSJitInfo::Getter,
    7855             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7856             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7857             :   false,  /* isInfallible. False in setters. */
    7858             :   false,  /* isMovable.  Not relevant for setters. */
    7859             :   false, /* isEliminatable.  Not relevant for setters. */
    7860             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7861             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7862             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7863             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7864             : };
    7865             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7866             : static_assert(0 < 5, "There is no slot for us");
    7867             : static const JSJitInfo oncanplaythrough_setterinfo = {
    7868             :   { (JSJitGetterOp)set_oncanplaythrough },
    7869             :   { prototypes::id::Window },
    7870             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7871             :   JSJitInfo::Setter,
    7872             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7873             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7874             :   false,  /* isInfallible. False in setters. */
    7875             :   false,  /* isMovable.  Not relevant for setters. */
    7876             :   false, /* isEliminatable.  Not relevant for setters. */
    7877             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7878             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7879             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7880             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7881             : };
    7882             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7883             : static_assert(0 < 5, "There is no slot for us");
    7884             : 
    7885             : static bool
    7886           0 : get_onchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    7887             : {
    7888           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnchange());
    7889           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7890           0 :   if (result) {
    7891           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7892           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7893           0 :       return false;
    7894             :     }
    7895           0 :     return true;
    7896             :   } else {
    7897           0 :     args.rval().setNull();
    7898           0 :     return true;
    7899             :   }
    7900             : }
    7901             : 
    7902             : static bool
    7903           0 : set_onchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    7904             : {
    7905           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7906           0 :   if (args[0].isObject()) {
    7907             :     { // scope for tempRoot
    7908           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7909           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7910             :     }
    7911             :   } else {
    7912           0 :     arg0 = nullptr;
    7913             :   }
    7914           0 :   self->SetOnchange(Constify(arg0));
    7915           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7916             : 
    7917           0 :   return true;
    7918             : }
    7919             : 
    7920             : static const JSJitInfo onchange_getterinfo = {
    7921             :   { (JSJitGetterOp)get_onchange },
    7922             :   { prototypes::id::Window },
    7923             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7924             :   JSJitInfo::Getter,
    7925             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7926             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7927             :   false,  /* isInfallible. False in setters. */
    7928             :   false,  /* isMovable.  Not relevant for setters. */
    7929             :   false, /* isEliminatable.  Not relevant for setters. */
    7930             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7931             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7932             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7933             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7934             : };
    7935             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7936             : static_assert(0 < 5, "There is no slot for us");
    7937             : static const JSJitInfo onchange_setterinfo = {
    7938             :   { (JSJitGetterOp)set_onchange },
    7939             :   { prototypes::id::Window },
    7940             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7941             :   JSJitInfo::Setter,
    7942             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7943             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7944             :   false,  /* isInfallible. False in setters. */
    7945             :   false,  /* isMovable.  Not relevant for setters. */
    7946             :   false, /* isEliminatable.  Not relevant for setters. */
    7947             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7948             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7949             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7950             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7951             : };
    7952             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7953             : static_assert(0 < 5, "There is no slot for us");
    7954             : 
    7955             : static bool
    7956           0 : get_onclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    7957             : {
    7958           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnclick());
    7959           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7960           0 :   if (result) {
    7961           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7962           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7963           0 :       return false;
    7964             :     }
    7965           0 :     return true;
    7966             :   } else {
    7967           0 :     args.rval().setNull();
    7968           0 :     return true;
    7969             :   }
    7970             : }
    7971             : 
    7972             : static bool
    7973           0 : set_onclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    7974             : {
    7975           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7976           0 :   if (args[0].isObject()) {
    7977             :     { // scope for tempRoot
    7978           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7979           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7980             :     }
    7981             :   } else {
    7982           0 :     arg0 = nullptr;
    7983             :   }
    7984           0 :   self->SetOnclick(Constify(arg0));
    7985           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7986             : 
    7987           0 :   return true;
    7988             : }
    7989             : 
    7990             : static const JSJitInfo onclick_getterinfo = {
    7991             :   { (JSJitGetterOp)get_onclick },
    7992             :   { prototypes::id::Window },
    7993             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    7994             :   JSJitInfo::Getter,
    7995             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7996             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7997             :   false,  /* isInfallible. False in setters. */
    7998             :   false,  /* isMovable.  Not relevant for setters. */
    7999             :   false, /* isEliminatable.  Not relevant for setters. */
    8000             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8001             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8002             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8003             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8004             : };
    8005             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8006             : static_assert(0 < 5, "There is no slot for us");
    8007             : static const JSJitInfo onclick_setterinfo = {
    8008             :   { (JSJitGetterOp)set_onclick },
    8009             :   { prototypes::id::Window },
    8010             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8011             :   JSJitInfo::Setter,
    8012             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8013             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8014             :   false,  /* isInfallible. False in setters. */
    8015             :   false,  /* isMovable.  Not relevant for setters. */
    8016             :   false, /* isEliminatable.  Not relevant for setters. */
    8017             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8018             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8019             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8020             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8021             : };
    8022             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8023             : static_assert(0 < 5, "There is no slot for us");
    8024             : 
    8025             : static bool
    8026           0 : get_onclose(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    8027             : {
    8028           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnclose());
    8029           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8030           0 :   if (result) {
    8031           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8032           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8033           0 :       return false;
    8034             :     }
    8035           0 :     return true;
    8036             :   } else {
    8037           0 :     args.rval().setNull();
    8038           0 :     return true;
    8039             :   }
    8040             : }
    8041             : 
    8042             : static bool
    8043           0 : set_onclose(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    8044             : {
    8045           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8046           0 :   if (args[0].isObject()) {
    8047             :     { // scope for tempRoot
    8048           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8049           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8050             :     }
    8051             :   } else {
    8052           0 :     arg0 = nullptr;
    8053             :   }
    8054           0 :   self->SetOnclose(Constify(arg0));
    8055           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8056             : 
    8057           0 :   return true;
    8058             : }
    8059             : 
    8060             : static const JSJitInfo onclose_getterinfo = {
    8061             :   { (JSJitGetterOp)get_onclose },
    8062             :   { prototypes::id::Window },
    8063             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8064             :   JSJitInfo::Getter,
    8065             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8066             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8067             :   false,  /* isInfallible. False in setters. */
    8068             :   false,  /* isMovable.  Not relevant for setters. */
    8069             :   false, /* isEliminatable.  Not relevant for setters. */
    8070             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8071             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8072             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8073             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8074             : };
    8075             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8076             : static_assert(0 < 5, "There is no slot for us");
    8077             : static const JSJitInfo onclose_setterinfo = {
    8078             :   { (JSJitGetterOp)set_onclose },
    8079             :   { prototypes::id::Window },
    8080             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8081             :   JSJitInfo::Setter,
    8082             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8083             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8084             :   false,  /* isInfallible. False in setters. */
    8085             :   false,  /* isMovable.  Not relevant for setters. */
    8086             :   false, /* isEliminatable.  Not relevant for setters. */
    8087             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8088             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8089             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8090             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8091             : };
    8092             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8093             : static_assert(0 < 5, "There is no slot for us");
    8094             : 
    8095             : static bool
    8096           0 : get_oncontextmenu(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    8097             : {
    8098           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncontextmenu());
    8099           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8100           0 :   if (result) {
    8101           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8102           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8103           0 :       return false;
    8104             :     }
    8105           0 :     return true;
    8106             :   } else {
    8107           0 :     args.rval().setNull();
    8108           0 :     return true;
    8109             :   }
    8110             : }
    8111             : 
    8112             : static bool
    8113           0 : set_oncontextmenu(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    8114             : {
    8115           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8116           0 :   if (args[0].isObject()) {
    8117             :     { // scope for tempRoot
    8118           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8119           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8120             :     }
    8121             :   } else {
    8122           0 :     arg0 = nullptr;
    8123             :   }
    8124           0 :   self->SetOncontextmenu(Constify(arg0));
    8125           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8126             : 
    8127           0 :   return true;
    8128             : }
    8129             : 
    8130             : static const JSJitInfo oncontextmenu_getterinfo = {
    8131             :   { (JSJitGetterOp)get_oncontextmenu },
    8132             :   { prototypes::id::Window },
    8133             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8134             :   JSJitInfo::Getter,
    8135             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8136             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8137             :   false,  /* isInfallible. False in setters. */
    8138             :   false,  /* isMovable.  Not relevant for setters. */
    8139             :   false, /* isEliminatable.  Not relevant for setters. */
    8140             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8141             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8142             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8143             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8144             : };
    8145             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8146             : static_assert(0 < 5, "There is no slot for us");
    8147             : static const JSJitInfo oncontextmenu_setterinfo = {
    8148             :   { (JSJitGetterOp)set_oncontextmenu },
    8149             :   { prototypes::id::Window },
    8150             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8151             :   JSJitInfo::Setter,
    8152             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8153             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8154             :   false,  /* isInfallible. False in setters. */
    8155             :   false,  /* isMovable.  Not relevant for setters. */
    8156             :   false, /* isEliminatable.  Not relevant for setters. */
    8157             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8158             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8159             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8160             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8161             : };
    8162             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8163             : static_assert(0 < 5, "There is no slot for us");
    8164             : 
    8165             : static bool
    8166           0 : get_ondblclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    8167             : {
    8168           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndblclick());
    8169           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8170           0 :   if (result) {
    8171           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8172           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8173           0 :       return false;
    8174             :     }
    8175           0 :     return true;
    8176             :   } else {
    8177           0 :     args.rval().setNull();
    8178           0 :     return true;
    8179             :   }
    8180             : }
    8181             : 
    8182             : static bool
    8183           0 : set_ondblclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    8184             : {
    8185           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8186           0 :   if (args[0].isObject()) {
    8187             :     { // scope for tempRoot
    8188           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8189           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8190             :     }
    8191             :   } else {
    8192           0 :     arg0 = nullptr;
    8193             :   }
    8194           0 :   self->SetOndblclick(Constify(arg0));
    8195           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8196             : 
    8197           0 :   return true;
    8198             : }
    8199             : 
    8200             : static const JSJitInfo ondblclick_getterinfo = {
    8201             :   { (JSJitGetterOp)get_ondblclick },
    8202             :   { prototypes::id::Window },
    8203             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8204             :   JSJitInfo::Getter,
    8205             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8206             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8207             :   false,  /* isInfallible. False in setters. */
    8208             :   false,  /* isMovable.  Not relevant for setters. */
    8209             :   false, /* isEliminatable.  Not relevant for setters. */
    8210             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8211             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8212             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8213             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8214             : };
    8215             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8216             : static_assert(0 < 5, "There is no slot for us");
    8217             : static const JSJitInfo ondblclick_setterinfo = {
    8218             :   { (JSJitGetterOp)set_ondblclick },
    8219             :   { prototypes::id::Window },
    8220             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8221             :   JSJitInfo::Setter,
    8222             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8223             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8224             :   false,  /* isInfallible. False in setters. */
    8225             :   false,  /* isMovable.  Not relevant for setters. */
    8226             :   false, /* isEliminatable.  Not relevant for setters. */
    8227             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8228             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8229             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8230             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8231             : };
    8232             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8233             : static_assert(0 < 5, "There is no slot for us");
    8234             : 
    8235             : static bool
    8236           0 : get_ondrag(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    8237             : {
    8238           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndrag());
    8239           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8240           0 :   if (result) {
    8241           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8242           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8243           0 :       return false;
    8244             :     }
    8245           0 :     return true;
    8246             :   } else {
    8247           0 :     args.rval().setNull();
    8248           0 :     return true;
    8249             :   }
    8250             : }
    8251             : 
    8252             : static bool
    8253           0 : set_ondrag(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    8254             : {
    8255           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8256           0 :   if (args[0].isObject()) {
    8257             :     { // scope for tempRoot
    8258           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8259           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8260             :     }
    8261             :   } else {
    8262           0 :     arg0 = nullptr;
    8263             :   }
    8264           0 :   self->SetOndrag(Constify(arg0));
    8265           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8266             : 
    8267           0 :   return true;
    8268             : }
    8269             : 
    8270             : static const JSJitInfo ondrag_getterinfo = {
    8271             :   { (JSJitGetterOp)get_ondrag },
    8272             :   { prototypes::id::Window },
    8273             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8274             :   JSJitInfo::Getter,
    8275             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8276             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8277             :   false,  /* isInfallible. False in setters. */
    8278             :   false,  /* isMovable.  Not relevant for setters. */
    8279             :   false, /* isEliminatable.  Not relevant for setters. */
    8280             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8281             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8282             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8283             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8284             : };
    8285             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8286             : static_assert(0 < 5, "There is no slot for us");
    8287             : static const JSJitInfo ondrag_setterinfo = {
    8288             :   { (JSJitGetterOp)set_ondrag },
    8289             :   { prototypes::id::Window },
    8290             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8291             :   JSJitInfo::Setter,
    8292             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8293             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8294             :   false,  /* isInfallible. False in setters. */
    8295             :   false,  /* isMovable.  Not relevant for setters. */
    8296             :   false, /* isEliminatable.  Not relevant for setters. */
    8297             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8298             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8299             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8300             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8301             : };
    8302             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8303             : static_assert(0 < 5, "There is no slot for us");
    8304             : 
    8305             : static bool
    8306           0 : get_ondragend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    8307             : {
    8308           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragend());
    8309           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8310           0 :   if (result) {
    8311           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8312           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8313           0 :       return false;
    8314             :     }
    8315           0 :     return true;
    8316             :   } else {
    8317           0 :     args.rval().setNull();
    8318           0 :     return true;
    8319             :   }
    8320             : }
    8321             : 
    8322             : static bool
    8323           0 : set_ondragend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    8324             : {
    8325           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8326           0 :   if (args[0].isObject()) {
    8327             :     { // scope for tempRoot
    8328           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8329           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8330             :     }
    8331             :   } else {
    8332           0 :     arg0 = nullptr;
    8333             :   }
    8334           0 :   self->SetOndragend(Constify(arg0));
    8335           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8336             : 
    8337           0 :   return true;
    8338             : }
    8339             : 
    8340             : static const JSJitInfo ondragend_getterinfo = {
    8341             :   { (JSJitGetterOp)get_ondragend },
    8342             :   { prototypes::id::Window },
    8343             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8344             :   JSJitInfo::Getter,
    8345             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8346             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8347             :   false,  /* isInfallible. False in setters. */
    8348             :   false,  /* isMovable.  Not relevant for setters. */
    8349             :   false, /* isEliminatable.  Not relevant for setters. */
    8350             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8351             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8352             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8353             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8354             : };
    8355             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8356             : static_assert(0 < 5, "There is no slot for us");
    8357             : static const JSJitInfo ondragend_setterinfo = {
    8358             :   { (JSJitGetterOp)set_ondragend },
    8359             :   { prototypes::id::Window },
    8360             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8361             :   JSJitInfo::Setter,
    8362             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8363             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8364             :   false,  /* isInfallible. False in setters. */
    8365             :   false,  /* isMovable.  Not relevant for setters. */
    8366             :   false, /* isEliminatable.  Not relevant for setters. */
    8367             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8368             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8369             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8370             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8371             : };
    8372             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8373             : static_assert(0 < 5, "There is no slot for us");
    8374             : 
    8375             : static bool
    8376           0 : get_ondragenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    8377             : {
    8378           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragenter());
    8379           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8380           0 :   if (result) {
    8381           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8382           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8383           0 :       return false;
    8384             :     }
    8385           0 :     return true;
    8386             :   } else {
    8387           0 :     args.rval().setNull();
    8388           0 :     return true;
    8389             :   }
    8390             : }
    8391             : 
    8392             : static bool
    8393           0 : set_ondragenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    8394             : {
    8395           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8396           0 :   if (args[0].isObject()) {
    8397             :     { // scope for tempRoot
    8398           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8399           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8400             :     }
    8401             :   } else {
    8402           0 :     arg0 = nullptr;
    8403             :   }
    8404           0 :   self->SetOndragenter(Constify(arg0));
    8405           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8406             : 
    8407           0 :   return true;
    8408             : }
    8409             : 
    8410             : static const JSJitInfo ondragenter_getterinfo = {
    8411             :   { (JSJitGetterOp)get_ondragenter },
    8412             :   { prototypes::id::Window },
    8413             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8414             :   JSJitInfo::Getter,
    8415             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8416             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8417             :   false,  /* isInfallible. False in setters. */
    8418             :   false,  /* isMovable.  Not relevant for setters. */
    8419             :   false, /* isEliminatable.  Not relevant for setters. */
    8420             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8421             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8422             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8423             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8424             : };
    8425             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8426             : static_assert(0 < 5, "There is no slot for us");
    8427             : static const JSJitInfo ondragenter_setterinfo = {
    8428             :   { (JSJitGetterOp)set_ondragenter },
    8429             :   { prototypes::id::Window },
    8430             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8431             :   JSJitInfo::Setter,
    8432             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8433             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8434             :   false,  /* isInfallible. False in setters. */
    8435             :   false,  /* isMovable.  Not relevant for setters. */
    8436             :   false, /* isEliminatable.  Not relevant for setters. */
    8437             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8438             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8439             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8440             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8441             : };
    8442             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8443             : static_assert(0 < 5, "There is no slot for us");
    8444             : 
    8445             : static bool
    8446           0 : get_ondragexit(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    8447             : {
    8448           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragexit());
    8449           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8450           0 :   if (result) {
    8451           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8452           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8453           0 :       return false;
    8454             :     }
    8455           0 :     return true;
    8456             :   } else {
    8457           0 :     args.rval().setNull();
    8458           0 :     return true;
    8459             :   }
    8460             : }
    8461             : 
    8462             : static bool
    8463           0 : set_ondragexit(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    8464             : {
    8465           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8466           0 :   if (args[0].isObject()) {
    8467             :     { // scope for tempRoot
    8468           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8469           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8470             :     }
    8471             :   } else {
    8472           0 :     arg0 = nullptr;
    8473             :   }
    8474           0 :   self->SetOndragexit(Constify(arg0));
    8475           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8476             : 
    8477           0 :   return true;
    8478             : }
    8479             : 
    8480             : static const JSJitInfo ondragexit_getterinfo = {
    8481             :   { (JSJitGetterOp)get_ondragexit },
    8482             :   { prototypes::id::Window },
    8483             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8484             :   JSJitInfo::Getter,
    8485             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8486             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8487             :   false,  /* isInfallible. False in setters. */
    8488             :   false,  /* isMovable.  Not relevant for setters. */
    8489             :   false, /* isEliminatable.  Not relevant for setters. */
    8490             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8491             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8492             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8493             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8494             : };
    8495             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8496             : static_assert(0 < 5, "There is no slot for us");
    8497             : static const JSJitInfo ondragexit_setterinfo = {
    8498             :   { (JSJitGetterOp)set_ondragexit },
    8499             :   { prototypes::id::Window },
    8500             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8501             :   JSJitInfo::Setter,
    8502             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8503             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8504             :   false,  /* isInfallible. False in setters. */
    8505             :   false,  /* isMovable.  Not relevant for setters. */
    8506             :   false, /* isEliminatable.  Not relevant for setters. */
    8507             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8508             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8509             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8510             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8511             : };
    8512             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8513             : static_assert(0 < 5, "There is no slot for us");
    8514             : 
    8515             : static bool
    8516           0 : get_ondragleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    8517             : {
    8518           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragleave());
    8519           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8520           0 :   if (result) {
    8521           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8522           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8523           0 :       return false;
    8524             :     }
    8525           0 :     return true;
    8526             :   } else {
    8527           0 :     args.rval().setNull();
    8528           0 :     return true;
    8529             :   }
    8530             : }
    8531             : 
    8532             : static bool
    8533           0 : set_ondragleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    8534             : {
    8535           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8536           0 :   if (args[0].isObject()) {
    8537             :     { // scope for tempRoot
    8538           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8539           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8540             :     }
    8541             :   } else {
    8542           0 :     arg0 = nullptr;
    8543             :   }
    8544           0 :   self->SetOndragleave(Constify(arg0));
    8545           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8546             : 
    8547           0 :   return true;
    8548             : }
    8549             : 
    8550             : static const JSJitInfo ondragleave_getterinfo = {
    8551             :   { (JSJitGetterOp)get_ondragleave },
    8552             :   { prototypes::id::Window },
    8553             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8554             :   JSJitInfo::Getter,
    8555             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8556             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8557             :   false,  /* isInfallible. False in setters. */
    8558             :   false,  /* isMovable.  Not relevant for setters. */
    8559             :   false, /* isEliminatable.  Not relevant for setters. */
    8560             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8561             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8562             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8563             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8564             : };
    8565             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8566             : static_assert(0 < 5, "There is no slot for us");
    8567             : static const JSJitInfo ondragleave_setterinfo = {
    8568             :   { (JSJitGetterOp)set_ondragleave },
    8569             :   { prototypes::id::Window },
    8570             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8571             :   JSJitInfo::Setter,
    8572             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8573             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8574             :   false,  /* isInfallible. False in setters. */
    8575             :   false,  /* isMovable.  Not relevant for setters. */
    8576             :   false, /* isEliminatable.  Not relevant for setters. */
    8577             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8578             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8579             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8580             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8581             : };
    8582             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8583             : static_assert(0 < 5, "There is no slot for us");
    8584             : 
    8585             : static bool
    8586           0 : get_ondragover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    8587             : {
    8588           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragover());
    8589           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8590           0 :   if (result) {
    8591           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8592           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8593           0 :       return false;
    8594             :     }
    8595           0 :     return true;
    8596             :   } else {
    8597           0 :     args.rval().setNull();
    8598           0 :     return true;
    8599             :   }
    8600             : }
    8601             : 
    8602             : static bool
    8603           0 : set_ondragover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    8604             : {
    8605           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8606           0 :   if (args[0].isObject()) {
    8607             :     { // scope for tempRoot
    8608           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8609           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8610             :     }
    8611             :   } else {
    8612           0 :     arg0 = nullptr;
    8613             :   }
    8614           0 :   self->SetOndragover(Constify(arg0));
    8615           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8616             : 
    8617           0 :   return true;
    8618             : }
    8619             : 
    8620             : static const JSJitInfo ondragover_getterinfo = {
    8621             :   { (JSJitGetterOp)get_ondragover },
    8622             :   { prototypes::id::Window },
    8623             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8624             :   JSJitInfo::Getter,
    8625             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8626             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8627             :   false,  /* isInfallible. False in setters. */
    8628             :   false,  /* isMovable.  Not relevant for setters. */
    8629             :   false, /* isEliminatable.  Not relevant for setters. */
    8630             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8631             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8632             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8633             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8634             : };
    8635             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8636             : static_assert(0 < 5, "There is no slot for us");
    8637             : static const JSJitInfo ondragover_setterinfo = {
    8638             :   { (JSJitGetterOp)set_ondragover },
    8639             :   { prototypes::id::Window },
    8640             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8641             :   JSJitInfo::Setter,
    8642             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8643             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8644             :   false,  /* isInfallible. False in setters. */
    8645             :   false,  /* isMovable.  Not relevant for setters. */
    8646             :   false, /* isEliminatable.  Not relevant for setters. */
    8647             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8648             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8649             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8650             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8651             : };
    8652             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8653             : static_assert(0 < 5, "There is no slot for us");
    8654             : 
    8655             : static bool
    8656           0 : get_ondragstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    8657             : {
    8658           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragstart());
    8659           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8660           0 :   if (result) {
    8661           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8662           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8663           0 :       return false;
    8664             :     }
    8665           0 :     return true;
    8666             :   } else {
    8667           0 :     args.rval().setNull();
    8668           0 :     return true;
    8669             :   }
    8670             : }
    8671             : 
    8672             : static bool
    8673           0 : set_ondragstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    8674             : {
    8675           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8676           0 :   if (args[0].isObject()) {
    8677             :     { // scope for tempRoot
    8678           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8679           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8680             :     }
    8681             :   } else {
    8682           0 :     arg0 = nullptr;
    8683             :   }
    8684           0 :   self->SetOndragstart(Constify(arg0));
    8685           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8686             : 
    8687           0 :   return true;
    8688             : }
    8689             : 
    8690             : static const JSJitInfo ondragstart_getterinfo = {
    8691             :   { (JSJitGetterOp)get_ondragstart },
    8692             :   { prototypes::id::Window },
    8693             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8694             :   JSJitInfo::Getter,
    8695             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8696             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8697             :   false,  /* isInfallible. False in setters. */
    8698             :   false,  /* isMovable.  Not relevant for setters. */
    8699             :   false, /* isEliminatable.  Not relevant for setters. */
    8700             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8701             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8702             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8703             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8704             : };
    8705             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8706             : static_assert(0 < 5, "There is no slot for us");
    8707             : static const JSJitInfo ondragstart_setterinfo = {
    8708             :   { (JSJitGetterOp)set_ondragstart },
    8709             :   { prototypes::id::Window },
    8710             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8711             :   JSJitInfo::Setter,
    8712             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8713             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8714             :   false,  /* isInfallible. False in setters. */
    8715             :   false,  /* isMovable.  Not relevant for setters. */
    8716             :   false, /* isEliminatable.  Not relevant for setters. */
    8717             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8718             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8719             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8720             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8721             : };
    8722             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8723             : static_assert(0 < 5, "There is no slot for us");
    8724             : 
    8725             : static bool
    8726           0 : get_ondrop(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    8727             : {
    8728           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndrop());
    8729           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8730           0 :   if (result) {
    8731           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8732           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8733           0 :       return false;
    8734             :     }
    8735           0 :     return true;
    8736             :   } else {
    8737           0 :     args.rval().setNull();
    8738           0 :     return true;
    8739             :   }
    8740             : }
    8741             : 
    8742             : static bool
    8743           0 : set_ondrop(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    8744             : {
    8745           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8746           0 :   if (args[0].isObject()) {
    8747             :     { // scope for tempRoot
    8748           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8749           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8750             :     }
    8751             :   } else {
    8752           0 :     arg0 = nullptr;
    8753             :   }
    8754           0 :   self->SetOndrop(Constify(arg0));
    8755           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8756             : 
    8757           0 :   return true;
    8758             : }
    8759             : 
    8760             : static const JSJitInfo ondrop_getterinfo = {
    8761             :   { (JSJitGetterOp)get_ondrop },
    8762             :   { prototypes::id::Window },
    8763             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8764             :   JSJitInfo::Getter,
    8765             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8766             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8767             :   false,  /* isInfallible. False in setters. */
    8768             :   false,  /* isMovable.  Not relevant for setters. */
    8769             :   false, /* isEliminatable.  Not relevant for setters. */
    8770             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8771             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8772             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8773             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8774             : };
    8775             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8776             : static_assert(0 < 5, "There is no slot for us");
    8777             : static const JSJitInfo ondrop_setterinfo = {
    8778             :   { (JSJitGetterOp)set_ondrop },
    8779             :   { prototypes::id::Window },
    8780             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8781             :   JSJitInfo::Setter,
    8782             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8783             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8784             :   false,  /* isInfallible. False in setters. */
    8785             :   false,  /* isMovable.  Not relevant for setters. */
    8786             :   false, /* isEliminatable.  Not relevant for setters. */
    8787             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8788             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8789             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8790             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8791             : };
    8792             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8793             : static_assert(0 < 5, "There is no slot for us");
    8794             : 
    8795             : static bool
    8796           0 : get_ondurationchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    8797             : {
    8798           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndurationchange());
    8799           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8800           0 :   if (result) {
    8801           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8802           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8803           0 :       return false;
    8804             :     }
    8805           0 :     return true;
    8806             :   } else {
    8807           0 :     args.rval().setNull();
    8808           0 :     return true;
    8809             :   }
    8810             : }
    8811             : 
    8812             : static bool
    8813           0 : set_ondurationchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    8814             : {
    8815           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8816           0 :   if (args[0].isObject()) {
    8817             :     { // scope for tempRoot
    8818           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8819           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8820             :     }
    8821             :   } else {
    8822           0 :     arg0 = nullptr;
    8823             :   }
    8824           0 :   self->SetOndurationchange(Constify(arg0));
    8825           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8826             : 
    8827           0 :   return true;
    8828             : }
    8829             : 
    8830             : static const JSJitInfo ondurationchange_getterinfo = {
    8831             :   { (JSJitGetterOp)get_ondurationchange },
    8832             :   { prototypes::id::Window },
    8833             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8834             :   JSJitInfo::Getter,
    8835             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8836             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8837             :   false,  /* isInfallible. False in setters. */
    8838             :   false,  /* isMovable.  Not relevant for setters. */
    8839             :   false, /* isEliminatable.  Not relevant for setters. */
    8840             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8841             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8842             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8843             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8844             : };
    8845             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8846             : static_assert(0 < 5, "There is no slot for us");
    8847             : static const JSJitInfo ondurationchange_setterinfo = {
    8848             :   { (JSJitGetterOp)set_ondurationchange },
    8849             :   { prototypes::id::Window },
    8850             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8851             :   JSJitInfo::Setter,
    8852             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8853             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8854             :   false,  /* isInfallible. False in setters. */
    8855             :   false,  /* isMovable.  Not relevant for setters. */
    8856             :   false, /* isEliminatable.  Not relevant for setters. */
    8857             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8858             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8859             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8860             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8861             : };
    8862             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8863             : static_assert(0 < 5, "There is no slot for us");
    8864             : 
    8865             : static bool
    8866           0 : get_onemptied(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    8867             : {
    8868           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnemptied());
    8869           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8870           0 :   if (result) {
    8871           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8872           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8873           0 :       return false;
    8874             :     }
    8875           0 :     return true;
    8876             :   } else {
    8877           0 :     args.rval().setNull();
    8878           0 :     return true;
    8879             :   }
    8880             : }
    8881             : 
    8882             : static bool
    8883           0 : set_onemptied(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    8884             : {
    8885           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8886           0 :   if (args[0].isObject()) {
    8887             :     { // scope for tempRoot
    8888           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8889           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8890             :     }
    8891             :   } else {
    8892           0 :     arg0 = nullptr;
    8893             :   }
    8894           0 :   self->SetOnemptied(Constify(arg0));
    8895           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8896             : 
    8897           0 :   return true;
    8898             : }
    8899             : 
    8900             : static const JSJitInfo onemptied_getterinfo = {
    8901             :   { (JSJitGetterOp)get_onemptied },
    8902             :   { prototypes::id::Window },
    8903             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8904             :   JSJitInfo::Getter,
    8905             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8906             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8907             :   false,  /* isInfallible. False in setters. */
    8908             :   false,  /* isMovable.  Not relevant for setters. */
    8909             :   false, /* isEliminatable.  Not relevant for setters. */
    8910             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8911             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8912             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8913             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8914             : };
    8915             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8916             : static_assert(0 < 5, "There is no slot for us");
    8917             : static const JSJitInfo onemptied_setterinfo = {
    8918             :   { (JSJitGetterOp)set_onemptied },
    8919             :   { prototypes::id::Window },
    8920             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8921             :   JSJitInfo::Setter,
    8922             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8923             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8924             :   false,  /* isInfallible. False in setters. */
    8925             :   false,  /* isMovable.  Not relevant for setters. */
    8926             :   false, /* isEliminatable.  Not relevant for setters. */
    8927             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8928             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8929             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8930             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8931             : };
    8932             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8933             : static_assert(0 < 5, "There is no slot for us");
    8934             : 
    8935             : static bool
    8936           0 : get_onended(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    8937             : {
    8938           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnended());
    8939           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8940           0 :   if (result) {
    8941           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8942           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8943           0 :       return false;
    8944             :     }
    8945           0 :     return true;
    8946             :   } else {
    8947           0 :     args.rval().setNull();
    8948           0 :     return true;
    8949             :   }
    8950             : }
    8951             : 
    8952             : static bool
    8953           0 : set_onended(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    8954             : {
    8955           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8956           0 :   if (args[0].isObject()) {
    8957             :     { // scope for tempRoot
    8958           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8959           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8960             :     }
    8961             :   } else {
    8962           0 :     arg0 = nullptr;
    8963             :   }
    8964           0 :   self->SetOnended(Constify(arg0));
    8965           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8966             : 
    8967           0 :   return true;
    8968             : }
    8969             : 
    8970             : static const JSJitInfo onended_getterinfo = {
    8971             :   { (JSJitGetterOp)get_onended },
    8972             :   { prototypes::id::Window },
    8973             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8974             :   JSJitInfo::Getter,
    8975             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8976             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8977             :   false,  /* isInfallible. False in setters. */
    8978             :   false,  /* isMovable.  Not relevant for setters. */
    8979             :   false, /* isEliminatable.  Not relevant for setters. */
    8980             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8981             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8982             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8983             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8984             : };
    8985             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8986             : static_assert(0 < 5, "There is no slot for us");
    8987             : static const JSJitInfo onended_setterinfo = {
    8988             :   { (JSJitGetterOp)set_onended },
    8989             :   { prototypes::id::Window },
    8990             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    8991             :   JSJitInfo::Setter,
    8992             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8993             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8994             :   false,  /* isInfallible. False in setters. */
    8995             :   false,  /* isMovable.  Not relevant for setters. */
    8996             :   false, /* isEliminatable.  Not relevant for setters. */
    8997             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8998             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8999             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9000             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9001             : };
    9002             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9003             : static_assert(0 < 5, "There is no slot for us");
    9004             : 
    9005             : static bool
    9006           0 : get_oninput(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9007             : {
    9008           0 :   RefPtr<EventHandlerNonNull> result(self->GetOninput());
    9009           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9010           0 :   if (result) {
    9011           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9012           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9013           0 :       return false;
    9014             :     }
    9015           0 :     return true;
    9016             :   } else {
    9017           0 :     args.rval().setNull();
    9018           0 :     return true;
    9019             :   }
    9020             : }
    9021             : 
    9022             : static bool
    9023           0 : set_oninput(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    9024             : {
    9025           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9026           0 :   if (args[0].isObject()) {
    9027             :     { // scope for tempRoot
    9028           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9029           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9030             :     }
    9031             :   } else {
    9032           0 :     arg0 = nullptr;
    9033             :   }
    9034           0 :   self->SetOninput(Constify(arg0));
    9035           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9036             : 
    9037           0 :   return true;
    9038             : }
    9039             : 
    9040             : static const JSJitInfo oninput_getterinfo = {
    9041             :   { (JSJitGetterOp)get_oninput },
    9042             :   { prototypes::id::Window },
    9043             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9044             :   JSJitInfo::Getter,
    9045             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9046             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9047             :   false,  /* isInfallible. False in setters. */
    9048             :   false,  /* isMovable.  Not relevant for setters. */
    9049             :   false, /* isEliminatable.  Not relevant for setters. */
    9050             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9051             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9052             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9053             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9054             : };
    9055             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9056             : static_assert(0 < 5, "There is no slot for us");
    9057             : static const JSJitInfo oninput_setterinfo = {
    9058             :   { (JSJitGetterOp)set_oninput },
    9059             :   { prototypes::id::Window },
    9060             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9061             :   JSJitInfo::Setter,
    9062             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9063             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9064             :   false,  /* isInfallible. False in setters. */
    9065             :   false,  /* isMovable.  Not relevant for setters. */
    9066             :   false, /* isEliminatable.  Not relevant for setters. */
    9067             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9068             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9069             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9070             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9071             : };
    9072             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9073             : static_assert(0 < 5, "There is no slot for us");
    9074             : 
    9075             : static bool
    9076           0 : get_oninvalid(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9077             : {
    9078           0 :   RefPtr<EventHandlerNonNull> result(self->GetOninvalid());
    9079           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9080           0 :   if (result) {
    9081           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9082           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9083           0 :       return false;
    9084             :     }
    9085           0 :     return true;
    9086             :   } else {
    9087           0 :     args.rval().setNull();
    9088           0 :     return true;
    9089             :   }
    9090             : }
    9091             : 
    9092             : static bool
    9093           0 : set_oninvalid(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    9094             : {
    9095           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9096           0 :   if (args[0].isObject()) {
    9097             :     { // scope for tempRoot
    9098           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9099           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9100             :     }
    9101             :   } else {
    9102           0 :     arg0 = nullptr;
    9103             :   }
    9104           0 :   self->SetOninvalid(Constify(arg0));
    9105           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9106             : 
    9107           0 :   return true;
    9108             : }
    9109             : 
    9110             : static const JSJitInfo oninvalid_getterinfo = {
    9111             :   { (JSJitGetterOp)get_oninvalid },
    9112             :   { prototypes::id::Window },
    9113             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9114             :   JSJitInfo::Getter,
    9115             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9116             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9117             :   false,  /* isInfallible. False in setters. */
    9118             :   false,  /* isMovable.  Not relevant for setters. */
    9119             :   false, /* isEliminatable.  Not relevant for setters. */
    9120             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9121             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9122             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9123             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9124             : };
    9125             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9126             : static_assert(0 < 5, "There is no slot for us");
    9127             : static const JSJitInfo oninvalid_setterinfo = {
    9128             :   { (JSJitGetterOp)set_oninvalid },
    9129             :   { prototypes::id::Window },
    9130             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9131             :   JSJitInfo::Setter,
    9132             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9133             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9134             :   false,  /* isInfallible. False in setters. */
    9135             :   false,  /* isMovable.  Not relevant for setters. */
    9136             :   false, /* isEliminatable.  Not relevant for setters. */
    9137             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9138             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9139             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9140             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9141             : };
    9142             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9143             : static_assert(0 < 5, "There is no slot for us");
    9144             : 
    9145             : static bool
    9146           0 : get_onkeydown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9147             : {
    9148           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnkeydown());
    9149           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9150           0 :   if (result) {
    9151           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9152           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9153           0 :       return false;
    9154             :     }
    9155           0 :     return true;
    9156             :   } else {
    9157           0 :     args.rval().setNull();
    9158           0 :     return true;
    9159             :   }
    9160             : }
    9161             : 
    9162             : static bool
    9163           0 : set_onkeydown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    9164             : {
    9165           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9166           0 :   if (args[0].isObject()) {
    9167             :     { // scope for tempRoot
    9168           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9169           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9170             :     }
    9171             :   } else {
    9172           0 :     arg0 = nullptr;
    9173             :   }
    9174           0 :   self->SetOnkeydown(Constify(arg0));
    9175           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9176             : 
    9177           0 :   return true;
    9178             : }
    9179             : 
    9180             : static const JSJitInfo onkeydown_getterinfo = {
    9181             :   { (JSJitGetterOp)get_onkeydown },
    9182             :   { prototypes::id::Window },
    9183             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9184             :   JSJitInfo::Getter,
    9185             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9186             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9187             :   false,  /* isInfallible. False in setters. */
    9188             :   false,  /* isMovable.  Not relevant for setters. */
    9189             :   false, /* isEliminatable.  Not relevant for setters. */
    9190             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9191             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9192             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9193             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9194             : };
    9195             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9196             : static_assert(0 < 5, "There is no slot for us");
    9197             : static const JSJitInfo onkeydown_setterinfo = {
    9198             :   { (JSJitGetterOp)set_onkeydown },
    9199             :   { prototypes::id::Window },
    9200             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9201             :   JSJitInfo::Setter,
    9202             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9203             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9204             :   false,  /* isInfallible. False in setters. */
    9205             :   false,  /* isMovable.  Not relevant for setters. */
    9206             :   false, /* isEliminatable.  Not relevant for setters. */
    9207             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9208             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9209             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9210             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9211             : };
    9212             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9213             : static_assert(0 < 5, "There is no slot for us");
    9214             : 
    9215             : static bool
    9216           0 : get_onkeypress(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9217             : {
    9218           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnkeypress());
    9219           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9220           0 :   if (result) {
    9221           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9222           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9223           0 :       return false;
    9224             :     }
    9225           0 :     return true;
    9226             :   } else {
    9227           0 :     args.rval().setNull();
    9228           0 :     return true;
    9229             :   }
    9230             : }
    9231             : 
    9232             : static bool
    9233           0 : set_onkeypress(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    9234             : {
    9235           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9236           0 :   if (args[0].isObject()) {
    9237             :     { // scope for tempRoot
    9238           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9239           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9240             :     }
    9241             :   } else {
    9242           0 :     arg0 = nullptr;
    9243             :   }
    9244           0 :   self->SetOnkeypress(Constify(arg0));
    9245           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9246             : 
    9247           0 :   return true;
    9248             : }
    9249             : 
    9250             : static const JSJitInfo onkeypress_getterinfo = {
    9251             :   { (JSJitGetterOp)get_onkeypress },
    9252             :   { prototypes::id::Window },
    9253             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9254             :   JSJitInfo::Getter,
    9255             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9256             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9257             :   false,  /* isInfallible. False in setters. */
    9258             :   false,  /* isMovable.  Not relevant for setters. */
    9259             :   false, /* isEliminatable.  Not relevant for setters. */
    9260             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9261             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9262             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9263             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9264             : };
    9265             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9266             : static_assert(0 < 5, "There is no slot for us");
    9267             : static const JSJitInfo onkeypress_setterinfo = {
    9268             :   { (JSJitGetterOp)set_onkeypress },
    9269             :   { prototypes::id::Window },
    9270             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9271             :   JSJitInfo::Setter,
    9272             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9273             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9274             :   false,  /* isInfallible. False in setters. */
    9275             :   false,  /* isMovable.  Not relevant for setters. */
    9276             :   false, /* isEliminatable.  Not relevant for setters. */
    9277             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9278             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9279             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9280             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9281             : };
    9282             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9283             : static_assert(0 < 5, "There is no slot for us");
    9284             : 
    9285             : static bool
    9286           0 : get_onkeyup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9287             : {
    9288           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnkeyup());
    9289           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9290           0 :   if (result) {
    9291           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9292           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9293           0 :       return false;
    9294             :     }
    9295           0 :     return true;
    9296             :   } else {
    9297           0 :     args.rval().setNull();
    9298           0 :     return true;
    9299             :   }
    9300             : }
    9301             : 
    9302             : static bool
    9303           0 : set_onkeyup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    9304             : {
    9305           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9306           0 :   if (args[0].isObject()) {
    9307             :     { // scope for tempRoot
    9308           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9309           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9310             :     }
    9311             :   } else {
    9312           0 :     arg0 = nullptr;
    9313             :   }
    9314           0 :   self->SetOnkeyup(Constify(arg0));
    9315           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9316             : 
    9317           0 :   return true;
    9318             : }
    9319             : 
    9320             : static const JSJitInfo onkeyup_getterinfo = {
    9321             :   { (JSJitGetterOp)get_onkeyup },
    9322             :   { prototypes::id::Window },
    9323             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9324             :   JSJitInfo::Getter,
    9325             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9326             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9327             :   false,  /* isInfallible. False in setters. */
    9328             :   false,  /* isMovable.  Not relevant for setters. */
    9329             :   false, /* isEliminatable.  Not relevant for setters. */
    9330             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9331             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9332             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9333             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9334             : };
    9335             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9336             : static_assert(0 < 5, "There is no slot for us");
    9337             : static const JSJitInfo onkeyup_setterinfo = {
    9338             :   { (JSJitGetterOp)set_onkeyup },
    9339             :   { prototypes::id::Window },
    9340             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9341             :   JSJitInfo::Setter,
    9342             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9343             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9344             :   false,  /* isInfallible. False in setters. */
    9345             :   false,  /* isMovable.  Not relevant for setters. */
    9346             :   false, /* isEliminatable.  Not relevant for setters. */
    9347             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9348             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9349             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9350             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9351             : };
    9352             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9353             : static_assert(0 < 5, "There is no slot for us");
    9354             : 
    9355             : static bool
    9356           0 : get_onload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9357             : {
    9358           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnload());
    9359           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9360           0 :   if (result) {
    9361           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9362           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9363           0 :       return false;
    9364             :     }
    9365           0 :     return true;
    9366             :   } else {
    9367           0 :     args.rval().setNull();
    9368           0 :     return true;
    9369             :   }
    9370             : }
    9371             : 
    9372             : static bool
    9373           0 : set_onload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    9374             : {
    9375           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9376           0 :   if (args[0].isObject()) {
    9377             :     { // scope for tempRoot
    9378           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9379           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9380             :     }
    9381             :   } else {
    9382           0 :     arg0 = nullptr;
    9383             :   }
    9384           0 :   self->SetOnload(Constify(arg0));
    9385           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9386             : 
    9387           0 :   return true;
    9388             : }
    9389             : 
    9390             : static const JSJitInfo onload_getterinfo = {
    9391             :   { (JSJitGetterOp)get_onload },
    9392             :   { prototypes::id::Window },
    9393             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9394             :   JSJitInfo::Getter,
    9395             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9396             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9397             :   false,  /* isInfallible. False in setters. */
    9398             :   false,  /* isMovable.  Not relevant for setters. */
    9399             :   false, /* isEliminatable.  Not relevant for setters. */
    9400             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9401             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9402             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9403             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9404             : };
    9405             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9406             : static_assert(0 < 5, "There is no slot for us");
    9407             : static const JSJitInfo onload_setterinfo = {
    9408             :   { (JSJitGetterOp)set_onload },
    9409             :   { prototypes::id::Window },
    9410             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9411             :   JSJitInfo::Setter,
    9412             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9413             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9414             :   false,  /* isInfallible. False in setters. */
    9415             :   false,  /* isMovable.  Not relevant for setters. */
    9416             :   false, /* isEliminatable.  Not relevant for setters. */
    9417             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9418             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9419             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9420             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9421             : };
    9422             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9423             : static_assert(0 < 5, "There is no slot for us");
    9424             : 
    9425             : static bool
    9426           0 : get_onloadeddata(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9427             : {
    9428           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadeddata());
    9429           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9430           0 :   if (result) {
    9431           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9432           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9433           0 :       return false;
    9434             :     }
    9435           0 :     return true;
    9436             :   } else {
    9437           0 :     args.rval().setNull();
    9438           0 :     return true;
    9439             :   }
    9440             : }
    9441             : 
    9442             : static bool
    9443           0 : set_onloadeddata(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    9444             : {
    9445           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9446           0 :   if (args[0].isObject()) {
    9447             :     { // scope for tempRoot
    9448           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9449           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9450             :     }
    9451             :   } else {
    9452           0 :     arg0 = nullptr;
    9453             :   }
    9454           0 :   self->SetOnloadeddata(Constify(arg0));
    9455           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9456             : 
    9457           0 :   return true;
    9458             : }
    9459             : 
    9460             : static const JSJitInfo onloadeddata_getterinfo = {
    9461             :   { (JSJitGetterOp)get_onloadeddata },
    9462             :   { prototypes::id::Window },
    9463             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9464             :   JSJitInfo::Getter,
    9465             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9466             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9467             :   false,  /* isInfallible. False in setters. */
    9468             :   false,  /* isMovable.  Not relevant for setters. */
    9469             :   false, /* isEliminatable.  Not relevant for setters. */
    9470             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9471             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9472             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9473             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9474             : };
    9475             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9476             : static_assert(0 < 5, "There is no slot for us");
    9477             : static const JSJitInfo onloadeddata_setterinfo = {
    9478             :   { (JSJitGetterOp)set_onloadeddata },
    9479             :   { prototypes::id::Window },
    9480             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9481             :   JSJitInfo::Setter,
    9482             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9483             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9484             :   false,  /* isInfallible. False in setters. */
    9485             :   false,  /* isMovable.  Not relevant for setters. */
    9486             :   false, /* isEliminatable.  Not relevant for setters. */
    9487             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9488             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9489             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9490             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9491             : };
    9492             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9493             : static_assert(0 < 5, "There is no slot for us");
    9494             : 
    9495             : static bool
    9496           0 : get_onloadedmetadata(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9497             : {
    9498           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadedmetadata());
    9499           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9500           0 :   if (result) {
    9501           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9502           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9503           0 :       return false;
    9504             :     }
    9505           0 :     return true;
    9506             :   } else {
    9507           0 :     args.rval().setNull();
    9508           0 :     return true;
    9509             :   }
    9510             : }
    9511             : 
    9512             : static bool
    9513           0 : set_onloadedmetadata(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    9514             : {
    9515           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9516           0 :   if (args[0].isObject()) {
    9517             :     { // scope for tempRoot
    9518           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9519           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9520             :     }
    9521             :   } else {
    9522           0 :     arg0 = nullptr;
    9523             :   }
    9524           0 :   self->SetOnloadedmetadata(Constify(arg0));
    9525           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9526             : 
    9527           0 :   return true;
    9528             : }
    9529             : 
    9530             : static const JSJitInfo onloadedmetadata_getterinfo = {
    9531             :   { (JSJitGetterOp)get_onloadedmetadata },
    9532             :   { prototypes::id::Window },
    9533             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9534             :   JSJitInfo::Getter,
    9535             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9536             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9537             :   false,  /* isInfallible. False in setters. */
    9538             :   false,  /* isMovable.  Not relevant for setters. */
    9539             :   false, /* isEliminatable.  Not relevant for setters. */
    9540             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9541             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9542             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9543             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9544             : };
    9545             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9546             : static_assert(0 < 5, "There is no slot for us");
    9547             : static const JSJitInfo onloadedmetadata_setterinfo = {
    9548             :   { (JSJitGetterOp)set_onloadedmetadata },
    9549             :   { prototypes::id::Window },
    9550             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9551             :   JSJitInfo::Setter,
    9552             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9553             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9554             :   false,  /* isInfallible. False in setters. */
    9555             :   false,  /* isMovable.  Not relevant for setters. */
    9556             :   false, /* isEliminatable.  Not relevant for setters. */
    9557             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9558             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9559             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9560             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9561             : };
    9562             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9563             : static_assert(0 < 5, "There is no slot for us");
    9564             : 
    9565             : static bool
    9566           0 : get_onloadend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9567             : {
    9568           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadend());
    9569           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9570           0 :   if (result) {
    9571           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9572           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9573           0 :       return false;
    9574             :     }
    9575           0 :     return true;
    9576             :   } else {
    9577           0 :     args.rval().setNull();
    9578           0 :     return true;
    9579             :   }
    9580             : }
    9581             : 
    9582             : static bool
    9583           0 : set_onloadend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    9584             : {
    9585           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9586           0 :   if (args[0].isObject()) {
    9587             :     { // scope for tempRoot
    9588           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9589           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9590             :     }
    9591             :   } else {
    9592           0 :     arg0 = nullptr;
    9593             :   }
    9594           0 :   self->SetOnloadend(Constify(arg0));
    9595           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9596             : 
    9597           0 :   return true;
    9598             : }
    9599             : 
    9600             : static const JSJitInfo onloadend_getterinfo = {
    9601             :   { (JSJitGetterOp)get_onloadend },
    9602             :   { prototypes::id::Window },
    9603             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9604             :   JSJitInfo::Getter,
    9605             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9606             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9607             :   false,  /* isInfallible. False in setters. */
    9608             :   false,  /* isMovable.  Not relevant for setters. */
    9609             :   false, /* isEliminatable.  Not relevant for setters. */
    9610             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9611             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9612             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9613             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9614             : };
    9615             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9616             : static_assert(0 < 5, "There is no slot for us");
    9617             : static const JSJitInfo onloadend_setterinfo = {
    9618             :   { (JSJitGetterOp)set_onloadend },
    9619             :   { prototypes::id::Window },
    9620             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9621             :   JSJitInfo::Setter,
    9622             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9623             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9624             :   false,  /* isInfallible. False in setters. */
    9625             :   false,  /* isMovable.  Not relevant for setters. */
    9626             :   false, /* isEliminatable.  Not relevant for setters. */
    9627             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9628             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9629             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9630             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9631             : };
    9632             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9633             : static_assert(0 < 5, "There is no slot for us");
    9634             : 
    9635             : static bool
    9636           0 : get_onloadstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9637             : {
    9638           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadstart());
    9639           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9640           0 :   if (result) {
    9641           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9642           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9643           0 :       return false;
    9644             :     }
    9645           0 :     return true;
    9646             :   } else {
    9647           0 :     args.rval().setNull();
    9648           0 :     return true;
    9649             :   }
    9650             : }
    9651             : 
    9652             : static bool
    9653           0 : set_onloadstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    9654             : {
    9655           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9656           0 :   if (args[0].isObject()) {
    9657             :     { // scope for tempRoot
    9658           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9659           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9660             :     }
    9661             :   } else {
    9662           0 :     arg0 = nullptr;
    9663             :   }
    9664           0 :   self->SetOnloadstart(Constify(arg0));
    9665           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9666             : 
    9667           0 :   return true;
    9668             : }
    9669             : 
    9670             : static const JSJitInfo onloadstart_getterinfo = {
    9671             :   { (JSJitGetterOp)get_onloadstart },
    9672             :   { prototypes::id::Window },
    9673             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9674             :   JSJitInfo::Getter,
    9675             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9676             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9677             :   false,  /* isInfallible. False in setters. */
    9678             :   false,  /* isMovable.  Not relevant for setters. */
    9679             :   false, /* isEliminatable.  Not relevant for setters. */
    9680             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9681             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9682             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9683             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9684             : };
    9685             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9686             : static_assert(0 < 5, "There is no slot for us");
    9687             : static const JSJitInfo onloadstart_setterinfo = {
    9688             :   { (JSJitGetterOp)set_onloadstart },
    9689             :   { prototypes::id::Window },
    9690             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9691             :   JSJitInfo::Setter,
    9692             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9693             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9694             :   false,  /* isInfallible. False in setters. */
    9695             :   false,  /* isMovable.  Not relevant for setters. */
    9696             :   false, /* isEliminatable.  Not relevant for setters. */
    9697             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9698             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9699             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9700             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9701             : };
    9702             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9703             : static_assert(0 < 5, "There is no slot for us");
    9704             : 
    9705             : static bool
    9706           0 : get_onmousedown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9707             : {
    9708           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmousedown());
    9709           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9710           0 :   if (result) {
    9711           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9712           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9713           0 :       return false;
    9714             :     }
    9715           0 :     return true;
    9716             :   } else {
    9717           0 :     args.rval().setNull();
    9718           0 :     return true;
    9719             :   }
    9720             : }
    9721             : 
    9722             : static bool
    9723           0 : set_onmousedown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    9724             : {
    9725           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9726           0 :   if (args[0].isObject()) {
    9727             :     { // scope for tempRoot
    9728           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9729           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9730             :     }
    9731             :   } else {
    9732           0 :     arg0 = nullptr;
    9733             :   }
    9734           0 :   self->SetOnmousedown(Constify(arg0));
    9735           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9736             : 
    9737           0 :   return true;
    9738             : }
    9739             : 
    9740             : static const JSJitInfo onmousedown_getterinfo = {
    9741             :   { (JSJitGetterOp)get_onmousedown },
    9742             :   { prototypes::id::Window },
    9743             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9744             :   JSJitInfo::Getter,
    9745             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9746             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9747             :   false,  /* isInfallible. False in setters. */
    9748             :   false,  /* isMovable.  Not relevant for setters. */
    9749             :   false, /* isEliminatable.  Not relevant for setters. */
    9750             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9751             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9752             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9753             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9754             : };
    9755             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9756             : static_assert(0 < 5, "There is no slot for us");
    9757             : static const JSJitInfo onmousedown_setterinfo = {
    9758             :   { (JSJitGetterOp)set_onmousedown },
    9759             :   { prototypes::id::Window },
    9760             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9761             :   JSJitInfo::Setter,
    9762             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9763             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9764             :   false,  /* isInfallible. False in setters. */
    9765             :   false,  /* isMovable.  Not relevant for setters. */
    9766             :   false, /* isEliminatable.  Not relevant for setters. */
    9767             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9768             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9769             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9770             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9771             : };
    9772             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9773             : static_assert(0 < 5, "There is no slot for us");
    9774             : 
    9775             : static bool
    9776           0 : get_onmouseenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9777             : {
    9778           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseenter());
    9779           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9780           0 :   if (result) {
    9781           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9782           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9783           0 :       return false;
    9784             :     }
    9785           0 :     return true;
    9786             :   } else {
    9787           0 :     args.rval().setNull();
    9788           0 :     return true;
    9789             :   }
    9790             : }
    9791             : 
    9792             : static bool
    9793           0 : set_onmouseenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    9794             : {
    9795           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9796           0 :   if (args[0].isObject()) {
    9797             :     { // scope for tempRoot
    9798           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9799           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9800             :     }
    9801             :   } else {
    9802           0 :     arg0 = nullptr;
    9803             :   }
    9804           0 :   self->SetOnmouseenter(Constify(arg0));
    9805           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9806             : 
    9807           0 :   return true;
    9808             : }
    9809             : 
    9810             : static const JSJitInfo onmouseenter_getterinfo = {
    9811             :   { (JSJitGetterOp)get_onmouseenter },
    9812             :   { prototypes::id::Window },
    9813             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9814             :   JSJitInfo::Getter,
    9815             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9816             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9817             :   false,  /* isInfallible. False in setters. */
    9818             :   false,  /* isMovable.  Not relevant for setters. */
    9819             :   false, /* isEliminatable.  Not relevant for setters. */
    9820             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9821             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9822             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9823             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9824             : };
    9825             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9826             : static_assert(0 < 5, "There is no slot for us");
    9827             : static const JSJitInfo onmouseenter_setterinfo = {
    9828             :   { (JSJitGetterOp)set_onmouseenter },
    9829             :   { prototypes::id::Window },
    9830             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9831             :   JSJitInfo::Setter,
    9832             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9833             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9834             :   false,  /* isInfallible. False in setters. */
    9835             :   false,  /* isMovable.  Not relevant for setters. */
    9836             :   false, /* isEliminatable.  Not relevant for setters. */
    9837             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9838             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9839             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9840             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9841             : };
    9842             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9843             : static_assert(0 < 5, "There is no slot for us");
    9844             : 
    9845             : static bool
    9846           0 : get_onmouseleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9847             : {
    9848           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseleave());
    9849           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9850           0 :   if (result) {
    9851           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9852           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9853           0 :       return false;
    9854             :     }
    9855           0 :     return true;
    9856             :   } else {
    9857           0 :     args.rval().setNull();
    9858           0 :     return true;
    9859             :   }
    9860             : }
    9861             : 
    9862             : static bool
    9863           0 : set_onmouseleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    9864             : {
    9865           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9866           0 :   if (args[0].isObject()) {
    9867             :     { // scope for tempRoot
    9868           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9869           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9870             :     }
    9871             :   } else {
    9872           0 :     arg0 = nullptr;
    9873             :   }
    9874           0 :   self->SetOnmouseleave(Constify(arg0));
    9875           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9876             : 
    9877           0 :   return true;
    9878             : }
    9879             : 
    9880             : static const JSJitInfo onmouseleave_getterinfo = {
    9881             :   { (JSJitGetterOp)get_onmouseleave },
    9882             :   { prototypes::id::Window },
    9883             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9884             :   JSJitInfo::Getter,
    9885             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9886             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9887             :   false,  /* isInfallible. False in setters. */
    9888             :   false,  /* isMovable.  Not relevant for setters. */
    9889             :   false, /* isEliminatable.  Not relevant for setters. */
    9890             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9891             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9892             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9893             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9894             : };
    9895             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9896             : static_assert(0 < 5, "There is no slot for us");
    9897             : static const JSJitInfo onmouseleave_setterinfo = {
    9898             :   { (JSJitGetterOp)set_onmouseleave },
    9899             :   { prototypes::id::Window },
    9900             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9901             :   JSJitInfo::Setter,
    9902             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9903             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9904             :   false,  /* isInfallible. False in setters. */
    9905             :   false,  /* isMovable.  Not relevant for setters. */
    9906             :   false, /* isEliminatable.  Not relevant for setters. */
    9907             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9908             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9909             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9910             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9911             : };
    9912             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9913             : static_assert(0 < 5, "There is no slot for us");
    9914             : 
    9915             : static bool
    9916           0 : get_onmousemove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9917             : {
    9918           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmousemove());
    9919           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9920           0 :   if (result) {
    9921           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9922           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9923           0 :       return false;
    9924             :     }
    9925           0 :     return true;
    9926             :   } else {
    9927           0 :     args.rval().setNull();
    9928           0 :     return true;
    9929             :   }
    9930             : }
    9931             : 
    9932             : static bool
    9933           0 : set_onmousemove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
    9934             : {
    9935           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    9936           0 :   if (args[0].isObject()) {
    9937             :     { // scope for tempRoot
    9938           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    9939           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    9940             :     }
    9941             :   } else {
    9942           0 :     arg0 = nullptr;
    9943             :   }
    9944           0 :   self->SetOnmousemove(Constify(arg0));
    9945           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9946             : 
    9947           0 :   return true;
    9948             : }
    9949             : 
    9950             : static const JSJitInfo onmousemove_getterinfo = {
    9951             :   { (JSJitGetterOp)get_onmousemove },
    9952             :   { prototypes::id::Window },
    9953             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9954             :   JSJitInfo::Getter,
    9955             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9956             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9957             :   false,  /* isInfallible. False in setters. */
    9958             :   false,  /* isMovable.  Not relevant for setters. */
    9959             :   false, /* isEliminatable.  Not relevant for setters. */
    9960             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9961             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9962             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9963             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9964             : };
    9965             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9966             : static_assert(0 < 5, "There is no slot for us");
    9967             : static const JSJitInfo onmousemove_setterinfo = {
    9968             :   { (JSJitGetterOp)set_onmousemove },
    9969             :   { prototypes::id::Window },
    9970             :   { PrototypeTraits<prototypes::id::Window>::Depth },
    9971             :   JSJitInfo::Setter,
    9972             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9973             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9974             :   false,  /* isInfallible. False in setters. */
    9975             :   false,  /* isMovable.  Not relevant for setters. */
    9976             :   false, /* isEliminatable.  Not relevant for setters. */
    9977             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9978             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9979             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9980             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9981             : };
    9982             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9983             : static_assert(0 < 5, "There is no slot for us");
    9984             : 
    9985             : static bool
    9986           0 : get_onmouseout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
    9987             : {
    9988           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseout());
    9989           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9990           0 :   if (result) {
    9991           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    9992           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    9993           0 :       return false;
    9994             :     }
    9995           0 :     return true;
    9996             :   } else {
    9997           0 :     args.rval().setNull();
    9998           0 :     return true;
    9999             :   }
   10000             : }
   10001             : 
   10002             : static bool
   10003           0 : set_onmouseout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10004             : {
   10005           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10006           0 :   if (args[0].isObject()) {
   10007             :     { // scope for tempRoot
   10008           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10009           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10010             :     }
   10011             :   } else {
   10012           0 :     arg0 = nullptr;
   10013             :   }
   10014           0 :   self->SetOnmouseout(Constify(arg0));
   10015           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10016             : 
   10017           0 :   return true;
   10018             : }
   10019             : 
   10020             : static const JSJitInfo onmouseout_getterinfo = {
   10021             :   { (JSJitGetterOp)get_onmouseout },
   10022             :   { prototypes::id::Window },
   10023             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10024             :   JSJitInfo::Getter,
   10025             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10026             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10027             :   false,  /* isInfallible. False in setters. */
   10028             :   false,  /* isMovable.  Not relevant for setters. */
   10029             :   false, /* isEliminatable.  Not relevant for setters. */
   10030             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10031             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10032             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10033             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10034             : };
   10035             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10036             : static_assert(0 < 5, "There is no slot for us");
   10037             : static const JSJitInfo onmouseout_setterinfo = {
   10038             :   { (JSJitGetterOp)set_onmouseout },
   10039             :   { prototypes::id::Window },
   10040             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10041             :   JSJitInfo::Setter,
   10042             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10043             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10044             :   false,  /* isInfallible. False in setters. */
   10045             :   false,  /* isMovable.  Not relevant for setters. */
   10046             :   false, /* isEliminatable.  Not relevant for setters. */
   10047             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10048             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10049             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10050             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10051             : };
   10052             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10053             : static_assert(0 < 5, "There is no slot for us");
   10054             : 
   10055             : static bool
   10056           0 : get_onmouseover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   10057             : {
   10058           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseover());
   10059           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10060           0 :   if (result) {
   10061           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10062           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10063           0 :       return false;
   10064             :     }
   10065           0 :     return true;
   10066             :   } else {
   10067           0 :     args.rval().setNull();
   10068           0 :     return true;
   10069             :   }
   10070             : }
   10071             : 
   10072             : static bool
   10073           0 : set_onmouseover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10074             : {
   10075           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10076           0 :   if (args[0].isObject()) {
   10077             :     { // scope for tempRoot
   10078           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10079           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10080             :     }
   10081             :   } else {
   10082           0 :     arg0 = nullptr;
   10083             :   }
   10084           0 :   self->SetOnmouseover(Constify(arg0));
   10085           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10086             : 
   10087           0 :   return true;
   10088             : }
   10089             : 
   10090             : static const JSJitInfo onmouseover_getterinfo = {
   10091             :   { (JSJitGetterOp)get_onmouseover },
   10092             :   { prototypes::id::Window },
   10093             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10094             :   JSJitInfo::Getter,
   10095             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10096             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10097             :   false,  /* isInfallible. False in setters. */
   10098             :   false,  /* isMovable.  Not relevant for setters. */
   10099             :   false, /* isEliminatable.  Not relevant for setters. */
   10100             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10101             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10102             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10103             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10104             : };
   10105             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10106             : static_assert(0 < 5, "There is no slot for us");
   10107             : static const JSJitInfo onmouseover_setterinfo = {
   10108             :   { (JSJitGetterOp)set_onmouseover },
   10109             :   { prototypes::id::Window },
   10110             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10111             :   JSJitInfo::Setter,
   10112             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10113             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10114             :   false,  /* isInfallible. False in setters. */
   10115             :   false,  /* isMovable.  Not relevant for setters. */
   10116             :   false, /* isEliminatable.  Not relevant for setters. */
   10117             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10118             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10119             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10120             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10121             : };
   10122             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10123             : static_assert(0 < 5, "There is no slot for us");
   10124             : 
   10125             : static bool
   10126           0 : get_onmouseup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   10127             : {
   10128           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseup());
   10129           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10130           0 :   if (result) {
   10131           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10132           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10133           0 :       return false;
   10134             :     }
   10135           0 :     return true;
   10136             :   } else {
   10137           0 :     args.rval().setNull();
   10138           0 :     return true;
   10139             :   }
   10140             : }
   10141             : 
   10142             : static bool
   10143           0 : set_onmouseup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10144             : {
   10145           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10146           0 :   if (args[0].isObject()) {
   10147             :     { // scope for tempRoot
   10148           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10149           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10150             :     }
   10151             :   } else {
   10152           0 :     arg0 = nullptr;
   10153             :   }
   10154           0 :   self->SetOnmouseup(Constify(arg0));
   10155           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10156             : 
   10157           0 :   return true;
   10158             : }
   10159             : 
   10160             : static const JSJitInfo onmouseup_getterinfo = {
   10161             :   { (JSJitGetterOp)get_onmouseup },
   10162             :   { prototypes::id::Window },
   10163             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10164             :   JSJitInfo::Getter,
   10165             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10166             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10167             :   false,  /* isInfallible. False in setters. */
   10168             :   false,  /* isMovable.  Not relevant for setters. */
   10169             :   false, /* isEliminatable.  Not relevant for setters. */
   10170             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10171             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10172             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10173             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10174             : };
   10175             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10176             : static_assert(0 < 5, "There is no slot for us");
   10177             : static const JSJitInfo onmouseup_setterinfo = {
   10178             :   { (JSJitGetterOp)set_onmouseup },
   10179             :   { prototypes::id::Window },
   10180             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10181             :   JSJitInfo::Setter,
   10182             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10183             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10184             :   false,  /* isInfallible. False in setters. */
   10185             :   false,  /* isMovable.  Not relevant for setters. */
   10186             :   false, /* isEliminatable.  Not relevant for setters. */
   10187             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10188             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10189             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10190             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10191             : };
   10192             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10193             : static_assert(0 < 5, "There is no slot for us");
   10194             : 
   10195             : static bool
   10196           0 : get_onwheel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   10197             : {
   10198           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwheel());
   10199           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10200           0 :   if (result) {
   10201           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10202           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10203           0 :       return false;
   10204             :     }
   10205           0 :     return true;
   10206             :   } else {
   10207           0 :     args.rval().setNull();
   10208           0 :     return true;
   10209             :   }
   10210             : }
   10211             : 
   10212             : static bool
   10213           0 : set_onwheel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10214             : {
   10215           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10216           0 :   if (args[0].isObject()) {
   10217             :     { // scope for tempRoot
   10218           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10219           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10220             :     }
   10221             :   } else {
   10222           0 :     arg0 = nullptr;
   10223             :   }
   10224           0 :   self->SetOnwheel(Constify(arg0));
   10225           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10226             : 
   10227           0 :   return true;
   10228             : }
   10229             : 
   10230             : static const JSJitInfo onwheel_getterinfo = {
   10231             :   { (JSJitGetterOp)get_onwheel },
   10232             :   { prototypes::id::Window },
   10233             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10234             :   JSJitInfo::Getter,
   10235             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10236             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10237             :   false,  /* isInfallible. False in setters. */
   10238             :   false,  /* isMovable.  Not relevant for setters. */
   10239             :   false, /* isEliminatable.  Not relevant for setters. */
   10240             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10241             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10242             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10243             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10244             : };
   10245             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10246             : static_assert(0 < 5, "There is no slot for us");
   10247             : static const JSJitInfo onwheel_setterinfo = {
   10248             :   { (JSJitGetterOp)set_onwheel },
   10249             :   { prototypes::id::Window },
   10250             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10251             :   JSJitInfo::Setter,
   10252             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10253             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10254             :   false,  /* isInfallible. False in setters. */
   10255             :   false,  /* isMovable.  Not relevant for setters. */
   10256             :   false, /* isEliminatable.  Not relevant for setters. */
   10257             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10258             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10259             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10260             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10261             : };
   10262             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10263             : static_assert(0 < 5, "There is no slot for us");
   10264             : 
   10265             : static bool
   10266           0 : get_onpause(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   10267             : {
   10268           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpause());
   10269           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10270           0 :   if (result) {
   10271           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10272           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10273           0 :       return false;
   10274             :     }
   10275           0 :     return true;
   10276             :   } else {
   10277           0 :     args.rval().setNull();
   10278           0 :     return true;
   10279             :   }
   10280             : }
   10281             : 
   10282             : static bool
   10283           0 : set_onpause(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10284             : {
   10285           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10286           0 :   if (args[0].isObject()) {
   10287             :     { // scope for tempRoot
   10288           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10289           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10290             :     }
   10291             :   } else {
   10292           0 :     arg0 = nullptr;
   10293             :   }
   10294           0 :   self->SetOnpause(Constify(arg0));
   10295           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10296             : 
   10297           0 :   return true;
   10298             : }
   10299             : 
   10300             : static const JSJitInfo onpause_getterinfo = {
   10301             :   { (JSJitGetterOp)get_onpause },
   10302             :   { prototypes::id::Window },
   10303             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10304             :   JSJitInfo::Getter,
   10305             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10306             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10307             :   false,  /* isInfallible. False in setters. */
   10308             :   false,  /* isMovable.  Not relevant for setters. */
   10309             :   false, /* isEliminatable.  Not relevant for setters. */
   10310             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10311             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10312             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10313             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10314             : };
   10315             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10316             : static_assert(0 < 5, "There is no slot for us");
   10317             : static const JSJitInfo onpause_setterinfo = {
   10318             :   { (JSJitGetterOp)set_onpause },
   10319             :   { prototypes::id::Window },
   10320             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10321             :   JSJitInfo::Setter,
   10322             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10323             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10324             :   false,  /* isInfallible. False in setters. */
   10325             :   false,  /* isMovable.  Not relevant for setters. */
   10326             :   false, /* isEliminatable.  Not relevant for setters. */
   10327             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10328             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10329             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10330             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10331             : };
   10332             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10333             : static_assert(0 < 5, "There is no slot for us");
   10334             : 
   10335             : static bool
   10336           0 : get_onplay(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   10337             : {
   10338           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnplay());
   10339           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10340           0 :   if (result) {
   10341           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10342           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10343           0 :       return false;
   10344             :     }
   10345           0 :     return true;
   10346             :   } else {
   10347           0 :     args.rval().setNull();
   10348           0 :     return true;
   10349             :   }
   10350             : }
   10351             : 
   10352             : static bool
   10353           0 : set_onplay(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10354             : {
   10355           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10356           0 :   if (args[0].isObject()) {
   10357             :     { // scope for tempRoot
   10358           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10359           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10360             :     }
   10361             :   } else {
   10362           0 :     arg0 = nullptr;
   10363             :   }
   10364           0 :   self->SetOnplay(Constify(arg0));
   10365           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10366             : 
   10367           0 :   return true;
   10368             : }
   10369             : 
   10370             : static const JSJitInfo onplay_getterinfo = {
   10371             :   { (JSJitGetterOp)get_onplay },
   10372             :   { prototypes::id::Window },
   10373             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10374             :   JSJitInfo::Getter,
   10375             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10376             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10377             :   false,  /* isInfallible. False in setters. */
   10378             :   false,  /* isMovable.  Not relevant for setters. */
   10379             :   false, /* isEliminatable.  Not relevant for setters. */
   10380             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10381             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10382             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10383             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10384             : };
   10385             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10386             : static_assert(0 < 5, "There is no slot for us");
   10387             : static const JSJitInfo onplay_setterinfo = {
   10388             :   { (JSJitGetterOp)set_onplay },
   10389             :   { prototypes::id::Window },
   10390             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10391             :   JSJitInfo::Setter,
   10392             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10393             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10394             :   false,  /* isInfallible. False in setters. */
   10395             :   false,  /* isMovable.  Not relevant for setters. */
   10396             :   false, /* isEliminatable.  Not relevant for setters. */
   10397             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10398             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10399             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10400             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10401             : };
   10402             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10403             : static_assert(0 < 5, "There is no slot for us");
   10404             : 
   10405             : static bool
   10406           0 : get_onplaying(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   10407             : {
   10408           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnplaying());
   10409           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10410           0 :   if (result) {
   10411           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10412           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10413           0 :       return false;
   10414             :     }
   10415           0 :     return true;
   10416             :   } else {
   10417           0 :     args.rval().setNull();
   10418           0 :     return true;
   10419             :   }
   10420             : }
   10421             : 
   10422             : static bool
   10423           0 : set_onplaying(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10424             : {
   10425           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10426           0 :   if (args[0].isObject()) {
   10427             :     { // scope for tempRoot
   10428           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10429           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10430             :     }
   10431             :   } else {
   10432           0 :     arg0 = nullptr;
   10433             :   }
   10434           0 :   self->SetOnplaying(Constify(arg0));
   10435           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10436             : 
   10437           0 :   return true;
   10438             : }
   10439             : 
   10440             : static const JSJitInfo onplaying_getterinfo = {
   10441             :   { (JSJitGetterOp)get_onplaying },
   10442             :   { prototypes::id::Window },
   10443             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10444             :   JSJitInfo::Getter,
   10445             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10446             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10447             :   false,  /* isInfallible. False in setters. */
   10448             :   false,  /* isMovable.  Not relevant for setters. */
   10449             :   false, /* isEliminatable.  Not relevant for setters. */
   10450             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10451             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10452             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10453             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10454             : };
   10455             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10456             : static_assert(0 < 5, "There is no slot for us");
   10457             : static const JSJitInfo onplaying_setterinfo = {
   10458             :   { (JSJitGetterOp)set_onplaying },
   10459             :   { prototypes::id::Window },
   10460             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10461             :   JSJitInfo::Setter,
   10462             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10463             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10464             :   false,  /* isInfallible. False in setters. */
   10465             :   false,  /* isMovable.  Not relevant for setters. */
   10466             :   false, /* isEliminatable.  Not relevant for setters. */
   10467             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10468             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10469             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10470             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10471             : };
   10472             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10473             : static_assert(0 < 5, "There is no slot for us");
   10474             : 
   10475             : static bool
   10476           0 : get_onprogress(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   10477             : {
   10478           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnprogress());
   10479           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10480           0 :   if (result) {
   10481           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10482           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10483           0 :       return false;
   10484             :     }
   10485           0 :     return true;
   10486             :   } else {
   10487           0 :     args.rval().setNull();
   10488           0 :     return true;
   10489             :   }
   10490             : }
   10491             : 
   10492             : static bool
   10493           0 : set_onprogress(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10494             : {
   10495           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10496           0 :   if (args[0].isObject()) {
   10497             :     { // scope for tempRoot
   10498           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10499           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10500             :     }
   10501             :   } else {
   10502           0 :     arg0 = nullptr;
   10503             :   }
   10504           0 :   self->SetOnprogress(Constify(arg0));
   10505           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10506             : 
   10507           0 :   return true;
   10508             : }
   10509             : 
   10510             : static const JSJitInfo onprogress_getterinfo = {
   10511             :   { (JSJitGetterOp)get_onprogress },
   10512             :   { prototypes::id::Window },
   10513             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10514             :   JSJitInfo::Getter,
   10515             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10516             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10517             :   false,  /* isInfallible. False in setters. */
   10518             :   false,  /* isMovable.  Not relevant for setters. */
   10519             :   false, /* isEliminatable.  Not relevant for setters. */
   10520             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10521             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10522             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10523             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10524             : };
   10525             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10526             : static_assert(0 < 5, "There is no slot for us");
   10527             : static const JSJitInfo onprogress_setterinfo = {
   10528             :   { (JSJitGetterOp)set_onprogress },
   10529             :   { prototypes::id::Window },
   10530             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10531             :   JSJitInfo::Setter,
   10532             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10533             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10534             :   false,  /* isInfallible. False in setters. */
   10535             :   false,  /* isMovable.  Not relevant for setters. */
   10536             :   false, /* isEliminatable.  Not relevant for setters. */
   10537             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10538             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10539             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10540             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10541             : };
   10542             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10543             : static_assert(0 < 5, "There is no slot for us");
   10544             : 
   10545             : static bool
   10546           0 : get_onratechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   10547             : {
   10548           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnratechange());
   10549           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10550           0 :   if (result) {
   10551           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10552           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10553           0 :       return false;
   10554             :     }
   10555           0 :     return true;
   10556             :   } else {
   10557           0 :     args.rval().setNull();
   10558           0 :     return true;
   10559             :   }
   10560             : }
   10561             : 
   10562             : static bool
   10563           0 : set_onratechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10564             : {
   10565           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10566           0 :   if (args[0].isObject()) {
   10567             :     { // scope for tempRoot
   10568           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10569           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10570             :     }
   10571             :   } else {
   10572           0 :     arg0 = nullptr;
   10573             :   }
   10574           0 :   self->SetOnratechange(Constify(arg0));
   10575           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10576             : 
   10577           0 :   return true;
   10578             : }
   10579             : 
   10580             : static const JSJitInfo onratechange_getterinfo = {
   10581             :   { (JSJitGetterOp)get_onratechange },
   10582             :   { prototypes::id::Window },
   10583             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10584             :   JSJitInfo::Getter,
   10585             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10586             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10587             :   false,  /* isInfallible. False in setters. */
   10588             :   false,  /* isMovable.  Not relevant for setters. */
   10589             :   false, /* isEliminatable.  Not relevant for setters. */
   10590             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10591             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10592             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10593             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10594             : };
   10595             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10596             : static_assert(0 < 5, "There is no slot for us");
   10597             : static const JSJitInfo onratechange_setterinfo = {
   10598             :   { (JSJitGetterOp)set_onratechange },
   10599             :   { prototypes::id::Window },
   10600             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10601             :   JSJitInfo::Setter,
   10602             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10603             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10604             :   false,  /* isInfallible. False in setters. */
   10605             :   false,  /* isMovable.  Not relevant for setters. */
   10606             :   false, /* isEliminatable.  Not relevant for setters. */
   10607             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10608             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10609             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10610             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10611             : };
   10612             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10613             : static_assert(0 < 5, "There is no slot for us");
   10614             : 
   10615             : static bool
   10616           0 : get_onreset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   10617             : {
   10618           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnreset());
   10619           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10620           0 :   if (result) {
   10621           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10622           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10623           0 :       return false;
   10624             :     }
   10625           0 :     return true;
   10626             :   } else {
   10627           0 :     args.rval().setNull();
   10628           0 :     return true;
   10629             :   }
   10630             : }
   10631             : 
   10632             : static bool
   10633           0 : set_onreset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10634             : {
   10635           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10636           0 :   if (args[0].isObject()) {
   10637             :     { // scope for tempRoot
   10638           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10639           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10640             :     }
   10641             :   } else {
   10642           0 :     arg0 = nullptr;
   10643             :   }
   10644           0 :   self->SetOnreset(Constify(arg0));
   10645           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10646             : 
   10647           0 :   return true;
   10648             : }
   10649             : 
   10650             : static const JSJitInfo onreset_getterinfo = {
   10651             :   { (JSJitGetterOp)get_onreset },
   10652             :   { prototypes::id::Window },
   10653             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10654             :   JSJitInfo::Getter,
   10655             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10656             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10657             :   false,  /* isInfallible. False in setters. */
   10658             :   false,  /* isMovable.  Not relevant for setters. */
   10659             :   false, /* isEliminatable.  Not relevant for setters. */
   10660             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10661             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10662             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10663             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10664             : };
   10665             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10666             : static_assert(0 < 5, "There is no slot for us");
   10667             : static const JSJitInfo onreset_setterinfo = {
   10668             :   { (JSJitGetterOp)set_onreset },
   10669             :   { prototypes::id::Window },
   10670             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10671             :   JSJitInfo::Setter,
   10672             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10673             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10674             :   false,  /* isInfallible. False in setters. */
   10675             :   false,  /* isMovable.  Not relevant for setters. */
   10676             :   false, /* isEliminatable.  Not relevant for setters. */
   10677             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10678             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10679             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10680             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10681             : };
   10682             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10683             : static_assert(0 < 5, "There is no slot for us");
   10684             : 
   10685             : static bool
   10686           0 : get_onresize(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   10687             : {
   10688           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnresize());
   10689           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10690           0 :   if (result) {
   10691           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10692           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10693           0 :       return false;
   10694             :     }
   10695           0 :     return true;
   10696             :   } else {
   10697           0 :     args.rval().setNull();
   10698           0 :     return true;
   10699             :   }
   10700             : }
   10701             : 
   10702             : static bool
   10703           0 : set_onresize(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10704             : {
   10705           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10706           0 :   if (args[0].isObject()) {
   10707             :     { // scope for tempRoot
   10708           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10709           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10710             :     }
   10711             :   } else {
   10712           0 :     arg0 = nullptr;
   10713             :   }
   10714           0 :   self->SetOnresize(Constify(arg0));
   10715           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10716             : 
   10717           0 :   return true;
   10718             : }
   10719             : 
   10720             : static const JSJitInfo onresize_getterinfo = {
   10721             :   { (JSJitGetterOp)get_onresize },
   10722             :   { prototypes::id::Window },
   10723             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10724             :   JSJitInfo::Getter,
   10725             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10726             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10727             :   false,  /* isInfallible. False in setters. */
   10728             :   false,  /* isMovable.  Not relevant for setters. */
   10729             :   false, /* isEliminatable.  Not relevant for setters. */
   10730             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10731             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10732             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10733             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10734             : };
   10735             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10736             : static_assert(0 < 5, "There is no slot for us");
   10737             : static const JSJitInfo onresize_setterinfo = {
   10738             :   { (JSJitGetterOp)set_onresize },
   10739             :   { prototypes::id::Window },
   10740             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10741             :   JSJitInfo::Setter,
   10742             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10743             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10744             :   false,  /* isInfallible. False in setters. */
   10745             :   false,  /* isMovable.  Not relevant for setters. */
   10746             :   false, /* isEliminatable.  Not relevant for setters. */
   10747             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10748             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10749             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10750             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10751             : };
   10752             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10753             : static_assert(0 < 5, "There is no slot for us");
   10754             : 
   10755             : static bool
   10756           0 : get_onscroll(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   10757             : {
   10758           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnscroll());
   10759           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10760           0 :   if (result) {
   10761           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10762           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10763           0 :       return false;
   10764             :     }
   10765           0 :     return true;
   10766             :   } else {
   10767           0 :     args.rval().setNull();
   10768           0 :     return true;
   10769             :   }
   10770             : }
   10771             : 
   10772             : static bool
   10773           0 : set_onscroll(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10774             : {
   10775           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10776           0 :   if (args[0].isObject()) {
   10777             :     { // scope for tempRoot
   10778           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10779           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10780             :     }
   10781             :   } else {
   10782           0 :     arg0 = nullptr;
   10783             :   }
   10784           0 :   self->SetOnscroll(Constify(arg0));
   10785           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10786             : 
   10787           0 :   return true;
   10788             : }
   10789             : 
   10790             : static const JSJitInfo onscroll_getterinfo = {
   10791             :   { (JSJitGetterOp)get_onscroll },
   10792             :   { prototypes::id::Window },
   10793             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10794             :   JSJitInfo::Getter,
   10795             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10796             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10797             :   false,  /* isInfallible. False in setters. */
   10798             :   false,  /* isMovable.  Not relevant for setters. */
   10799             :   false, /* isEliminatable.  Not relevant for setters. */
   10800             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10801             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10802             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10803             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10804             : };
   10805             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10806             : static_assert(0 < 5, "There is no slot for us");
   10807             : static const JSJitInfo onscroll_setterinfo = {
   10808             :   { (JSJitGetterOp)set_onscroll },
   10809             :   { prototypes::id::Window },
   10810             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10811             :   JSJitInfo::Setter,
   10812             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10813             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10814             :   false,  /* isInfallible. False in setters. */
   10815             :   false,  /* isMovable.  Not relevant for setters. */
   10816             :   false, /* isEliminatable.  Not relevant for setters. */
   10817             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10818             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10819             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10820             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10821             : };
   10822             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10823             : static_assert(0 < 5, "There is no slot for us");
   10824             : 
   10825             : static bool
   10826           0 : get_onseeked(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   10827             : {
   10828           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnseeked());
   10829           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10830           0 :   if (result) {
   10831           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10832           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10833           0 :       return false;
   10834             :     }
   10835           0 :     return true;
   10836             :   } else {
   10837           0 :     args.rval().setNull();
   10838           0 :     return true;
   10839             :   }
   10840             : }
   10841             : 
   10842             : static bool
   10843           0 : set_onseeked(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10844             : {
   10845           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10846           0 :   if (args[0].isObject()) {
   10847             :     { // scope for tempRoot
   10848           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10849           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10850             :     }
   10851             :   } else {
   10852           0 :     arg0 = nullptr;
   10853             :   }
   10854           0 :   self->SetOnseeked(Constify(arg0));
   10855           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10856             : 
   10857           0 :   return true;
   10858             : }
   10859             : 
   10860             : static const JSJitInfo onseeked_getterinfo = {
   10861             :   { (JSJitGetterOp)get_onseeked },
   10862             :   { prototypes::id::Window },
   10863             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10864             :   JSJitInfo::Getter,
   10865             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10866             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10867             :   false,  /* isInfallible. False in setters. */
   10868             :   false,  /* isMovable.  Not relevant for setters. */
   10869             :   false, /* isEliminatable.  Not relevant for setters. */
   10870             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10871             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10872             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10873             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10874             : };
   10875             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10876             : static_assert(0 < 5, "There is no slot for us");
   10877             : static const JSJitInfo onseeked_setterinfo = {
   10878             :   { (JSJitGetterOp)set_onseeked },
   10879             :   { prototypes::id::Window },
   10880             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10881             :   JSJitInfo::Setter,
   10882             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10883             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10884             :   false,  /* isInfallible. False in setters. */
   10885             :   false,  /* isMovable.  Not relevant for setters. */
   10886             :   false, /* isEliminatable.  Not relevant for setters. */
   10887             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10888             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10889             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10890             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10891             : };
   10892             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10893             : static_assert(0 < 5, "There is no slot for us");
   10894             : 
   10895             : static bool
   10896           0 : get_onseeking(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   10897             : {
   10898           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnseeking());
   10899           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10900           0 :   if (result) {
   10901           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10902           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10903           0 :       return false;
   10904             :     }
   10905           0 :     return true;
   10906             :   } else {
   10907           0 :     args.rval().setNull();
   10908           0 :     return true;
   10909             :   }
   10910             : }
   10911             : 
   10912             : static bool
   10913           0 : set_onseeking(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10914             : {
   10915           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10916           0 :   if (args[0].isObject()) {
   10917             :     { // scope for tempRoot
   10918           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10919           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10920             :     }
   10921             :   } else {
   10922           0 :     arg0 = nullptr;
   10923             :   }
   10924           0 :   self->SetOnseeking(Constify(arg0));
   10925           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10926             : 
   10927           0 :   return true;
   10928             : }
   10929             : 
   10930             : static const JSJitInfo onseeking_getterinfo = {
   10931             :   { (JSJitGetterOp)get_onseeking },
   10932             :   { prototypes::id::Window },
   10933             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10934             :   JSJitInfo::Getter,
   10935             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10936             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10937             :   false,  /* isInfallible. False in setters. */
   10938             :   false,  /* isMovable.  Not relevant for setters. */
   10939             :   false, /* isEliminatable.  Not relevant for setters. */
   10940             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10941             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10942             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10943             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10944             : };
   10945             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10946             : static_assert(0 < 5, "There is no slot for us");
   10947             : static const JSJitInfo onseeking_setterinfo = {
   10948             :   { (JSJitGetterOp)set_onseeking },
   10949             :   { prototypes::id::Window },
   10950             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   10951             :   JSJitInfo::Setter,
   10952             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10953             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10954             :   false,  /* isInfallible. False in setters. */
   10955             :   false,  /* isMovable.  Not relevant for setters. */
   10956             :   false, /* isEliminatable.  Not relevant for setters. */
   10957             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10958             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10959             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10960             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10961             : };
   10962             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10963             : static_assert(0 < 5, "There is no slot for us");
   10964             : 
   10965             : static bool
   10966           0 : get_onselect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   10967             : {
   10968           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnselect());
   10969           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10970           0 :   if (result) {
   10971           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   10972           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   10973           0 :       return false;
   10974             :     }
   10975           0 :     return true;
   10976             :   } else {
   10977           0 :     args.rval().setNull();
   10978           0 :     return true;
   10979             :   }
   10980             : }
   10981             : 
   10982             : static bool
   10983           0 : set_onselect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   10984             : {
   10985           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   10986           0 :   if (args[0].isObject()) {
   10987             :     { // scope for tempRoot
   10988           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   10989           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   10990             :     }
   10991             :   } else {
   10992           0 :     arg0 = nullptr;
   10993             :   }
   10994           0 :   self->SetOnselect(Constify(arg0));
   10995           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10996             : 
   10997           0 :   return true;
   10998             : }
   10999             : 
   11000             : static const JSJitInfo onselect_getterinfo = {
   11001             :   { (JSJitGetterOp)get_onselect },
   11002             :   { prototypes::id::Window },
   11003             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11004             :   JSJitInfo::Getter,
   11005             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11006             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11007             :   false,  /* isInfallible. False in setters. */
   11008             :   false,  /* isMovable.  Not relevant for setters. */
   11009             :   false, /* isEliminatable.  Not relevant for setters. */
   11010             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11011             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11012             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11013             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11014             : };
   11015             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11016             : static_assert(0 < 5, "There is no slot for us");
   11017             : static const JSJitInfo onselect_setterinfo = {
   11018             :   { (JSJitGetterOp)set_onselect },
   11019             :   { prototypes::id::Window },
   11020             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11021             :   JSJitInfo::Setter,
   11022             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11023             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11024             :   false,  /* isInfallible. False in setters. */
   11025             :   false,  /* isMovable.  Not relevant for setters. */
   11026             :   false, /* isEliminatable.  Not relevant for setters. */
   11027             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11028             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11029             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11030             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11031             : };
   11032             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11033             : static_assert(0 < 5, "There is no slot for us");
   11034             : 
   11035             : static bool
   11036           0 : get_onshow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   11037             : {
   11038           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnshow());
   11039           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11040           0 :   if (result) {
   11041           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11042           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11043           0 :       return false;
   11044             :     }
   11045           0 :     return true;
   11046             :   } else {
   11047           0 :     args.rval().setNull();
   11048           0 :     return true;
   11049             :   }
   11050             : }
   11051             : 
   11052             : static bool
   11053           0 : set_onshow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   11054             : {
   11055           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11056           0 :   if (args[0].isObject()) {
   11057             :     { // scope for tempRoot
   11058           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11059           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11060             :     }
   11061             :   } else {
   11062           0 :     arg0 = nullptr;
   11063             :   }
   11064           0 :   self->SetOnshow(Constify(arg0));
   11065           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11066             : 
   11067           0 :   return true;
   11068             : }
   11069             : 
   11070             : static const JSJitInfo onshow_getterinfo = {
   11071             :   { (JSJitGetterOp)get_onshow },
   11072             :   { prototypes::id::Window },
   11073             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11074             :   JSJitInfo::Getter,
   11075             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11076             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11077             :   false,  /* isInfallible. False in setters. */
   11078             :   false,  /* isMovable.  Not relevant for setters. */
   11079             :   false, /* isEliminatable.  Not relevant for setters. */
   11080             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11081             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11082             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11083             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11084             : };
   11085             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11086             : static_assert(0 < 5, "There is no slot for us");
   11087             : static const JSJitInfo onshow_setterinfo = {
   11088             :   { (JSJitGetterOp)set_onshow },
   11089             :   { prototypes::id::Window },
   11090             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11091             :   JSJitInfo::Setter,
   11092             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11093             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11094             :   false,  /* isInfallible. False in setters. */
   11095             :   false,  /* isMovable.  Not relevant for setters. */
   11096             :   false, /* isEliminatable.  Not relevant for setters. */
   11097             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11098             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11099             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11100             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11101             : };
   11102             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11103             : static_assert(0 < 5, "There is no slot for us");
   11104             : 
   11105             : static bool
   11106           0 : get_onstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   11107             : {
   11108           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnstalled());
   11109           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11110           0 :   if (result) {
   11111           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11112           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11113           0 :       return false;
   11114             :     }
   11115           0 :     return true;
   11116             :   } else {
   11117           0 :     args.rval().setNull();
   11118           0 :     return true;
   11119             :   }
   11120             : }
   11121             : 
   11122             : static bool
   11123           0 : set_onstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   11124             : {
   11125           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11126           0 :   if (args[0].isObject()) {
   11127             :     { // scope for tempRoot
   11128           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11129           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11130             :     }
   11131             :   } else {
   11132           0 :     arg0 = nullptr;
   11133             :   }
   11134           0 :   self->SetOnstalled(Constify(arg0));
   11135           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11136             : 
   11137           0 :   return true;
   11138             : }
   11139             : 
   11140             : static const JSJitInfo onstalled_getterinfo = {
   11141             :   { (JSJitGetterOp)get_onstalled },
   11142             :   { prototypes::id::Window },
   11143             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11144             :   JSJitInfo::Getter,
   11145             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11146             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11147             :   false,  /* isInfallible. False in setters. */
   11148             :   false,  /* isMovable.  Not relevant for setters. */
   11149             :   false, /* isEliminatable.  Not relevant for setters. */
   11150             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11151             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11152             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11153             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11154             : };
   11155             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11156             : static_assert(0 < 5, "There is no slot for us");
   11157             : static const JSJitInfo onstalled_setterinfo = {
   11158             :   { (JSJitGetterOp)set_onstalled },
   11159             :   { prototypes::id::Window },
   11160             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11161             :   JSJitInfo::Setter,
   11162             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11163             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11164             :   false,  /* isInfallible. False in setters. */
   11165             :   false,  /* isMovable.  Not relevant for setters. */
   11166             :   false, /* isEliminatable.  Not relevant for setters. */
   11167             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11168             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11169             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11170             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11171             : };
   11172             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11173             : static_assert(0 < 5, "There is no slot for us");
   11174             : 
   11175             : static bool
   11176           0 : get_onsubmit(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   11177             : {
   11178           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnsubmit());
   11179           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11180           0 :   if (result) {
   11181           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11182           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11183           0 :       return false;
   11184             :     }
   11185           0 :     return true;
   11186             :   } else {
   11187           0 :     args.rval().setNull();
   11188           0 :     return true;
   11189             :   }
   11190             : }
   11191             : 
   11192             : static bool
   11193           0 : set_onsubmit(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   11194             : {
   11195           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11196           0 :   if (args[0].isObject()) {
   11197             :     { // scope for tempRoot
   11198           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11199           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11200             :     }
   11201             :   } else {
   11202           0 :     arg0 = nullptr;
   11203             :   }
   11204           0 :   self->SetOnsubmit(Constify(arg0));
   11205           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11206             : 
   11207           0 :   return true;
   11208             : }
   11209             : 
   11210             : static const JSJitInfo onsubmit_getterinfo = {
   11211             :   { (JSJitGetterOp)get_onsubmit },
   11212             :   { prototypes::id::Window },
   11213             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11214             :   JSJitInfo::Getter,
   11215             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11216             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11217             :   false,  /* isInfallible. False in setters. */
   11218             :   false,  /* isMovable.  Not relevant for setters. */
   11219             :   false, /* isEliminatable.  Not relevant for setters. */
   11220             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11221             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11222             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11223             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11224             : };
   11225             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11226             : static_assert(0 < 5, "There is no slot for us");
   11227             : static const JSJitInfo onsubmit_setterinfo = {
   11228             :   { (JSJitGetterOp)set_onsubmit },
   11229             :   { prototypes::id::Window },
   11230             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11231             :   JSJitInfo::Setter,
   11232             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11233             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11234             :   false,  /* isInfallible. False in setters. */
   11235             :   false,  /* isMovable.  Not relevant for setters. */
   11236             :   false, /* isEliminatable.  Not relevant for setters. */
   11237             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11238             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11239             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11240             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11241             : };
   11242             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11243             : static_assert(0 < 5, "There is no slot for us");
   11244             : 
   11245             : static bool
   11246           0 : get_onsuspend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   11247             : {
   11248           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnsuspend());
   11249           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11250           0 :   if (result) {
   11251           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11252           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11253           0 :       return false;
   11254             :     }
   11255           0 :     return true;
   11256             :   } else {
   11257           0 :     args.rval().setNull();
   11258           0 :     return true;
   11259             :   }
   11260             : }
   11261             : 
   11262             : static bool
   11263           0 : set_onsuspend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   11264             : {
   11265           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11266           0 :   if (args[0].isObject()) {
   11267             :     { // scope for tempRoot
   11268           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11269           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11270             :     }
   11271             :   } else {
   11272           0 :     arg0 = nullptr;
   11273             :   }
   11274           0 :   self->SetOnsuspend(Constify(arg0));
   11275           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11276             : 
   11277           0 :   return true;
   11278             : }
   11279             : 
   11280             : static const JSJitInfo onsuspend_getterinfo = {
   11281             :   { (JSJitGetterOp)get_onsuspend },
   11282             :   { prototypes::id::Window },
   11283             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11284             :   JSJitInfo::Getter,
   11285             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11286             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11287             :   false,  /* isInfallible. False in setters. */
   11288             :   false,  /* isMovable.  Not relevant for setters. */
   11289             :   false, /* isEliminatable.  Not relevant for setters. */
   11290             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11291             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11292             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11293             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11294             : };
   11295             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11296             : static_assert(0 < 5, "There is no slot for us");
   11297             : static const JSJitInfo onsuspend_setterinfo = {
   11298             :   { (JSJitGetterOp)set_onsuspend },
   11299             :   { prototypes::id::Window },
   11300             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11301             :   JSJitInfo::Setter,
   11302             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11303             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11304             :   false,  /* isInfallible. False in setters. */
   11305             :   false,  /* isMovable.  Not relevant for setters. */
   11306             :   false, /* isEliminatable.  Not relevant for setters. */
   11307             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11308             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11309             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11310             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11311             : };
   11312             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11313             : static_assert(0 < 5, "There is no slot for us");
   11314             : 
   11315             : static bool
   11316           0 : get_ontimeupdate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   11317             : {
   11318           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntimeupdate());
   11319           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11320           0 :   if (result) {
   11321           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11322           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11323           0 :       return false;
   11324             :     }
   11325           0 :     return true;
   11326             :   } else {
   11327           0 :     args.rval().setNull();
   11328           0 :     return true;
   11329             :   }
   11330             : }
   11331             : 
   11332             : static bool
   11333           0 : set_ontimeupdate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   11334             : {
   11335           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11336           0 :   if (args[0].isObject()) {
   11337             :     { // scope for tempRoot
   11338           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11339           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11340             :     }
   11341             :   } else {
   11342           0 :     arg0 = nullptr;
   11343             :   }
   11344           0 :   self->SetOntimeupdate(Constify(arg0));
   11345           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11346             : 
   11347           0 :   return true;
   11348             : }
   11349             : 
   11350             : static const JSJitInfo ontimeupdate_getterinfo = {
   11351             :   { (JSJitGetterOp)get_ontimeupdate },
   11352             :   { prototypes::id::Window },
   11353             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11354             :   JSJitInfo::Getter,
   11355             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11356             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11357             :   false,  /* isInfallible. False in setters. */
   11358             :   false,  /* isMovable.  Not relevant for setters. */
   11359             :   false, /* isEliminatable.  Not relevant for setters. */
   11360             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11361             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11362             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11363             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11364             : };
   11365             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11366             : static_assert(0 < 5, "There is no slot for us");
   11367             : static const JSJitInfo ontimeupdate_setterinfo = {
   11368             :   { (JSJitGetterOp)set_ontimeupdate },
   11369             :   { prototypes::id::Window },
   11370             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11371             :   JSJitInfo::Setter,
   11372             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11373             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11374             :   false,  /* isInfallible. False in setters. */
   11375             :   false,  /* isMovable.  Not relevant for setters. */
   11376             :   false, /* isEliminatable.  Not relevant for setters. */
   11377             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11378             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11379             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11380             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11381             : };
   11382             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11383             : static_assert(0 < 5, "There is no slot for us");
   11384             : 
   11385             : static bool
   11386           0 : get_onvolumechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   11387             : {
   11388           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnvolumechange());
   11389           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11390           0 :   if (result) {
   11391           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11392           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11393           0 :       return false;
   11394             :     }
   11395           0 :     return true;
   11396             :   } else {
   11397           0 :     args.rval().setNull();
   11398           0 :     return true;
   11399             :   }
   11400             : }
   11401             : 
   11402             : static bool
   11403           0 : set_onvolumechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   11404             : {
   11405           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11406           0 :   if (args[0].isObject()) {
   11407             :     { // scope for tempRoot
   11408           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11409           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11410             :     }
   11411             :   } else {
   11412           0 :     arg0 = nullptr;
   11413             :   }
   11414           0 :   self->SetOnvolumechange(Constify(arg0));
   11415           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11416             : 
   11417           0 :   return true;
   11418             : }
   11419             : 
   11420             : static const JSJitInfo onvolumechange_getterinfo = {
   11421             :   { (JSJitGetterOp)get_onvolumechange },
   11422             :   { prototypes::id::Window },
   11423             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11424             :   JSJitInfo::Getter,
   11425             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11426             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11427             :   false,  /* isInfallible. False in setters. */
   11428             :   false,  /* isMovable.  Not relevant for setters. */
   11429             :   false, /* isEliminatable.  Not relevant for setters. */
   11430             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11431             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11432             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11433             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11434             : };
   11435             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11436             : static_assert(0 < 5, "There is no slot for us");
   11437             : static const JSJitInfo onvolumechange_setterinfo = {
   11438             :   { (JSJitGetterOp)set_onvolumechange },
   11439             :   { prototypes::id::Window },
   11440             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11441             :   JSJitInfo::Setter,
   11442             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11443             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11444             :   false,  /* isInfallible. False in setters. */
   11445             :   false,  /* isMovable.  Not relevant for setters. */
   11446             :   false, /* isEliminatable.  Not relevant for setters. */
   11447             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11448             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11449             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11450             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11451             : };
   11452             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11453             : static_assert(0 < 5, "There is no slot for us");
   11454             : 
   11455             : static bool
   11456           0 : get_onwaiting(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   11457             : {
   11458           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwaiting());
   11459           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11460           0 :   if (result) {
   11461           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11462           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11463           0 :       return false;
   11464             :     }
   11465           0 :     return true;
   11466             :   } else {
   11467           0 :     args.rval().setNull();
   11468           0 :     return true;
   11469             :   }
   11470             : }
   11471             : 
   11472             : static bool
   11473           0 : set_onwaiting(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   11474             : {
   11475           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11476           0 :   if (args[0].isObject()) {
   11477             :     { // scope for tempRoot
   11478           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11479           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11480             :     }
   11481             :   } else {
   11482           0 :     arg0 = nullptr;
   11483             :   }
   11484           0 :   self->SetOnwaiting(Constify(arg0));
   11485           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11486             : 
   11487           0 :   return true;
   11488             : }
   11489             : 
   11490             : static const JSJitInfo onwaiting_getterinfo = {
   11491             :   { (JSJitGetterOp)get_onwaiting },
   11492             :   { prototypes::id::Window },
   11493             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11494             :   JSJitInfo::Getter,
   11495             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11496             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11497             :   false,  /* isInfallible. False in setters. */
   11498             :   false,  /* isMovable.  Not relevant for setters. */
   11499             :   false, /* isEliminatable.  Not relevant for setters. */
   11500             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11501             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11502             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11503             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11504             : };
   11505             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11506             : static_assert(0 < 5, "There is no slot for us");
   11507             : static const JSJitInfo onwaiting_setterinfo = {
   11508             :   { (JSJitGetterOp)set_onwaiting },
   11509             :   { prototypes::id::Window },
   11510             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11511             :   JSJitInfo::Setter,
   11512             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11513             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11514             :   false,  /* isInfallible. False in setters. */
   11515             :   false,  /* isMovable.  Not relevant for setters. */
   11516             :   false, /* isEliminatable.  Not relevant for setters. */
   11517             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11518             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11519             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11520             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11521             : };
   11522             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11523             : static_assert(0 < 5, "There is no slot for us");
   11524             : 
   11525             : static bool
   11526           0 : get_onselectstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   11527             : {
   11528           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnselectstart());
   11529           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11530           0 :   if (result) {
   11531           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11532           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11533           0 :       return false;
   11534             :     }
   11535           0 :     return true;
   11536             :   } else {
   11537           0 :     args.rval().setNull();
   11538           0 :     return true;
   11539             :   }
   11540             : }
   11541             : 
   11542             : static bool
   11543           0 : set_onselectstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   11544             : {
   11545           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11546           0 :   if (args[0].isObject()) {
   11547             :     { // scope for tempRoot
   11548           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11549           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11550             :     }
   11551             :   } else {
   11552           0 :     arg0 = nullptr;
   11553             :   }
   11554           0 :   self->SetOnselectstart(Constify(arg0));
   11555           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11556             : 
   11557           0 :   return true;
   11558             : }
   11559             : 
   11560             : static const JSJitInfo onselectstart_getterinfo = {
   11561             :   { (JSJitGetterOp)get_onselectstart },
   11562             :   { prototypes::id::Window },
   11563             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11564             :   JSJitInfo::Getter,
   11565             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11566             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11567             :   false,  /* isInfallible. False in setters. */
   11568             :   false,  /* isMovable.  Not relevant for setters. */
   11569             :   false, /* isEliminatable.  Not relevant for setters. */
   11570             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11571             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11572             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11573             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11574             : };
   11575             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11576             : static_assert(0 < 5, "There is no slot for us");
   11577             : static const JSJitInfo onselectstart_setterinfo = {
   11578             :   { (JSJitGetterOp)set_onselectstart },
   11579             :   { prototypes::id::Window },
   11580             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11581             :   JSJitInfo::Setter,
   11582             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11583             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11584             :   false,  /* isInfallible. False in setters. */
   11585             :   false,  /* isMovable.  Not relevant for setters. */
   11586             :   false, /* isEliminatable.  Not relevant for setters. */
   11587             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11588             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11589             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11590             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11591             : };
   11592             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11593             : static_assert(0 < 5, "There is no slot for us");
   11594             : 
   11595             : static bool
   11596           0 : get_ontoggle(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   11597             : {
   11598           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntoggle());
   11599           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11600           0 :   if (result) {
   11601           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11602           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11603           0 :       return false;
   11604             :     }
   11605           0 :     return true;
   11606             :   } else {
   11607           0 :     args.rval().setNull();
   11608           0 :     return true;
   11609             :   }
   11610             : }
   11611             : 
   11612             : static bool
   11613           0 : set_ontoggle(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   11614             : {
   11615           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11616           0 :   if (args[0].isObject()) {
   11617             :     { // scope for tempRoot
   11618           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11619           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11620             :     }
   11621             :   } else {
   11622           0 :     arg0 = nullptr;
   11623             :   }
   11624           0 :   self->SetOntoggle(Constify(arg0));
   11625           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11626             : 
   11627           0 :   return true;
   11628             : }
   11629             : 
   11630             : static const JSJitInfo ontoggle_getterinfo = {
   11631             :   { (JSJitGetterOp)get_ontoggle },
   11632             :   { prototypes::id::Window },
   11633             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11634             :   JSJitInfo::Getter,
   11635             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11636             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11637             :   false,  /* isInfallible. False in setters. */
   11638             :   false,  /* isMovable.  Not relevant for setters. */
   11639             :   false, /* isEliminatable.  Not relevant for setters. */
   11640             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11641             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11642             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11643             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11644             : };
   11645             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11646             : static_assert(0 < 5, "There is no slot for us");
   11647             : static const JSJitInfo ontoggle_setterinfo = {
   11648             :   { (JSJitGetterOp)set_ontoggle },
   11649             :   { prototypes::id::Window },
   11650             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11651             :   JSJitInfo::Setter,
   11652             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11653             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11654             :   false,  /* isInfallible. False in setters. */
   11655             :   false,  /* isMovable.  Not relevant for setters. */
   11656             :   false, /* isEliminatable.  Not relevant for setters. */
   11657             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11658             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11659             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11660             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11661             : };
   11662             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11663             : static_assert(0 < 5, "There is no slot for us");
   11664             : 
   11665             : static bool
   11666           0 : get_onpointercancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   11667             : {
   11668           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointercancel());
   11669           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11670           0 :   if (result) {
   11671           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11672           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11673           0 :       return false;
   11674             :     }
   11675           0 :     return true;
   11676             :   } else {
   11677           0 :     args.rval().setNull();
   11678           0 :     return true;
   11679             :   }
   11680             : }
   11681             : 
   11682             : static bool
   11683           0 : set_onpointercancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   11684             : {
   11685           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11686           0 :   if (args[0].isObject()) {
   11687             :     { // scope for tempRoot
   11688           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11689           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11690             :     }
   11691             :   } else {
   11692           0 :     arg0 = nullptr;
   11693             :   }
   11694           0 :   self->SetOnpointercancel(Constify(arg0));
   11695           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11696             : 
   11697           0 :   return true;
   11698             : }
   11699             : 
   11700             : static const JSJitInfo onpointercancel_getterinfo = {
   11701             :   { (JSJitGetterOp)get_onpointercancel },
   11702             :   { prototypes::id::Window },
   11703             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11704             :   JSJitInfo::Getter,
   11705             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11706             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11707             :   false,  /* isInfallible. False in setters. */
   11708             :   false,  /* isMovable.  Not relevant for setters. */
   11709             :   false, /* isEliminatable.  Not relevant for setters. */
   11710             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11711             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11712             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11713             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11714             : };
   11715             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11716             : static_assert(0 < 5, "There is no slot for us");
   11717             : static const JSJitInfo onpointercancel_setterinfo = {
   11718             :   { (JSJitGetterOp)set_onpointercancel },
   11719             :   { prototypes::id::Window },
   11720             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11721             :   JSJitInfo::Setter,
   11722             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11723             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11724             :   false,  /* isInfallible. False in setters. */
   11725             :   false,  /* isMovable.  Not relevant for setters. */
   11726             :   false, /* isEliminatable.  Not relevant for setters. */
   11727             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11728             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11729             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11730             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11731             : };
   11732             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11733             : static_assert(0 < 5, "There is no slot for us");
   11734             : 
   11735             : static bool
   11736           0 : get_onpointerdown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   11737             : {
   11738           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerdown());
   11739           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11740           0 :   if (result) {
   11741           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11742           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11743           0 :       return false;
   11744             :     }
   11745           0 :     return true;
   11746             :   } else {
   11747           0 :     args.rval().setNull();
   11748           0 :     return true;
   11749             :   }
   11750             : }
   11751             : 
   11752             : static bool
   11753           0 : set_onpointerdown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   11754             : {
   11755           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11756           0 :   if (args[0].isObject()) {
   11757             :     { // scope for tempRoot
   11758           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11759           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11760             :     }
   11761             :   } else {
   11762           0 :     arg0 = nullptr;
   11763             :   }
   11764           0 :   self->SetOnpointerdown(Constify(arg0));
   11765           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11766             : 
   11767           0 :   return true;
   11768             : }
   11769             : 
   11770             : static const JSJitInfo onpointerdown_getterinfo = {
   11771             :   { (JSJitGetterOp)get_onpointerdown },
   11772             :   { prototypes::id::Window },
   11773             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11774             :   JSJitInfo::Getter,
   11775             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11776             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11777             :   false,  /* isInfallible. False in setters. */
   11778             :   false,  /* isMovable.  Not relevant for setters. */
   11779             :   false, /* isEliminatable.  Not relevant for setters. */
   11780             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11781             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11782             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11783             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11784             : };
   11785             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11786             : static_assert(0 < 5, "There is no slot for us");
   11787             : static const JSJitInfo onpointerdown_setterinfo = {
   11788             :   { (JSJitGetterOp)set_onpointerdown },
   11789             :   { prototypes::id::Window },
   11790             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11791             :   JSJitInfo::Setter,
   11792             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11793             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11794             :   false,  /* isInfallible. False in setters. */
   11795             :   false,  /* isMovable.  Not relevant for setters. */
   11796             :   false, /* isEliminatable.  Not relevant for setters. */
   11797             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11798             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11799             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11800             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11801             : };
   11802             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11803             : static_assert(0 < 5, "There is no slot for us");
   11804             : 
   11805             : static bool
   11806           0 : get_onpointerup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   11807             : {
   11808           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerup());
   11809           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11810           0 :   if (result) {
   11811           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11812           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11813           0 :       return false;
   11814             :     }
   11815           0 :     return true;
   11816             :   } else {
   11817           0 :     args.rval().setNull();
   11818           0 :     return true;
   11819             :   }
   11820             : }
   11821             : 
   11822             : static bool
   11823           0 : set_onpointerup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   11824             : {
   11825           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11826           0 :   if (args[0].isObject()) {
   11827             :     { // scope for tempRoot
   11828           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11829           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11830             :     }
   11831             :   } else {
   11832           0 :     arg0 = nullptr;
   11833             :   }
   11834           0 :   self->SetOnpointerup(Constify(arg0));
   11835           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11836             : 
   11837           0 :   return true;
   11838             : }
   11839             : 
   11840             : static const JSJitInfo onpointerup_getterinfo = {
   11841             :   { (JSJitGetterOp)get_onpointerup },
   11842             :   { prototypes::id::Window },
   11843             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11844             :   JSJitInfo::Getter,
   11845             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11846             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11847             :   false,  /* isInfallible. False in setters. */
   11848             :   false,  /* isMovable.  Not relevant for setters. */
   11849             :   false, /* isEliminatable.  Not relevant for setters. */
   11850             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11851             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11852             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11853             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11854             : };
   11855             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11856             : static_assert(0 < 5, "There is no slot for us");
   11857             : static const JSJitInfo onpointerup_setterinfo = {
   11858             :   { (JSJitGetterOp)set_onpointerup },
   11859             :   { prototypes::id::Window },
   11860             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11861             :   JSJitInfo::Setter,
   11862             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11863             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11864             :   false,  /* isInfallible. False in setters. */
   11865             :   false,  /* isMovable.  Not relevant for setters. */
   11866             :   false, /* isEliminatable.  Not relevant for setters. */
   11867             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11868             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11869             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11870             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11871             : };
   11872             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11873             : static_assert(0 < 5, "There is no slot for us");
   11874             : 
   11875             : static bool
   11876           0 : get_onpointermove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   11877             : {
   11878           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointermove());
   11879           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11880           0 :   if (result) {
   11881           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11882           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11883           0 :       return false;
   11884             :     }
   11885           0 :     return true;
   11886             :   } else {
   11887           0 :     args.rval().setNull();
   11888           0 :     return true;
   11889             :   }
   11890             : }
   11891             : 
   11892             : static bool
   11893           0 : set_onpointermove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   11894             : {
   11895           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11896           0 :   if (args[0].isObject()) {
   11897             :     { // scope for tempRoot
   11898           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11899           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11900             :     }
   11901             :   } else {
   11902           0 :     arg0 = nullptr;
   11903             :   }
   11904           0 :   self->SetOnpointermove(Constify(arg0));
   11905           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11906             : 
   11907           0 :   return true;
   11908             : }
   11909             : 
   11910             : static const JSJitInfo onpointermove_getterinfo = {
   11911             :   { (JSJitGetterOp)get_onpointermove },
   11912             :   { prototypes::id::Window },
   11913             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11914             :   JSJitInfo::Getter,
   11915             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11916             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11917             :   false,  /* isInfallible. False in setters. */
   11918             :   false,  /* isMovable.  Not relevant for setters. */
   11919             :   false, /* isEliminatable.  Not relevant for setters. */
   11920             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11921             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11922             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11923             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11924             : };
   11925             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11926             : static_assert(0 < 5, "There is no slot for us");
   11927             : static const JSJitInfo onpointermove_setterinfo = {
   11928             :   { (JSJitGetterOp)set_onpointermove },
   11929             :   { prototypes::id::Window },
   11930             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11931             :   JSJitInfo::Setter,
   11932             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11933             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11934             :   false,  /* isInfallible. False in setters. */
   11935             :   false,  /* isMovable.  Not relevant for setters. */
   11936             :   false, /* isEliminatable.  Not relevant for setters. */
   11937             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11938             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11939             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11940             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11941             : };
   11942             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11943             : static_assert(0 < 5, "There is no slot for us");
   11944             : 
   11945             : static bool
   11946           0 : get_onpointerout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   11947             : {
   11948           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerout());
   11949           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11950           0 :   if (result) {
   11951           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   11952           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   11953           0 :       return false;
   11954             :     }
   11955           0 :     return true;
   11956             :   } else {
   11957           0 :     args.rval().setNull();
   11958           0 :     return true;
   11959             :   }
   11960             : }
   11961             : 
   11962             : static bool
   11963           0 : set_onpointerout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   11964             : {
   11965           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   11966           0 :   if (args[0].isObject()) {
   11967             :     { // scope for tempRoot
   11968           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   11969           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   11970             :     }
   11971             :   } else {
   11972           0 :     arg0 = nullptr;
   11973             :   }
   11974           0 :   self->SetOnpointerout(Constify(arg0));
   11975           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11976             : 
   11977           0 :   return true;
   11978             : }
   11979             : 
   11980             : static const JSJitInfo onpointerout_getterinfo = {
   11981             :   { (JSJitGetterOp)get_onpointerout },
   11982             :   { prototypes::id::Window },
   11983             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   11984             :   JSJitInfo::Getter,
   11985             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11986             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11987             :   false,  /* isInfallible. False in setters. */
   11988             :   false,  /* isMovable.  Not relevant for setters. */
   11989             :   false, /* isEliminatable.  Not relevant for setters. */
   11990             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11991             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11992             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11993             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11994             : };
   11995             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11996             : static_assert(0 < 5, "There is no slot for us");
   11997             : static const JSJitInfo onpointerout_setterinfo = {
   11998             :   { (JSJitGetterOp)set_onpointerout },
   11999             :   { prototypes::id::Window },
   12000             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12001             :   JSJitInfo::Setter,
   12002             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12003             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12004             :   false,  /* isInfallible. False in setters. */
   12005             :   false,  /* isMovable.  Not relevant for setters. */
   12006             :   false, /* isEliminatable.  Not relevant for setters. */
   12007             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12008             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12009             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12010             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12011             : };
   12012             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12013             : static_assert(0 < 5, "There is no slot for us");
   12014             : 
   12015             : static bool
   12016           0 : get_onpointerover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12017             : {
   12018           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerover());
   12019           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12020           0 :   if (result) {
   12021           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12022           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12023           0 :       return false;
   12024             :     }
   12025           0 :     return true;
   12026             :   } else {
   12027           0 :     args.rval().setNull();
   12028           0 :     return true;
   12029             :   }
   12030             : }
   12031             : 
   12032             : static bool
   12033           0 : set_onpointerover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   12034             : {
   12035           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12036           0 :   if (args[0].isObject()) {
   12037             :     { // scope for tempRoot
   12038           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12039           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12040             :     }
   12041             :   } else {
   12042           0 :     arg0 = nullptr;
   12043             :   }
   12044           0 :   self->SetOnpointerover(Constify(arg0));
   12045           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12046             : 
   12047           0 :   return true;
   12048             : }
   12049             : 
   12050             : static const JSJitInfo onpointerover_getterinfo = {
   12051             :   { (JSJitGetterOp)get_onpointerover },
   12052             :   { prototypes::id::Window },
   12053             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12054             :   JSJitInfo::Getter,
   12055             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12056             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12057             :   false,  /* isInfallible. False in setters. */
   12058             :   false,  /* isMovable.  Not relevant for setters. */
   12059             :   false, /* isEliminatable.  Not relevant for setters. */
   12060             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12061             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12062             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12063             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12064             : };
   12065             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12066             : static_assert(0 < 5, "There is no slot for us");
   12067             : static const JSJitInfo onpointerover_setterinfo = {
   12068             :   { (JSJitGetterOp)set_onpointerover },
   12069             :   { prototypes::id::Window },
   12070             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12071             :   JSJitInfo::Setter,
   12072             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12073             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12074             :   false,  /* isInfallible. False in setters. */
   12075             :   false,  /* isMovable.  Not relevant for setters. */
   12076             :   false, /* isEliminatable.  Not relevant for setters. */
   12077             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12078             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12079             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12080             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12081             : };
   12082             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12083             : static_assert(0 < 5, "There is no slot for us");
   12084             : 
   12085             : static bool
   12086           0 : get_onpointerenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12087             : {
   12088           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerenter());
   12089           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12090           0 :   if (result) {
   12091           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12092           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12093           0 :       return false;
   12094             :     }
   12095           0 :     return true;
   12096             :   } else {
   12097           0 :     args.rval().setNull();
   12098           0 :     return true;
   12099             :   }
   12100             : }
   12101             : 
   12102             : static bool
   12103           0 : set_onpointerenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   12104             : {
   12105           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12106           0 :   if (args[0].isObject()) {
   12107             :     { // scope for tempRoot
   12108           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12109           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12110             :     }
   12111             :   } else {
   12112           0 :     arg0 = nullptr;
   12113             :   }
   12114           0 :   self->SetOnpointerenter(Constify(arg0));
   12115           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12116             : 
   12117           0 :   return true;
   12118             : }
   12119             : 
   12120             : static const JSJitInfo onpointerenter_getterinfo = {
   12121             :   { (JSJitGetterOp)get_onpointerenter },
   12122             :   { prototypes::id::Window },
   12123             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12124             :   JSJitInfo::Getter,
   12125             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12126             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12127             :   false,  /* isInfallible. False in setters. */
   12128             :   false,  /* isMovable.  Not relevant for setters. */
   12129             :   false, /* isEliminatable.  Not relevant for setters. */
   12130             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12131             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12132             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12133             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12134             : };
   12135             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12136             : static_assert(0 < 5, "There is no slot for us");
   12137             : static const JSJitInfo onpointerenter_setterinfo = {
   12138             :   { (JSJitGetterOp)set_onpointerenter },
   12139             :   { prototypes::id::Window },
   12140             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12141             :   JSJitInfo::Setter,
   12142             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12143             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12144             :   false,  /* isInfallible. False in setters. */
   12145             :   false,  /* isMovable.  Not relevant for setters. */
   12146             :   false, /* isEliminatable.  Not relevant for setters. */
   12147             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12148             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12149             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12150             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12151             : };
   12152             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12153             : static_assert(0 < 5, "There is no slot for us");
   12154             : 
   12155             : static bool
   12156           0 : get_onpointerleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12157             : {
   12158           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerleave());
   12159           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12160           0 :   if (result) {
   12161           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12162           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12163           0 :       return false;
   12164             :     }
   12165           0 :     return true;
   12166             :   } else {
   12167           0 :     args.rval().setNull();
   12168           0 :     return true;
   12169             :   }
   12170             : }
   12171             : 
   12172             : static bool
   12173           0 : set_onpointerleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   12174             : {
   12175           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12176           0 :   if (args[0].isObject()) {
   12177             :     { // scope for tempRoot
   12178           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12179           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12180             :     }
   12181             :   } else {
   12182           0 :     arg0 = nullptr;
   12183             :   }
   12184           0 :   self->SetOnpointerleave(Constify(arg0));
   12185           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12186             : 
   12187           0 :   return true;
   12188             : }
   12189             : 
   12190             : static const JSJitInfo onpointerleave_getterinfo = {
   12191             :   { (JSJitGetterOp)get_onpointerleave },
   12192             :   { prototypes::id::Window },
   12193             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12194             :   JSJitInfo::Getter,
   12195             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12196             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12197             :   false,  /* isInfallible. False in setters. */
   12198             :   false,  /* isMovable.  Not relevant for setters. */
   12199             :   false, /* isEliminatable.  Not relevant for setters. */
   12200             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12201             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12202             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12203             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12204             : };
   12205             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12206             : static_assert(0 < 5, "There is no slot for us");
   12207             : static const JSJitInfo onpointerleave_setterinfo = {
   12208             :   { (JSJitGetterOp)set_onpointerleave },
   12209             :   { prototypes::id::Window },
   12210             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12211             :   JSJitInfo::Setter,
   12212             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12213             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12214             :   false,  /* isInfallible. False in setters. */
   12215             :   false,  /* isMovable.  Not relevant for setters. */
   12216             :   false, /* isEliminatable.  Not relevant for setters. */
   12217             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12218             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12219             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12220             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12221             : };
   12222             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12223             : static_assert(0 < 5, "There is no slot for us");
   12224             : 
   12225             : static bool
   12226           0 : get_ongotpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12227             : {
   12228           0 :   RefPtr<EventHandlerNonNull> result(self->GetOngotpointercapture());
   12229           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12230           0 :   if (result) {
   12231           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12232           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12233           0 :       return false;
   12234             :     }
   12235           0 :     return true;
   12236             :   } else {
   12237           0 :     args.rval().setNull();
   12238           0 :     return true;
   12239             :   }
   12240             : }
   12241             : 
   12242             : static bool
   12243           0 : set_ongotpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   12244             : {
   12245           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12246           0 :   if (args[0].isObject()) {
   12247             :     { // scope for tempRoot
   12248           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12249           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12250             :     }
   12251             :   } else {
   12252           0 :     arg0 = nullptr;
   12253             :   }
   12254           0 :   self->SetOngotpointercapture(Constify(arg0));
   12255           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12256             : 
   12257           0 :   return true;
   12258             : }
   12259             : 
   12260             : static const JSJitInfo ongotpointercapture_getterinfo = {
   12261             :   { (JSJitGetterOp)get_ongotpointercapture },
   12262             :   { prototypes::id::Window },
   12263             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12264             :   JSJitInfo::Getter,
   12265             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12266             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12267             :   false,  /* isInfallible. False in setters. */
   12268             :   false,  /* isMovable.  Not relevant for setters. */
   12269             :   false, /* isEliminatable.  Not relevant for setters. */
   12270             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12271             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12272             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12273             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12274             : };
   12275             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12276             : static_assert(0 < 5, "There is no slot for us");
   12277             : static const JSJitInfo ongotpointercapture_setterinfo = {
   12278             :   { (JSJitGetterOp)set_ongotpointercapture },
   12279             :   { prototypes::id::Window },
   12280             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12281             :   JSJitInfo::Setter,
   12282             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12283             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12284             :   false,  /* isInfallible. False in setters. */
   12285             :   false,  /* isMovable.  Not relevant for setters. */
   12286             :   false, /* isEliminatable.  Not relevant for setters. */
   12287             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12288             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12289             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12290             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12291             : };
   12292             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12293             : static_assert(0 < 5, "There is no slot for us");
   12294             : 
   12295             : static bool
   12296           0 : get_onlostpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12297             : {
   12298           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnlostpointercapture());
   12299           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12300           0 :   if (result) {
   12301           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12302           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12303           0 :       return false;
   12304             :     }
   12305           0 :     return true;
   12306             :   } else {
   12307           0 :     args.rval().setNull();
   12308           0 :     return true;
   12309             :   }
   12310             : }
   12311             : 
   12312             : static bool
   12313           0 : set_onlostpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   12314             : {
   12315           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12316           0 :   if (args[0].isObject()) {
   12317             :     { // scope for tempRoot
   12318           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12319           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12320             :     }
   12321             :   } else {
   12322           0 :     arg0 = nullptr;
   12323             :   }
   12324           0 :   self->SetOnlostpointercapture(Constify(arg0));
   12325           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12326             : 
   12327           0 :   return true;
   12328             : }
   12329             : 
   12330             : static const JSJitInfo onlostpointercapture_getterinfo = {
   12331             :   { (JSJitGetterOp)get_onlostpointercapture },
   12332             :   { prototypes::id::Window },
   12333             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12334             :   JSJitInfo::Getter,
   12335             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12336             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12337             :   false,  /* isInfallible. False in setters. */
   12338             :   false,  /* isMovable.  Not relevant for setters. */
   12339             :   false, /* isEliminatable.  Not relevant for setters. */
   12340             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12341             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12342             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12343             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12344             : };
   12345             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12346             : static_assert(0 < 5, "There is no slot for us");
   12347             : static const JSJitInfo onlostpointercapture_setterinfo = {
   12348             :   { (JSJitGetterOp)set_onlostpointercapture },
   12349             :   { prototypes::id::Window },
   12350             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12351             :   JSJitInfo::Setter,
   12352             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12353             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12354             :   false,  /* isInfallible. False in setters. */
   12355             :   false,  /* isMovable.  Not relevant for setters. */
   12356             :   false, /* isEliminatable.  Not relevant for setters. */
   12357             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12358             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12359             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12360             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12361             : };
   12362             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12363             : static_assert(0 < 5, "There is no slot for us");
   12364             : 
   12365             : static bool
   12366           0 : get_onmozfullscreenchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12367             : {
   12368           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmozfullscreenchange());
   12369           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12370           0 :   if (result) {
   12371           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12372           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12373           0 :       return false;
   12374             :     }
   12375           0 :     return true;
   12376             :   } else {
   12377           0 :     args.rval().setNull();
   12378           0 :     return true;
   12379             :   }
   12380             : }
   12381             : 
   12382             : static bool
   12383           0 : set_onmozfullscreenchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   12384             : {
   12385           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12386           0 :   if (args[0].isObject()) {
   12387             :     { // scope for tempRoot
   12388           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12389           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12390             :     }
   12391             :   } else {
   12392           0 :     arg0 = nullptr;
   12393             :   }
   12394           0 :   self->SetOnmozfullscreenchange(Constify(arg0));
   12395           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12396             : 
   12397           0 :   return true;
   12398             : }
   12399             : 
   12400             : static const JSJitInfo onmozfullscreenchange_getterinfo = {
   12401             :   { (JSJitGetterOp)get_onmozfullscreenchange },
   12402             :   { prototypes::id::Window },
   12403             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12404             :   JSJitInfo::Getter,
   12405             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12406             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12407             :   false,  /* isInfallible. False in setters. */
   12408             :   false,  /* isMovable.  Not relevant for setters. */
   12409             :   false, /* isEliminatable.  Not relevant for setters. */
   12410             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12411             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12412             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12413             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12414             : };
   12415             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12416             : static_assert(0 < 5, "There is no slot for us");
   12417             : static const JSJitInfo onmozfullscreenchange_setterinfo = {
   12418             :   { (JSJitGetterOp)set_onmozfullscreenchange },
   12419             :   { prototypes::id::Window },
   12420             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12421             :   JSJitInfo::Setter,
   12422             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12423             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12424             :   false,  /* isInfallible. False in setters. */
   12425             :   false,  /* isMovable.  Not relevant for setters. */
   12426             :   false, /* isEliminatable.  Not relevant for setters. */
   12427             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12428             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12429             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12430             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12431             : };
   12432             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12433             : static_assert(0 < 5, "There is no slot for us");
   12434             : 
   12435             : static bool
   12436           0 : get_onmozfullscreenerror(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12437             : {
   12438           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmozfullscreenerror());
   12439           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12440           0 :   if (result) {
   12441           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12442           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12443           0 :       return false;
   12444             :     }
   12445           0 :     return true;
   12446             :   } else {
   12447           0 :     args.rval().setNull();
   12448           0 :     return true;
   12449             :   }
   12450             : }
   12451             : 
   12452             : static bool
   12453           0 : set_onmozfullscreenerror(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   12454             : {
   12455           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12456           0 :   if (args[0].isObject()) {
   12457             :     { // scope for tempRoot
   12458           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12459           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12460             :     }
   12461             :   } else {
   12462           0 :     arg0 = nullptr;
   12463             :   }
   12464           0 :   self->SetOnmozfullscreenerror(Constify(arg0));
   12465           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12466             : 
   12467           0 :   return true;
   12468             : }
   12469             : 
   12470             : static const JSJitInfo onmozfullscreenerror_getterinfo = {
   12471             :   { (JSJitGetterOp)get_onmozfullscreenerror },
   12472             :   { prototypes::id::Window },
   12473             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12474             :   JSJitInfo::Getter,
   12475             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12476             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12477             :   false,  /* isInfallible. False in setters. */
   12478             :   false,  /* isMovable.  Not relevant for setters. */
   12479             :   false, /* isEliminatable.  Not relevant for setters. */
   12480             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12481             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12482             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12483             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12484             : };
   12485             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12486             : static_assert(0 < 5, "There is no slot for us");
   12487             : static const JSJitInfo onmozfullscreenerror_setterinfo = {
   12488             :   { (JSJitGetterOp)set_onmozfullscreenerror },
   12489             :   { prototypes::id::Window },
   12490             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12491             :   JSJitInfo::Setter,
   12492             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12493             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12494             :   false,  /* isInfallible. False in setters. */
   12495             :   false,  /* isMovable.  Not relevant for setters. */
   12496             :   false, /* isEliminatable.  Not relevant for setters. */
   12497             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12498             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12499             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12500             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12501             : };
   12502             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12503             : static_assert(0 < 5, "There is no slot for us");
   12504             : 
   12505             : static bool
   12506           0 : get_onanimationcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12507             : {
   12508           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationcancel());
   12509           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12510           0 :   if (result) {
   12511           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12512           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12513           0 :       return false;
   12514             :     }
   12515           0 :     return true;
   12516             :   } else {
   12517           0 :     args.rval().setNull();
   12518           0 :     return true;
   12519             :   }
   12520             : }
   12521             : 
   12522             : static bool
   12523           0 : set_onanimationcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   12524             : {
   12525           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12526           0 :   if (args[0].isObject()) {
   12527             :     { // scope for tempRoot
   12528           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12529           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12530             :     }
   12531             :   } else {
   12532           0 :     arg0 = nullptr;
   12533             :   }
   12534           0 :   self->SetOnanimationcancel(Constify(arg0));
   12535           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12536             : 
   12537           0 :   return true;
   12538             : }
   12539             : 
   12540             : static const JSJitInfo onanimationcancel_getterinfo = {
   12541             :   { (JSJitGetterOp)get_onanimationcancel },
   12542             :   { prototypes::id::Window },
   12543             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12544             :   JSJitInfo::Getter,
   12545             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12546             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12547             :   false,  /* isInfallible. False in setters. */
   12548             :   false,  /* isMovable.  Not relevant for setters. */
   12549             :   false, /* isEliminatable.  Not relevant for setters. */
   12550             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12551             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12552             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12553             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12554             : };
   12555             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12556             : static_assert(0 < 5, "There is no slot for us");
   12557             : static const JSJitInfo onanimationcancel_setterinfo = {
   12558             :   { (JSJitGetterOp)set_onanimationcancel },
   12559             :   { prototypes::id::Window },
   12560             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12561             :   JSJitInfo::Setter,
   12562             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12563             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12564             :   false,  /* isInfallible. False in setters. */
   12565             :   false,  /* isMovable.  Not relevant for setters. */
   12566             :   false, /* isEliminatable.  Not relevant for setters. */
   12567             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12568             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12569             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12570             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12571             : };
   12572             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12573             : static_assert(0 < 5, "There is no slot for us");
   12574             : 
   12575             : static bool
   12576           0 : get_onanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12577             : {
   12578           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationend());
   12579           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12580           0 :   if (result) {
   12581           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12582           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12583           0 :       return false;
   12584             :     }
   12585           0 :     return true;
   12586             :   } else {
   12587           0 :     args.rval().setNull();
   12588           0 :     return true;
   12589             :   }
   12590             : }
   12591             : 
   12592             : static bool
   12593           0 : set_onanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   12594             : {
   12595           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12596           0 :   if (args[0].isObject()) {
   12597             :     { // scope for tempRoot
   12598           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12599           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12600             :     }
   12601             :   } else {
   12602           0 :     arg0 = nullptr;
   12603             :   }
   12604           0 :   self->SetOnanimationend(Constify(arg0));
   12605           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12606             : 
   12607           0 :   return true;
   12608             : }
   12609             : 
   12610             : static const JSJitInfo onanimationend_getterinfo = {
   12611             :   { (JSJitGetterOp)get_onanimationend },
   12612             :   { prototypes::id::Window },
   12613             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12614             :   JSJitInfo::Getter,
   12615             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12616             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12617             :   false,  /* isInfallible. False in setters. */
   12618             :   false,  /* isMovable.  Not relevant for setters. */
   12619             :   false, /* isEliminatable.  Not relevant for setters. */
   12620             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12621             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12622             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12623             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12624             : };
   12625             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12626             : static_assert(0 < 5, "There is no slot for us");
   12627             : static const JSJitInfo onanimationend_setterinfo = {
   12628             :   { (JSJitGetterOp)set_onanimationend },
   12629             :   { prototypes::id::Window },
   12630             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12631             :   JSJitInfo::Setter,
   12632             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12633             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12634             :   false,  /* isInfallible. False in setters. */
   12635             :   false,  /* isMovable.  Not relevant for setters. */
   12636             :   false, /* isEliminatable.  Not relevant for setters. */
   12637             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12638             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12639             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12640             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12641             : };
   12642             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12643             : static_assert(0 < 5, "There is no slot for us");
   12644             : 
   12645             : static bool
   12646           0 : get_onanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12647             : {
   12648           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationiteration());
   12649           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12650           0 :   if (result) {
   12651           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12652           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12653           0 :       return false;
   12654             :     }
   12655           0 :     return true;
   12656             :   } else {
   12657           0 :     args.rval().setNull();
   12658           0 :     return true;
   12659             :   }
   12660             : }
   12661             : 
   12662             : static bool
   12663           0 : set_onanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   12664             : {
   12665           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12666           0 :   if (args[0].isObject()) {
   12667             :     { // scope for tempRoot
   12668           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12669           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12670             :     }
   12671             :   } else {
   12672           0 :     arg0 = nullptr;
   12673             :   }
   12674           0 :   self->SetOnanimationiteration(Constify(arg0));
   12675           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12676             : 
   12677           0 :   return true;
   12678             : }
   12679             : 
   12680             : static const JSJitInfo onanimationiteration_getterinfo = {
   12681             :   { (JSJitGetterOp)get_onanimationiteration },
   12682             :   { prototypes::id::Window },
   12683             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12684             :   JSJitInfo::Getter,
   12685             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12686             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12687             :   false,  /* isInfallible. False in setters. */
   12688             :   false,  /* isMovable.  Not relevant for setters. */
   12689             :   false, /* isEliminatable.  Not relevant for setters. */
   12690             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12691             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12692             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12693             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12694             : };
   12695             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12696             : static_assert(0 < 5, "There is no slot for us");
   12697             : static const JSJitInfo onanimationiteration_setterinfo = {
   12698             :   { (JSJitGetterOp)set_onanimationiteration },
   12699             :   { prototypes::id::Window },
   12700             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12701             :   JSJitInfo::Setter,
   12702             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12703             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12704             :   false,  /* isInfallible. False in setters. */
   12705             :   false,  /* isMovable.  Not relevant for setters. */
   12706             :   false, /* isEliminatable.  Not relevant for setters. */
   12707             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12708             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12709             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12710             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12711             : };
   12712             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12713             : static_assert(0 < 5, "There is no slot for us");
   12714             : 
   12715             : static bool
   12716           0 : get_onanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12717             : {
   12718           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationstart());
   12719           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12720           0 :   if (result) {
   12721           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12722           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12723           0 :       return false;
   12724             :     }
   12725           0 :     return true;
   12726             :   } else {
   12727           0 :     args.rval().setNull();
   12728           0 :     return true;
   12729             :   }
   12730             : }
   12731             : 
   12732             : static bool
   12733           0 : set_onanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   12734             : {
   12735           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12736           0 :   if (args[0].isObject()) {
   12737             :     { // scope for tempRoot
   12738           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12739           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12740             :     }
   12741             :   } else {
   12742           0 :     arg0 = nullptr;
   12743             :   }
   12744           0 :   self->SetOnanimationstart(Constify(arg0));
   12745           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12746             : 
   12747           0 :   return true;
   12748             : }
   12749             : 
   12750             : static const JSJitInfo onanimationstart_getterinfo = {
   12751             :   { (JSJitGetterOp)get_onanimationstart },
   12752             :   { prototypes::id::Window },
   12753             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12754             :   JSJitInfo::Getter,
   12755             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12756             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12757             :   false,  /* isInfallible. False in setters. */
   12758             :   false,  /* isMovable.  Not relevant for setters. */
   12759             :   false, /* isEliminatable.  Not relevant for setters. */
   12760             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12761             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12762             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12763             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12764             : };
   12765             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12766             : static_assert(0 < 5, "There is no slot for us");
   12767             : static const JSJitInfo onanimationstart_setterinfo = {
   12768             :   { (JSJitGetterOp)set_onanimationstart },
   12769             :   { prototypes::id::Window },
   12770             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12771             :   JSJitInfo::Setter,
   12772             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12773             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12774             :   false,  /* isInfallible. False in setters. */
   12775             :   false,  /* isMovable.  Not relevant for setters. */
   12776             :   false, /* isEliminatable.  Not relevant for setters. */
   12777             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12778             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12779             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12780             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12781             : };
   12782             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12783             : static_assert(0 < 5, "There is no slot for us");
   12784             : 
   12785             : static bool
   12786           0 : get_ontransitioncancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12787             : {
   12788           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitioncancel());
   12789           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12790           0 :   if (result) {
   12791           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12792           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12793           0 :       return false;
   12794             :     }
   12795           0 :     return true;
   12796             :   } else {
   12797           0 :     args.rval().setNull();
   12798           0 :     return true;
   12799             :   }
   12800             : }
   12801             : 
   12802             : static bool
   12803           0 : set_ontransitioncancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   12804             : {
   12805           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12806           0 :   if (args[0].isObject()) {
   12807             :     { // scope for tempRoot
   12808           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12809           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12810             :     }
   12811             :   } else {
   12812           0 :     arg0 = nullptr;
   12813             :   }
   12814           0 :   self->SetOntransitioncancel(Constify(arg0));
   12815           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12816             : 
   12817           0 :   return true;
   12818             : }
   12819             : 
   12820             : static const JSJitInfo ontransitioncancel_getterinfo = {
   12821             :   { (JSJitGetterOp)get_ontransitioncancel },
   12822             :   { prototypes::id::Window },
   12823             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12824             :   JSJitInfo::Getter,
   12825             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12826             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12827             :   false,  /* isInfallible. False in setters. */
   12828             :   false,  /* isMovable.  Not relevant for setters. */
   12829             :   false, /* isEliminatable.  Not relevant for setters. */
   12830             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12831             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12832             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12833             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12834             : };
   12835             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12836             : static_assert(0 < 5, "There is no slot for us");
   12837             : static const JSJitInfo ontransitioncancel_setterinfo = {
   12838             :   { (JSJitGetterOp)set_ontransitioncancel },
   12839             :   { prototypes::id::Window },
   12840             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12841             :   JSJitInfo::Setter,
   12842             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12843             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12844             :   false,  /* isInfallible. False in setters. */
   12845             :   false,  /* isMovable.  Not relevant for setters. */
   12846             :   false, /* isEliminatable.  Not relevant for setters. */
   12847             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12848             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12849             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12850             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12851             : };
   12852             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12853             : static_assert(0 < 5, "There is no slot for us");
   12854             : 
   12855             : static bool
   12856           0 : get_ontransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12857             : {
   12858           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitionend());
   12859           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12860           0 :   if (result) {
   12861           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12862           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12863           0 :       return false;
   12864             :     }
   12865           0 :     return true;
   12866             :   } else {
   12867           0 :     args.rval().setNull();
   12868           0 :     return true;
   12869             :   }
   12870             : }
   12871             : 
   12872             : static bool
   12873           0 : set_ontransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   12874             : {
   12875           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12876           0 :   if (args[0].isObject()) {
   12877             :     { // scope for tempRoot
   12878           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12879           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12880             :     }
   12881             :   } else {
   12882           0 :     arg0 = nullptr;
   12883             :   }
   12884           0 :   self->SetOntransitionend(Constify(arg0));
   12885           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12886             : 
   12887           0 :   return true;
   12888             : }
   12889             : 
   12890             : static const JSJitInfo ontransitionend_getterinfo = {
   12891             :   { (JSJitGetterOp)get_ontransitionend },
   12892             :   { prototypes::id::Window },
   12893             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12894             :   JSJitInfo::Getter,
   12895             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12896             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12897             :   false,  /* isInfallible. False in setters. */
   12898             :   false,  /* isMovable.  Not relevant for setters. */
   12899             :   false, /* isEliminatable.  Not relevant for setters. */
   12900             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12901             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12902             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12903             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12904             : };
   12905             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12906             : static_assert(0 < 5, "There is no slot for us");
   12907             : static const JSJitInfo ontransitionend_setterinfo = {
   12908             :   { (JSJitGetterOp)set_ontransitionend },
   12909             :   { prototypes::id::Window },
   12910             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12911             :   JSJitInfo::Setter,
   12912             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12913             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12914             :   false,  /* isInfallible. False in setters. */
   12915             :   false,  /* isMovable.  Not relevant for setters. */
   12916             :   false, /* isEliminatable.  Not relevant for setters. */
   12917             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12918             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12919             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12920             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12921             : };
   12922             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12923             : static_assert(0 < 5, "There is no slot for us");
   12924             : 
   12925             : static bool
   12926           0 : get_ontransitionrun(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12927             : {
   12928           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitionrun());
   12929           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12930           0 :   if (result) {
   12931           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   12932           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   12933           0 :       return false;
   12934             :     }
   12935           0 :     return true;
   12936             :   } else {
   12937           0 :     args.rval().setNull();
   12938           0 :     return true;
   12939             :   }
   12940             : }
   12941             : 
   12942             : static bool
   12943           0 : set_ontransitionrun(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   12944             : {
   12945           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   12946           0 :   if (args[0].isObject()) {
   12947             :     { // scope for tempRoot
   12948           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   12949           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   12950             :     }
   12951             :   } else {
   12952           0 :     arg0 = nullptr;
   12953             :   }
   12954           0 :   self->SetOntransitionrun(Constify(arg0));
   12955           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12956             : 
   12957           0 :   return true;
   12958             : }
   12959             : 
   12960             : static const JSJitInfo ontransitionrun_getterinfo = {
   12961             :   { (JSJitGetterOp)get_ontransitionrun },
   12962             :   { prototypes::id::Window },
   12963             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12964             :   JSJitInfo::Getter,
   12965             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12966             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   12967             :   false,  /* isInfallible. False in setters. */
   12968             :   false,  /* isMovable.  Not relevant for setters. */
   12969             :   false, /* isEliminatable.  Not relevant for setters. */
   12970             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12971             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12972             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12973             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12974             : };
   12975             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12976             : static_assert(0 < 5, "There is no slot for us");
   12977             : static const JSJitInfo ontransitionrun_setterinfo = {
   12978             :   { (JSJitGetterOp)set_ontransitionrun },
   12979             :   { prototypes::id::Window },
   12980             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   12981             :   JSJitInfo::Setter,
   12982             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12983             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12984             :   false,  /* isInfallible. False in setters. */
   12985             :   false,  /* isMovable.  Not relevant for setters. */
   12986             :   false, /* isEliminatable.  Not relevant for setters. */
   12987             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12988             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12989             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12990             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12991             : };
   12992             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12993             : static_assert(0 < 5, "There is no slot for us");
   12994             : 
   12995             : static bool
   12996           0 : get_ontransitionstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   12997             : {
   12998           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitionstart());
   12999           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13000           0 :   if (result) {
   13001           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   13002           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   13003           0 :       return false;
   13004             :     }
   13005           0 :     return true;
   13006             :   } else {
   13007           0 :     args.rval().setNull();
   13008           0 :     return true;
   13009             :   }
   13010             : }
   13011             : 
   13012             : static bool
   13013           0 : set_ontransitionstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   13014             : {
   13015           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   13016           0 :   if (args[0].isObject()) {
   13017             :     { // scope for tempRoot
   13018           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   13019           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   13020             :     }
   13021             :   } else {
   13022           0 :     arg0 = nullptr;
   13023             :   }
   13024           0 :   self->SetOntransitionstart(Constify(arg0));
   13025           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13026             : 
   13027           0 :   return true;
   13028             : }
   13029             : 
   13030             : static const JSJitInfo ontransitionstart_getterinfo = {
   13031             :   { (JSJitGetterOp)get_ontransitionstart },
   13032             :   { prototypes::id::Window },
   13033             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13034             :   JSJitInfo::Getter,
   13035             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13036             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   13037             :   false,  /* isInfallible. False in setters. */
   13038             :   false,  /* isMovable.  Not relevant for setters. */
   13039             :   false, /* isEliminatable.  Not relevant for setters. */
   13040             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13041             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13042             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13043             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13044             : };
   13045             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13046             : static_assert(0 < 5, "There is no slot for us");
   13047             : static const JSJitInfo ontransitionstart_setterinfo = {
   13048             :   { (JSJitGetterOp)set_ontransitionstart },
   13049             :   { prototypes::id::Window },
   13050             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13051             :   JSJitInfo::Setter,
   13052             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13053             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13054             :   false,  /* isInfallible. False in setters. */
   13055             :   false,  /* isMovable.  Not relevant for setters. */
   13056             :   false, /* isEliminatable.  Not relevant for setters. */
   13057             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13058             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13059             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13060             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13061             : };
   13062             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13063             : static_assert(0 < 5, "There is no slot for us");
   13064             : 
   13065             : static bool
   13066           0 : get_onwebkitanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13067             : {
   13068           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationend());
   13069           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13070           0 :   if (result) {
   13071           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   13072           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   13073           0 :       return false;
   13074             :     }
   13075           0 :     return true;
   13076             :   } else {
   13077           0 :     args.rval().setNull();
   13078           0 :     return true;
   13079             :   }
   13080             : }
   13081             : 
   13082             : static bool
   13083           0 : set_onwebkitanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   13084             : {
   13085           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   13086           0 :   if (args[0].isObject()) {
   13087             :     { // scope for tempRoot
   13088           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   13089           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   13090             :     }
   13091             :   } else {
   13092           0 :     arg0 = nullptr;
   13093             :   }
   13094           0 :   self->SetOnwebkitanimationend(Constify(arg0));
   13095           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13096             : 
   13097           0 :   return true;
   13098             : }
   13099             : 
   13100             : static const JSJitInfo onwebkitanimationend_getterinfo = {
   13101             :   { (JSJitGetterOp)get_onwebkitanimationend },
   13102             :   { prototypes::id::Window },
   13103             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13104             :   JSJitInfo::Getter,
   13105             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13106             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   13107             :   false,  /* isInfallible. False in setters. */
   13108             :   false,  /* isMovable.  Not relevant for setters. */
   13109             :   false, /* isEliminatable.  Not relevant for setters. */
   13110             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13111             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13112             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13113             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13114             : };
   13115             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13116             : static_assert(0 < 5, "There is no slot for us");
   13117             : static const JSJitInfo onwebkitanimationend_setterinfo = {
   13118             :   { (JSJitGetterOp)set_onwebkitanimationend },
   13119             :   { prototypes::id::Window },
   13120             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13121             :   JSJitInfo::Setter,
   13122             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13123             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13124             :   false,  /* isInfallible. False in setters. */
   13125             :   false,  /* isMovable.  Not relevant for setters. */
   13126             :   false, /* isEliminatable.  Not relevant for setters. */
   13127             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13128             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13129             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13130             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13131             : };
   13132             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13133             : static_assert(0 < 5, "There is no slot for us");
   13134             : 
   13135             : static bool
   13136           0 : get_onwebkitanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13137             : {
   13138           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationiteration());
   13139           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13140           0 :   if (result) {
   13141           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   13142           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   13143           0 :       return false;
   13144             :     }
   13145           0 :     return true;
   13146             :   } else {
   13147           0 :     args.rval().setNull();
   13148           0 :     return true;
   13149             :   }
   13150             : }
   13151             : 
   13152             : static bool
   13153           0 : set_onwebkitanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   13154             : {
   13155           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   13156           0 :   if (args[0].isObject()) {
   13157             :     { // scope for tempRoot
   13158           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   13159           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   13160             :     }
   13161             :   } else {
   13162           0 :     arg0 = nullptr;
   13163             :   }
   13164           0 :   self->SetOnwebkitanimationiteration(Constify(arg0));
   13165           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13166             : 
   13167           0 :   return true;
   13168             : }
   13169             : 
   13170             : static const JSJitInfo onwebkitanimationiteration_getterinfo = {
   13171             :   { (JSJitGetterOp)get_onwebkitanimationiteration },
   13172             :   { prototypes::id::Window },
   13173             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13174             :   JSJitInfo::Getter,
   13175             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13176             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   13177             :   false,  /* isInfallible. False in setters. */
   13178             :   false,  /* isMovable.  Not relevant for setters. */
   13179             :   false, /* isEliminatable.  Not relevant for setters. */
   13180             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13181             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13182             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13183             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13184             : };
   13185             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13186             : static_assert(0 < 5, "There is no slot for us");
   13187             : static const JSJitInfo onwebkitanimationiteration_setterinfo = {
   13188             :   { (JSJitGetterOp)set_onwebkitanimationiteration },
   13189             :   { prototypes::id::Window },
   13190             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13191             :   JSJitInfo::Setter,
   13192             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13193             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13194             :   false,  /* isInfallible. False in setters. */
   13195             :   false,  /* isMovable.  Not relevant for setters. */
   13196             :   false, /* isEliminatable.  Not relevant for setters. */
   13197             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13198             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13199             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13200             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13201             : };
   13202             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13203             : static_assert(0 < 5, "There is no slot for us");
   13204             : 
   13205             : static bool
   13206           0 : get_onwebkitanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13207             : {
   13208           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationstart());
   13209           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13210           0 :   if (result) {
   13211           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   13212           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   13213           0 :       return false;
   13214             :     }
   13215           0 :     return true;
   13216             :   } else {
   13217           0 :     args.rval().setNull();
   13218           0 :     return true;
   13219             :   }
   13220             : }
   13221             : 
   13222             : static bool
   13223           0 : set_onwebkitanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   13224             : {
   13225           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   13226           0 :   if (args[0].isObject()) {
   13227             :     { // scope for tempRoot
   13228           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   13229           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   13230             :     }
   13231             :   } else {
   13232           0 :     arg0 = nullptr;
   13233             :   }
   13234           0 :   self->SetOnwebkitanimationstart(Constify(arg0));
   13235           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13236             : 
   13237           0 :   return true;
   13238             : }
   13239             : 
   13240             : static const JSJitInfo onwebkitanimationstart_getterinfo = {
   13241             :   { (JSJitGetterOp)get_onwebkitanimationstart },
   13242             :   { prototypes::id::Window },
   13243             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13244             :   JSJitInfo::Getter,
   13245             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13246             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   13247             :   false,  /* isInfallible. False in setters. */
   13248             :   false,  /* isMovable.  Not relevant for setters. */
   13249             :   false, /* isEliminatable.  Not relevant for setters. */
   13250             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13251             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13252             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13253             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13254             : };
   13255             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13256             : static_assert(0 < 5, "There is no slot for us");
   13257             : static const JSJitInfo onwebkitanimationstart_setterinfo = {
   13258             :   { (JSJitGetterOp)set_onwebkitanimationstart },
   13259             :   { prototypes::id::Window },
   13260             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13261             :   JSJitInfo::Setter,
   13262             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13263             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13264             :   false,  /* isInfallible. False in setters. */
   13265             :   false,  /* isMovable.  Not relevant for setters. */
   13266             :   false, /* isEliminatable.  Not relevant for setters. */
   13267             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13268             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13269             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13270             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13271             : };
   13272             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13273             : static_assert(0 < 5, "There is no slot for us");
   13274             : 
   13275             : static bool
   13276           0 : get_onwebkittransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13277             : {
   13278           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkittransitionend());
   13279           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13280           0 :   if (result) {
   13281           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   13282           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   13283           0 :       return false;
   13284             :     }
   13285           0 :     return true;
   13286             :   } else {
   13287           0 :     args.rval().setNull();
   13288           0 :     return true;
   13289             :   }
   13290             : }
   13291             : 
   13292             : static bool
   13293           0 : set_onwebkittransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   13294             : {
   13295           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   13296           0 :   if (args[0].isObject()) {
   13297             :     { // scope for tempRoot
   13298           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   13299           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   13300             :     }
   13301             :   } else {
   13302           0 :     arg0 = nullptr;
   13303             :   }
   13304           0 :   self->SetOnwebkittransitionend(Constify(arg0));
   13305           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13306             : 
   13307           0 :   return true;
   13308             : }
   13309             : 
   13310             : static const JSJitInfo onwebkittransitionend_getterinfo = {
   13311             :   { (JSJitGetterOp)get_onwebkittransitionend },
   13312             :   { prototypes::id::Window },
   13313             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13314             :   JSJitInfo::Getter,
   13315             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13316             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   13317             :   false,  /* isInfallible. False in setters. */
   13318             :   false,  /* isMovable.  Not relevant for setters. */
   13319             :   false, /* isEliminatable.  Not relevant for setters. */
   13320             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13321             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13322             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13323             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13324             : };
   13325             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13326             : static_assert(0 < 5, "There is no slot for us");
   13327             : static const JSJitInfo onwebkittransitionend_setterinfo = {
   13328             :   { (JSJitGetterOp)set_onwebkittransitionend },
   13329             :   { prototypes::id::Window },
   13330             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13331             :   JSJitInfo::Setter,
   13332             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13333             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13334             :   false,  /* isInfallible. False in setters. */
   13335             :   false,  /* isMovable.  Not relevant for setters. */
   13336             :   false, /* isEliminatable.  Not relevant for setters. */
   13337             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13338             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13339             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13340             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13341             : };
   13342             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13343             : static_assert(0 < 5, "There is no slot for us");
   13344             : 
   13345             : static bool
   13346           0 : get_u2f(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13347             : {
   13348           0 :   binding_detail::FastErrorResult rv;
   13349           0 :   auto result(StrongOrRawPtr<mozilla::dom::U2F>(self->GetU2f(rv)));
   13350           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   13351           0 :     return false;
   13352             :   }
   13353           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13354           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
   13355           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   13356           0 :     return false;
   13357             :   }
   13358           0 :   return true;
   13359             : }
   13360             : 
   13361             : static const JSJitInfo u2f_getterinfo = {
   13362             :   { (JSJitGetterOp)get_u2f },
   13363             :   { prototypes::id::Window },
   13364             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13365             :   JSJitInfo::Getter,
   13366             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13367             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
   13368             :   false,  /* isInfallible. False in setters. */
   13369             :   false,  /* isMovable.  Not relevant for setters. */
   13370             :   false, /* isEliminatable.  Not relevant for setters. */
   13371             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13372             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13373             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13374             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13375             : };
   13376             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13377             : static_assert(0 < 5, "There is no slot for us");
   13378             : 
   13379             : static bool
   13380           0 : get_onerror(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13381             : {
   13382           0 :   RefPtr<OnErrorEventHandlerNonNull> result(self->GetOnerror());
   13383           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13384           0 :   if (result) {
   13385           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   13386           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   13387           0 :       return false;
   13388             :     }
   13389           0 :     return true;
   13390             :   } else {
   13391           0 :     args.rval().setNull();
   13392           0 :     return true;
   13393             :   }
   13394             : }
   13395             : 
   13396             : static bool
   13397           0 : set_onerror(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   13398             : {
   13399           0 :   RootedCallback<RefPtr<binding_detail::FastOnErrorEventHandlerNonNull>> arg0(cx);
   13400           0 :   if (args[0].isObject()) {
   13401             :     { // scope for tempRoot
   13402           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   13403           0 :       arg0 = new binding_detail::FastOnErrorEventHandlerNonNull(tempRoot);
   13404             :     }
   13405             :   } else {
   13406           0 :     arg0 = nullptr;
   13407             :   }
   13408           0 :   self->SetOnerror(Constify(arg0));
   13409           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13410             : 
   13411           0 :   return true;
   13412             : }
   13413             : 
   13414             : static const JSJitInfo onerror_getterinfo = {
   13415             :   { (JSJitGetterOp)get_onerror },
   13416             :   { prototypes::id::Window },
   13417             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13418             :   JSJitInfo::Getter,
   13419             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13420             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   13421             :   false,  /* isInfallible. False in setters. */
   13422             :   false,  /* isMovable.  Not relevant for setters. */
   13423             :   false, /* isEliminatable.  Not relevant for setters. */
   13424             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13425             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13426             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13427             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13428             : };
   13429             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13430             : static_assert(0 < 5, "There is no slot for us");
   13431             : static const JSJitInfo onerror_setterinfo = {
   13432             :   { (JSJitGetterOp)set_onerror },
   13433             :   { prototypes::id::Window },
   13434             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13435             :   JSJitInfo::Setter,
   13436             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13437             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13438             :   false,  /* isInfallible. False in setters. */
   13439             :   false,  /* isMovable.  Not relevant for setters. */
   13440             :   false, /* isEliminatable.  Not relevant for setters. */
   13441             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13442             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13443             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13444             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13445             : };
   13446             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13447             : static_assert(0 < 5, "There is no slot for us");
   13448             : 
   13449             : static bool
   13450           0 : get_speechSynthesis(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13451             : {
   13452           0 :   binding_detail::FastErrorResult rv;
   13453           0 :   auto result(StrongOrRawPtr<mozilla::dom::SpeechSynthesis>(self->GetSpeechSynthesis(rv)));
   13454           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   13455           0 :     return false;
   13456             :   }
   13457           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13458           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
   13459           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   13460           0 :     return false;
   13461             :   }
   13462           0 :   return true;
   13463             : }
   13464             : 
   13465             : static const JSJitInfo speechSynthesis_getterinfo = {
   13466             :   { (JSJitGetterOp)get_speechSynthesis },
   13467             :   { prototypes::id::Window },
   13468             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13469             :   JSJitInfo::Getter,
   13470             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13471             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
   13472             :   false,  /* isInfallible. False in setters. */
   13473             :   false,  /* isMovable.  Not relevant for setters. */
   13474             :   false, /* isEliminatable.  Not relevant for setters. */
   13475             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13476             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13477             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13478             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13479             : };
   13480             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13481             : static_assert(0 < 5, "There is no slot for us");
   13482             : 
   13483             : static bool
   13484           0 : get_ontouchstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13485             : {
   13486           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchstart());
   13487           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13488           0 :   if (result) {
   13489           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   13490           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   13491           0 :       return false;
   13492             :     }
   13493           0 :     return true;
   13494             :   } else {
   13495           0 :     args.rval().setNull();
   13496           0 :     return true;
   13497             :   }
   13498             : }
   13499             : 
   13500             : static bool
   13501           0 : set_ontouchstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   13502             : {
   13503           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   13504           0 :   if (args[0].isObject()) {
   13505             :     { // scope for tempRoot
   13506           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   13507           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   13508             :     }
   13509             :   } else {
   13510           0 :     arg0 = nullptr;
   13511             :   }
   13512           0 :   self->SetOntouchstart(Constify(arg0));
   13513           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13514             : 
   13515           0 :   return true;
   13516             : }
   13517             : 
   13518             : static const JSJitInfo ontouchstart_getterinfo = {
   13519             :   { (JSJitGetterOp)get_ontouchstart },
   13520             :   { prototypes::id::Window },
   13521             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13522             :   JSJitInfo::Getter,
   13523             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13524             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   13525             :   false,  /* isInfallible. False in setters. */
   13526             :   false,  /* isMovable.  Not relevant for setters. */
   13527             :   false, /* isEliminatable.  Not relevant for setters. */
   13528             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13529             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13530             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13531             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13532             : };
   13533             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13534             : static_assert(0 < 5, "There is no slot for us");
   13535             : static const JSJitInfo ontouchstart_setterinfo = {
   13536             :   { (JSJitGetterOp)set_ontouchstart },
   13537             :   { prototypes::id::Window },
   13538             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13539             :   JSJitInfo::Setter,
   13540             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13541             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13542             :   false,  /* isInfallible. False in setters. */
   13543             :   false,  /* isMovable.  Not relevant for setters. */
   13544             :   false, /* isEliminatable.  Not relevant for setters. */
   13545             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13546             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13547             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13548             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13549             : };
   13550             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13551             : static_assert(0 < 5, "There is no slot for us");
   13552             : 
   13553             : static bool
   13554           0 : get_ontouchend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13555             : {
   13556           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchend());
   13557           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13558           0 :   if (result) {
   13559           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   13560           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   13561           0 :       return false;
   13562             :     }
   13563           0 :     return true;
   13564             :   } else {
   13565           0 :     args.rval().setNull();
   13566           0 :     return true;
   13567             :   }
   13568             : }
   13569             : 
   13570             : static bool
   13571           0 : set_ontouchend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   13572             : {
   13573           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   13574           0 :   if (args[0].isObject()) {
   13575             :     { // scope for tempRoot
   13576           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   13577           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   13578             :     }
   13579             :   } else {
   13580           0 :     arg0 = nullptr;
   13581             :   }
   13582           0 :   self->SetOntouchend(Constify(arg0));
   13583           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13584             : 
   13585           0 :   return true;
   13586             : }
   13587             : 
   13588             : static const JSJitInfo ontouchend_getterinfo = {
   13589             :   { (JSJitGetterOp)get_ontouchend },
   13590             :   { prototypes::id::Window },
   13591             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13592             :   JSJitInfo::Getter,
   13593             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13594             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   13595             :   false,  /* isInfallible. False in setters. */
   13596             :   false,  /* isMovable.  Not relevant for setters. */
   13597             :   false, /* isEliminatable.  Not relevant for setters. */
   13598             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13599             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13600             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13601             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13602             : };
   13603             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13604             : static_assert(0 < 5, "There is no slot for us");
   13605             : static const JSJitInfo ontouchend_setterinfo = {
   13606             :   { (JSJitGetterOp)set_ontouchend },
   13607             :   { prototypes::id::Window },
   13608             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13609             :   JSJitInfo::Setter,
   13610             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13611             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13612             :   false,  /* isInfallible. False in setters. */
   13613             :   false,  /* isMovable.  Not relevant for setters. */
   13614             :   false, /* isEliminatable.  Not relevant for setters. */
   13615             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13616             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13617             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13618             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13619             : };
   13620             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13621             : static_assert(0 < 5, "There is no slot for us");
   13622             : 
   13623             : static bool
   13624           0 : get_ontouchmove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13625             : {
   13626           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchmove());
   13627           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13628           0 :   if (result) {
   13629           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   13630           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   13631           0 :       return false;
   13632             :     }
   13633           0 :     return true;
   13634             :   } else {
   13635           0 :     args.rval().setNull();
   13636           0 :     return true;
   13637             :   }
   13638             : }
   13639             : 
   13640             : static bool
   13641           0 : set_ontouchmove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   13642             : {
   13643           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   13644           0 :   if (args[0].isObject()) {
   13645             :     { // scope for tempRoot
   13646           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   13647           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   13648             :     }
   13649             :   } else {
   13650           0 :     arg0 = nullptr;
   13651             :   }
   13652           0 :   self->SetOntouchmove(Constify(arg0));
   13653           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13654             : 
   13655           0 :   return true;
   13656             : }
   13657             : 
   13658             : static const JSJitInfo ontouchmove_getterinfo = {
   13659             :   { (JSJitGetterOp)get_ontouchmove },
   13660             :   { prototypes::id::Window },
   13661             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13662             :   JSJitInfo::Getter,
   13663             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13664             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   13665             :   false,  /* isInfallible. False in setters. */
   13666             :   false,  /* isMovable.  Not relevant for setters. */
   13667             :   false, /* isEliminatable.  Not relevant for setters. */
   13668             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13669             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13670             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13671             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13672             : };
   13673             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13674             : static_assert(0 < 5, "There is no slot for us");
   13675             : static const JSJitInfo ontouchmove_setterinfo = {
   13676             :   { (JSJitGetterOp)set_ontouchmove },
   13677             :   { prototypes::id::Window },
   13678             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13679             :   JSJitInfo::Setter,
   13680             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13681             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13682             :   false,  /* isInfallible. False in setters. */
   13683             :   false,  /* isMovable.  Not relevant for setters. */
   13684             :   false, /* isEliminatable.  Not relevant for setters. */
   13685             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13686             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13687             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13688             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13689             : };
   13690             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13691             : static_assert(0 < 5, "There is no slot for us");
   13692             : 
   13693             : static bool
   13694           0 : get_ontouchcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13695             : {
   13696           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchcancel());
   13697           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13698           0 :   if (result) {
   13699           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   13700           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   13701           0 :       return false;
   13702             :     }
   13703           0 :     return true;
   13704             :   } else {
   13705           0 :     args.rval().setNull();
   13706           0 :     return true;
   13707             :   }
   13708             : }
   13709             : 
   13710             : static bool
   13711           0 : set_ontouchcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   13712             : {
   13713           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   13714           0 :   if (args[0].isObject()) {
   13715             :     { // scope for tempRoot
   13716           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   13717           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   13718             :     }
   13719             :   } else {
   13720           0 :     arg0 = nullptr;
   13721             :   }
   13722           0 :   self->SetOntouchcancel(Constify(arg0));
   13723           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13724             : 
   13725           0 :   return true;
   13726             : }
   13727             : 
   13728             : static const JSJitInfo ontouchcancel_getterinfo = {
   13729             :   { (JSJitGetterOp)get_ontouchcancel },
   13730             :   { prototypes::id::Window },
   13731             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13732             :   JSJitInfo::Getter,
   13733             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13734             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   13735             :   false,  /* isInfallible. False in setters. */
   13736             :   false,  /* isMovable.  Not relevant for setters. */
   13737             :   false, /* isEliminatable.  Not relevant for setters. */
   13738             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13739             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13740             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13741             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13742             : };
   13743             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13744             : static_assert(0 < 5, "There is no slot for us");
   13745             : static const JSJitInfo ontouchcancel_setterinfo = {
   13746             :   { (JSJitGetterOp)set_ontouchcancel },
   13747             :   { prototypes::id::Window },
   13748             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13749             :   JSJitInfo::Setter,
   13750             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13751             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13752             :   false,  /* isInfallible. False in setters. */
   13753             :   false,  /* isMovable.  Not relevant for setters. */
   13754             :   false, /* isEliminatable.  Not relevant for setters. */
   13755             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13756             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13757             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13758             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13759             : };
   13760             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13761             : static_assert(0 < 5, "There is no slot for us");
   13762             : 
   13763             : static bool
   13764           0 : get_onafterprint(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13765             : {
   13766           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnafterprint());
   13767           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13768           0 :   if (result) {
   13769           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   13770           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   13771           0 :       return false;
   13772             :     }
   13773           0 :     return true;
   13774             :   } else {
   13775           0 :     args.rval().setNull();
   13776           0 :     return true;
   13777             :   }
   13778             : }
   13779             : 
   13780             : static bool
   13781           0 : set_onafterprint(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   13782             : {
   13783           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   13784           0 :   if (args[0].isObject()) {
   13785             :     { // scope for tempRoot
   13786           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   13787           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   13788             :     }
   13789             :   } else {
   13790           0 :     arg0 = nullptr;
   13791             :   }
   13792           0 :   self->SetOnafterprint(Constify(arg0));
   13793           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13794             : 
   13795           0 :   return true;
   13796             : }
   13797             : 
   13798             : static const JSJitInfo onafterprint_getterinfo = {
   13799             :   { (JSJitGetterOp)get_onafterprint },
   13800             :   { prototypes::id::Window },
   13801             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13802             :   JSJitInfo::Getter,
   13803             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13804             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   13805             :   false,  /* isInfallible. False in setters. */
   13806             :   false,  /* isMovable.  Not relevant for setters. */
   13807             :   false, /* isEliminatable.  Not relevant for setters. */
   13808             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13809             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13810             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13811             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13812             : };
   13813             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13814             : static_assert(0 < 5, "There is no slot for us");
   13815             : static const JSJitInfo onafterprint_setterinfo = {
   13816             :   { (JSJitGetterOp)set_onafterprint },
   13817             :   { prototypes::id::Window },
   13818             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13819             :   JSJitInfo::Setter,
   13820             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13821             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13822             :   false,  /* isInfallible. False in setters. */
   13823             :   false,  /* isMovable.  Not relevant for setters. */
   13824             :   false, /* isEliminatable.  Not relevant for setters. */
   13825             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13826             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13827             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13828             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13829             : };
   13830             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13831             : static_assert(0 < 5, "There is no slot for us");
   13832             : 
   13833             : static bool
   13834           0 : get_onbeforeprint(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13835             : {
   13836           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnbeforeprint());
   13837           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13838           0 :   if (result) {
   13839           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   13840           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   13841           0 :       return false;
   13842             :     }
   13843           0 :     return true;
   13844             :   } else {
   13845           0 :     args.rval().setNull();
   13846           0 :     return true;
   13847             :   }
   13848             : }
   13849             : 
   13850             : static bool
   13851           0 : set_onbeforeprint(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   13852             : {
   13853           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   13854           0 :   if (args[0].isObject()) {
   13855             :     { // scope for tempRoot
   13856           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   13857           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   13858             :     }
   13859             :   } else {
   13860           0 :     arg0 = nullptr;
   13861             :   }
   13862           0 :   self->SetOnbeforeprint(Constify(arg0));
   13863           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13864             : 
   13865           0 :   return true;
   13866             : }
   13867             : 
   13868             : static const JSJitInfo onbeforeprint_getterinfo = {
   13869             :   { (JSJitGetterOp)get_onbeforeprint },
   13870             :   { prototypes::id::Window },
   13871             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13872             :   JSJitInfo::Getter,
   13873             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13874             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   13875             :   false,  /* isInfallible. False in setters. */
   13876             :   false,  /* isMovable.  Not relevant for setters. */
   13877             :   false, /* isEliminatable.  Not relevant for setters. */
   13878             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13879             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13880             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13881             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13882             : };
   13883             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13884             : static_assert(0 < 5, "There is no slot for us");
   13885             : static const JSJitInfo onbeforeprint_setterinfo = {
   13886             :   { (JSJitGetterOp)set_onbeforeprint },
   13887             :   { prototypes::id::Window },
   13888             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13889             :   JSJitInfo::Setter,
   13890             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13891             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13892             :   false,  /* isInfallible. False in setters. */
   13893             :   false,  /* isMovable.  Not relevant for setters. */
   13894             :   false, /* isEliminatable.  Not relevant for setters. */
   13895             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13896             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13897             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13898             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13899             : };
   13900             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13901             : static_assert(0 < 5, "There is no slot for us");
   13902             : 
   13903             : static bool
   13904           0 : get_onbeforeunload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13905             : {
   13906           0 :   RefPtr<OnBeforeUnloadEventHandlerNonNull> result(self->GetOnbeforeunload());
   13907           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13908           0 :   if (result) {
   13909           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   13910           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   13911           0 :       return false;
   13912             :     }
   13913           0 :     return true;
   13914             :   } else {
   13915           0 :     args.rval().setNull();
   13916           0 :     return true;
   13917             :   }
   13918             : }
   13919             : 
   13920             : static bool
   13921           0 : set_onbeforeunload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   13922             : {
   13923           0 :   RootedCallback<RefPtr<binding_detail::FastOnBeforeUnloadEventHandlerNonNull>> arg0(cx);
   13924           0 :   if (args[0].isObject()) {
   13925             :     { // scope for tempRoot
   13926           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   13927           0 :       arg0 = new binding_detail::FastOnBeforeUnloadEventHandlerNonNull(tempRoot);
   13928             :     }
   13929             :   } else {
   13930           0 :     arg0 = nullptr;
   13931             :   }
   13932           0 :   self->SetOnbeforeunload(Constify(arg0));
   13933           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13934             : 
   13935           0 :   return true;
   13936             : }
   13937             : 
   13938             : static const JSJitInfo onbeforeunload_getterinfo = {
   13939             :   { (JSJitGetterOp)get_onbeforeunload },
   13940             :   { prototypes::id::Window },
   13941             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13942             :   JSJitInfo::Getter,
   13943             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13944             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   13945             :   false,  /* isInfallible. False in setters. */
   13946             :   false,  /* isMovable.  Not relevant for setters. */
   13947             :   false, /* isEliminatable.  Not relevant for setters. */
   13948             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13949             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13950             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13951             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13952             : };
   13953             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13954             : static_assert(0 < 5, "There is no slot for us");
   13955             : static const JSJitInfo onbeforeunload_setterinfo = {
   13956             :   { (JSJitGetterOp)set_onbeforeunload },
   13957             :   { prototypes::id::Window },
   13958             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   13959             :   JSJitInfo::Setter,
   13960             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13961             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13962             :   false,  /* isInfallible. False in setters. */
   13963             :   false,  /* isMovable.  Not relevant for setters. */
   13964             :   false, /* isEliminatable.  Not relevant for setters. */
   13965             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13966             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13967             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13968             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13969             : };
   13970             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13971             : static_assert(0 < 5, "There is no slot for us");
   13972             : 
   13973             : static bool
   13974           0 : get_onhashchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   13975             : {
   13976           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnhashchange());
   13977           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13978           0 :   if (result) {
   13979           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   13980           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   13981           0 :       return false;
   13982             :     }
   13983           0 :     return true;
   13984             :   } else {
   13985           0 :     args.rval().setNull();
   13986           0 :     return true;
   13987             :   }
   13988             : }
   13989             : 
   13990             : static bool
   13991           0 : set_onhashchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   13992             : {
   13993           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   13994           0 :   if (args[0].isObject()) {
   13995             :     { // scope for tempRoot
   13996           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   13997           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   13998             :     }
   13999             :   } else {
   14000           0 :     arg0 = nullptr;
   14001             :   }
   14002           0 :   self->SetOnhashchange(Constify(arg0));
   14003           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14004             : 
   14005           0 :   return true;
   14006             : }
   14007             : 
   14008             : static const JSJitInfo onhashchange_getterinfo = {
   14009             :   { (JSJitGetterOp)get_onhashchange },
   14010             :   { prototypes::id::Window },
   14011             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14012             :   JSJitInfo::Getter,
   14013             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14014             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   14015             :   false,  /* isInfallible. False in setters. */
   14016             :   false,  /* isMovable.  Not relevant for setters. */
   14017             :   false, /* isEliminatable.  Not relevant for setters. */
   14018             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14019             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14020             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14021             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14022             : };
   14023             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14024             : static_assert(0 < 5, "There is no slot for us");
   14025             : static const JSJitInfo onhashchange_setterinfo = {
   14026             :   { (JSJitGetterOp)set_onhashchange },
   14027             :   { prototypes::id::Window },
   14028             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14029             :   JSJitInfo::Setter,
   14030             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14031             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   14032             :   false,  /* isInfallible. False in setters. */
   14033             :   false,  /* isMovable.  Not relevant for setters. */
   14034             :   false, /* isEliminatable.  Not relevant for setters. */
   14035             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14036             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14037             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14038             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14039             : };
   14040             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14041             : static_assert(0 < 5, "There is no slot for us");
   14042             : 
   14043             : static bool
   14044           0 : get_onlanguagechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   14045             : {
   14046           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnlanguagechange());
   14047           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14048           0 :   if (result) {
   14049           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   14050           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   14051           0 :       return false;
   14052             :     }
   14053           0 :     return true;
   14054             :   } else {
   14055           0 :     args.rval().setNull();
   14056           0 :     return true;
   14057             :   }
   14058             : }
   14059             : 
   14060             : static bool
   14061           0 : set_onlanguagechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   14062             : {
   14063           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   14064           0 :   if (args[0].isObject()) {
   14065             :     { // scope for tempRoot
   14066           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   14067           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   14068             :     }
   14069             :   } else {
   14070           0 :     arg0 = nullptr;
   14071             :   }
   14072           0 :   self->SetOnlanguagechange(Constify(arg0));
   14073           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14074             : 
   14075           0 :   return true;
   14076             : }
   14077             : 
   14078             : static const JSJitInfo onlanguagechange_getterinfo = {
   14079             :   { (JSJitGetterOp)get_onlanguagechange },
   14080             :   { prototypes::id::Window },
   14081             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14082             :   JSJitInfo::Getter,
   14083             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14084             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   14085             :   false,  /* isInfallible. False in setters. */
   14086             :   false,  /* isMovable.  Not relevant for setters. */
   14087             :   false, /* isEliminatable.  Not relevant for setters. */
   14088             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14089             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14090             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14091             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14092             : };
   14093             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14094             : static_assert(0 < 5, "There is no slot for us");
   14095             : static const JSJitInfo onlanguagechange_setterinfo = {
   14096             :   { (JSJitGetterOp)set_onlanguagechange },
   14097             :   { prototypes::id::Window },
   14098             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14099             :   JSJitInfo::Setter,
   14100             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14101             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   14102             :   false,  /* isInfallible. False in setters. */
   14103             :   false,  /* isMovable.  Not relevant for setters. */
   14104             :   false, /* isEliminatable.  Not relevant for setters. */
   14105             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14106             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14107             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14108             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14109             : };
   14110             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14111             : static_assert(0 < 5, "There is no slot for us");
   14112             : 
   14113             : static bool
   14114           0 : get_onmessage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   14115             : {
   14116           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmessage());
   14117           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14118           0 :   if (result) {
   14119           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   14120           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   14121           0 :       return false;
   14122             :     }
   14123           0 :     return true;
   14124             :   } else {
   14125           0 :     args.rval().setNull();
   14126           0 :     return true;
   14127             :   }
   14128             : }
   14129             : 
   14130             : static bool
   14131           0 : set_onmessage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   14132             : {
   14133           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   14134           0 :   if (args[0].isObject()) {
   14135             :     { // scope for tempRoot
   14136           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   14137           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   14138             :     }
   14139             :   } else {
   14140           0 :     arg0 = nullptr;
   14141             :   }
   14142           0 :   self->SetOnmessage(Constify(arg0));
   14143           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14144             : 
   14145           0 :   return true;
   14146             : }
   14147             : 
   14148             : static const JSJitInfo onmessage_getterinfo = {
   14149             :   { (JSJitGetterOp)get_onmessage },
   14150             :   { prototypes::id::Window },
   14151             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14152             :   JSJitInfo::Getter,
   14153             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14154             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   14155             :   false,  /* isInfallible. False in setters. */
   14156             :   false,  /* isMovable.  Not relevant for setters. */
   14157             :   false, /* isEliminatable.  Not relevant for setters. */
   14158             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14159             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14160             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14161             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14162             : };
   14163             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14164             : static_assert(0 < 5, "There is no slot for us");
   14165             : static const JSJitInfo onmessage_setterinfo = {
   14166             :   { (JSJitGetterOp)set_onmessage },
   14167             :   { prototypes::id::Window },
   14168             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14169             :   JSJitInfo::Setter,
   14170             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14171             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   14172             :   false,  /* isInfallible. False in setters. */
   14173             :   false,  /* isMovable.  Not relevant for setters. */
   14174             :   false, /* isEliminatable.  Not relevant for setters. */
   14175             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14176             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14177             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14178             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14179             : };
   14180             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14181             : static_assert(0 < 5, "There is no slot for us");
   14182             : 
   14183             : static bool
   14184           0 : get_onoffline(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   14185             : {
   14186           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnoffline());
   14187           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14188           0 :   if (result) {
   14189           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   14190           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   14191           0 :       return false;
   14192             :     }
   14193           0 :     return true;
   14194             :   } else {
   14195           0 :     args.rval().setNull();
   14196           0 :     return true;
   14197             :   }
   14198             : }
   14199             : 
   14200             : static bool
   14201           0 : set_onoffline(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   14202             : {
   14203           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   14204           0 :   if (args[0].isObject()) {
   14205             :     { // scope for tempRoot
   14206           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   14207           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   14208             :     }
   14209             :   } else {
   14210           0 :     arg0 = nullptr;
   14211             :   }
   14212           0 :   self->SetOnoffline(Constify(arg0));
   14213           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14214             : 
   14215           0 :   return true;
   14216             : }
   14217             : 
   14218             : static const JSJitInfo onoffline_getterinfo = {
   14219             :   { (JSJitGetterOp)get_onoffline },
   14220             :   { prototypes::id::Window },
   14221             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14222             :   JSJitInfo::Getter,
   14223             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14224             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   14225             :   false,  /* isInfallible. False in setters. */
   14226             :   false,  /* isMovable.  Not relevant for setters. */
   14227             :   false, /* isEliminatable.  Not relevant for setters. */
   14228             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14229             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14230             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14231             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14232             : };
   14233             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14234             : static_assert(0 < 5, "There is no slot for us");
   14235             : static const JSJitInfo onoffline_setterinfo = {
   14236             :   { (JSJitGetterOp)set_onoffline },
   14237             :   { prototypes::id::Window },
   14238             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14239             :   JSJitInfo::Setter,
   14240             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14241             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   14242             :   false,  /* isInfallible. False in setters. */
   14243             :   false,  /* isMovable.  Not relevant for setters. */
   14244             :   false, /* isEliminatable.  Not relevant for setters. */
   14245             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14246             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14247             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14248             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14249             : };
   14250             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14251             : static_assert(0 < 5, "There is no slot for us");
   14252             : 
   14253             : static bool
   14254           0 : get_ononline(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   14255             : {
   14256           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnonline());
   14257           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14258           0 :   if (result) {
   14259           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   14260           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   14261           0 :       return false;
   14262             :     }
   14263           0 :     return true;
   14264             :   } else {
   14265           0 :     args.rval().setNull();
   14266           0 :     return true;
   14267             :   }
   14268             : }
   14269             : 
   14270             : static bool
   14271           0 : set_ononline(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   14272             : {
   14273           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   14274           0 :   if (args[0].isObject()) {
   14275             :     { // scope for tempRoot
   14276           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   14277           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   14278             :     }
   14279             :   } else {
   14280           0 :     arg0 = nullptr;
   14281             :   }
   14282           0 :   self->SetOnonline(Constify(arg0));
   14283           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14284             : 
   14285           0 :   return true;
   14286             : }
   14287             : 
   14288             : static const JSJitInfo ononline_getterinfo = {
   14289             :   { (JSJitGetterOp)get_ononline },
   14290             :   { prototypes::id::Window },
   14291             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14292             :   JSJitInfo::Getter,
   14293             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14294             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   14295             :   false,  /* isInfallible. False in setters. */
   14296             :   false,  /* isMovable.  Not relevant for setters. */
   14297             :   false, /* isEliminatable.  Not relevant for setters. */
   14298             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14299             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14300             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14301             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14302             : };
   14303             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14304             : static_assert(0 < 5, "There is no slot for us");
   14305             : static const JSJitInfo ononline_setterinfo = {
   14306             :   { (JSJitGetterOp)set_ononline },
   14307             :   { prototypes::id::Window },
   14308             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14309             :   JSJitInfo::Setter,
   14310             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14311             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   14312             :   false,  /* isInfallible. False in setters. */
   14313             :   false,  /* isMovable.  Not relevant for setters. */
   14314             :   false, /* isEliminatable.  Not relevant for setters. */
   14315             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14316             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14317             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14318             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14319             : };
   14320             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14321             : static_assert(0 < 5, "There is no slot for us");
   14322             : 
   14323             : static bool
   14324           0 : get_onpagehide(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   14325             : {
   14326           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpagehide());
   14327           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14328           0 :   if (result) {
   14329           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   14330           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   14331           0 :       return false;
   14332             :     }
   14333           0 :     return true;
   14334             :   } else {
   14335           0 :     args.rval().setNull();
   14336           0 :     return true;
   14337             :   }
   14338             : }
   14339             : 
   14340             : static bool
   14341           0 : set_onpagehide(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   14342             : {
   14343           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   14344           0 :   if (args[0].isObject()) {
   14345             :     { // scope for tempRoot
   14346           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   14347           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   14348             :     }
   14349             :   } else {
   14350           0 :     arg0 = nullptr;
   14351             :   }
   14352           0 :   self->SetOnpagehide(Constify(arg0));
   14353           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14354             : 
   14355           0 :   return true;
   14356             : }
   14357             : 
   14358             : static const JSJitInfo onpagehide_getterinfo = {
   14359             :   { (JSJitGetterOp)get_onpagehide },
   14360             :   { prototypes::id::Window },
   14361             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14362             :   JSJitInfo::Getter,
   14363             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14364             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   14365             :   false,  /* isInfallible. False in setters. */
   14366             :   false,  /* isMovable.  Not relevant for setters. */
   14367             :   false, /* isEliminatable.  Not relevant for setters. */
   14368             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14369             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14370             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14371             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14372             : };
   14373             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14374             : static_assert(0 < 5, "There is no slot for us");
   14375             : static const JSJitInfo onpagehide_setterinfo = {
   14376             :   { (JSJitGetterOp)set_onpagehide },
   14377             :   { prototypes::id::Window },
   14378             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14379             :   JSJitInfo::Setter,
   14380             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14381             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   14382             :   false,  /* isInfallible. False in setters. */
   14383             :   false,  /* isMovable.  Not relevant for setters. */
   14384             :   false, /* isEliminatable.  Not relevant for setters. */
   14385             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14386             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14387             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14388             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14389             : };
   14390             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14391             : static_assert(0 < 5, "There is no slot for us");
   14392             : 
   14393             : static bool
   14394           0 : get_onpageshow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   14395             : {
   14396           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpageshow());
   14397           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14398           0 :   if (result) {
   14399           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   14400           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   14401           0 :       return false;
   14402             :     }
   14403           0 :     return true;
   14404             :   } else {
   14405           0 :     args.rval().setNull();
   14406           0 :     return true;
   14407             :   }
   14408             : }
   14409             : 
   14410             : static bool
   14411           0 : set_onpageshow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   14412             : {
   14413           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   14414           0 :   if (args[0].isObject()) {
   14415             :     { // scope for tempRoot
   14416           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   14417           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   14418             :     }
   14419             :   } else {
   14420           0 :     arg0 = nullptr;
   14421             :   }
   14422           0 :   self->SetOnpageshow(Constify(arg0));
   14423           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14424             : 
   14425           0 :   return true;
   14426             : }
   14427             : 
   14428             : static const JSJitInfo onpageshow_getterinfo = {
   14429             :   { (JSJitGetterOp)get_onpageshow },
   14430             :   { prototypes::id::Window },
   14431             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14432             :   JSJitInfo::Getter,
   14433             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14434             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   14435             :   false,  /* isInfallible. False in setters. */
   14436             :   false,  /* isMovable.  Not relevant for setters. */
   14437             :   false, /* isEliminatable.  Not relevant for setters. */
   14438             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14439             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14440             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14441             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14442             : };
   14443             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14444             : static_assert(0 < 5, "There is no slot for us");
   14445             : static const JSJitInfo onpageshow_setterinfo = {
   14446             :   { (JSJitGetterOp)set_onpageshow },
   14447             :   { prototypes::id::Window },
   14448             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14449             :   JSJitInfo::Setter,
   14450             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14451             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   14452             :   false,  /* isInfallible. False in setters. */
   14453             :   false,  /* isMovable.  Not relevant for setters. */
   14454             :   false, /* isEliminatable.  Not relevant for setters. */
   14455             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14456             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14457             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14458             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14459             : };
   14460             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14461             : static_assert(0 < 5, "There is no slot for us");
   14462             : 
   14463             : static bool
   14464           0 : get_onpopstate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   14465             : {
   14466           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpopstate());
   14467           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14468           0 :   if (result) {
   14469           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   14470           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   14471           0 :       return false;
   14472             :     }
   14473           0 :     return true;
   14474             :   } else {
   14475           0 :     args.rval().setNull();
   14476           0 :     return true;
   14477             :   }
   14478             : }
   14479             : 
   14480             : static bool
   14481           0 : set_onpopstate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   14482             : {
   14483           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   14484           0 :   if (args[0].isObject()) {
   14485             :     { // scope for tempRoot
   14486           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   14487           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   14488             :     }
   14489             :   } else {
   14490           0 :     arg0 = nullptr;
   14491             :   }
   14492           0 :   self->SetOnpopstate(Constify(arg0));
   14493           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14494             : 
   14495           0 :   return true;
   14496             : }
   14497             : 
   14498             : static const JSJitInfo onpopstate_getterinfo = {
   14499             :   { (JSJitGetterOp)get_onpopstate },
   14500             :   { prototypes::id::Window },
   14501             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14502             :   JSJitInfo::Getter,
   14503             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14504             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   14505             :   false,  /* isInfallible. False in setters. */
   14506             :   false,  /* isMovable.  Not relevant for setters. */
   14507             :   false, /* isEliminatable.  Not relevant for setters. */
   14508             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14509             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14510             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14511             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14512             : };
   14513             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14514             : static_assert(0 < 5, "There is no slot for us");
   14515             : static const JSJitInfo onpopstate_setterinfo = {
   14516             :   { (JSJitGetterOp)set_onpopstate },
   14517             :   { prototypes::id::Window },
   14518             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14519             :   JSJitInfo::Setter,
   14520             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14521             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   14522             :   false,  /* isInfallible. False in setters. */
   14523             :   false,  /* isMovable.  Not relevant for setters. */
   14524             :   false, /* isEliminatable.  Not relevant for setters. */
   14525             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14526             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14527             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14528             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14529             : };
   14530             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14531             : static_assert(0 < 5, "There is no slot for us");
   14532             : 
   14533             : static bool
   14534           0 : get_onstorage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   14535             : {
   14536           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnstorage());
   14537           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14538           0 :   if (result) {
   14539           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   14540           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   14541           0 :       return false;
   14542             :     }
   14543           0 :     return true;
   14544             :   } else {
   14545           0 :     args.rval().setNull();
   14546           0 :     return true;
   14547             :   }
   14548             : }
   14549             : 
   14550             : static bool
   14551           0 : set_onstorage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   14552             : {
   14553           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   14554           0 :   if (args[0].isObject()) {
   14555             :     { // scope for tempRoot
   14556           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   14557           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   14558             :     }
   14559             :   } else {
   14560           0 :     arg0 = nullptr;
   14561             :   }
   14562           0 :   self->SetOnstorage(Constify(arg0));
   14563           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14564             : 
   14565           0 :   return true;
   14566             : }
   14567             : 
   14568             : static const JSJitInfo onstorage_getterinfo = {
   14569             :   { (JSJitGetterOp)get_onstorage },
   14570             :   { prototypes::id::Window },
   14571             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14572             :   JSJitInfo::Getter,
   14573             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14574             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   14575             :   false,  /* isInfallible. False in setters. */
   14576             :   false,  /* isMovable.  Not relevant for setters. */
   14577             :   false, /* isEliminatable.  Not relevant for setters. */
   14578             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14579             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14580             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14581             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14582             : };
   14583             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14584             : static_assert(0 < 5, "There is no slot for us");
   14585             : static const JSJitInfo onstorage_setterinfo = {
   14586             :   { (JSJitGetterOp)set_onstorage },
   14587             :   { prototypes::id::Window },
   14588             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14589             :   JSJitInfo::Setter,
   14590             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14591             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   14592             :   false,  /* isInfallible. False in setters. */
   14593             :   false,  /* isMovable.  Not relevant for setters. */
   14594             :   false, /* isEliminatable.  Not relevant for setters. */
   14595             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14596             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14597             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14598             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14599             : };
   14600             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14601             : static_assert(0 < 5, "There is no slot for us");
   14602             : 
   14603             : static bool
   14604           0 : get_onunload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   14605             : {
   14606           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnunload());
   14607           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14608           0 :   if (result) {
   14609           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
   14610           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
   14611           0 :       return false;
   14612             :     }
   14613           0 :     return true;
   14614             :   } else {
   14615           0 :     args.rval().setNull();
   14616           0 :     return true;
   14617             :   }
   14618             : }
   14619             : 
   14620             : static bool
   14621           0 : set_onunload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   14622             : {
   14623           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
   14624           0 :   if (args[0].isObject()) {
   14625             :     { // scope for tempRoot
   14626           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   14627           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
   14628             :     }
   14629             :   } else {
   14630           0 :     arg0 = nullptr;
   14631             :   }
   14632           0 :   self->SetOnunload(Constify(arg0));
   14633           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14634             : 
   14635           0 :   return true;
   14636             : }
   14637             : 
   14638             : static const JSJitInfo onunload_getterinfo = {
   14639             :   { (JSJitGetterOp)get_onunload },
   14640             :   { prototypes::id::Window },
   14641             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14642             :   JSJitInfo::Getter,
   14643             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14644             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   14645             :   false,  /* isInfallible. False in setters. */
   14646             :   false,  /* isMovable.  Not relevant for setters. */
   14647             :   false, /* isEliminatable.  Not relevant for setters. */
   14648             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14649             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14650             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14651             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14652             : };
   14653             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14654             : static_assert(0 < 5, "There is no slot for us");
   14655             : static const JSJitInfo onunload_setterinfo = {
   14656             :   { (JSJitGetterOp)set_onunload },
   14657             :   { prototypes::id::Window },
   14658             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14659             :   JSJitInfo::Setter,
   14660             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14661             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   14662             :   false,  /* isInfallible. False in setters. */
   14663             :   false,  /* isMovable.  Not relevant for setters. */
   14664             :   false, /* isEliminatable.  Not relevant for setters. */
   14665             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14666             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14667             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14668             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14669             : };
   14670             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14671             : static_assert(0 < 5, "There is no slot for us");
   14672             : 
   14673             : static bool
   14674           0 : get_localStorage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   14675             : {
   14676           0 :   binding_detail::FastErrorResult rv;
   14677           0 :   auto result(StrongOrRawPtr<mozilla::dom::Storage>(self->GetLocalStorage(rv)));
   14678           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   14679           0 :     return false;
   14680             :   }
   14681           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14682           0 :   if (!result) {
   14683           0 :     args.rval().setNull();
   14684           0 :     return true;
   14685             :   }
   14686           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
   14687           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   14688           0 :     return false;
   14689             :   }
   14690           0 :   return true;
   14691             : }
   14692             : 
   14693             : static const JSJitInfo localStorage_getterinfo = {
   14694             :   { (JSJitGetterOp)get_localStorage },
   14695             :   { prototypes::id::Window },
   14696             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14697             :   JSJitInfo::Getter,
   14698             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14699             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   14700             :   false,  /* isInfallible. False in setters. */
   14701             :   false,  /* isMovable.  Not relevant for setters. */
   14702             :   false, /* isEliminatable.  Not relevant for setters. */
   14703             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14704             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14705             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14706             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14707             : };
   14708             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14709             : static_assert(0 < 5, "There is no slot for us");
   14710             : 
   14711             : static bool
   14712           0 : get_dialogArguments(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   14713             : {
   14714           0 :   binding_detail::FastErrorResult rv;
   14715           0 :   JSCompartment* compartment = js::GetContextCompartment(cx);
   14716           0 :   MOZ_ASSERT(compartment);
   14717           0 :   JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
   14718             :   // Initializing a nonnull is pretty darn annoying...
   14719           0 :   NonNull<nsIPrincipal> subjectPrincipal;
   14720           0 :   subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
   14721           0 :   JS::Rooted<JS::Value> result(cx);
   14722           0 :   self->GetDialogArguments(cx, &result, subjectPrincipal, rv);
   14723           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   14724           0 :     return false;
   14725             :   }
   14726           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14727           0 :   JS::ExposeValueToActiveJS(result);
   14728           0 :   args.rval().set(result);
   14729           0 :   if (!MaybeWrapValue(cx, args.rval())) {
   14730           0 :     return false;
   14731             :   }
   14732           0 :   return true;
   14733             : }
   14734             : 
   14735             : static const JSJitInfo dialogArguments_getterinfo = {
   14736             :   { (JSJitGetterOp)get_dialogArguments },
   14737             :   { prototypes::id::Window },
   14738             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14739             :   JSJitInfo::Getter,
   14740             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14741             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   14742             :   false,  /* isInfallible. False in setters. */
   14743             :   false,  /* isMovable.  Not relevant for setters. */
   14744             :   false, /* isEliminatable.  Not relevant for setters. */
   14745             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14746             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14747             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14748             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14749             : };
   14750             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14751             : static_assert(0 < 5, "There is no slot for us");
   14752             : 
   14753             : static bool
   14754           0 : get_returnValue(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   14755             : {
   14756           0 :   binding_detail::FastErrorResult rv;
   14757           0 :   JSCompartment* compartment = js::GetContextCompartment(cx);
   14758           0 :   MOZ_ASSERT(compartment);
   14759           0 :   JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
   14760             :   // Initializing a nonnull is pretty darn annoying...
   14761           0 :   NonNull<nsIPrincipal> subjectPrincipal;
   14762           0 :   subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
   14763           0 :   JS::Rooted<JS::Value> result(cx);
   14764           0 :   self->GetReturnValue(cx, &result, subjectPrincipal, rv);
   14765           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   14766           0 :     return false;
   14767             :   }
   14768           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14769           0 :   JS::ExposeValueToActiveJS(result);
   14770           0 :   args.rval().set(result);
   14771           0 :   if (!MaybeWrapValue(cx, args.rval())) {
   14772           0 :     return false;
   14773             :   }
   14774           0 :   return true;
   14775             : }
   14776             : 
   14777             : static bool
   14778           0 : set_returnValue(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   14779             : {
   14780           0 :   JS::Rooted<JS::Value> arg0(cx);
   14781           0 :   arg0 = args[0];
   14782           0 :   binding_detail::FastErrorResult rv;
   14783           0 :   JSCompartment* compartment = js::GetContextCompartment(cx);
   14784           0 :   MOZ_ASSERT(compartment);
   14785           0 :   JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
   14786             :   // Initializing a nonnull is pretty darn annoying...
   14787           0 :   NonNull<nsIPrincipal> subjectPrincipal;
   14788           0 :   subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
   14789           0 :   self->SetReturnValue(cx, arg0, subjectPrincipal, rv);
   14790           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   14791           0 :     return false;
   14792             :   }
   14793           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14794             : 
   14795           0 :   return true;
   14796             : }
   14797             : 
   14798             : static const JSJitInfo returnValue_getterinfo = {
   14799             :   { (JSJitGetterOp)get_returnValue },
   14800             :   { prototypes::id::Window },
   14801             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14802             :   JSJitInfo::Getter,
   14803             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14804             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   14805             :   false,  /* isInfallible. False in setters. */
   14806             :   false,  /* isMovable.  Not relevant for setters. */
   14807             :   false, /* isEliminatable.  Not relevant for setters. */
   14808             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14809             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14810             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14811             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14812             : };
   14813             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14814             : static_assert(0 < 5, "There is no slot for us");
   14815             : static const JSJitInfo returnValue_setterinfo = {
   14816             :   { (JSJitGetterOp)set_returnValue },
   14817             :   { prototypes::id::Window },
   14818             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14819             :   JSJitInfo::Setter,
   14820             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14821             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   14822             :   false,  /* isInfallible. False in setters. */
   14823             :   false,  /* isMovable.  Not relevant for setters. */
   14824             :   false, /* isEliminatable.  Not relevant for setters. */
   14825             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14826             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14827             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14828             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14829             : };
   14830             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14831             : static_assert(0 < 5, "There is no slot for us");
   14832             : 
   14833             : static bool
   14834           0 : get_origin(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   14835             : {
   14836           0 :   DOMString result;
   14837           0 :   self->GetOrigin(result);
   14838           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14839           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
   14840           0 :     return false;
   14841             :   }
   14842           0 :   return true;
   14843             : }
   14844             : 
   14845             : static bool
   14846           0 : set_origin(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
   14847             : {
   14848           0 :   return JS_DefineProperty(cx, obj, "origin", args[0], JSPROP_ENUMERATE);
   14849             : }
   14850             : 
   14851             : static const JSJitInfo origin_getterinfo = {
   14852             :   { (JSJitGetterOp)get_origin },
   14853             :   { prototypes::id::Window },
   14854             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14855             :   JSJitInfo::Getter,
   14856             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14857             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
   14858             :   false,  /* isInfallible. False in setters. */
   14859             :   false,  /* isMovable.  Not relevant for setters. */
   14860             :   false, /* isEliminatable.  Not relevant for setters. */
   14861             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14862             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14863             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14864             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14865             : };
   14866             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14867             : static_assert(0 < 5, "There is no slot for us");
   14868             : static const JSJitInfo origin_setterinfo = {
   14869             :   { (JSJitGetterOp)set_origin },
   14870             :   { prototypes::id::Window },
   14871             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14872             :   JSJitInfo::Setter,
   14873             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14874             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   14875             :   false,  /* isInfallible. False in setters. */
   14876             :   false,  /* isMovable.  Not relevant for setters. */
   14877             :   false, /* isEliminatable.  Not relevant for setters. */
   14878             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14879             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14880             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14881             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14882             : };
   14883             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14884             : static_assert(0 < 5, "There is no slot for us");
   14885             : 
   14886             : static bool
   14887           0 : btoa(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
   14888             : {
   14889           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   14890           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.btoa");
   14891             :   }
   14892           0 :   binding_detail::FakeString arg0;
   14893           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
   14894           0 :     return false;
   14895             :   }
   14896           0 :   binding_detail::FastErrorResult rv;
   14897           0 :   DOMString result;
   14898           0 :   self->Btoa(NonNullHelper(Constify(arg0)), result, rv);
   14899           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   14900           0 :     return false;
   14901             :   }
   14902           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14903           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
   14904           0 :     return false;
   14905             :   }
   14906           0 :   return true;
   14907             : }
   14908             : 
   14909             : static const JSJitInfo btoa_methodinfo = {
   14910             :   { (JSJitGetterOp)btoa },
   14911             :   { prototypes::id::Window },
   14912             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14913             :   JSJitInfo::Method,
   14914             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14915             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
   14916             :   false,  /* isInfallible. False in setters. */
   14917             :   false,  /* isMovable.  Not relevant for setters. */
   14918             :   false, /* isEliminatable.  Not relevant for setters. */
   14919             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14920             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14921             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14922             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14923             : };
   14924             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14925             : static_assert(0 < 5, "There is no slot for us");
   14926             : 
   14927             : static bool
   14928           0 : atob(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
   14929             : {
   14930           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   14931           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.atob");
   14932             :   }
   14933           0 :   binding_detail::FakeString arg0;
   14934           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
   14935           0 :     return false;
   14936             :   }
   14937           0 :   binding_detail::FastErrorResult rv;
   14938           0 :   DOMString result;
   14939           0 :   self->Atob(NonNullHelper(Constify(arg0)), result, rv);
   14940           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   14941           0 :     return false;
   14942             :   }
   14943           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   14944           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
   14945           0 :     return false;
   14946             :   }
   14947           0 :   return true;
   14948             : }
   14949             : 
   14950             : static const JSJitInfo atob_methodinfo = {
   14951             :   { (JSJitGetterOp)atob },
   14952             :   { prototypes::id::Window },
   14953             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   14954             :   JSJitInfo::Method,
   14955             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   14956             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
   14957             :   false,  /* isInfallible. False in setters. */
   14958             :   false,  /* isMovable.  Not relevant for setters. */
   14959             :   false, /* isEliminatable.  Not relevant for setters. */
   14960             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   14961             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   14962             :   false,  /* isTypedMethod.  Only relevant for methods. */
   14963             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   14964             : };
   14965             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   14966             : static_assert(0 < 5, "There is no slot for us");
   14967             : 
   14968             : static bool
   14969          11 : setTimeout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
   14970             : {
   14971          11 :   unsigned argcount = std::min(args.length(), 3u);
   14972          11 :   switch (argcount) {
   14973             :     case 1: {
   14974             :       MOZ_FALLTHROUGH;
   14975             :     }
   14976             :     case 2: {
   14977             :       MOZ_FALLTHROUGH;
   14978             :     }
   14979             :     case 3: {
   14980          11 :       if (args[0].isObject()) {
   14981             :         do {
   14982          11 :           RootedCallback<OwningNonNull<binding_detail::FastFunction>> arg0(cx);
   14983          11 :           if (JS::IsCallable(&args[0].toObject())) {
   14984             :           { // scope for tempRoot
   14985          22 :             JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   14986          22 :             arg0 = new binding_detail::FastFunction(tempRoot);
   14987             :           }
   14988             :           } else {
   14989           0 :             break;
   14990             :           }
   14991             :           int32_t arg1;
   14992          11 :           if (args.hasDefined(1)) {
   14993          11 :             if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
   14994           0 :               return false;
   14995             :             }
   14996             :           } else {
   14997           0 :             arg1 = 0;
   14998             :           }
   14999          22 :           binding_detail::AutoSequence<JS::Value> arg2;
   15000          22 :           SequenceRooter<JS::Value> arg2_holder(cx, &arg2);
   15001          11 :           if (args.length() > 2) {
   15002           2 :             if (!arg2.SetCapacity(args.length() - 2, mozilla::fallible)) {
   15003           0 :               JS_ReportOutOfMemory(cx);
   15004           0 :               return false;
   15005             :             }
   15006           4 :             for (uint32_t variadicArg = 2; variadicArg < args.length(); ++variadicArg) {
   15007           2 :               JS::Value& slot = *arg2.AppendElement(mozilla::fallible);
   15008           2 :               slot = args[variadicArg];
   15009             :             }
   15010             :           }
   15011          22 :           binding_detail::FastErrorResult rv;
   15012          11 :           int32_t result(self->SetTimeout(cx, NonNullHelper(arg0), arg1, Constify(arg2), rv));
   15013          11 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   15014           0 :             return false;
   15015             :           }
   15016          11 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15017          11 :           args.rval().setInt32(int32_t(result));
   15018          11 :           return true;
   15019             :         } while (0);
   15020             :       }
   15021           0 :       binding_detail::FakeString arg0;
   15022           0 :       if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
   15023           0 :         return false;
   15024             :       }
   15025             :       int32_t arg1;
   15026           0 :       if (args.hasDefined(1)) {
   15027           0 :         if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
   15028           0 :           return false;
   15029             :         }
   15030             :       } else {
   15031           0 :         arg1 = 0;
   15032             :       }
   15033           0 :       binding_detail::AutoSequence<JS::Value> arg2;
   15034           0 :       SequenceRooter<JS::Value> arg2_holder(cx, &arg2);
   15035           0 :       if (args.length() > 2) {
   15036           0 :         if (!arg2.SetCapacity(args.length() - 2, mozilla::fallible)) {
   15037           0 :           JS_ReportOutOfMemory(cx);
   15038           0 :           return false;
   15039             :         }
   15040           0 :         for (uint32_t variadicArg = 2; variadicArg < args.length(); ++variadicArg) {
   15041           0 :           JS::Value& slot = *arg2.AppendElement(mozilla::fallible);
   15042           0 :           slot = args[variadicArg];
   15043             :         }
   15044             :       }
   15045           0 :       binding_detail::FastErrorResult rv;
   15046           0 :       int32_t result(self->SetTimeout(cx, NonNullHelper(Constify(arg0)), arg1, Constify(arg2), rv));
   15047           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   15048           0 :         return false;
   15049             :       }
   15050           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15051           0 :       args.rval().setInt32(int32_t(result));
   15052           0 :       return true;
   15053             :       break;
   15054             :     }
   15055             :     default: {
   15056           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.setTimeout");
   15057             :       break;
   15058             :     }
   15059             :   }
   15060             :   MOZ_CRASH("We have an always-returning default case");
   15061             :   return false;
   15062             : }
   15063             : 
   15064             : static const JSJitInfo setTimeout_methodinfo = {
   15065             :   { (JSJitGetterOp)setTimeout },
   15066             :   { prototypes::id::Window },
   15067             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   15068             :   JSJitInfo::Method,
   15069             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   15070             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
   15071             :   false,  /* isInfallible. False in setters. */
   15072             :   false,  /* isMovable.  Not relevant for setters. */
   15073             :   false, /* isEliminatable.  Not relevant for setters. */
   15074             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   15075             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   15076             :   false,  /* isTypedMethod.  Only relevant for methods. */
   15077             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   15078             : };
   15079             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   15080             : static_assert(0 < 5, "There is no slot for us");
   15081             : 
   15082             : static bool
   15083           3 : clearTimeout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
   15084             : {
   15085             :   int32_t arg0;
   15086           3 :   if (args.hasDefined(0)) {
   15087           3 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
   15088           0 :       return false;
   15089             :     }
   15090             :   } else {
   15091           0 :     arg0 = 0;
   15092             :   }
   15093           3 :   self->ClearTimeout(arg0);
   15094           3 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15095           3 :   args.rval().setUndefined();
   15096           3 :   return true;
   15097             : }
   15098             : 
   15099             : static const JSJitInfo clearTimeout_methodinfo = {
   15100             :   { (JSJitGetterOp)clearTimeout },
   15101             :   { prototypes::id::Window },
   15102             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   15103             :   JSJitInfo::Method,
   15104             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   15105             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   15106             :   false,  /* isInfallible. False in setters. */
   15107             :   false,  /* isMovable.  Not relevant for setters. */
   15108             :   false, /* isEliminatable.  Not relevant for setters. */
   15109             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   15110             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   15111             :   false,  /* isTypedMethod.  Only relevant for methods. */
   15112             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   15113             : };
   15114             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   15115             : static_assert(0 < 5, "There is no slot for us");
   15116             : 
   15117             : static bool
   15118           0 : setInterval(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
   15119             : {
   15120           0 :   unsigned argcount = std::min(args.length(), 3u);
   15121           0 :   switch (argcount) {
   15122             :     case 1: {
   15123             :       MOZ_FALLTHROUGH;
   15124             :     }
   15125             :     case 2: {
   15126             :       MOZ_FALLTHROUGH;
   15127             :     }
   15128             :     case 3: {
   15129           0 :       if (args[0].isObject()) {
   15130             :         do {
   15131           0 :           RootedCallback<OwningNonNull<binding_detail::FastFunction>> arg0(cx);
   15132           0 :           if (JS::IsCallable(&args[0].toObject())) {
   15133             :           { // scope for tempRoot
   15134           0 :             JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
   15135           0 :             arg0 = new binding_detail::FastFunction(tempRoot);
   15136             :           }
   15137             :           } else {
   15138           0 :             break;
   15139             :           }
   15140           0 :           Optional<int32_t> arg1;
   15141           0 :           if (args.hasDefined(1)) {
   15142           0 :             arg1.Construct();
   15143           0 :             if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1.Value())) {
   15144           0 :               return false;
   15145             :             }
   15146             :           }
   15147           0 :           binding_detail::AutoSequence<JS::Value> arg2;
   15148           0 :           SequenceRooter<JS::Value> arg2_holder(cx, &arg2);
   15149           0 :           if (args.length() > 2) {
   15150           0 :             if (!arg2.SetCapacity(args.length() - 2, mozilla::fallible)) {
   15151           0 :               JS_ReportOutOfMemory(cx);
   15152           0 :               return false;
   15153             :             }
   15154           0 :             for (uint32_t variadicArg = 2; variadicArg < args.length(); ++variadicArg) {
   15155           0 :               JS::Value& slot = *arg2.AppendElement(mozilla::fallible);
   15156           0 :               slot = args[variadicArg];
   15157             :             }
   15158             :           }
   15159           0 :           binding_detail::FastErrorResult rv;
   15160           0 :           int32_t result(self->SetInterval(cx, NonNullHelper(arg0), Constify(arg1), Constify(arg2), rv));
   15161           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   15162           0 :             return false;
   15163             :           }
   15164           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15165           0 :           args.rval().setInt32(int32_t(result));
   15166           0 :           return true;
   15167             :         } while (0);
   15168             :       }
   15169           0 :       binding_detail::FakeString arg0;
   15170           0 :       if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
   15171           0 :         return false;
   15172             :       }
   15173           0 :       Optional<int32_t> arg1;
   15174           0 :       if (args.hasDefined(1)) {
   15175           0 :         arg1.Construct();
   15176           0 :         if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1.Value())) {
   15177           0 :           return false;
   15178             :         }
   15179             :       }
   15180           0 :       binding_detail::AutoSequence<JS::Value> arg2;
   15181           0 :       SequenceRooter<JS::Value> arg2_holder(cx, &arg2);
   15182           0 :       if (args.length() > 2) {
   15183           0 :         if (!arg2.SetCapacity(args.length() - 2, mozilla::fallible)) {
   15184           0 :           JS_ReportOutOfMemory(cx);
   15185           0 :           return false;
   15186             :         }
   15187           0 :         for (uint32_t variadicArg = 2; variadicArg < args.length(); ++variadicArg) {
   15188           0 :           JS::Value& slot = *arg2.AppendElement(mozilla::fallible);
   15189           0 :           slot = args[variadicArg];
   15190             :         }
   15191             :       }
   15192           0 :       binding_detail::FastErrorResult rv;
   15193           0 :       int32_t result(self->SetInterval(cx, NonNullHelper(Constify(arg0)), Constify(arg1), Constify(arg2), rv));
   15194           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   15195           0 :         return false;
   15196             :       }
   15197           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15198           0 :       args.rval().setInt32(int32_t(result));
   15199           0 :       return true;
   15200             :       break;
   15201             :     }
   15202             :     default: {
   15203           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.setInterval");
   15204             :       break;
   15205             :     }
   15206             :   }
   15207             :   MOZ_CRASH("We have an always-returning default case");
   15208             :   return false;
   15209             : }
   15210             : 
   15211             : static const JSJitInfo setInterval_methodinfo = {
   15212             :   { (JSJitGetterOp)setInterval },
   15213             :   { prototypes::id::Window },
   15214             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   15215             :   JSJitInfo::Method,
   15216             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   15217             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
   15218             :   false,  /* isInfallible. False in setters. */
   15219             :   false,  /* isMovable.  Not relevant for setters. */
   15220             :   false, /* isEliminatable.  Not relevant for setters. */
   15221             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   15222             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   15223             :   false,  /* isTypedMethod.  Only relevant for methods. */
   15224             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   15225             : };
   15226             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   15227             : static_assert(0 < 5, "There is no slot for us");
   15228             : 
   15229             : static bool
   15230           0 : clearInterval(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
   15231             : {
   15232             :   int32_t arg0;
   15233           0 :   if (args.hasDefined(0)) {
   15234           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
   15235           0 :       return false;
   15236             :     }
   15237             :   } else {
   15238           0 :     arg0 = 0;
   15239             :   }
   15240           0 :   self->ClearInterval(arg0);
   15241           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15242           0 :   args.rval().setUndefined();
   15243           0 :   return true;
   15244             : }
   15245             : 
   15246             : static const JSJitInfo clearInterval_methodinfo = {
   15247             :   { (JSJitGetterOp)clearInterval },
   15248             :   { prototypes::id::Window },
   15249             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   15250             :   JSJitInfo::Method,
   15251             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   15252             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   15253             :   false,  /* isInfallible. False in setters. */
   15254             :   false,  /* isMovable.  Not relevant for setters. */
   15255             :   false, /* isEliminatable.  Not relevant for setters. */
   15256             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   15257             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   15258             :   false,  /* isTypedMethod.  Only relevant for methods. */
   15259             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   15260             : };
   15261             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   15262             : static_assert(0 < 5, "There is no slot for us");
   15263             : 
   15264             : static bool
   15265           0 : createImageBitmap(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
   15266             : {
   15267           0 :   unsigned argcount = std::min(args.length(), 5u);
   15268           0 :   switch (argcount) {
   15269             :     case 1: {
   15270           0 :       HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer arg0;
   15271           0 :       HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBufferArgument arg0_holder(arg0);
   15272             :       {
   15273           0 :         bool done = false, failed = false, tryNext;
   15274           0 :         if (args[0].isObject()) {
   15275           0 :           done = (failed = !arg0_holder.TrySetToHTMLImageElement(cx, args[0], tryNext, false)) || !tryNext ||
   15276           0 :                  (failed = !arg0_holder.TrySetToHTMLVideoElement(cx, args[0], tryNext, false)) || !tryNext ||
   15277           0 :                  (failed = !arg0_holder.TrySetToHTMLCanvasElement(cx, args[0], tryNext, false)) || !tryNext ||
   15278           0 :                  (failed = !arg0_holder.TrySetToBlob(cx, args[0], tryNext, false)) || !tryNext ||
   15279           0 :                  (failed = !arg0_holder.TrySetToImageData(cx, args[0], tryNext, false)) || !tryNext ||
   15280           0 :                  (failed = !arg0_holder.TrySetToCanvasRenderingContext2D(cx, args[0], tryNext, false)) || !tryNext ||
   15281           0 :                  (failed = !arg0_holder.TrySetToImageBitmap(cx, args[0], tryNext, false)) || !tryNext ||
   15282           0 :                  (failed = !arg0_holder.TrySetToArrayBufferView(cx, args[0], tryNext, false)) || !tryNext ||
   15283           0 :                  (failed = !arg0_holder.TrySetToArrayBuffer(cx, args[0], tryNext, false)) || !tryNext;
   15284             : 
   15285             :         }
   15286           0 :         if (failed) {
   15287           0 :           return false;
   15288             :         }
   15289           0 :         if (!done) {
   15290           0 :           ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 1 of Window.createImageBitmap", "HTMLImageElement, HTMLVideoElement, HTMLCanvasElement, Blob, ImageData, CanvasRenderingContext2D, ImageBitmap, ArrayBufferView, ArrayBuffer");
   15291           0 :           return false;
   15292             :         }
   15293             :       }
   15294           0 :       binding_detail::FastErrorResult rv;
   15295           0 :       auto result(StrongOrRawPtr<Promise>(self->CreateImageBitmap(cx, Constify(arg0), rv)));
   15296           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   15297           0 :         return false;
   15298             :       }
   15299           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15300           0 :       if (!ToJSValue(cx, result, args.rval())) {
   15301           0 :         return false;
   15302             :       }
   15303           0 :       return true;
   15304             :       break;
   15305             :     }
   15306             :     case 5: {
   15307           0 :       HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer arg0;
   15308           0 :       HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBufferArgument arg0_holder(arg0);
   15309             :       {
   15310           0 :         bool done = false, failed = false, tryNext;
   15311           0 :         if (args[0].isObject()) {
   15312           0 :           done = (failed = !arg0_holder.TrySetToHTMLImageElement(cx, args[0], tryNext, false)) || !tryNext ||
   15313           0 :                  (failed = !arg0_holder.TrySetToHTMLVideoElement(cx, args[0], tryNext, false)) || !tryNext ||
   15314           0 :                  (failed = !arg0_holder.TrySetToHTMLCanvasElement(cx, args[0], tryNext, false)) || !tryNext ||
   15315           0 :                  (failed = !arg0_holder.TrySetToBlob(cx, args[0], tryNext, false)) || !tryNext ||
   15316           0 :                  (failed = !arg0_holder.TrySetToImageData(cx, args[0], tryNext, false)) || !tryNext ||
   15317           0 :                  (failed = !arg0_holder.TrySetToCanvasRenderingContext2D(cx, args[0], tryNext, false)) || !tryNext ||
   15318           0 :                  (failed = !arg0_holder.TrySetToImageBitmap(cx, args[0], tryNext, false)) || !tryNext ||
   15319           0 :                  (failed = !arg0_holder.TrySetToArrayBufferView(cx, args[0], tryNext, false)) || !tryNext ||
   15320           0 :                  (failed = !arg0_holder.TrySetToArrayBuffer(cx, args[0], tryNext, false)) || !tryNext;
   15321             : 
   15322             :         }
   15323           0 :         if (failed) {
   15324           0 :           return false;
   15325             :         }
   15326           0 :         if (!done) {
   15327           0 :           ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 1 of Window.createImageBitmap", "HTMLImageElement, HTMLVideoElement, HTMLCanvasElement, Blob, ImageData, CanvasRenderingContext2D, ImageBitmap, ArrayBufferView, ArrayBuffer");
   15328           0 :           return false;
   15329             :         }
   15330             :       }
   15331             :       int32_t arg1;
   15332           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
   15333           0 :         return false;
   15334             :       }
   15335             :       int32_t arg2;
   15336           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
   15337           0 :         return false;
   15338             :       }
   15339           0 :       if (args[3].isNumber()) {
   15340             :         int32_t arg3;
   15341           0 :         if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
   15342           0 :           return false;
   15343             :         }
   15344             :         int32_t arg4;
   15345           0 :         if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
   15346           0 :           return false;
   15347             :         }
   15348           0 :         binding_detail::FastErrorResult rv;
   15349           0 :         auto result(StrongOrRawPtr<Promise>(self->CreateImageBitmap(cx, Constify(arg0), arg1, arg2, arg3, arg4, rv)));
   15350           0 :         if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   15351           0 :           return false;
   15352             :         }
   15353           0 :         MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15354           0 :         if (!ToJSValue(cx, result, args.rval())) {
   15355           0 :           return false;
   15356             :         }
   15357           0 :         return true;
   15358             :       }
   15359             :       ImageBitmapFormat arg3;
   15360             :       {
   15361             :         int index;
   15362           0 :         if (!FindEnumStringIndex<true>(cx, args[3], ImageBitmapFormatValues::strings, "ImageBitmapFormat", "Argument 4 of Window.createImageBitmap", &index)) {
   15363           0 :           return false;
   15364             :         }
   15365           0 :         MOZ_ASSERT(index >= 0);
   15366           0 :         arg3 = static_cast<ImageBitmapFormat>(index);
   15367             :       }
   15368           0 :       binding_detail::AutoSequence<ChannelPixelLayout> arg4;
   15369           0 :       if (args[4].isObject()) {
   15370           0 :         JS::ForOfIterator iter(cx);
   15371           0 :         if (!iter.init(args[4], JS::ForOfIterator::AllowNonIterable)) {
   15372           0 :           return false;
   15373             :         }
   15374           0 :         if (!iter.valueIsIterable()) {
   15375           0 :           ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 5 of Window.createImageBitmap");
   15376           0 :           return false;
   15377             :         }
   15378           0 :         binding_detail::AutoSequence<ChannelPixelLayout> &arr = arg4;
   15379           0 :         JS::Rooted<JS::Value> temp(cx);
   15380             :         while (true) {
   15381             :           bool done;
   15382           0 :           if (!iter.next(&temp, &done)) {
   15383           0 :             return false;
   15384             :           }
   15385           0 :           if (done) {
   15386           0 :             break;
   15387             :           }
   15388           0 :           ChannelPixelLayout* slotPtr = arr.AppendElement(mozilla::fallible);
   15389           0 :           if (!slotPtr) {
   15390           0 :             JS_ReportOutOfMemory(cx);
   15391           0 :             return false;
   15392             :           }
   15393           0 :           ChannelPixelLayout& slot = *slotPtr;
   15394           0 :           if (!slot.Init(cx, temp,  "Element of argument 5 of Window.createImageBitmap", false)) {
   15395           0 :             return false;
   15396             :           }
   15397           0 :         }
   15398             :       } else {
   15399           0 :         ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 5 of Window.createImageBitmap");
   15400           0 :         return false;
   15401             :       }
   15402           0 :       binding_detail::FastErrorResult rv;
   15403           0 :       auto result(StrongOrRawPtr<Promise>(self->CreateImageBitmap(cx, Constify(arg0), arg1, arg2, arg3, Constify(arg4), rv)));
   15404           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   15405           0 :         return false;
   15406             :       }
   15407           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15408           0 :       if (!ToJSValue(cx, result, args.rval())) {
   15409           0 :         return false;
   15410             :       }
   15411           0 :       return true;
   15412             :       break;
   15413             :     }
   15414             :     default: {
   15415           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.createImageBitmap");
   15416             :       break;
   15417             :     }
   15418             :   }
   15419             :   MOZ_CRASH("We have an always-returning default case");
   15420             :   return false;
   15421             : }
   15422             : 
   15423             : static bool
   15424           0 : createImageBitmap_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
   15425             : {
   15426             :   // Make sure to save the callee before someone maybe messes
   15427             :   // with rval().
   15428           0 :   JS::Rooted<JSObject*> callee(cx, &args.callee());
   15429           0 :   bool ok = createImageBitmap(cx, obj, self, args);
   15430           0 :   if (ok) {
   15431           0 :     return true;
   15432             :   }
   15433           0 :   return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
   15434           0 :                                    args.rval());
   15435             : }
   15436             : 
   15437             : static const JSJitInfo createImageBitmap_methodinfo = {
   15438             :   { (JSJitGetterOp)createImageBitmap_promiseWrapper },
   15439             :   { prototypes::id::Window },
   15440             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   15441             :   JSJitInfo::Method,
   15442             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   15443             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
   15444             :   false,  /* isInfallible. False in setters. */
   15445             :   false,  /* isMovable.  Not relevant for setters. */
   15446             :   false, /* isEliminatable.  Not relevant for setters. */
   15447             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   15448             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   15449             :   false,  /* isTypedMethod.  Only relevant for methods. */
   15450             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   15451             : };
   15452             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   15453             : static_assert(0 < 5, "There is no slot for us");
   15454             : 
   15455             : static bool
   15456           0 : fetch(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
   15457             : {
   15458           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   15459           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.fetch");
   15460             :   }
   15461           0 :   RequestOrUSVString arg0;
   15462           0 :   RequestOrUSVStringArgument arg0_holder(arg0);
   15463             :   {
   15464           0 :     bool done = false, failed = false, tryNext;
   15465           0 :     if (args[0].isObject()) {
   15466           0 :       done = (failed = !arg0_holder.TrySetToRequest(cx, args[0], tryNext, false)) || !tryNext;
   15467             : 
   15468             :     }
   15469           0 :     if (!done) {
   15470             :       do {
   15471           0 :         done = (failed = !arg0_holder.TrySetToUSVString(cx, args[0], tryNext)) || !tryNext;
   15472           0 :         break;
   15473             :       } while (0);
   15474             :     }
   15475           0 :     if (failed) {
   15476           0 :       return false;
   15477             :     }
   15478           0 :     if (!done) {
   15479           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 1 of Window.fetch", "Request");
   15480           0 :       return false;
   15481             :     }
   15482             :   }
   15483           0 :   RootedDictionary<binding_detail::FastRequestInit> arg1(cx);
   15484           0 :   if (!arg1.Init(cx, (args.hasDefined(1)) ? args[1] : JS::NullHandleValue,  "Argument 2 of Window.fetch", false)) {
   15485           0 :     return false;
   15486             :   }
   15487           0 :   binding_detail::FastErrorResult rv;
   15488           0 :   auto result(StrongOrRawPtr<Promise>(self->Fetch(Constify(arg0), Constify(arg1), nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv)));
   15489           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   15490           0 :     return false;
   15491             :   }
   15492           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15493             :   static_assert(!IsPointer<decltype(result)>::value,
   15494             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
   15495           0 :   if (!ToJSValue(cx, result, args.rval())) {
   15496           0 :     return false;
   15497             :   }
   15498           0 :   return true;
   15499             : }
   15500             : 
   15501             : static bool
   15502           0 : fetch_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
   15503             : {
   15504             :   // Make sure to save the callee before someone maybe messes
   15505             :   // with rval().
   15506           0 :   JS::Rooted<JSObject*> callee(cx, &args.callee());
   15507           0 :   bool ok = fetch(cx, obj, self, args);
   15508           0 :   if (ok) {
   15509           0 :     return true;
   15510             :   }
   15511           0 :   return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
   15512           0 :                                    args.rval());
   15513             : }
   15514             : 
   15515             : static const JSJitInfo fetch_methodinfo = {
   15516             :   { (JSJitGetterOp)fetch_promiseWrapper },
   15517             :   { prototypes::id::Window },
   15518             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   15519             :   JSJitInfo::Method,
   15520             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   15521             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
   15522             :   false,  /* isInfallible. False in setters. */
   15523             :   false,  /* isMovable.  Not relevant for setters. */
   15524             :   false, /* isEliminatable.  Not relevant for setters. */
   15525             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   15526             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   15527             :   false,  /* isTypedMethod.  Only relevant for methods. */
   15528             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   15529             : };
   15530             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   15531             : static_assert(0 < 5, "There is no slot for us");
   15532             : 
   15533             : static bool
   15534           0 : get_isSecureContext(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   15535             : {
   15536           0 :   bool result(self->IsSecureContext());
   15537           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15538           0 :   args.rval().setBoolean(result);
   15539           0 :   return true;
   15540             : }
   15541             : 
   15542             : static const JSJitInfo isSecureContext_getterinfo = {
   15543             :   { (JSJitGetterOp)get_isSecureContext },
   15544             :   { prototypes::id::Window },
   15545             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   15546             :   JSJitInfo::Getter,
   15547             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   15548             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
   15549             :   true,  /* isInfallible. False in setters. */
   15550             :   false,  /* isMovable.  Not relevant for setters. */
   15551             :   false, /* isEliminatable.  Not relevant for setters. */
   15552             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   15553             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   15554             :   false,  /* isTypedMethod.  Only relevant for methods. */
   15555             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   15556             : };
   15557             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   15558             : static_assert(0 < 5, "There is no slot for us");
   15559             : 
   15560             : static bool
   15561           0 : get_indexedDB(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   15562             : {
   15563           0 :   binding_detail::FastErrorResult rv;
   15564           0 :   auto result(StrongOrRawPtr<mozilla::dom::IDBFactory>(self->GetIndexedDB(rv)));
   15565           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   15566           0 :     return false;
   15567             :   }
   15568           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15569           0 :   if (!result) {
   15570           0 :     args.rval().setNull();
   15571           0 :     return true;
   15572             :   }
   15573           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
   15574           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   15575           0 :     return false;
   15576             :   }
   15577           0 :   return true;
   15578             : }
   15579             : 
   15580             : static const JSJitInfo indexedDB_getterinfo = {
   15581             :   { (JSJitGetterOp)get_indexedDB },
   15582             :   { prototypes::id::Window },
   15583             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   15584             :   JSJitInfo::Getter,
   15585             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   15586             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   15587             :   false,  /* isInfallible. False in setters. */
   15588             :   false,  /* isMovable.  Not relevant for setters. */
   15589             :   false, /* isEliminatable.  Not relevant for setters. */
   15590             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   15591             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   15592             :   false,  /* isTypedMethod.  Only relevant for methods. */
   15593             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   15594             : };
   15595             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   15596             : static_assert(0 < 5, "There is no slot for us");
   15597             : 
   15598             : static bool
   15599           0 : get_caches(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   15600             : {
   15601           0 :   binding_detail::FastErrorResult rv;
   15602           0 :   auto result(StrongOrRawPtr<mozilla::dom::cache::CacheStorage>(self->GetCaches(rv)));
   15603           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   15604           0 :     return false;
   15605             :   }
   15606           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15607           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
   15608           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   15609           0 :     return false;
   15610             :   }
   15611           0 :   return true;
   15612             : }
   15613             : 
   15614             : static const JSJitInfo caches_getterinfo = {
   15615             :   { (JSJitGetterOp)get_caches },
   15616             :   { prototypes::id::Window },
   15617             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   15618             :   JSJitInfo::Getter,
   15619             :   JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
   15620             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
   15621             :   false,  /* isInfallible. False in setters. */
   15622             :   false,  /* isMovable.  Not relevant for setters. */
   15623             :   false, /* isEliminatable.  Not relevant for setters. */
   15624             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   15625             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   15626             :   false,  /* isTypedMethod.  Only relevant for methods. */
   15627             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   15628             : };
   15629             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   15630             : static_assert(0 < 5, "There is no slot for us");
   15631             : 
   15632             : static bool
   15633           0 : get_sessionStorage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
   15634             : {
   15635           0 :   binding_detail::FastErrorResult rv;
   15636           0 :   auto result(StrongOrRawPtr<mozilla::dom::Storage>(self->GetSessionStorage(rv)));
   15637           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   15638           0 :     return false;
   15639             :   }
   15640           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15641           0 :   if (!result) {
   15642           0 :     args.rval().setNull();
   15643           0 :     return true;
   15644             :   }
   15645           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
   15646           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   15647           0 :     return false;
   15648             :   }
   15649           0 :   return true;
   15650             : }
   15651             : 
   15652             : static const JSJitInfo sessionStorage_getterinfo = {
   15653             :   { (JSJitGetterOp)get_sessionStorage },
   15654             :   { prototypes::id::Window },
   15655             :   { PrototypeTraits<prototypes::id::Window>::Depth },
   15656             :   JSJitInfo::Getter,
   15657             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   15658             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   15659             :   false,  /* isInfallible. False in setters. */
   15660             :   false,  /* isMovable.  Not relevant for setters. */
   15661             :   false, /* isEliminatable.  Not relevant for setters. */
   15662             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   15663             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   15664             :   false,  /* isTypedMethod.  Only relevant for methods. */
   15665             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   15666             : };
   15667             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   15668             : static_assert(0 < 5, "There is no slot for us");
   15669             : 
   15670             : static bool
   15671          75 : genericMethod(JSContext* cx, unsigned argc, JS::Value* vp)
   15672             : {
   15673          75 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
   15674          75 :   if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
   15675           0 :     return ThrowInvalidThis(cx, args, false, "Window");
   15676             :   }
   15677         150 :   JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
   15678             : 
   15679             :   nsGlobalWindow* self;
   15680         150 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
   15681             :   {
   15682          75 :     nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
   15683          75 :     if (NS_FAILED(rv)) {
   15684           0 :       return ThrowInvalidThis(cx, args, rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO, "Window");
   15685             :     }
   15686             :   }
   15687          75 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
   15688          75 :   MOZ_ASSERT(info->type() == JSJitInfo::Method);
   15689          75 :   JSJitMethodOp method = info->method;
   15690          75 :   bool ok = method(cx, obj, self, JSJitMethodCallArgs(args));
   15691             : #ifdef DEBUG
   15692          75 :   if (ok) {
   15693          75 :     AssertReturnTypeMatchesJitinfo(info, args.rval());
   15694             :   }
   15695             : #endif
   15696          75 :   return ok;
   15697             : }
   15698             : 
   15699             : static bool
   15700           0 : genericPromiseReturningMethod(JSContext* cx, unsigned argc, JS::Value* vp)
   15701             : {
   15702           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
   15703             :   // Make sure to save the callee before someone maybe messes with rval().
   15704           0 :   JS::Rooted<JSObject*> callee(cx, &args.callee());
   15705           0 :   if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
   15706           0 :     ThrowInvalidThis(cx, args, false, "Window");
   15707             : 
   15708           0 :     return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
   15709           0 :                                      args.rval());
   15710             :   }
   15711           0 :   JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
   15712             : 
   15713             :   nsGlobalWindow* self;
   15714           0 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
   15715             :   {
   15716           0 :     nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
   15717           0 :     if (NS_FAILED(rv)) {
   15718           0 :       ThrowInvalidThis(cx, args, rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO, "Window");
   15719             : 
   15720           0 :       return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
   15721           0 :                                        args.rval());
   15722             :     }
   15723             :   }
   15724           0 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
   15725           0 :   MOZ_ASSERT(info->type() == JSJitInfo::Method);
   15726           0 :   JSJitMethodOp method = info->method;
   15727           0 :   bool ok = method(cx, obj, self, JSJitMethodCallArgs(args));
   15728           0 :   if (ok) {
   15729             : #ifdef DEBUG
   15730           0 :     AssertReturnTypeMatchesJitinfo(info, args.rval());
   15731             : #endif
   15732           0 :     return true;
   15733             :   }
   15734             : 
   15735           0 :   MOZ_ASSERT(info->returnType() == JSVAL_TYPE_OBJECT);
   15736           0 :   return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
   15737           0 :                                    args.rval());
   15738             : }
   15739             : 
   15740             : static bool
   15741           0 : genericCrossOriginMethod(JSContext* cx, unsigned argc, JS::Value* vp)
   15742             : {
   15743           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
   15744           0 :   if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
   15745           0 :     return ThrowInvalidThis(cx, args, false, "Window");
   15746             :   }
   15747           0 :   JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
   15748             : 
   15749             :   nsGlobalWindow* self;
   15750           0 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
   15751           0 :   JS::Rooted<JSObject*> maybeUncheckedObj(cx, &rootSelf.toObject());
   15752             :   {
   15753           0 :     if (xpc::WrapperFactory::IsXrayWrapper(maybeUncheckedObj)) {
   15754           0 :       maybeUncheckedObj = js::UncheckedUnwrap(maybeUncheckedObj);
   15755             :     } else {
   15756           0 :       maybeUncheckedObj = js::CheckedUnwrap(maybeUncheckedObj);
   15757           0 :       if (!maybeUncheckedObj) {
   15758           0 :         return ThrowInvalidThis(cx, args, true, "Window");
   15759             :       }
   15760             :     }
   15761           0 :     nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&maybeUncheckedObj, self);
   15762           0 :     if (NS_FAILED(rv)) {
   15763           0 :       return ThrowInvalidThis(cx, args, rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO, "Window");
   15764             :     }
   15765             :   }
   15766           0 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
   15767           0 :   MOZ_ASSERT(info->type() == JSJitInfo::Method);
   15768           0 :   JSJitMethodOp method = info->method;
   15769           0 :   bool ok = method(cx, obj, self, JSJitMethodCallArgs(args));
   15770             : #ifdef DEBUG
   15771           0 :   if (ok) {
   15772           0 :     AssertReturnTypeMatchesJitinfo(info, args.rval());
   15773             :   }
   15774             : #endif
   15775           0 :   return ok;
   15776             : }
   15777             : 
   15778             : static bool
   15779         367 : genericGetter(JSContext* cx, unsigned argc, JS::Value* vp)
   15780             : {
   15781         367 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
   15782         367 :   if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
   15783           0 :     return ThrowInvalidThis(cx, args, false, "Window");
   15784             :   }
   15785         734 :   JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
   15786             : 
   15787             :   nsGlobalWindow* self;
   15788         734 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
   15789             :   {
   15790         367 :     nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
   15791         367 :     if (NS_FAILED(rv)) {
   15792           0 :       return ThrowInvalidThis(cx, args, rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO, "Window");
   15793             :     }
   15794             :   }
   15795         367 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
   15796         367 :   MOZ_ASSERT(info->type() == JSJitInfo::Getter);
   15797         367 :   JSJitGetterOp getter = info->getter;
   15798         367 :   bool ok = getter(cx, obj, self, JSJitGetterCallArgs(args));
   15799             : #ifdef DEBUG
   15800         367 :   if (ok) {
   15801         367 :     AssertReturnTypeMatchesJitinfo(info, args.rval());
   15802             :   }
   15803             : #endif
   15804         367 :   return ok;
   15805             : }
   15806             : 
   15807             : static bool
   15808           0 : genericLenientGetter(JSContext* cx, unsigned argc, JS::Value* vp)
   15809             : {
   15810           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
   15811           0 :   if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
   15812           0 :     MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15813           0 :     if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
   15814           0 :       return false;
   15815             :     }
   15816           0 :     args.rval().set(JS::UndefinedValue());
   15817           0 :     return true;
   15818             :   }
   15819           0 :   JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
   15820             : 
   15821             :   nsGlobalWindow* self;
   15822           0 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
   15823             :   {
   15824           0 :     nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
   15825           0 :     if (NS_FAILED(rv)) {
   15826           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15827           0 :       if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
   15828           0 :         return false;
   15829             :       }
   15830           0 :       args.rval().set(JS::UndefinedValue());
   15831           0 :       return true;
   15832             :     }
   15833             :   }
   15834           0 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
   15835           0 :   MOZ_ASSERT(info->type() == JSJitInfo::Getter);
   15836           0 :   JSJitGetterOp getter = info->getter;
   15837           0 :   bool ok = getter(cx, obj, self, JSJitGetterCallArgs(args));
   15838             : #ifdef DEBUG
   15839           0 :   if (ok) {
   15840           0 :     AssertReturnTypeMatchesJitinfo(info, args.rval());
   15841             :   }
   15842             : #endif
   15843           0 :   return ok;
   15844             : }
   15845             : 
   15846             : static bool
   15847         205 : genericCrossOriginGetter(JSContext* cx, unsigned argc, JS::Value* vp)
   15848             : {
   15849         205 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
   15850         205 :   if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
   15851           0 :     return ThrowInvalidThis(cx, args, false, "Window");
   15852             :   }
   15853         410 :   JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
   15854             : 
   15855             :   nsGlobalWindow* self;
   15856         410 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
   15857         410 :   JS::Rooted<JSObject*> maybeUncheckedObj(cx, &rootSelf.toObject());
   15858             :   {
   15859         205 :     if (xpc::WrapperFactory::IsXrayWrapper(maybeUncheckedObj)) {
   15860          22 :       maybeUncheckedObj = js::UncheckedUnwrap(maybeUncheckedObj);
   15861             :     } else {
   15862         183 :       maybeUncheckedObj = js::CheckedUnwrap(maybeUncheckedObj);
   15863         183 :       if (!maybeUncheckedObj) {
   15864           0 :         return ThrowInvalidThis(cx, args, true, "Window");
   15865             :       }
   15866             :     }
   15867         205 :     nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&maybeUncheckedObj, self);
   15868         205 :     if (NS_FAILED(rv)) {
   15869           0 :       return ThrowInvalidThis(cx, args, rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO, "Window");
   15870             :     }
   15871             :   }
   15872         205 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
   15873         205 :   MOZ_ASSERT(info->type() == JSJitInfo::Getter);
   15874         205 :   JSJitGetterOp getter = info->getter;
   15875         205 :   bool ok = getter(cx, obj, self, JSJitGetterCallArgs(args));
   15876             : #ifdef DEBUG
   15877         205 :   if (ok) {
   15878         205 :     AssertReturnTypeMatchesJitinfo(info, args.rval());
   15879             :   }
   15880             : #endif
   15881         205 :   return ok;
   15882             : }
   15883             : 
   15884             : static bool
   15885           1 : genericSetter(JSContext* cx, unsigned argc, JS::Value* vp)
   15886             : {
   15887           1 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
   15888           1 :   if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
   15889           0 :     return ThrowInvalidThis(cx, args, false, "Window");
   15890             :   }
   15891           2 :   JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
   15892             : 
   15893             :   nsGlobalWindow* self;
   15894           2 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
   15895             :   {
   15896           1 :     nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
   15897           1 :     if (NS_FAILED(rv)) {
   15898           0 :       return ThrowInvalidThis(cx, args, rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO, "Window");
   15899             :     }
   15900             :   }
   15901           1 :   if (args.length() == 0) {
   15902           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window attribute setter");
   15903             :   }
   15904           1 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
   15905           1 :   MOZ_ASSERT(info->type() == JSJitInfo::Setter);
   15906           1 :   JSJitSetterOp setter = info->setter;
   15907           1 :   if (!setter(cx, obj, self, JSJitSetterCallArgs(args))) {
   15908           0 :     return false;
   15909             :   }
   15910           1 :   args.rval().setUndefined();
   15911             : #ifdef DEBUG
   15912           1 :   AssertReturnTypeMatchesJitinfo(info, args.rval());
   15913             : #endif
   15914           1 :   return true;
   15915             : }
   15916             : 
   15917             : static bool
   15918           0 : genericLenientSetter(JSContext* cx, unsigned argc, JS::Value* vp)
   15919             : {
   15920           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
   15921           0 :   if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
   15922           0 :     MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15923           0 :     if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
   15924           0 :       return false;
   15925             :     }
   15926           0 :     args.rval().set(JS::UndefinedValue());
   15927           0 :     return true;
   15928             :   }
   15929           0 :   JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
   15930             : 
   15931             :   nsGlobalWindow* self;
   15932           0 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
   15933             :   {
   15934           0 :     nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
   15935           0 :     if (NS_FAILED(rv)) {
   15936           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
   15937           0 :       if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
   15938           0 :         return false;
   15939             :       }
   15940           0 :       args.rval().set(JS::UndefinedValue());
   15941           0 :       return true;
   15942             :     }
   15943             :   }
   15944           0 :   if (args.length() == 0) {
   15945           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window attribute setter");
   15946             :   }
   15947           0 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
   15948           0 :   MOZ_ASSERT(info->type() == JSJitInfo::Setter);
   15949           0 :   JSJitSetterOp setter = info->setter;
   15950           0 :   if (!setter(cx, obj, self, JSJitSetterCallArgs(args))) {
   15951           0 :     return false;
   15952             :   }
   15953           0 :   args.rval().setUndefined();
   15954             : #ifdef DEBUG
   15955           0 :   AssertReturnTypeMatchesJitinfo(info, args.rval());
   15956             : #endif
   15957           0 :   return true;
   15958             : }
   15959             : 
   15960             : static bool
   15961           0 : genericCrossOriginSetter(JSContext* cx, unsigned argc, JS::Value* vp)
   15962             : {
   15963           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
   15964           0 :   if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
   15965           0 :     return ThrowInvalidThis(cx, args, false, "Window");
   15966             :   }
   15967           0 :   JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
   15968             : 
   15969             :   nsGlobalWindow* self;
   15970           0 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
   15971           0 :   JS::Rooted<JSObject*> maybeUncheckedObj(cx, &rootSelf.toObject());
   15972             :   {
   15973           0 :     if (xpc::WrapperFactory::IsXrayWrapper(maybeUncheckedObj)) {
   15974           0 :       maybeUncheckedObj = js::UncheckedUnwrap(maybeUncheckedObj);
   15975             :     } else {
   15976           0 :       maybeUncheckedObj = js::CheckedUnwrap(maybeUncheckedObj);
   15977           0 :       if (!maybeUncheckedObj) {
   15978           0 :         return ThrowInvalidThis(cx, args, true, "Window");
   15979             :       }
   15980             :     }
   15981           0 :     nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&maybeUncheckedObj, self);
   15982           0 :     if (NS_FAILED(rv)) {
   15983           0 :       return ThrowInvalidThis(cx, args, rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO, "Window");
   15984             :     }
   15985             :   }
   15986           0 :   if (args.length() == 0) {
   15987           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window attribute setter");
   15988             :   }
   15989           0 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
   15990           0 :   MOZ_ASSERT(info->type() == JSJitInfo::Setter);
   15991           0 :   JSJitSetterOp setter = info->setter;
   15992           0 :   if (!setter(cx, obj, self, JSJitSetterCallArgs(args))) {
   15993           0 :     return false;
   15994             :   }
   15995           0 :   args.rval().setUndefined();
   15996             : #ifdef DEBUG
   15997           0 :   AssertReturnTypeMatchesJitinfo(info, args.rval());
   15998             : #endif
   15999           0 :   return true;
   16000             : }
   16001             : 
   16002             : static void
   16003           0 : _finalize(js::FreeOp* fop, JSObject* obj)
   16004             : {
   16005           0 :   nsGlobalWindow* self = UnwrapPossiblyNotInitializedDOMObject<nsGlobalWindow>(obj);
   16006           0 :   if (self) {
   16007           0 :     ClearWrapper(self, self, obj);
   16008           0 :     mozilla::dom::FinalizeGlobal(CastToJSFreeOp(fop), obj);
   16009           0 :     AddForDeferredFinalization<nsGlobalWindow>(self);
   16010             :   }
   16011           0 : }
   16012             : 
   16013             : static void
   16014           0 : _objectMoved(JSObject* obj, const JSObject* old)
   16015             : {
   16016           0 :   nsGlobalWindow* self = UnwrapPossiblyNotInitializedDOMObject<nsGlobalWindow>(obj);
   16017           0 :   if (self) {
   16018           0 :     UpdateWrapper(self, self, obj, old);
   16019             :   }
   16020           0 : }
   16021             : 
   16022             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
   16023             : #if defined(__clang__)
   16024             : #pragma clang diagnostic push
   16025             : #pragma clang diagnostic ignored "-Wmissing-braces"
   16026             : #endif
   16027             : static const JSFunctionSpec sMethods_specs[] = {
   16028             :   JS_FNSPEC("close", genericCrossOriginMethod, reinterpret_cast<const JSJitInfo*>(&close_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16029             :   JS_FNSPEC("stop", genericMethod, reinterpret_cast<const JSJitInfo*>(&stop_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16030             :   JS_FNSPEC("focus", genericCrossOriginMethod, reinterpret_cast<const JSJitInfo*>(&focus_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16031             :   JS_FNSPEC("blur", genericCrossOriginMethod, reinterpret_cast<const JSJitInfo*>(&blur_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16032             :   JS_FNSPEC("open", genericMethod, reinterpret_cast<const JSJitInfo*>(&open_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16033             :   JS_FNSPEC("alert", genericMethod, reinterpret_cast<const JSJitInfo*>(&alert_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16034             :   JS_FNSPEC("confirm", genericMethod, reinterpret_cast<const JSJitInfo*>(&confirm_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16035             :   JS_FNSPEC("prompt", genericMethod, reinterpret_cast<const JSJitInfo*>(&prompt_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16036             :   JS_FNSPEC("print", genericMethod, reinterpret_cast<const JSJitInfo*>(&print_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16037             :   JS_FS_END,
   16038             :   JS_FNSPEC("showModalDialog", genericMethod, reinterpret_cast<const JSJitInfo*>(&showModalDialog_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16039             :   JS_FS_END,
   16040             :   JS_FNSPEC("postMessage", genericCrossOriginMethod, reinterpret_cast<const JSJitInfo*>(&postMessage_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   16041             :   JS_FNSPEC("captureEvents", genericMethod, reinterpret_cast<const JSJitInfo*>(&captureEvents_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16042             :   JS_FNSPEC("releaseEvents", genericMethod, reinterpret_cast<const JSJitInfo*>(&releaseEvents_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16043             :   JS_FNSPEC("getSelection", genericMethod, reinterpret_cast<const JSJitInfo*>(&getSelection_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16044             :   JS_FNSPEC("getComputedStyle", genericMethod, reinterpret_cast<const JSJitInfo*>(&getComputedStyle_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16045             :   JS_FNSPEC("matchMedia", genericMethod, reinterpret_cast<const JSJitInfo*>(&matchMedia_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16046             :   JS_FNSPEC("moveTo", genericMethod, reinterpret_cast<const JSJitInfo*>(&moveTo_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   16047             :   JS_FNSPEC("moveBy", genericMethod, reinterpret_cast<const JSJitInfo*>(&moveBy_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   16048             :   JS_FNSPEC("resizeTo", genericMethod, reinterpret_cast<const JSJitInfo*>(&resizeTo_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   16049             :   JS_FNSPEC("resizeBy", genericMethod, reinterpret_cast<const JSJitInfo*>(&resizeBy_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   16050             :   JS_FNSPEC("scroll", genericMethod, reinterpret_cast<const JSJitInfo*>(&scroll_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16051             :   JS_FNSPEC("scrollTo", genericMethod, reinterpret_cast<const JSJitInfo*>(&scrollTo_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16052             :   JS_FNSPEC("scrollBy", genericMethod, reinterpret_cast<const JSJitInfo*>(&scrollBy_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16053             :   JS_FNSPEC("requestAnimationFrame", genericMethod, reinterpret_cast<const JSJitInfo*>(&requestAnimationFrame_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16054             :   JS_FNSPEC("cancelAnimationFrame", genericMethod, reinterpret_cast<const JSJitInfo*>(&cancelAnimationFrame_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16055             :   JS_FNSPEC("getDefaultComputedStyle", genericMethod, reinterpret_cast<const JSJitInfo*>(&getDefaultComputedStyle_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16056             :   JS_FNSPEC("scrollByLines", genericMethod, reinterpret_cast<const JSJitInfo*>(&scrollByLines_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16057             :   JS_FNSPEC("scrollByPages", genericMethod, reinterpret_cast<const JSJitInfo*>(&scrollByPages_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16058             :   JS_FNSPEC("sizeToContent", genericMethod, reinterpret_cast<const JSJitInfo*>(&sizeToContent_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16059             :   JS_FNSPEC("updateCommands", genericMethod, reinterpret_cast<const JSJitInfo*>(&updateCommands_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16060             :   JS_FNSPEC("find", genericMethod, reinterpret_cast<const JSJitInfo*>(&find_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16061             :   JS_FNSPEC("dump", genericMethod, reinterpret_cast<const JSJitInfo*>(&dump_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16062             :   JS_FNSPEC("setResizable", genericMethod, reinterpret_cast<const JSJitInfo*>(&setResizable_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16063             :   JS_FS_END,
   16064             :   JS_FNSPEC("requestIdleCallback", genericMethod, reinterpret_cast<const JSJitInfo*>(&requestIdleCallback_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16065             :   JS_FNSPEC("cancelIdleCallback", genericMethod, reinterpret_cast<const JSJitInfo*>(&cancelIdleCallback_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16066             :   JS_FS_END,
   16067             :   JS_FNSPEC("getAppLocalesAsBCP47", genericMethod, reinterpret_cast<const JSJitInfo*>(&getAppLocalesAsBCP47_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16068             :   JS_FS_END,
   16069             :   JS_FNSPEC("getAttention", genericMethod, reinterpret_cast<const JSJitInfo*>(&getAttention_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16070             :   JS_FNSPEC("getAttentionWithCycleCount", genericMethod, reinterpret_cast<const JSJitInfo*>(&getAttentionWithCycleCount_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16071             :   JS_FNSPEC("setCursor", genericMethod, reinterpret_cast<const JSJitInfo*>(&setCursor_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16072             :   JS_FNSPEC("maximize", genericMethod, reinterpret_cast<const JSJitInfo*>(&maximize_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16073             :   JS_FNSPEC("minimize", genericMethod, reinterpret_cast<const JSJitInfo*>(&minimize_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16074             :   JS_FNSPEC("restore", genericMethod, reinterpret_cast<const JSJitInfo*>(&restore_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16075             :   JS_FNSPEC("notifyDefaultButtonLoaded", genericMethod, reinterpret_cast<const JSJitInfo*>(&notifyDefaultButtonLoaded_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16076             :   JS_FNSPEC("getGroupMessageManager", genericMethod, reinterpret_cast<const JSJitInfo*>(&getGroupMessageManager_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16077             :   JS_FNSPEC("beginWindowMove", genericMethod, reinterpret_cast<const JSJitInfo*>(&beginWindowMove_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16078             :   JS_FS_END,
   16079             :   JS_FNSPEC("QueryInterface", QueryInterface, nullptr, 1, 0, nullptr),
   16080             :   JS_FS_END,
   16081             :   JS_FNSPEC("btoa", genericMethod, reinterpret_cast<const JSJitInfo*>(&btoa_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16082             :   JS_FNSPEC("atob", genericMethod, reinterpret_cast<const JSJitInfo*>(&atob_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16083             :   JS_FNSPEC("setTimeout", genericMethod, reinterpret_cast<const JSJitInfo*>(&setTimeout_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16084             :   JS_FNSPEC("clearTimeout", genericMethod, reinterpret_cast<const JSJitInfo*>(&clearTimeout_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16085             :   JS_FNSPEC("setInterval", genericMethod, reinterpret_cast<const JSJitInfo*>(&setInterval_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16086             :   JS_FNSPEC("clearInterval", genericMethod, reinterpret_cast<const JSJitInfo*>(&clearInterval_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16087             :   JS_FNSPEC("createImageBitmap", genericPromiseReturningMethod, reinterpret_cast<const JSJitInfo*>(&createImageBitmap_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16088             :   JS_FNSPEC("fetch", genericPromiseReturningMethod, reinterpret_cast<const JSJitInfo*>(&fetch_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16089             :   JS_FS_END
   16090             : };
   16091             : #if defined(__clang__)
   16092             : #pragma clang diagnostic pop
   16093             : #endif
   16094             : 
   16095             : static PrefableDisablers sMethods_disablers10 = {
   16096             :   true, false, 0, &nsGlobalWindow::IsShowModalDialogEnabled
   16097             : };
   16098             : 
   16099             : static PrefableDisablers sMethods_disablers36 = {
   16100             :   true, false, 0, &nsGlobalWindow::IsRequestIdleCallbackEnabled
   16101             : };
   16102             : 
   16103             : static PrefableDisablers sMethods_disablers39 = {
   16104             :   true, false, 0, &IsChromeOrXBL
   16105             : };
   16106             : 
   16107             : static PrefableDisablers sMethods_disablers41 = {
   16108             :   true, false, 0, &nsGlobalWindow::IsPrivilegedChromeWindow
   16109             : };
   16110             : 
   16111             : static PrefableDisablers sMethods_disablers51 = {
   16112             :   true, false, 0, &WantsQueryInterface<nsGlobalWindow>::Enabled
   16113             : };
   16114             : 
   16115             : // Can't be const because the pref-enabled boolean needs to be writable
   16116             : static Prefable<const JSFunctionSpec> sMethods[] = {
   16117             :   { nullptr, &sMethods_specs[0] },
   16118             :   { &sMethods_disablers10, &sMethods_specs[10] },
   16119             :   { nullptr, &sMethods_specs[12] },
   16120             :   { &sMethods_disablers36, &sMethods_specs[36] },
   16121             :   { &sMethods_disablers39, &sMethods_specs[39] },
   16122             :   { &sMethods_disablers41, &sMethods_specs[41] },
   16123             :   { &sMethods_disablers51, &sMethods_specs[51] },
   16124             :   { nullptr, &sMethods_specs[53] },
   16125             :   { nullptr, nullptr }
   16126             : };
   16127             : 
   16128             : static_assert(8 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
   16129             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
   16130             : static_assert(23 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
   16131             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
   16132             : 
   16133             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
   16134             : #if defined(__clang__)
   16135             : #pragma clang diagnostic push
   16136             : #pragma clang diagnostic ignored "-Wmissing-braces"
   16137             : #endif
   16138             : static const JSFunctionSpec sChromeMethods_specs[] = {
   16139             :   JS_FNSPEC("mozScrollSnap", genericMethod, reinterpret_cast<const JSJitInfo*>(&mozScrollSnap_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16140             :   JS_FNSPEC("back", genericMethod, reinterpret_cast<const JSJitInfo*>(&back_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16141             :   JS_FNSPEC("forward", genericMethod, reinterpret_cast<const JSJitInfo*>(&forward_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16142             :   JS_FNSPEC("home", genericMethod, reinterpret_cast<const JSJitInfo*>(&home_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16143             :   JS_FNSPEC("openDialog", genericMethod, reinterpret_cast<const JSJitInfo*>(&openDialog_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   16144             :   JS_FNSPEC("getInterface", genericMethod, reinterpret_cast<const JSJitInfo*>(&getInterface_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   16145             :   JS_FS_END
   16146             : };
   16147             : #if defined(__clang__)
   16148             : #pragma clang diagnostic pop
   16149             : #endif
   16150             : 
   16151             : 
   16152             : // Can't be const because the pref-enabled boolean needs to be writable
   16153             : static Prefable<const JSFunctionSpec> sChromeMethods[] = {
   16154             :   { nullptr, &sChromeMethods_specs[0] },
   16155             :   { nullptr, nullptr }
   16156             : };
   16157             : 
   16158             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
   16159             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
   16160             : static_assert(6 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
   16161             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
   16162             : 
   16163             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
   16164             : #if defined(__clang__)
   16165             : #pragma clang diagnostic push
   16166             : #pragma clang diagnostic ignored "-Wmissing-braces"
   16167             : #endif
   16168             : static const JSPropertySpec sAttributes_specs[] = {
   16169             :   { "self", JSPROP_SHARED | JSPROP_ENUMERATE, genericCrossOriginGetter, &self_getterinfo, genericSetter, &self_setterinfo },
   16170             :   { "name", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &name_getterinfo, genericSetter, &name_setterinfo },
   16171             :   { "history", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &history_getterinfo, nullptr, nullptr },
   16172             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16173             :   { "customElements", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &customElements_getterinfo, nullptr, nullptr },
   16174             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16175             :   { "locationbar", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &locationbar_getterinfo, genericSetter, &locationbar_setterinfo },
   16176             :   { "menubar", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &menubar_getterinfo, genericSetter, &menubar_setterinfo },
   16177             :   { "personalbar", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &personalbar_getterinfo, genericSetter, &personalbar_setterinfo },
   16178             :   { "scrollbars", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &scrollbars_getterinfo, genericSetter, &scrollbars_setterinfo },
   16179             :   { "statusbar", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &statusbar_getterinfo, genericSetter, &statusbar_setterinfo },
   16180             :   { "toolbar", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &toolbar_getterinfo, genericSetter, &toolbar_setterinfo },
   16181             :   { "status", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &status_getterinfo, genericSetter, &status_setterinfo },
   16182             :   { "closed", JSPROP_SHARED | JSPROP_ENUMERATE, genericCrossOriginGetter, &closed_getterinfo, nullptr, nullptr },
   16183             :   { "frames", JSPROP_SHARED | JSPROP_ENUMERATE, genericCrossOriginGetter, &frames_getterinfo, genericSetter, &frames_setterinfo },
   16184             :   { "length", JSPROP_SHARED | JSPROP_ENUMERATE, genericCrossOriginGetter, &length_getterinfo, genericSetter, &length_setterinfo },
   16185             :   { "opener", JSPROP_SHARED | JSPROP_ENUMERATE, genericCrossOriginGetter, &opener_getterinfo, genericSetter, &opener_setterinfo },
   16186             :   { "parent", JSPROP_SHARED | JSPROP_ENUMERATE, genericCrossOriginGetter, &parent_getterinfo, genericSetter, &parent_setterinfo },
   16187             :   { "frameElement", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &frameElement_getterinfo, nullptr, nullptr },
   16188             :   { "navigator", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &navigator_getterinfo, nullptr, nullptr },
   16189             :   { "external", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &external_getterinfo, genericSetter, &external_setterinfo },
   16190             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16191             :   { "applicationCache", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &applicationCache_getterinfo, nullptr, nullptr },
   16192             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16193             :   { "onappinstalled", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onappinstalled_getterinfo, genericSetter, &onappinstalled_setterinfo },
   16194             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16195             :   { "screen", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &screen_getterinfo, genericSetter, &screen_setterinfo },
   16196             :   { "innerWidth", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &innerWidth_getterinfo, genericSetter, &innerWidth_setterinfo },
   16197             :   { "innerHeight", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &innerHeight_getterinfo, genericSetter, &innerHeight_setterinfo },
   16198             :   { "scrollX", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &scrollX_getterinfo, genericSetter, &scrollX_setterinfo },
   16199             :   { "pageXOffset", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &pageXOffset_getterinfo, genericSetter, &pageXOffset_setterinfo },
   16200             :   { "scrollY", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &scrollY_getterinfo, genericSetter, &scrollY_setterinfo },
   16201             :   { "pageYOffset", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &pageYOffset_getterinfo, genericSetter, &pageYOffset_setterinfo },
   16202             :   { "screenX", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &screenX_getterinfo, genericSetter, &screenX_setterinfo },
   16203             :   { "screenY", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &screenY_getterinfo, genericSetter, &screenY_setterinfo },
   16204             :   { "outerWidth", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &outerWidth_getterinfo, genericSetter, &outerWidth_setterinfo },
   16205             :   { "outerHeight", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &outerHeight_getterinfo, genericSetter, &outerHeight_setterinfo },
   16206             :   { "performance", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &performance_getterinfo, genericSetter, &performance_setterinfo },
   16207             :   { "mozInnerScreenX", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &mozInnerScreenX_getterinfo, nullptr, nullptr },
   16208             :   { "mozInnerScreenY", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &mozInnerScreenY_getterinfo, nullptr, nullptr },
   16209             :   { "devicePixelRatio", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &devicePixelRatio_getterinfo, genericSetter, &devicePixelRatio_setterinfo },
   16210             :   { "scrollMaxX", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &scrollMaxX_getterinfo, genericSetter, &scrollMaxX_setterinfo },
   16211             :   { "scrollMaxY", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &scrollMaxY_getterinfo, genericSetter, &scrollMaxY_setterinfo },
   16212             :   { "fullScreen", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &fullScreen_getterinfo, genericSetter, &fullScreen_setterinfo },
   16213             :   { "mozPaintCount", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &mozPaintCount_getterinfo, nullptr, nullptr },
   16214             :   { "ondevicemotion", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondevicemotion_getterinfo, genericSetter, &ondevicemotion_setterinfo },
   16215             :   { "ondeviceorientation", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondeviceorientation_getterinfo, genericSetter, &ondeviceorientation_setterinfo },
   16216             :   { "onabsolutedeviceorientation", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onabsolutedeviceorientation_getterinfo, genericSetter, &onabsolutedeviceorientation_setterinfo },
   16217             :   { "ondeviceproximity", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondeviceproximity_getterinfo, genericSetter, &ondeviceproximity_setterinfo },
   16218             :   { "onuserproximity", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onuserproximity_getterinfo, genericSetter, &onuserproximity_setterinfo },
   16219             :   { "ondevicelight", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondevicelight_getterinfo, genericSetter, &ondevicelight_setterinfo },
   16220             :   { "content", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &content_getterinfo, genericSetter, &content_setterinfo },
   16221             :   { "sidebar", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &sidebar_getterinfo, genericSetter, &sidebar_setterinfo },
   16222             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16223             :   { "onvrdisplayconnect", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onvrdisplayconnect_getterinfo, genericSetter, &onvrdisplayconnect_setterinfo },
   16224             :   { "onvrdisplaydisconnect", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onvrdisplaydisconnect_getterinfo, genericSetter, &onvrdisplaydisconnect_setterinfo },
   16225             :   { "onvrdisplayactivate", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onvrdisplayactivate_getterinfo, genericSetter, &onvrdisplayactivate_setterinfo },
   16226             :   { "onvrdisplaydeactivate", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onvrdisplaydeactivate_getterinfo, genericSetter, &onvrdisplaydeactivate_setterinfo },
   16227             :   { "onvrdisplaypresentchange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onvrdisplaypresentchange_getterinfo, genericSetter, &onvrdisplaypresentchange_setterinfo },
   16228             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16229             :   { "audioWorklet", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &audioWorklet_getterinfo, nullptr, nullptr },
   16230             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16231             :   { "paintWorklet", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &paintWorklet_getterinfo, nullptr, nullptr },
   16232             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16233             :   { "intlUtils", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &intlUtils_getterinfo, nullptr, nullptr },
   16234             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16235             :   { "windowState", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &windowState_getterinfo, nullptr, nullptr },
   16236             :   { "isFullyOccluded", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &isFullyOccluded_getterinfo, nullptr, nullptr },
   16237             :   { "browserDOMWindow", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &browserDOMWindow_getterinfo, genericSetter, &browserDOMWindow_setterinfo },
   16238             :   { "messageManager", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &messageManager_getterinfo, nullptr, nullptr },
   16239             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16240             :   { "crypto", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &crypto_getterinfo, nullptr, nullptr },
   16241             :   { "onabort", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onabort_getterinfo, genericSetter, &onabort_setterinfo },
   16242             :   { "onblur", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onblur_getterinfo, genericSetter, &onblur_setterinfo },
   16243             :   { "onfocus", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onfocus_getterinfo, genericSetter, &onfocus_setterinfo },
   16244             :   { "onauxclick", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onauxclick_getterinfo, genericSetter, &onauxclick_setterinfo },
   16245             :   { "oncanplay", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &oncanplay_getterinfo, genericSetter, &oncanplay_setterinfo },
   16246             :   { "oncanplaythrough", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &oncanplaythrough_getterinfo, genericSetter, &oncanplaythrough_setterinfo },
   16247             :   { "onchange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onchange_getterinfo, genericSetter, &onchange_setterinfo },
   16248             :   { "onclick", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onclick_getterinfo, genericSetter, &onclick_setterinfo },
   16249             :   { "onclose", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onclose_getterinfo, genericSetter, &onclose_setterinfo },
   16250             :   { "oncontextmenu", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &oncontextmenu_getterinfo, genericSetter, &oncontextmenu_setterinfo },
   16251             :   { "ondblclick", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondblclick_getterinfo, genericSetter, &ondblclick_setterinfo },
   16252             :   { "ondrag", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondrag_getterinfo, genericSetter, &ondrag_setterinfo },
   16253             :   { "ondragend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondragend_getterinfo, genericSetter, &ondragend_setterinfo },
   16254             :   { "ondragenter", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondragenter_getterinfo, genericSetter, &ondragenter_setterinfo },
   16255             :   { "ondragexit", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondragexit_getterinfo, genericSetter, &ondragexit_setterinfo },
   16256             :   { "ondragleave", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondragleave_getterinfo, genericSetter, &ondragleave_setterinfo },
   16257             :   { "ondragover", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondragover_getterinfo, genericSetter, &ondragover_setterinfo },
   16258             :   { "ondragstart", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondragstart_getterinfo, genericSetter, &ondragstart_setterinfo },
   16259             :   { "ondrop", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondrop_getterinfo, genericSetter, &ondrop_setterinfo },
   16260             :   { "ondurationchange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondurationchange_getterinfo, genericSetter, &ondurationchange_setterinfo },
   16261             :   { "onemptied", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onemptied_getterinfo, genericSetter, &onemptied_setterinfo },
   16262             :   { "onended", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onended_getterinfo, genericSetter, &onended_setterinfo },
   16263             :   { "oninput", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &oninput_getterinfo, genericSetter, &oninput_setterinfo },
   16264             :   { "oninvalid", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &oninvalid_getterinfo, genericSetter, &oninvalid_setterinfo },
   16265             :   { "onkeydown", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onkeydown_getterinfo, genericSetter, &onkeydown_setterinfo },
   16266             :   { "onkeypress", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onkeypress_getterinfo, genericSetter, &onkeypress_setterinfo },
   16267             :   { "onkeyup", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onkeyup_getterinfo, genericSetter, &onkeyup_setterinfo },
   16268             :   { "onload", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onload_getterinfo, genericSetter, &onload_setterinfo },
   16269             :   { "onloadeddata", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onloadeddata_getterinfo, genericSetter, &onloadeddata_setterinfo },
   16270             :   { "onloadedmetadata", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onloadedmetadata_getterinfo, genericSetter, &onloadedmetadata_setterinfo },
   16271             :   { "onloadend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onloadend_getterinfo, genericSetter, &onloadend_setterinfo },
   16272             :   { "onloadstart", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onloadstart_getterinfo, genericSetter, &onloadstart_setterinfo },
   16273             :   { "onmousedown", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmousedown_getterinfo, genericSetter, &onmousedown_setterinfo },
   16274             :   { "onmouseenter", JSPROP_SHARED | JSPROP_ENUMERATE, genericLenientGetter, &onmouseenter_getterinfo, genericLenientSetter, &onmouseenter_setterinfo },
   16275             :   { "onmouseleave", JSPROP_SHARED | JSPROP_ENUMERATE, genericLenientGetter, &onmouseleave_getterinfo, genericLenientSetter, &onmouseleave_setterinfo },
   16276             :   { "onmousemove", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmousemove_getterinfo, genericSetter, &onmousemove_setterinfo },
   16277             :   { "onmouseout", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmouseout_getterinfo, genericSetter, &onmouseout_setterinfo },
   16278             :   { "onmouseover", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmouseover_getterinfo, genericSetter, &onmouseover_setterinfo },
   16279             :   { "onmouseup", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmouseup_getterinfo, genericSetter, &onmouseup_setterinfo },
   16280             :   { "onwheel", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onwheel_getterinfo, genericSetter, &onwheel_setterinfo },
   16281             :   { "onpause", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpause_getterinfo, genericSetter, &onpause_setterinfo },
   16282             :   { "onplay", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onplay_getterinfo, genericSetter, &onplay_setterinfo },
   16283             :   { "onplaying", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onplaying_getterinfo, genericSetter, &onplaying_setterinfo },
   16284             :   { "onprogress", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onprogress_getterinfo, genericSetter, &onprogress_setterinfo },
   16285             :   { "onratechange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onratechange_getterinfo, genericSetter, &onratechange_setterinfo },
   16286             :   { "onreset", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onreset_getterinfo, genericSetter, &onreset_setterinfo },
   16287             :   { "onresize", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onresize_getterinfo, genericSetter, &onresize_setterinfo },
   16288             :   { "onscroll", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onscroll_getterinfo, genericSetter, &onscroll_setterinfo },
   16289             :   { "onseeked", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onseeked_getterinfo, genericSetter, &onseeked_setterinfo },
   16290             :   { "onseeking", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onseeking_getterinfo, genericSetter, &onseeking_setterinfo },
   16291             :   { "onselect", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onselect_getterinfo, genericSetter, &onselect_setterinfo },
   16292             :   { "onshow", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onshow_getterinfo, genericSetter, &onshow_setterinfo },
   16293             :   { "onstalled", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onstalled_getterinfo, genericSetter, &onstalled_setterinfo },
   16294             :   { "onsubmit", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onsubmit_getterinfo, genericSetter, &onsubmit_setterinfo },
   16295             :   { "onsuspend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onsuspend_getterinfo, genericSetter, &onsuspend_setterinfo },
   16296             :   { "ontimeupdate", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontimeupdate_getterinfo, genericSetter, &ontimeupdate_setterinfo },
   16297             :   { "onvolumechange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onvolumechange_getterinfo, genericSetter, &onvolumechange_setterinfo },
   16298             :   { "onwaiting", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onwaiting_getterinfo, genericSetter, &onwaiting_setterinfo },
   16299             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16300             :   { "onselectstart", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onselectstart_getterinfo, genericSetter, &onselectstart_setterinfo },
   16301             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16302             :   { "ontoggle", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontoggle_getterinfo, genericSetter, &ontoggle_setterinfo },
   16303             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16304             :   { "onpointercancel", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointercancel_getterinfo, genericSetter, &onpointercancel_setterinfo },
   16305             :   { "onpointerdown", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointerdown_getterinfo, genericSetter, &onpointerdown_setterinfo },
   16306             :   { "onpointerup", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointerup_getterinfo, genericSetter, &onpointerup_setterinfo },
   16307             :   { "onpointermove", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointermove_getterinfo, genericSetter, &onpointermove_setterinfo },
   16308             :   { "onpointerout", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointerout_getterinfo, genericSetter, &onpointerout_setterinfo },
   16309             :   { "onpointerover", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointerover_getterinfo, genericSetter, &onpointerover_setterinfo },
   16310             :   { "onpointerenter", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointerenter_getterinfo, genericSetter, &onpointerenter_setterinfo },
   16311             :   { "onpointerleave", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointerleave_getterinfo, genericSetter, &onpointerleave_setterinfo },
   16312             :   { "ongotpointercapture", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ongotpointercapture_getterinfo, genericSetter, &ongotpointercapture_setterinfo },
   16313             :   { "onlostpointercapture", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onlostpointercapture_getterinfo, genericSetter, &onlostpointercapture_setterinfo },
   16314             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16315             :   { "onmozfullscreenchange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmozfullscreenchange_getterinfo, genericSetter, &onmozfullscreenchange_setterinfo },
   16316             :   { "onmozfullscreenerror", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmozfullscreenerror_getterinfo, genericSetter, &onmozfullscreenerror_setterinfo },
   16317             :   { "onanimationcancel", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onanimationcancel_getterinfo, genericSetter, &onanimationcancel_setterinfo },
   16318             :   { "onanimationend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onanimationend_getterinfo, genericSetter, &onanimationend_setterinfo },
   16319             :   { "onanimationiteration", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onanimationiteration_getterinfo, genericSetter, &onanimationiteration_setterinfo },
   16320             :   { "onanimationstart", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onanimationstart_getterinfo, genericSetter, &onanimationstart_setterinfo },
   16321             :   { "ontransitioncancel", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontransitioncancel_getterinfo, genericSetter, &ontransitioncancel_setterinfo },
   16322             :   { "ontransitionend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontransitionend_getterinfo, genericSetter, &ontransitionend_setterinfo },
   16323             :   { "ontransitionrun", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontransitionrun_getterinfo, genericSetter, &ontransitionrun_setterinfo },
   16324             :   { "ontransitionstart", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontransitionstart_getterinfo, genericSetter, &ontransitionstart_setterinfo },
   16325             :   { "onwebkitanimationend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onwebkitanimationend_getterinfo, genericSetter, &onwebkitanimationend_setterinfo },
   16326             :   { "onwebkitanimationiteration", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onwebkitanimationiteration_getterinfo, genericSetter, &onwebkitanimationiteration_setterinfo },
   16327             :   { "onwebkitanimationstart", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onwebkitanimationstart_getterinfo, genericSetter, &onwebkitanimationstart_setterinfo },
   16328             :   { "onwebkittransitionend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onwebkittransitionend_getterinfo, genericSetter, &onwebkittransitionend_setterinfo },
   16329             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16330             :   { "u2f", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &u2f_getterinfo, nullptr, nullptr },
   16331             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16332             :   { "onerror", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onerror_getterinfo, genericSetter, &onerror_setterinfo },
   16333             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16334             :   { "speechSynthesis", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &speechSynthesis_getterinfo, nullptr, nullptr },
   16335             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16336             :   { "ontouchstart", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontouchstart_getterinfo, genericSetter, &ontouchstart_setterinfo },
   16337             :   { "ontouchend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontouchend_getterinfo, genericSetter, &ontouchend_setterinfo },
   16338             :   { "ontouchmove", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontouchmove_getterinfo, genericSetter, &ontouchmove_setterinfo },
   16339             :   { "ontouchcancel", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontouchcancel_getterinfo, genericSetter, &ontouchcancel_setterinfo },
   16340             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16341             :   { "onafterprint", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onafterprint_getterinfo, genericSetter, &onafterprint_setterinfo },
   16342             :   { "onbeforeprint", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onbeforeprint_getterinfo, genericSetter, &onbeforeprint_setterinfo },
   16343             :   { "onbeforeunload", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onbeforeunload_getterinfo, genericSetter, &onbeforeunload_setterinfo },
   16344             :   { "onhashchange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onhashchange_getterinfo, genericSetter, &onhashchange_setterinfo },
   16345             :   { "onlanguagechange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onlanguagechange_getterinfo, genericSetter, &onlanguagechange_setterinfo },
   16346             :   { "onmessage", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmessage_getterinfo, genericSetter, &onmessage_setterinfo },
   16347             :   { "onoffline", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onoffline_getterinfo, genericSetter, &onoffline_setterinfo },
   16348             :   { "ononline", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ononline_getterinfo, genericSetter, &ononline_setterinfo },
   16349             :   { "onpagehide", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpagehide_getterinfo, genericSetter, &onpagehide_setterinfo },
   16350             :   { "onpageshow", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpageshow_getterinfo, genericSetter, &onpageshow_setterinfo },
   16351             :   { "onpopstate", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpopstate_getterinfo, genericSetter, &onpopstate_setterinfo },
   16352             :   { "onstorage", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onstorage_getterinfo, genericSetter, &onstorage_setterinfo },
   16353             :   { "onunload", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onunload_getterinfo, genericSetter, &onunload_setterinfo },
   16354             :   { "localStorage", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &localStorage_getterinfo, nullptr, nullptr },
   16355             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16356             :   { "dialogArguments", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &dialogArguments_getterinfo, nullptr, nullptr },
   16357             :   { "returnValue", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &returnValue_getterinfo, genericSetter, &returnValue_setterinfo },
   16358             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16359             :   { "origin", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &origin_getterinfo, genericSetter, &origin_setterinfo },
   16360             :   { "isSecureContext", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &isSecureContext_getterinfo, nullptr, nullptr },
   16361             :   { "indexedDB", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &indexedDB_getterinfo, nullptr, nullptr },
   16362             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16363             :   { "caches", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &caches_getterinfo, nullptr, nullptr },
   16364             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
   16365             :   { "sessionStorage", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &sessionStorage_getterinfo, nullptr, nullptr },
   16366             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
   16367             : };
   16368             : #if defined(__clang__)
   16369             : #pragma clang diagnostic pop
   16370             : #endif
   16371             : 
   16372             : static PrefableDisablers sAttributes_disablers4 = {
   16373             :   true, false, 0, &CustomElementRegistry::IsCustomElementEnabled
   16374             : };
   16375             : 
   16376             : static PrefableDisablers sAttributes_disablers22 = {
   16377             :   true, false, 0, nullptr
   16378             : };
   16379             : 
   16380             : static PrefableDisablers sAttributes_disablers24 = {
   16381             :   true, false, 0, nullptr
   16382             : };
   16383             : 
   16384             : static PrefableDisablers sAttributes_disablers54 = {
   16385             :   true, false, 0, nullptr
   16386             : };
   16387             : 
   16388             : static PrefableDisablers sAttributes_disablers60 = {
   16389             :   true, false, 0, nullptr
   16390             : };
   16391             : 
   16392             : static PrefableDisablers sAttributes_disablers62 = {
   16393             :   true, false, 0, nullptr
   16394             : };
   16395             : 
   16396             : static PrefableDisablers sAttributes_disablers64 = {
   16397             :   true, false, 0, &IsChromeOrXBL
   16398             : };
   16399             : 
   16400             : static PrefableDisablers sAttributes_disablers66 = {
   16401             :   true, false, 0, &nsGlobalWindow::IsPrivilegedChromeWindow
   16402             : };
   16403             : 
   16404             : static PrefableDisablers sAttributes_disablers131 = {
   16405             :   true, false, 0, nullptr
   16406             : };
   16407             : 
   16408             : static PrefableDisablers sAttributes_disablers135 = {
   16409             :   true, false, 0, nullptr
   16410             : };
   16411             : 
   16412             : static PrefableDisablers sAttributes_disablers161 = {
   16413             :   true, false, 0, nullptr
   16414             : };
   16415             : 
   16416             : static PrefableDisablers sAttributes_disablers165 = {
   16417             :   true, false, 0, nullptr
   16418             : };
   16419             : 
   16420             : static PrefableDisablers sAttributes_disablers167 = {
   16421             :   true, false, 0, &nsGenericHTMLElement::TouchEventsEnabled
   16422             : };
   16423             : 
   16424             : static PrefableDisablers sAttributes_disablers187 = {
   16425             :   true, false, 0, &nsGlobalWindow::IsModalContentWindow
   16426             : };
   16427             : 
   16428             : static PrefableDisablers sAttributes_disablers194 = {
   16429             :   true, false, 0, &mozilla::dom::cache::CacheStorage::PrefEnabled
   16430             : };
   16431             : 
   16432             : // Can't be const because the pref-enabled boolean needs to be writable
   16433             : static Prefable<const JSPropertySpec> sAttributes[] = {
   16434             :   { nullptr, &sAttributes_specs[0] },
   16435             :   { &sAttributes_disablers4, &sAttributes_specs[4] },
   16436             :   { nullptr, &sAttributes_specs[6] },
   16437             :   { &sAttributes_disablers22, &sAttributes_specs[22] },
   16438             :   { &sAttributes_disablers24, &sAttributes_specs[24] },
   16439             :   { nullptr, &sAttributes_specs[26] },
   16440             :   { &sAttributes_disablers54, &sAttributes_specs[54] },
   16441             :   { &sAttributes_disablers60, &sAttributes_specs[60] },
   16442             :   { &sAttributes_disablers62, &sAttributes_specs[62] },
   16443             :   { &sAttributes_disablers64, &sAttributes_specs[64] },
   16444             :   { &sAttributes_disablers66, &sAttributes_specs[66] },
   16445             :   { nullptr, &sAttributes_specs[71] },
   16446             :   { &sAttributes_disablers131, &sAttributes_specs[131] },
   16447             :   { nullptr, &sAttributes_specs[133] },
   16448             :   { &sAttributes_disablers135, &sAttributes_specs[135] },
   16449             :   { nullptr, &sAttributes_specs[146] },
   16450             :   { &sAttributes_disablers161, &sAttributes_specs[161] },
   16451             :   { nullptr, &sAttributes_specs[163] },
   16452             :   { &sAttributes_disablers165, &sAttributes_specs[165] },
   16453             :   { &sAttributes_disablers167, &sAttributes_specs[167] },
   16454             :   { nullptr, &sAttributes_specs[172] },
   16455             :   { &sAttributes_disablers187, &sAttributes_specs[187] },
   16456             :   { nullptr, &sAttributes_specs[190] },
   16457             :   { &sAttributes_disablers194, &sAttributes_specs[194] },
   16458             :   { nullptr, &sAttributes_specs[196] },
   16459             :   { nullptr, nullptr }
   16460             : };
   16461             : 
   16462             : static_assert(25 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
   16463             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
   16464             : static_assert(59 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
   16465             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
   16466             : 
   16467             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
   16468             : #if defined(__clang__)
   16469             : #pragma clang diagnostic push
   16470             : #pragma clang diagnostic ignored "-Wmissing-braces"
   16471             : #endif
   16472             : static const JSPropertySpec sChromeAttributes_specs[] = {
   16473             :   { "controllers", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &controllers_getterinfo, genericSetter, &controllers_setterinfo },
   16474             :   { "realFrameElement", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &realFrameElement_getterinfo, nullptr, nullptr },
   16475             :   { "scrollMinX", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &scrollMinX_getterinfo, nullptr, nullptr },
   16476             :   { "scrollMinY", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &scrollMinY_getterinfo, nullptr, nullptr },
   16477             :   { "MozSelfSupport", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &MozSelfSupport_getterinfo, nullptr, nullptr },
   16478             :   { "_content", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &_content_getterinfo, nullptr, nullptr },
   16479             :   { "windowRoot", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &windowRoot_getterinfo, nullptr, nullptr },
   16480             :   { "isSecureContextIfOpenerIgnored", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &isSecureContextIfOpenerIgnored_getterinfo, nullptr, nullptr },
   16481             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
   16482             : };
   16483             : #if defined(__clang__)
   16484             : #pragma clang diagnostic pop
   16485             : #endif
   16486             : 
   16487             : 
   16488             : // Can't be const because the pref-enabled boolean needs to be writable
   16489             : static Prefable<const JSPropertySpec> sChromeAttributes[] = {
   16490             :   { nullptr, &sChromeAttributes_specs[0] },
   16491             :   { nullptr, nullptr }
   16492             : };
   16493             : 
   16494             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
   16495             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
   16496             : static_assert(8 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
   16497             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
   16498             : 
   16499             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
   16500             : #if defined(__clang__)
   16501             : #pragma clang diagnostic push
   16502             : #pragma clang diagnostic ignored "-Wmissing-braces"
   16503             : #endif
   16504             : static const JSPropertySpec sUnforgeableAttributes_specs[] = {
   16505             :   { "window", JSPROP_SHARED | JSPROP_ENUMERATE | JSPROP_PERMANENT, genericCrossOriginGetter, &window_getterinfo, nullptr, nullptr },
   16506             :   { "document", JSPROP_SHARED | JSPROP_ENUMERATE | JSPROP_PERMANENT, genericGetter, &document_getterinfo, nullptr, nullptr },
   16507             :   { "location", JSPROP_SHARED | JSPROP_ENUMERATE | JSPROP_PERMANENT, genericCrossOriginGetter, &location_getterinfo, genericCrossOriginSetter, &location_setterinfo },
   16508             :   { "top", JSPROP_SHARED | JSPROP_ENUMERATE | JSPROP_PERMANENT, genericCrossOriginGetter, &top_getterinfo, nullptr, nullptr },
   16509             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
   16510             : };
   16511             : #if defined(__clang__)
   16512             : #pragma clang diagnostic pop
   16513             : #endif
   16514             : 
   16515             : 
   16516             : // Can't be const because the pref-enabled boolean needs to be writable
   16517             : static Prefable<const JSPropertySpec> sUnforgeableAttributes[] = {
   16518             :   { nullptr, &sUnforgeableAttributes_specs[0] },
   16519             :   { nullptr, nullptr }
   16520             : };
   16521             : 
   16522             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
   16523             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
   16524             : static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
   16525             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
   16526             : 
   16527             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
   16528             : #if defined(__clang__)
   16529             : #pragma clang diagnostic push
   16530             : #pragma clang diagnostic ignored "-Wmissing-braces"
   16531             : #endif
   16532             : static const ConstantSpec sConstants_specs[] = {
   16533             :   { "STATE_MAXIMIZED", JS::Int32Value(1) },
   16534             :   { "STATE_MINIMIZED", JS::Int32Value(2) },
   16535             :   { "STATE_NORMAL", JS::Int32Value(3) },
   16536             :   { "STATE_FULLSCREEN", JS::Int32Value(4) },
   16537             :   { 0, JS::UndefinedValue() }
   16538             : };
   16539             : #if defined(__clang__)
   16540             : #pragma clang diagnostic pop
   16541             : #endif
   16542             : 
   16543             : static PrefableDisablers sConstants_disablers0 = {
   16544             :   true, false, 0, &nsGlobalWindow::IsPrivilegedChromeWindow
   16545             : };
   16546             : 
   16547             : // Can't be const because the pref-enabled boolean needs to be writable
   16548             : static Prefable<const ConstantSpec> sConstants[] = {
   16549             :   { &sConstants_disablers0, &sConstants_specs[0] },
   16550             :   { nullptr, nullptr }
   16551             : };
   16552             : 
   16553             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
   16554             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
   16555             : static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
   16556             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
   16557             : 
   16558             : 
   16559             : static uint16_t sNativeProperties_sortedPropertyIndices[235];
   16560             : static PropertyInfo sNativeProperties_propertyInfos[235];
   16561             : 
   16562             : static const NativePropertiesN<4> sNativeProperties = {
   16563             :   false, 0,
   16564             :   false, 0,
   16565             :   true,  0 /* sMethods */,
   16566             :   true,  1 /* sAttributes */,
   16567             :   false, 0,
   16568             :   true,  2 /* sUnforgeableAttributes */,
   16569             :   true,  3 /* sConstants */,
   16570             :   -1,
   16571             :   235,
   16572             :   sNativeProperties_sortedPropertyIndices,
   16573             :   {
   16574             :     { sMethods, &sNativeProperties_propertyInfos[0] },
   16575             :     { sAttributes, &sNativeProperties_propertyInfos[54] },
   16576             :     { sUnforgeableAttributes, &sNativeProperties_propertyInfos[227] },
   16577             :     { sConstants, &sNativeProperties_propertyInfos[231] }
   16578             :   }
   16579             : };
   16580             : static_assert(235 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
   16581             :     "We have a property info count that is oversized");
   16582             : 
   16583             : static uint16_t sChromeOnlyNativeProperties_sortedPropertyIndices[14];
   16584             : static PropertyInfo sChromeOnlyNativeProperties_propertyInfos[14];
   16585             : 
   16586             : static const NativePropertiesN<2> sChromeOnlyNativeProperties = {
   16587             :   false, 0,
   16588             :   false, 0,
   16589             :   true,  0 /* sChromeMethods */,
   16590             :   true,  1 /* sChromeAttributes */,
   16591             :   false, 0,
   16592             :   false, 0,
   16593             :   false, 0,
   16594             :   -1,
   16595             :   14,
   16596             :   sChromeOnlyNativeProperties_sortedPropertyIndices,
   16597             :   {
   16598             :     { sChromeMethods, &sChromeOnlyNativeProperties_propertyInfos[0] },
   16599             :     { sChromeAttributes, &sChromeOnlyNativeProperties_propertyInfos[6] }
   16600             :   }
   16601             : };
   16602             : static_assert(14 < 1ull << CHAR_BIT * sizeof(sChromeOnlyNativeProperties.propertyInfoCount),
   16603             :     "We have a property info count that is oversized");
   16604             : 
   16605             : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
   16606             :   {
   16607             :     "Function",
   16608             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
   16609             :     &sBoringInterfaceObjectClassClassOps,
   16610             :     JS_NULL_CLASS_SPEC,
   16611             :     JS_NULL_CLASS_EXT,
   16612             :     &sInterfaceObjectClassObjectOps
   16613             :   },
   16614             :   eInterface,
   16615             :   true,
   16616             :   prototypes::id::Window,
   16617             :   PrototypeTraits<prototypes::id::Window>::Depth,
   16618             :   sNativePropertyHooks,
   16619             :   "function Window() {\n    [native code]\n}",
   16620             :   EventTargetBinding::GetConstructorObject
   16621             : };
   16622             : 
   16623             : static bool
   16624        3099 : _resolve(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, bool* resolvedp)
   16625             : {
   16626        3099 :   if (!ResolveGlobal(cx, obj, id, resolvedp)) {
   16627           0 :     return false;
   16628             :   }
   16629        3099 :   if (*resolvedp) {
   16630          11 :     return true;
   16631             :   }
   16632             : 
   16633        3088 :   nsGlobalWindow* self = UnwrapPossiblyNotInitializedDOMObject<nsGlobalWindow>(obj);
   16634        6176 :   JS::Rooted<JS::PropertyDescriptor> desc(cx);
   16635        3088 :   if (!self->DoResolve(cx, obj, id, &desc)) {
   16636           0 :     return false;
   16637             :   }
   16638        3088 :   if (!desc.object()) {
   16639        3080 :     return true;
   16640             :   }
   16641             :   // If desc.value() is undefined, then the DoResolve call
   16642             :   // has already defined it on the object.  Don't try to also
   16643             :   // define it.
   16644           8 :   if (!desc.value().isUndefined()) {
   16645           0 :     desc.attributesRef() |= JSPROP_RESOLVING;
   16646           0 :     if (!JS_DefinePropertyById(cx, obj, id, desc)) {
   16647           0 :       return false;
   16648             :     }
   16649             :   }
   16650           8 :   *resolvedp = true;
   16651           8 :   return true;
   16652             : }
   16653             : 
   16654             : static bool
   16655          19 : _mayResolve(const JSAtomState& names, jsid id, JSObject* maybeObj)
   16656             : {
   16657          19 :   if (MayResolveGlobal(names, id, maybeObj)) {
   16658          11 :     return true;
   16659             :   }
   16660             : 
   16661           8 :   return nsGlobalWindow::MayResolve(id);
   16662             : }
   16663             : 
   16664             : static bool
   16665           0 : _newEnumerate(JSContext* cx, JS::Handle<JSObject*> obj, JS::AutoIdVector& properties, bool enumerableOnly)
   16666             : {
   16667           0 :   if (!EnumerateGlobal(cx, obj, properties, enumerableOnly)) {
   16668           0 :     return false;
   16669             :   }
   16670             : 
   16671             :   nsGlobalWindow* self;
   16672           0 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
   16673             :   {
   16674           0 :     nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
   16675           0 :     if (NS_FAILED(rv)) {
   16676           0 :       return ThrowErrorMessage(cx, MSG_THIS_DOES_NOT_IMPLEMENT_INTERFACE, "Value", "Window");
   16677             :     }
   16678             :   }
   16679           0 :   binding_detail::FastErrorResult rv;
   16680           0 :   self->GetOwnPropertyNames(cx, properties, enumerableOnly, rv);
   16681           0 :   if (rv.MaybeSetPendingException(cx)) {
   16682           0 :     return false;
   16683             :   }
   16684           0 :   return true;
   16685             : }
   16686             : 
   16687             : static JSObject*
   16688           8 : GetNamedPropertiesObject(JSContext* aCx)
   16689             : {
   16690             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
   16691           8 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
   16692           8 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
   16693           0 :     return nullptr;
   16694             :   }
   16695             : 
   16696             :   /* Check to see whether the named properties object has already been created */
   16697           8 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
   16698             : 
   16699           8 :   JS::Heap<JSObject*>& namedPropertiesObject = protoAndIfaceCache.EntrySlotOrCreate(namedpropertiesobjects::id::Window);
   16700           8 :   if (!namedPropertiesObject) {
   16701          14 :     JS::Rooted<JSObject*> parentProto(aCx, EventTargetBinding::GetProtoObjectHandle(aCx));
   16702           7 :     if (!parentProto) {
   16703           0 :       return nullptr;
   16704             :     }
   16705           7 :     namedPropertiesObject = nsGlobalWindow::CreateNamedPropertiesObject(aCx, parentProto);
   16706             :     DebugOnly<const DOMIfaceAndProtoJSClass*> clasp =
   16707          14 :       DOMIfaceAndProtoJSClass::FromJSClass(js::GetObjectClass(namedPropertiesObject));
   16708           7 :     MOZ_ASSERT(clasp->mType == eNamedPropertiesObject,
   16709             :                "Expected nsGlobalWindow::CreateNamedPropertiesObject to return a named properties object");
   16710           7 :     MOZ_ASSERT(clasp->mNativeHooks,
   16711             :                "The named properties object for nsGlobalWindow should have NativePropertyHooks.");
   16712           7 :     MOZ_ASSERT(clasp->mNativeHooks->mResolveOwnProperty,
   16713             :                "Don't know how to resolve the properties of the named properties object for nsGlobalWindow.");
   16714           7 :     MOZ_ASSERT(clasp->mNativeHooks->mEnumerateOwnProperties,
   16715             :                "Don't know how to enumerate the properties of the named properties object for nsGlobalWindow.");
   16716             :   }
   16717           8 :   return namedPropertiesObject.get();
   16718             : }
   16719             : 
   16720             : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
   16721             :   {
   16722             :     "WindowPrototype",
   16723             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
   16724             :     JS_NULL_CLASS_OPS,
   16725             :     JS_NULL_CLASS_SPEC,
   16726             :     JS_NULL_CLASS_EXT,
   16727             :     JS_NULL_OBJECT_OPS
   16728             :   },
   16729             :   eGlobalInterfacePrototype,
   16730             :   false,
   16731             :   prototypes::id::Window,
   16732             :   PrototypeTraits<prototypes::id::Window>::Depth,
   16733             :   sNativePropertyHooks,
   16734             :   "[object WindowPrototype]",
   16735             :   GetNamedPropertiesObject
   16736             : };
   16737             : 
   16738             : JSObject*
   16739           0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
   16740             : {
   16741           0 :   return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
   16742             : }
   16743             : 
   16744             : static const js::ClassOps sClassOps = {
   16745             :   nullptr, /* addProperty */
   16746             :   nullptr,               /* delProperty */
   16747             :   nullptr,               /* getProperty */
   16748             :   nullptr,               /* setProperty */
   16749             :   nullptr,               /* enumerate */
   16750             :   _newEnumerate, /* newEnumerate */
   16751             :   _resolve, /* resolve */
   16752             :   _mayResolve, /* mayResolve */
   16753             :   _finalize, /* finalize */
   16754             :   nullptr, /* call */
   16755             :   nullptr,               /* hasInstance */
   16756             :   nullptr,               /* construct */
   16757             :   JS_GlobalObjectTraceHook, /* trace */
   16758             : };
   16759             : 
   16760             : static const js::ClassExtension sClassExtension = {
   16761             :   nullptr, /* weakmapKeyDelegateOp */
   16762             :   _objectMoved /* objectMovedOp */
   16763             : };
   16764             : 
   16765             : static const DOMJSClass sClass = {
   16766             :   { "Window",
   16767             :     JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_DOM_GLOBAL | JSCLASS_GLOBAL_FLAGS_WITH_SLOTS(DOM_GLOBAL_SLOTS),
   16768             :     &sClassOps,
   16769             :     JS_NULL_CLASS_SPEC,
   16770             :     &sClassExtension,
   16771             :     JS_NULL_OBJECT_OPS
   16772             :   },
   16773             :   { prototypes::id::EventTarget, prototypes::id::Window, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
   16774             :   IsBaseOf<nsISupports, nsGlobalWindow >::value,
   16775             :   sNativePropertyHooks,
   16776             :   FindAssociatedGlobalForNative<nsGlobalWindow>::Get,
   16777             :   GetProtoObjectHandle,
   16778             :   GetCCParticipant<nsGlobalWindow>::Get()
   16779             : };
   16780             : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
   16781             :               "Must have the right minimal number of reserved slots.");
   16782             : static_assert(JSCLASS_GLOBAL_APPLICATION_SLOTS >= 5,
   16783             :               "Must have enough reserved slots.");
   16784             : 
   16785             : const JSClass*
   16786           0 : GetJSClass()
   16787             : {
   16788           0 :   return sClass.ToJSClass();
   16789             : }
   16790             : 
   16791             : static bool
   16792           7 : UpdateMemberSlots(JSContext* aCx, JS::Handle<JSObject*> aWrapper, nsGlobalWindow* aObject)
   16793             : {
   16794          14 :   JS::Rooted<JS::Value> temp(aCx);
   16795           7 :   JSJitGetterCallArgs args(&temp);
   16796             : 
   16797             :   static_assert((DOM_INSTANCE_RESERVED_SLOTS + 2) < js::shadow::Object::MAX_FIXED_SLOTS,
   16798             :                 "Not enough fixed slots to fit 'Window.document.  Ion's visitGetDOMMemberV/visitGetDOMMemberT assume StoreInSlot things are all in fixed slots.");
   16799           7 :   if (!get_document(aCx, aWrapper, aObject, args)) {
   16800           0 :     return false;
   16801             :   }
   16802             :   // Getter handled setting our reserved slots
   16803             : 
   16804             :   static_assert((DOM_INSTANCE_RESERVED_SLOTS + 3) < js::shadow::Object::MAX_FIXED_SLOTS,
   16805             :                 "Not enough fixed slots to fit 'Window.performance.  Ion's visitGetDOMMemberV/visitGetDOMMemberT assume StoreInSlot things are all in fixed slots.");
   16806           7 :   if (!get_performance(aCx, aWrapper, aObject, args)) {
   16807           0 :     return false;
   16808             :   }
   16809             :   // Getter handled setting our reserved slots
   16810             : 
   16811           7 :   return true;
   16812             : }
   16813             : 
   16814             : bool
   16815           7 : Wrap(JSContext* aCx, nsGlobalWindow* aObject, nsWrapperCache* aCache, JS::CompartmentOptions& aOptions, JSPrincipals* aPrincipal, bool aInitStandardClasses, JS::MutableHandle<JSObject*> aReflector)
   16816             : {
   16817             :   MOZ_ASSERT(static_cast<nsGlobalWindow*>(aObject) ==
   16818             :              reinterpret_cast<nsGlobalWindow*>(aObject),
   16819             :              "Multiple inheritance for nsGlobalWindow is broken.");
   16820             :   MOZ_ASSERT(static_cast<mozilla::dom::EventTarget*>(aObject) ==
   16821             :              reinterpret_cast<mozilla::dom::EventTarget*>(aObject),
   16822             :              "Multiple inheritance for mozilla::dom::EventTarget is broken.");
   16823           7 :   MOZ_ASSERT(ToSupportsIsCorrect(aObject));
   16824           7 :   MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
   16825             :              "nsISupports must be on our primary inheritance chain");
   16826             : 
   16827           7 :   if (!CreateGlobal<nsGlobalWindow, GetProtoObjectHandle>(aCx,
   16828             :                                    aObject,
   16829             :                                    aCache,
   16830             :                                    sClass.ToJSClass(),
   16831             :                                    aOptions,
   16832             :                                    aPrincipal,
   16833             :                                    aInitStandardClasses,
   16834             :                                    aReflector)) {
   16835           0 :     aCache->ReleaseWrapper(aObject);
   16836           0 :     aCache->ClearWrapper();
   16837           0 :     return false;
   16838             :   }
   16839             : 
   16840             :   // aReflector is a new global, so has a new compartment.  Enter it
   16841             :   // before doing anything with it.
   16842          14 :   JSAutoCompartment ac(aCx, aReflector);
   16843             : 
   16844           7 :   if (!DefineProperties(aCx, aReflector, sNativeProperties.Upcast(), nsContentUtils::ThreadsafeIsSystemCaller(aCx) ? sChromeOnlyNativeProperties.Upcast() : nullptr)) {
   16845           0 :     aCache->ReleaseWrapper(aObject);
   16846           0 :     aCache->ClearWrapper();
   16847           0 :     return false;
   16848             :   }
   16849             : 
   16850           7 :   if (!DefineUnforgeableAttributes(aCx, aReflector, sUnforgeableAttributes)) {
   16851           0 :     aCache->ReleaseWrapper(aObject);
   16852           0 :     aCache->ClearWrapper();
   16853           0 :     return false;
   16854             :   }
   16855             : 
   16856           7 :   if (!UpdateMemberSlots(aCx, aReflector, aObject)) {
   16857           0 :     aCache->ReleaseWrapper(aObject);
   16858           0 :     aCache->ClearWrapper();
   16859           0 :     return false;
   16860             :   }
   16861             : 
   16862           7 :   return true;
   16863             : }
   16864             : 
   16865             : static bool
   16866          31 : ResolveOwnPropertyViaResolve(JSContext* cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::MutableHandle<JS::PropertyDescriptor> desc)
   16867             : {
   16868             :   nsGlobalWindow* self;
   16869          62 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
   16870             :   {
   16871          31 :     nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
   16872          31 :     if (NS_FAILED(rv)) {
   16873           0 :       return ThrowErrorMessage(cx, MSG_THIS_DOES_NOT_IMPLEMENT_INTERFACE, "Value", "Window");
   16874             :     }
   16875             :   }
   16876             :   {
   16877             :     // Since we're dealing with an Xray, do the resolve on the
   16878             :     // underlying object first.  That gives it a chance to
   16879             :     // define properties on the actual object as needed, and
   16880             :     // then use the fact that it created the objects as a flag
   16881             :     // to avoid re-resolving the properties if someone deletes
   16882             :     // them.
   16883          62 :     JSAutoCompartment ac(cx, obj);
   16884          31 :     JS_MarkCrossZoneId(cx, id);
   16885          62 :     JS::Rooted<JS::PropertyDescriptor> objDesc(cx);
   16886          31 :     if (!self->DoResolve(cx, obj, id, &objDesc)) {
   16887           0 :       return false;
   16888             :     }
   16889             :     // If desc.value() is undefined, then the DoResolve call
   16890             :     // has already defined the property on the object.  Don't
   16891             :     // try to also define it.
   16892         105 :     if (objDesc.object() &&
   16893          99 :         !objDesc.value().isUndefined() &&
   16894          31 :         !JS_DefinePropertyById(cx, obj, id, objDesc)) {
   16895           0 :       return false;
   16896             :     }
   16897             :   }
   16898          31 :   return self->DoResolve(cx, wrapper, id, desc);
   16899             : }
   16900             : 
   16901             : static bool
   16902           0 : EnumerateOwnPropertiesViaGetOwnPropertyNames(JSContext* cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> obj, JS::AutoIdVector& props)
   16903             : {
   16904             :   nsGlobalWindow* self;
   16905           0 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
   16906             :   {
   16907           0 :     nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
   16908           0 :     if (NS_FAILED(rv)) {
   16909           0 :       return ThrowErrorMessage(cx, MSG_THIS_DOES_NOT_IMPLEMENT_INTERFACE, "Value", "Window");
   16910             :     }
   16911             :   }
   16912           0 :   binding_detail::FastErrorResult rv;
   16913             :   // This wants all own props, not just enumerable ones.
   16914           0 :   self->GetOwnPropertyNames(cx, props, false, rv);
   16915           0 :   if (rv.MaybeSetPendingException(cx)) {
   16916           0 :     return false;
   16917             :   }
   16918           0 :   return true;
   16919             : }
   16920             : 
   16921             : // This may allocate too many slots, because we only really need
   16922             : // slots for our non-interface-typed members that we cache.  But
   16923             : // allocating slots only for those would make the slot index
   16924             : // computations much more complicated, so let's do this the simple
   16925             : // way for now.
   16926             : DEFINE_XRAY_EXPANDO_CLASS(static, sXrayExpandoObjectClass, 4);
   16927             : 
   16928             : const NativePropertyHooks sNativePropertyHooks[] = { {
   16929             :   ResolveOwnPropertyViaResolve,
   16930             :   EnumerateOwnPropertiesViaGetOwnPropertyNames,
   16931             :   nullptr,
   16932             :   { sNativeProperties.Upcast(), sChromeOnlyNativeProperties.Upcast() },
   16933             :   prototypes::id::Window,
   16934             :   constructors::id::Window,
   16935             :   EventTargetBinding::sNativePropertyHooks,
   16936             :   &sXrayExpandoObjectClass
   16937             : } };
   16938             : 
   16939             : bool
   16940           8 : ClearCachedDocumentValue(JSContext* aCx, nsGlobalWindow* aObject)
   16941             : {
   16942          16 :   JS::Rooted<JSObject*> obj(aCx);
   16943           8 :   obj = aObject->GetWrapper();
   16944           8 :   if (!obj) {
   16945           0 :     return true;
   16946             :   }
   16947          16 :   JS::Rooted<JS::Value> oldValue(aCx, js::GetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 2)));
   16948           8 :   js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 2), JS::UndefinedValue());
   16949           8 :   xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 2));
   16950          16 :   JS::Rooted<JS::Value> temp(aCx);
   16951           8 :   JSJitGetterCallArgs args(&temp);
   16952          16 :   JSAutoCompartment ac(aCx, obj);
   16953           8 :   if (!get_document(aCx, obj, aObject, args)) {
   16954           0 :     js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 2), oldValue);
   16955           0 :     return false;
   16956             :   }
   16957           8 :   return true;
   16958             : }
   16959             : 
   16960             : bool
   16961           8 : ClearCachedPerformanceValue(JSContext* aCx, nsGlobalWindow* aObject)
   16962             : {
   16963          16 :   JS::Rooted<JSObject*> obj(aCx);
   16964           8 :   obj = aObject->GetWrapper();
   16965           8 :   if (!obj) {
   16966           0 :     return true;
   16967             :   }
   16968          16 :   JS::Rooted<JS::Value> oldValue(aCx, js::GetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 3)));
   16969           8 :   js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 3), JS::UndefinedValue());
   16970           8 :   xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 3));
   16971          16 :   JS::Rooted<JS::Value> temp(aCx);
   16972           8 :   JSJitGetterCallArgs args(&temp);
   16973          16 :   JSAutoCompartment ac(aCx, obj);
   16974           8 :   if (!get_performance(aCx, obj, aObject, args)) {
   16975           0 :     js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 3), oldValue);
   16976           0 :     return false;
   16977             :   }
   16978           8 :   return true;
   16979             : }
   16980             : 
   16981             : void
   16982           7 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
   16983             : {
   16984          14 :   JS::Rooted<JSObject*> parentProto(aCx, GetNamedPropertiesObject(aCx));
   16985           7 :   if (!parentProto) {
   16986           0 :     return;
   16987             :   }
   16988             : 
   16989           7 :   JS::Handle<JSObject*> constructorProto(EventTargetBinding::GetConstructorObjectHandle(aCx));
   16990           7 :   if (!constructorProto) {
   16991           0 :     return;
   16992             :   }
   16993             : 
   16994             :   static bool sIdsInited = false;
   16995           7 :   if (!sIdsInited && NS_IsMainThread()) {
   16996           2 :     if (!InitIds(aCx, sNativeProperties.Upcast())) {
   16997           0 :       return;
   16998             :     }
   16999           2 :     if (!InitIds(aCx, sChromeOnlyNativeProperties.Upcast())) {
   17000           0 :       return;
   17001             :     }
   17002           2 :     sIdsInited = true;
   17003             :   }
   17004             : 
   17005             :   static bool sPrefCachesInited = false;
   17006           7 :   if (!sPrefCachesInited && NS_IsMainThread()) {
   17007           2 :     sPrefCachesInited = true;
   17008           2 :     Preferences::AddBoolVarCache(&sAttributes[3].disablers->enabled, "browser.cache.offline.enable");
   17009           2 :     Preferences::AddBoolVarCache(&sAttributes[4].disablers->enabled, "dom.manifest.onappinstalled");
   17010           2 :     Preferences::AddBoolVarCache(&sAttributes[6].disablers->enabled, "dom.vr.enabled");
   17011           2 :     Preferences::AddBoolVarCache(&sAttributes[7].disablers->enabled, "dom.audioWorklet.enabled");
   17012           2 :     Preferences::AddBoolVarCache(&sAttributes[8].disablers->enabled, "dom.paintWorklet.enabled");
   17013           2 :     Preferences::AddBoolVarCache(&sAttributes[12].disablers->enabled, "dom.select_events.enabled");
   17014           2 :     Preferences::AddBoolVarCache(&sAttributes[14].disablers->enabled, "dom.w3c_pointer_events.enabled");
   17015           2 :     Preferences::AddBoolVarCache(&sAttributes[16].disablers->enabled, "security.webauth.u2f");
   17016           2 :     Preferences::AddBoolVarCache(&sAttributes[18].disablers->enabled, "media.webspeech.synth.enabled");
   17017             :   }
   17018             : 
   17019           7 :   JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::Window);
   17020           7 :   JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::Window);
   17021          21 :   dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
   17022             :                               &sPrototypeClass.mBase, protoCache,
   17023             :                               constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
   17024             :                               interfaceCache,
   17025             :                               sNativeProperties.Upcast(),
   17026           7 :                               nsContentUtils::ThreadsafeIsSystemCaller(aCx) ? sChromeOnlyNativeProperties.Upcast() : nullptr,
   17027             :                               "Window", aDefineOnGlobal,
   17028             :                               nullptr,
   17029           7 :                               true);
   17030             : 
   17031           7 :   if (*&aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::Window)) {
   17032             :     bool succeeded;
   17033           7 :     JS::Handle<JSObject*> prot = GetProtoObjectHandle(aCx);
   17034           7 :     if (!JS_SetImmutablePrototype(aCx, prot, &succeeded)) {
   17035           0 :       *protoCache = nullptr;
   17036           0 :       if (interfaceCache) {
   17037           0 :         *interfaceCache = nullptr;
   17038             :       }
   17039           0 :       return;
   17040             :     }
   17041             : 
   17042           7 :     MOZ_ASSERT(succeeded,
   17043             :                "making a fresh prototype object's [[Prototype]] "
   17044             :                "immutable can internally fail, but it should "
   17045             :                "never be unsuccessful");
   17046             :   }
   17047             : }
   17048             : 
   17049             : JS::Handle<JSObject*>
   17050          15 : GetProtoObjectHandle(JSContext* aCx)
   17051             : {
   17052             :   /* Get the interface prototype object for this class.  This will create the
   17053             :      object as needed. */
   17054          15 :   bool aDefineOnGlobal = true;
   17055             : 
   17056             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
   17057          15 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
   17058          15 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
   17059           0 :     return nullptr;
   17060             :   }
   17061             : 
   17062             :   /* Check to see whether the interface objects are already installed */
   17063          15 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
   17064          15 :   if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::Window)) {
   17065          14 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
   17066           7 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
   17067             :   }
   17068             : 
   17069             :   /*
   17070             :    * The object might _still_ be null, but that's OK.
   17071             :    *
   17072             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
   17073             :    * traced by TraceProtoAndIfaceCache() and its contents are never
   17074             :    * changed after they have been set.
   17075             :    *
   17076             :    * Calling address() avoids the read read barrier that does gray
   17077             :    * unmarking, but it's not possible for the object to be gray here.
   17078             :    */
   17079             : 
   17080          15 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::Window);
   17081          15 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
   17082          15 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
   17083             : }
   17084             : 
   17085             : JS::Handle<JSObject*>
   17086           0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
   17087             : {
   17088             :   /* Get the interface object for this class.  This will create the object as
   17089             :      needed. */
   17090             : 
   17091             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
   17092           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
   17093           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
   17094           0 :     return nullptr;
   17095             :   }
   17096             : 
   17097             :   /* Check to see whether the interface objects are already installed */
   17098           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
   17099           0 :   if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::Window)) {
   17100           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
   17101           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
   17102             :   }
   17103             : 
   17104             :   /*
   17105             :    * The object might _still_ be null, but that's OK.
   17106             :    *
   17107             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
   17108             :    * traced by TraceProtoAndIfaceCache() and its contents are never
   17109             :    * changed after they have been set.
   17110             :    *
   17111             :    * Calling address() avoids the read read barrier that does gray
   17112             :    * unmarking, but it's not possible for the object to be gray here.
   17113             :    */
   17114             : 
   17115           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::Window);
   17116           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
   17117           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
   17118             : }
   17119             : 
   17120             : JSObject*
   17121           0 : GetConstructorObject(JSContext* aCx)
   17122             : {
   17123           0 :   return GetConstructorObjectHandle(aCx);
   17124             : }
   17125             : 
   17126             : } // namespace WindowBinding
   17127             : 
   17128             : 
   17129             : 
   17130             : } // namespace dom
   17131             : } // namespace mozilla

Generated by: LCOV version 1.13