Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dom/bindings/WindowBinding.cpp
Line
Count
Source (jump to first uncovered line)
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 "EventHandlerBinding.h"
6
#include "EventTargetBinding.h"
7
#include "ExternalBinding.h"
8
#include "FunctionBinding.h"
9
#include "ImageBitmapBinding.h"
10
#include "InstallTriggerBinding.h"
11
#include "Navigator.h"
12
#include "RequestBinding.h"
13
#include "WindowBinding.h"
14
#include "WrapperFactory.h"
15
#include "XrayWrapper.h"
16
#include "jsapi.h"
17
#include "mozilla/FloatingPoint.h"
18
#include "mozilla/OwningNonNull.h"
19
#include "mozilla/Preferences.h"
20
#include "mozilla/UseCounter.h"
21
#include "mozilla/dom/BarProps.h"
22
#include "mozilla/dom/BindingUtils.h"
23
#include "mozilla/dom/ChromeMessageBroadcaster.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/VisualViewport.h"
47
#include "mozilla/dom/Worklet.h"
48
#include "mozilla/dom/XrayExpandoClass.h"
49
#include "mozilla/dom/cache/CacheStorage.h"
50
#include "mozilla/webgpu/Instance.h"
51
#include "nsContentUtils.h"
52
#include "nsDOMOfflineResourceList.h"
53
#include "nsGlobalWindow.h"
54
#include "nsHistory.h"
55
#include "nsIBrowserDOMWindow.h"
56
#include "nsICSSDeclaration.h"
57
#include "nsIControllers.h"
58
#include "nsIDOMWindowUtils.h"
59
#include "nsIDocShell.h"
60
#include "nsIDocument.h"
61
#include "nsISupports.h"
62
#include "nsJSUtils.h"
63
#include "nsPIDOMWindow.h"
64
#include "nsScreen.h"
65
#include "nsWindowRoot.h"
66
#include "xpcjsid.h"
67
68
namespace mozilla {
69
namespace dom {
70
71
namespace binding_detail {}; // Just to make sure it's known as a namespace
72
using namespace mozilla::dom::binding_detail;
73
74
75
namespace ScrollBehaviorValues {
76
extern const EnumEntry strings[4] = {
77
  {"auto", 4},
78
  {"instant", 7},
79
  {"smooth", 6},
80
  { nullptr, 0 }
81
};
82
} // namespace ScrollBehaviorValues
83
84
bool
85
ToJSValue(JSContext* aCx, ScrollBehavior aArgument, JS::MutableHandle<JS::Value> aValue)
86
0
{
87
0
  MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(ScrollBehaviorValues::strings));
88
0
  JSString* resultStr =
89
0
    JS_NewStringCopyN(aCx, ScrollBehaviorValues::strings[uint32_t(aArgument)].value,
90
0
                      ScrollBehaviorValues::strings[uint32_t(aArgument)].length);
91
0
  if (!resultStr) {
92
0
    return false;
93
0
  }
94
0
  aValue.setString(resultStr);
95
0
  return true;
96
0
}
97
98
99
void
100
ImplCycleCollectionTraverse(nsCycleCollectionTraversalCallback& aCallback, OwningExternalOrWindowProxy& aUnion, const char* aName, uint32_t aFlags)
101
0
{
102
0
  if (aUnion.IsExternal()) {
103
0
    ImplCycleCollectionTraverse(aCallback, aUnion.GetAsExternal(), "mExternal", aFlags);
104
0
  } else if (aUnion.IsWindowProxy()) {
105
0
    ImplCycleCollectionTraverse(aCallback, aUnion.GetAsWindowProxy(), "mWindowProxy", aFlags);
106
0
  }
107
0
}
108
109
110
void
111
ImplCycleCollectionUnlink(OwningExternalOrWindowProxy& aUnion)
112
0
{
113
0
  aUnion.Uninit();
114
0
}
115
116
117
bool
118
ExternalOrWindowProxy::ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const
119
0
{
120
0
  switch (mType) {
121
0
    case eUninitialized: {
122
0
      return false;
123
0
      break;
124
0
    }
125
0
    case eExternal: {
126
0
      if (!GetOrCreateDOMReflector(cx, mValue.mExternal.Value(), rval)) {
127
0
        MOZ_ASSERT(JS_IsExceptionPending(cx));
128
0
        return false;
129
0
      }
130
0
      return true;
131
0
      break;
132
0
    }
133
0
    case eWindowProxy: {
134
0
      if (!WrapObject(cx, mValue.mWindowProxy.Value(), rval)) {
135
0
        return false;
136
0
      }
137
0
      return true;
138
0
      break;
139
0
    }
140
0
    default: {
141
0
      return false;
142
0
      break;
143
0
    }
144
0
  }
145
0
146
0
  return false;
147
0
}
148
149
150
OwningNonNull<mozilla::dom::External>&
151
OwningExternalOrWindowProxy::RawSetAsExternal()
152
0
{
153
0
  if (mType == eExternal) {
154
0
    return mValue.mExternal.Value();
155
0
  }
156
0
  MOZ_ASSERT(mType == eUninitialized);
157
0
  mType = eExternal;
158
0
  return mValue.mExternal.SetValue();
159
0
}
160
161
OwningNonNull<mozilla::dom::External>&
162
OwningExternalOrWindowProxy::SetAsExternal()
163
0
{
164
0
  if (mType == eExternal) {
165
0
    return mValue.mExternal.Value();
166
0
  }
167
0
  Uninit();
168
0
  mType = eExternal;
169
0
  return mValue.mExternal.SetValue();
170
0
}
171
172
bool
173
OwningExternalOrWindowProxy::TrySetToExternal(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl)
174
0
{
175
0
  tryNext = false;
176
0
  { // scope for memberSlot
177
0
    OwningNonNull<mozilla::dom::External>& memberSlot = RawSetAsExternal();
178
0
    static_assert(IsRefcounted<mozilla::dom::External>::value, "We can only store refcounted classes.");{
179
0
      nsresult rv = UnwrapObject<prototypes::id::External, mozilla::dom::External>(value, memberSlot);
180
0
      if (NS_FAILED(rv)) {
181
0
        DestroyExternal();
182
0
        tryNext = true;
183
0
        return true;
184
0
      }
185
0
    }
186
0
  }
187
0
  return true;
188
0
}
189
190
void
191
OwningExternalOrWindowProxy::DestroyExternal()
192
0
{
193
0
  MOZ_ASSERT(IsExternal(), "Wrong type!");
194
0
  mValue.mExternal.Destroy();
195
0
  mType = eUninitialized;
196
0
}
197
198
199
200
201
RefPtr<nsPIDOMWindowOuter>&
202
OwningExternalOrWindowProxy::RawSetAsWindowProxy()
203
0
{
204
0
  if (mType == eWindowProxy) {
205
0
    return mValue.mWindowProxy.Value();
206
0
  }
207
0
  MOZ_ASSERT(mType == eUninitialized);
208
0
  mType = eWindowProxy;
209
0
  return mValue.mWindowProxy.SetValue();
210
0
}
211
212
RefPtr<nsPIDOMWindowOuter>&
213
OwningExternalOrWindowProxy::SetAsWindowProxy()
214
0
{
215
0
  if (mType == eWindowProxy) {
216
0
    return mValue.mWindowProxy.Value();
217
0
  }
218
0
  Uninit();
219
0
  mType = eWindowProxy;
220
0
  return mValue.mWindowProxy.SetValue();
221
0
}
222
223
bool
224
OwningExternalOrWindowProxy::TrySetToWindowProxy(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl)
225
0
{
226
0
  tryNext = false;
227
0
  { // scope for memberSlot
228
0
    RefPtr<nsPIDOMWindowOuter>& memberSlot = RawSetAsWindowProxy();
229
0
    static_assert(IsRefcounted<nsPIDOMWindowOuter>::value, "We can only store refcounted classes.");RefPtr<nsPIDOMWindowOuter> mWindowProxyHolder;
230
0
    JS::Rooted<JSObject*> source(cx, &value.toObject());
231
0
    if (NS_FAILED(UnwrapArg<nsPIDOMWindowOuter>(cx, source, getter_AddRefs(mWindowProxyHolder)))) {
232
0
      DestroyWindowProxy();
233
0
      tryNext = true;
234
0
      return true;
235
0
    }
236
0
    MOZ_ASSERT(mWindowProxyHolder);
237
0
    memberSlot = mWindowProxyHolder;
238
0
  }
239
0
  return true;
240
0
}
241
242
void
243
OwningExternalOrWindowProxy::DestroyWindowProxy()
244
0
{
245
0
  MOZ_ASSERT(IsWindowProxy(), "Wrong type!");
246
0
  mValue.mWindowProxy.Destroy();
247
0
  mType = eUninitialized;
248
0
}
249
250
251
252
253
void
254
OwningExternalOrWindowProxy::Uninit()
255
{
256
  switch (mType) {
257
    case eUninitialized: {
258
      break;
259
    }
260
    case eExternal: {
261
      DestroyExternal();
262
      break;
263
    }
264
    case eWindowProxy: {
265
      DestroyWindowProxy();
266
      break;
267
    }
268
  }
269
}
270
271
bool
272
OwningExternalOrWindowProxy::ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const
273
0
{
274
0
  switch (mType) {
275
0
    case eUninitialized: {
276
0
      return false;
277
0
      break;
278
0
    }
279
0
    case eExternal: {
280
0
      if (!GetOrCreateDOMReflector(cx, mValue.mExternal.Value(), rval)) {
281
0
        MOZ_ASSERT(JS_IsExceptionPending(cx));
282
0
        return false;
283
0
      }
284
0
      return true;
285
0
      break;
286
0
    }
287
0
    case eWindowProxy: {
288
0
      if (!WrapObject(cx, mValue.mWindowProxy.Value(), rval)) {
289
0
        return false;
290
0
      }
291
0
      return true;
292
0
      break;
293
0
    }
294
0
    default: {
295
0
      return false;
296
0
      break;
297
0
    }
298
0
  }
299
0
300
0
  return false;
301
0
}
302
303
void
304
OwningExternalOrWindowProxy::TraceUnion(JSTracer* trc)
305
0
{
306
0
}
307
308
OwningExternalOrWindowProxy&
309
OwningExternalOrWindowProxy::operator=(const OwningExternalOrWindowProxy& aOther)
310
0
{
311
0
  switch (aOther.mType) {
312
0
    case eUninitialized: {
313
0
      MOZ_ASSERT(mType == eUninitialized,
314
0
                 "We need to destroy ourselves?");
315
0
      break;
316
0
    }
317
0
    case eExternal: {
318
0
      SetAsExternal() = aOther.GetAsExternal();
319
0
      break;
320
0
    }
321
0
    case eWindowProxy: {
322
0
      SetAsWindowProxy() = aOther.GetAsWindowProxy();
323
0
      break;
324
0
    }
325
0
  }
326
0
  return *this;
327
0
}
328
329
330
331
IdleRequestOptions::IdleRequestOptions()
332
0
{
333
0
  // Safe to pass a null context if we pass a null value
334
0
  Init(nullptr, JS::NullHandleValue);
335
0
}
336
337
338
339
bool
340
IdleRequestOptions::InitIds(JSContext* cx, IdleRequestOptionsAtoms* atomsCache)
341
0
{
342
0
  MOZ_ASSERT(!*reinterpret_cast<jsid**>(atomsCache));
343
0
344
0
  // Initialize these in reverse order so that any failure leaves the first one
345
0
  // uninitialized.
346
0
  if (!atomsCache->timeout_id.init(cx, "timeout")) {
347
0
    return false;
348
0
  }
349
0
  return true;
350
0
}
351
352
bool
353
IdleRequestOptions::Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription, bool passedToJSImpl)
354
0
{
355
0
  // Passing a null JSContext is OK only if we're initing from null,
356
0
  // Since in that case we will not have to do any property gets
357
0
  // Also evaluate isNullOrUndefined in order to avoid false-positive
358
0
  // checkers by static analysis tools
359
0
  MOZ_ASSERT_IF(!cx, val.isNull() && val.isNullOrUndefined());
360
0
  IdleRequestOptionsAtoms* atomsCache = nullptr;
361
0
  if (cx) {
362
0
    atomsCache = GetAtomCache<IdleRequestOptionsAtoms>(cx);
363
0
    if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
364
0
      return false;
365
0
    }
366
0
  }
367
0
368
0
  if (!IsConvertibleToDictionary(val)) {
369
0
    return ThrowErrorMessage(cx, MSG_NOT_DICTIONARY, sourceDescription);
370
0
  }
371
0
372
0
  bool isNull = val.isNullOrUndefined();
373
0
  // We only need these if !isNull, in which case we have |cx|.
374
0
  Maybe<JS::Rooted<JSObject *> > object;
375
0
  Maybe<JS::Rooted<JS::Value> > temp;
376
0
  if (!isNull) {
377
0
    MOZ_ASSERT(cx);
378
0
    object.emplace(cx, &val.toObject());
379
0
    temp.emplace(cx);
380
0
  }
381
0
  if (!isNull) {
382
0
    if (!JS_GetPropertyById(cx, *object, atomsCache->timeout_id, temp.ptr())) {
383
0
      return false;
384
0
    }
385
0
  }
386
0
  if (!isNull && !temp->isUndefined()) {
387
0
    mTimeout.Construct();
388
0
    if (!ValueToPrimitive<uint32_t, eDefault>(cx, temp.ref(), &(mTimeout.Value()))) {
389
0
      return false;
390
0
    }
391
0
    mIsAnyMemberPresent = true;
392
0
  }
393
0
  return true;
394
0
}
395
396
bool
397
IdleRequestOptions::Init(const nsAString& aJSON)
398
0
{
399
0
  AutoJSAPI jsapi;
400
0
  JSObject* cleanGlobal = SimpleGlobalObject::Create(SimpleGlobalObject::GlobalType::BindingDetail);
401
0
  if (!cleanGlobal) {
402
0
    return false;
403
0
  }
404
0
  if (!jsapi.Init(cleanGlobal)) {
405
0
    return false;
406
0
  }
407
0
  JSContext* cx = jsapi.cx();
408
0
  JS::Rooted<JS::Value> json(cx);
409
0
  bool ok = ParseJSON(cx, aJSON, &json);
410
0
  NS_ENSURE_TRUE(ok, false);
411
0
  return Init(cx, json);
412
0
}
413
414
bool
415
IdleRequestOptions::ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const
416
0
{
417
0
  IdleRequestOptionsAtoms* atomsCache = GetAtomCache<IdleRequestOptionsAtoms>(cx);
418
0
  if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
419
0
    return false;
420
0
  }
421
0
422
0
  JS::Rooted<JSObject*> obj(cx, JS_NewPlainObject(cx));
423
0
  if (!obj) {
424
0
    return false;
425
0
  }
426
0
  rval.set(JS::ObjectValue(*obj));
427
0
428
0
  if (mTimeout.WasPassed()) {
429
0
    do {
430
0
      // block for our 'break' successCode and scope for 'temp' and 'currentValue'
431
0
      JS::Rooted<JS::Value> temp(cx);
432
0
      uint32_t const & currentValue = mTimeout.InternalValue();
433
0
      temp.setNumber(currentValue);
434
0
      if (!JS_DefinePropertyById(cx, obj, atomsCache->timeout_id, temp, JSPROP_ENUMERATE)) {
435
0
        return false;
436
0
      }
437
0
      break;
438
0
    } while(false);
439
0
  }
440
0
441
0
  return true;
442
0
}
443
444
bool
445
IdleRequestOptions::ToJSON(nsAString& aJSON) const
446
0
{
447
0
  AutoJSAPI jsapi;
448
0
  jsapi.Init();
449
0
  JSContext *cx = jsapi.cx();
450
0
  // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here
451
0
  // because we'll only be creating objects, in ways that have no
452
0
  // side-effects, followed by a call to JS::ToJSONMaybeSafely,
453
0
  // which likewise guarantees no side-effects for the sorts of
454
0
  // things we will pass it.
455
0
  JSAutoRealm ar(cx, UnprivilegedJunkScopeOrWorkerGlobal());
456
0
  JS::Rooted<JS::Value> val(cx);
457
0
  if (!ToObjectInternal(cx, &val)) {
458
0
    return false;
459
0
  }
460
0
  JS::Rooted<JSObject*> obj(cx, &val.toObject());
461
0
  return StringifyToJSON(cx, obj, aJSON);
462
0
}
463
464
void
465
IdleRequestOptions::TraceDictionary(JSTracer* trc)
466
0
{
467
0
}
468
469
IdleRequestOptions&
470
IdleRequestOptions::operator=(const IdleRequestOptions& aOther)
471
0
{
472
0
  DictionaryBase::operator=(aOther);
473
0
  mTimeout.Reset();
474
0
  if (aOther.mTimeout.WasPassed()) {
475
0
    mTimeout.Construct(aOther.mTimeout.Value());
476
0
  }
477
0
  return *this;
478
0
}
479
480
namespace binding_detail {
481
} // namespace binding_detail
482
483
484
485
ScrollOptions::ScrollOptions()
486
0
{
487
0
  // Safe to pass a null context if we pass a null value
488
0
  Init(nullptr, JS::NullHandleValue);
489
0
}
490
491
492
493
bool
494
ScrollOptions::InitIds(JSContext* cx, ScrollOptionsAtoms* atomsCache)
495
0
{
496
0
  MOZ_ASSERT(!*reinterpret_cast<jsid**>(atomsCache));
497
0
498
0
  // Initialize these in reverse order so that any failure leaves the first one
499
0
  // uninitialized.
500
0
  if (!atomsCache->behavior_id.init(cx, "behavior")) {
501
0
    return false;
502
0
  }
503
0
  return true;
504
0
}
505
506
bool
507
ScrollOptions::Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription, bool passedToJSImpl)
508
0
{
509
0
  // Passing a null JSContext is OK only if we're initing from null,
510
0
  // Since in that case we will not have to do any property gets
511
0
  // Also evaluate isNullOrUndefined in order to avoid false-positive
512
0
  // checkers by static analysis tools
513
0
  MOZ_ASSERT_IF(!cx, val.isNull() && val.isNullOrUndefined());
514
0
  ScrollOptionsAtoms* atomsCache = nullptr;
515
0
  if (cx) {
516
0
    atomsCache = GetAtomCache<ScrollOptionsAtoms>(cx);
517
0
    if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
518
0
      return false;
519
0
    }
520
0
  }
521
0
522
0
  if (!IsConvertibleToDictionary(val)) {
523
0
    return ThrowErrorMessage(cx, MSG_NOT_DICTIONARY, sourceDescription);
524
0
  }
525
0
526
0
  bool isNull = val.isNullOrUndefined();
527
0
  // We only need these if !isNull, in which case we have |cx|.
528
0
  Maybe<JS::Rooted<JSObject *> > object;
529
0
  Maybe<JS::Rooted<JS::Value> > temp;
530
0
  if (!isNull) {
531
0
    MOZ_ASSERT(cx);
532
0
    object.emplace(cx, &val.toObject());
533
0
    temp.emplace(cx);
534
0
  }
535
0
  if (!isNull) {
536
0
    if (!JS_GetPropertyById(cx, *object, atomsCache->behavior_id, temp.ptr())) {
537
0
      return false;
538
0
    }
539
0
  }
540
0
  if (!isNull && !temp->isUndefined()) {
541
0
    {
542
0
      int index;
543
0
      if (!FindEnumStringIndex<true>(cx, temp.ref(), ScrollBehaviorValues::strings, "ScrollBehavior", "'behavior' member of ScrollOptions", &index)) {
544
0
        return false;
545
0
      }
546
0
      MOZ_ASSERT(index >= 0);
547
0
      mBehavior = static_cast<ScrollBehavior>(index);
548
0
    }
549
0
  } else {
550
0
    mBehavior = ScrollBehavior::Auto;
551
0
  }
552
0
  mIsAnyMemberPresent = true;
553
0
  return true;
554
0
}
555
556
bool
557
ScrollOptions::Init(const nsAString& aJSON)
558
0
{
559
0
  AutoJSAPI jsapi;
560
0
  JSObject* cleanGlobal = SimpleGlobalObject::Create(SimpleGlobalObject::GlobalType::BindingDetail);
561
0
  if (!cleanGlobal) {
562
0
    return false;
563
0
  }
564
0
  if (!jsapi.Init(cleanGlobal)) {
565
0
    return false;
566
0
  }
567
0
  JSContext* cx = jsapi.cx();
568
0
  JS::Rooted<JS::Value> json(cx);
569
0
  bool ok = ParseJSON(cx, aJSON, &json);
570
0
  NS_ENSURE_TRUE(ok, false);
571
0
  return Init(cx, json);
572
0
}
573
574
bool
575
ScrollOptions::ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const
576
0
{
577
0
  ScrollOptionsAtoms* atomsCache = GetAtomCache<ScrollOptionsAtoms>(cx);
578
0
  if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
579
0
    return false;
580
0
  }
581
0
582
0
  JS::Rooted<JSObject*> obj(cx, JS_NewPlainObject(cx));
583
0
  if (!obj) {
584
0
    return false;
585
0
  }
586
0
  rval.set(JS::ObjectValue(*obj));
587
0
588
0
  do {
589
0
    // block for our 'break' successCode and scope for 'temp' and 'currentValue'
590
0
    JS::Rooted<JS::Value> temp(cx);
591
0
    ScrollBehavior const & currentValue = mBehavior;
592
0
    if (!ToJSValue(cx, currentValue, &temp)) {
593
0
      return false;
594
0
    }
595
0
    if (!JS_DefinePropertyById(cx, obj, atomsCache->behavior_id, temp, JSPROP_ENUMERATE)) {
596
0
      return false;
597
0
    }
598
0
    break;
599
0
  } while(false);
600
0
601
0
  return true;
602
0
}
603
604
bool
605
ScrollOptions::ToJSON(nsAString& aJSON) const
606
0
{
607
0
  AutoJSAPI jsapi;
608
0
  jsapi.Init();
609
0
  JSContext *cx = jsapi.cx();
610
0
  // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here
611
0
  // because we'll only be creating objects, in ways that have no
612
0
  // side-effects, followed by a call to JS::ToJSONMaybeSafely,
613
0
  // which likewise guarantees no side-effects for the sorts of
614
0
  // things we will pass it.
615
0
  JSAutoRealm ar(cx, UnprivilegedJunkScopeOrWorkerGlobal());
616
0
  JS::Rooted<JS::Value> val(cx);
617
0
  if (!ToObjectInternal(cx, &val)) {
618
0
    return false;
619
0
  }
620
0
  JS::Rooted<JSObject*> obj(cx, &val.toObject());
621
0
  return StringifyToJSON(cx, obj, aJSON);
622
0
}
623
624
void
625
ScrollOptions::TraceDictionary(JSTracer* trc)
626
0
{
627
0
}
628
629
ScrollOptions&
630
ScrollOptions::operator=(const ScrollOptions& aOther)
631
0
{
632
0
  DictionaryBase::operator=(aOther);
633
0
  mBehavior = aOther.mBehavior;
634
0
  return *this;
635
0
}
636
637
namespace binding_detail {
638
} // namespace binding_detail
639
640
641
642
ScrollToOptions::ScrollToOptions()
643
  : ScrollOptions(FastDictionaryInitializer())
644
0
{
645
0
  // Safe to pass a null context if we pass a null value
646
0
  Init(nullptr, JS::NullHandleValue);
647
0
}
648
649
650
651
bool
652
ScrollToOptions::InitIds(JSContext* cx, ScrollToOptionsAtoms* atomsCache)
653
0
{
654
0
  MOZ_ASSERT(!*reinterpret_cast<jsid**>(atomsCache));
655
0
656
0
  // Initialize these in reverse order so that any failure leaves the first one
657
0
  // uninitialized.
658
0
  if (!atomsCache->top_id.init(cx, "top") ||
659
0
      !atomsCache->left_id.init(cx, "left")) {
660
0
    return false;
661
0
  }
662
0
  return true;
663
0
}
664
665
bool
666
ScrollToOptions::Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription, bool passedToJSImpl)
667
0
{
668
0
  // Passing a null JSContext is OK only if we're initing from null,
669
0
  // Since in that case we will not have to do any property gets
670
0
  // Also evaluate isNullOrUndefined in order to avoid false-positive
671
0
  // checkers by static analysis tools
672
0
  MOZ_ASSERT_IF(!cx, val.isNull() && val.isNullOrUndefined());
673
0
  ScrollToOptionsAtoms* atomsCache = nullptr;
674
0
  if (cx) {
675
0
    atomsCache = GetAtomCache<ScrollToOptionsAtoms>(cx);
676
0
    if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
677
0
      return false;
678
0
    }
679
0
  }
680
0
681
0
  // Per spec, we init the parent's members first
682
0
  if (!ScrollOptions::Init(cx, val)) {
683
0
    return false;
684
0
  }
685
0
686
0
  bool isNull = val.isNullOrUndefined();
687
0
  // We only need these if !isNull, in which case we have |cx|.
688
0
  Maybe<JS::Rooted<JSObject *> > object;
689
0
  Maybe<JS::Rooted<JS::Value> > temp;
690
0
  if (!isNull) {
691
0
    MOZ_ASSERT(cx);
692
0
    object.emplace(cx, &val.toObject());
693
0
    temp.emplace(cx);
694
0
  }
695
0
  if (!isNull) {
696
0
    if (!JS_GetPropertyById(cx, *object, atomsCache->left_id, temp.ptr())) {
697
0
      return false;
698
0
    }
699
0
  }
700
0
  if (!isNull && !temp->isUndefined()) {
701
0
    mLeft.Construct();
702
0
    if (!ValueToPrimitive<double, eDefault>(cx, temp.ref(), &(mLeft.Value()))) {
703
0
      return false;
704
0
    }
705
0
    mIsAnyMemberPresent = true;
706
0
  }
707
0
708
0
  if (!isNull) {
709
0
    if (!JS_GetPropertyById(cx, *object, atomsCache->top_id, temp.ptr())) {
710
0
      return false;
711
0
    }
712
0
  }
713
0
  if (!isNull && !temp->isUndefined()) {
714
0
    mTop.Construct();
715
0
    if (!ValueToPrimitive<double, eDefault>(cx, temp.ref(), &(mTop.Value()))) {
716
0
      return false;
717
0
    }
718
0
    mIsAnyMemberPresent = true;
719
0
  }
720
0
  return true;
721
0
}
722
723
bool
724
ScrollToOptions::ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const
725
0
{
726
0
  ScrollToOptionsAtoms* atomsCache = GetAtomCache<ScrollToOptionsAtoms>(cx);
727
0
  if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
728
0
    return false;
729
0
  }
730
0
731
0
  // Per spec, we define the parent's members first
732
0
  if (!ScrollOptions::ToObjectInternal(cx, rval)) {
733
0
    return false;
734
0
  }
735
0
  JS::Rooted<JSObject*> obj(cx, &rval.toObject());
736
0
737
0
  if (mLeft.WasPassed()) {
738
0
    do {
739
0
      // block for our 'break' successCode and scope for 'temp' and 'currentValue'
740
0
      JS::Rooted<JS::Value> temp(cx);
741
0
      double const & currentValue = mLeft.InternalValue();
742
0
      temp.set(JS_NumberValue(double(currentValue)));
743
0
      if (!JS_DefinePropertyById(cx, obj, atomsCache->left_id, temp, JSPROP_ENUMERATE)) {
744
0
        return false;
745
0
      }
746
0
      break;
747
0
    } while(false);
748
0
  }
749
0
750
0
  if (mTop.WasPassed()) {
751
0
    do {
752
0
      // block for our 'break' successCode and scope for 'temp' and 'currentValue'
753
0
      JS::Rooted<JS::Value> temp(cx);
754
0
      double const & currentValue = mTop.InternalValue();
755
0
      temp.set(JS_NumberValue(double(currentValue)));
756
0
      if (!JS_DefinePropertyById(cx, obj, atomsCache->top_id, temp, JSPROP_ENUMERATE)) {
757
0
        return false;
758
0
      }
759
0
      break;
760
0
    } while(false);
761
0
  }
762
0
763
0
  return true;
764
0
}
765
766
void
767
ScrollToOptions::TraceDictionary(JSTracer* trc)
768
0
{
769
0
  ScrollOptions::TraceDictionary(trc);
770
0
}
771
772
ScrollToOptions&
773
ScrollToOptions::operator=(const ScrollToOptions& aOther)
774
0
{
775
0
  ScrollOptions::operator=(aOther);
776
0
  mLeft.Reset();
777
0
  if (aOther.mLeft.WasPassed()) {
778
0
    mLeft.Construct(aOther.mLeft.Value());
779
0
  }
780
0
  mTop.Reset();
781
0
  if (aOther.mTop.WasPassed()) {
782
0
    mTop.Construct(aOther.mTop.Value());
783
0
  }
784
0
  return *this;
785
0
}
786
787
namespace binding_detail {
788
} // namespace binding_detail
789
790
791
void
792
FrameRequestCallback::Call(JSContext* cx, JS::Handle<JS::Value> aThisVal, double time, ErrorResult& aRv)
793
0
{
794
0
  JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
795
0
  JS::AutoValueVector argv(cx);
796
0
  if (!argv.resize(1)) {
797
0
    aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
798
0
    return;
799
0
  }
800
0
  unsigned argc = 1;
801
0
802
0
  do {
803
0
    argv[0].set(JS_NumberValue(double(time)));
804
0
    break;
805
0
  } while (false);
806
0
807
0
  JS::Rooted<JS::Value> callable(cx, JS::ObjectValue(*mCallback));
808
0
  if (!JS::Call(cx, aThisVal, callable,
809
0
                JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
810
0
    aRv.NoteJSContextException(cx);
811
0
    return;
812
0
  }
813
0
}
814
815
816
817
void
818
PromiseDocumentFlushedCallback::Call(JSContext* cx, JS::Handle<JS::Value> aThisVal, JS::MutableHandle<JS::Value> aRetVal, ErrorResult& aRv)
819
0
{
820
0
  JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
821
0
822
0
  JS::Rooted<JS::Value> callable(cx, JS::ObjectValue(*mCallback));
823
0
  if (!JS::Call(cx, aThisVal, callable,
824
0
                JS::HandleValueArray::empty(), &rval)) {
825
0
    aRv.NoteJSContextException(cx);
826
0
    return;
827
0
  }
828
0
  JS::Rooted<JS::Value> rvalDecl(cx);
829
0
#ifdef __clang__
830
0
#pragma clang diagnostic push
831
0
#pragma clang diagnostic ignored "-Wunreachable-code"
832
0
#pragma clang diagnostic ignored "-Wunreachable-code-return"
833
0
#endif // __clang__
834
0
  if ((false) && !CallerSubsumes(rval)) {
835
0
    ThrowErrorMessage(cx, MSG_PERMISSION_DENIED_TO_PASS_ARG, "return value of PromiseDocumentFlushedCallback");
836
0
    aRv.Throw(NS_ERROR_UNEXPECTED);
837
0
    return;
838
0
  }
839
0
#ifdef __clang__
840
0
#pragma clang diagnostic pop
841
0
#endif // __clang__
842
0
  rvalDecl = rval;
843
0
  aRetVal.set(rvalDecl);
844
0
}
845
846
847
848
void
849
IdleRequestCallback::Call(JSContext* cx, JS::Handle<JS::Value> aThisVal, IdleDeadline& deadline, ErrorResult& aRv)
850
0
{
851
0
  JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
852
0
  JS::AutoValueVector argv(cx);
853
0
  if (!argv.resize(1)) {
854
0
    aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
855
0
    return;
856
0
  }
857
0
  unsigned argc = 1;
858
0
859
0
  do {
860
0
    if (!GetOrCreateDOMReflector(cx, deadline, argv[0])) {
861
0
      MOZ_ASSERT(JS_IsExceptionPending(cx));
862
0
      aRv.Throw(NS_ERROR_UNEXPECTED);
863
0
      return;
864
0
    }
865
0
    break;
866
0
  } while (false);
867
0
868
0
  JS::Rooted<JS::Value> callable(cx, JS::ObjectValue(*mCallback));
869
0
  if (!JS::Call(cx, aThisVal, callable,
870
0
                JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
871
0
    aRv.NoteJSContextException(cx);
872
0
    return;
873
0
  }
874
0
}
875
876
877
878
namespace binding_detail {
879
} // namespace binding_detail
880
881
882
namespace binding_detail {
883
} // namespace binding_detail
884
885
886
namespace binding_detail {
887
} // namespace binding_detail
888
889
890
namespace Window_Binding {
891
892
static_assert(IsRefcounted<NativeType>::value == IsRefcounted<EventTarget_Binding::NativeType>::value,
893
              "Can't inherit from an interface with a different ownership model.");
894
895
static bool
896
get_window(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
897
0
{
898
0
  AUTO_PROFILER_LABEL_FAST("get Window.window", DOM, cx);
899
0
900
0
  // Have to either root across the getter call or reget after.
901
0
  JS::Rooted<JSObject*> slotStorage(cx, js::UncheckedUnwrap(obj, /* stopAtWindowProxy = */ false));
902
0
  MOZ_ASSERT(IsDOMObject(slotStorage));
903
0
  const size_t slotIndex = (DOM_INSTANCE_RESERVED_SLOTS + 0);
904
0
  MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
905
0
  {
906
0
    // Scope for cachedVal
907
0
    JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
908
0
    if (!cachedVal.isUndefined()) {
909
0
      args.rval().set(cachedVal);
910
0
      // The cached value is in the compartment of slotStorage,
911
0
      // so wrap into the caller compartment as needed.
912
0
      if (MaybeWrapValue(cx, args.rval())) {
913
0
        return true;
914
0
      }
915
0
      MOZ_CRASH("Looks like bug 1488480/1405521, with cached value wrapping failing");
916
0
      return false;
917
0
    }
918
0
  }
919
0
920
0
  auto result(StrongOrRawPtr<nsGlobalWindowInner>(self->Window()));
921
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
922
0
  {
923
0
    JS::Rooted<JSObject*> conversionScope(cx, slotStorage);
924
0
    JSAutoRealm ar(cx, conversionScope);
925
0
    do { // block we break out of when done wrapping
926
0
      if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
927
0
        MOZ_ASSERT(JS_IsExceptionPending(cx));
928
0
        return false;
929
0
      }
930
0
      break;
931
0
    } while (false);
932
0
  }
933
0
  { // And now store things in the realm of our slotStorage.
934
0
    JSAutoRealm ar(cx, slotStorage);
935
0
    // Make a copy so that we don't do unnecessary wrapping on args.rval().
936
0
    JS::Rooted<JS::Value> storedVal(cx, args.rval());
937
0
    if (!MaybeWrapValue(cx, &storedVal)) {
938
0
      MOZ_CRASH("Looks like bug 1488480/1405521, with the other MaybeWrap failing");
939
0
      return false;
940
0
    }
941
0
    js::SetReservedSlot(slotStorage, slotIndex, storedVal);
942
0
  }
943
0
  // And now make sure args.rval() is in the caller realm.
944
0
  if (MaybeWrapValue(cx, args.rval())) {
945
0
    return true;
946
0
  }
947
0
  MOZ_CRASH("Looks like bug 1488480/1405521, with the third MaybeWrap failing");
948
0
  return false;
949
0
}
950
951
static const JSJitInfo window_getterinfo = {
952
  { (JSJitGetterOp)get_window },
953
  { prototypes::id::Window },
954
  { PrototypeTraits<prototypes::id::Window>::Depth },
955
  JSJitInfo::Getter,
956
  JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
957
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
958
  false,  /* isInfallible. False in setters. */
959
  true,  /* isMovable.  Not relevant for setters. */
960
  true, /* isEliminatable.  Not relevant for setters. */
961
  true, /* isAlwaysInSlot.  Only relevant for getters. */
962
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
963
  false,  /* isTypedMethod.  Only relevant for methods. */
964
  (DOM_INSTANCE_RESERVED_SLOTS + 0)   /* Reserved slot index, if we're stored in a slot, else 0. */
965
};
966
static_assert((DOM_INSTANCE_RESERVED_SLOTS + 0) <= JSJitInfo::maxSlotIndex, "We won't fit");
967
static_assert((DOM_INSTANCE_RESERVED_SLOTS + 0) < 5, "There is no slot for us");
968
969
static bool
970
get_self(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
971
0
{
972
0
  AUTO_PROFILER_LABEL_FAST("get Window.self", DOM, cx);
973
0
974
0
  // Have to either root across the getter call or reget after.
975
0
  JS::Rooted<JSObject*> slotStorage(cx, js::UncheckedUnwrap(obj, /* stopAtWindowProxy = */ false));
976
0
  MOZ_ASSERT(IsDOMObject(slotStorage));
977
0
  const size_t slotIndex = (DOM_INSTANCE_RESERVED_SLOTS + 1);
978
0
  MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
979
0
  {
980
0
    // Scope for cachedVal
981
0
    JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
982
0
    if (!cachedVal.isUndefined()) {
983
0
      args.rval().set(cachedVal);
984
0
      // The cached value is in the compartment of slotStorage,
985
0
      // so wrap into the caller compartment as needed.
986
0
      if (MaybeWrapValue(cx, args.rval())) {
987
0
        return true;
988
0
      }
989
0
      MOZ_CRASH("Looks like bug 1488480/1405521, with cached value wrapping failing");
990
0
      return false;
991
0
    }
992
0
  }
993
0
994
0
  auto result(StrongOrRawPtr<nsGlobalWindowInner>(self->Self()));
995
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
996
0
  {
997
0
    JS::Rooted<JSObject*> conversionScope(cx, slotStorage);
998
0
    JSAutoRealm ar(cx, conversionScope);
999
0
    do { // block we break out of when done wrapping
1000
0
      if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1001
0
        MOZ_ASSERT(JS_IsExceptionPending(cx));
1002
0
        return false;
1003
0
      }
1004
0
      break;
1005
0
    } while (false);
1006
0
  }
1007
0
  { // And now store things in the realm of our slotStorage.
1008
0
    JSAutoRealm ar(cx, slotStorage);
1009
0
    // Make a copy so that we don't do unnecessary wrapping on args.rval().
1010
0
    JS::Rooted<JS::Value> storedVal(cx, args.rval());
1011
0
    if (!MaybeWrapValue(cx, &storedVal)) {
1012
0
      MOZ_CRASH("Looks like bug 1488480/1405521, with the other MaybeWrap failing");
1013
0
      return false;
1014
0
    }
1015
0
    js::SetReservedSlot(slotStorage, slotIndex, storedVal);
1016
0
  }
1017
0
  // And now make sure args.rval() is in the caller realm.
1018
0
  if (MaybeWrapValue(cx, args.rval())) {
1019
0
    return true;
1020
0
  }
1021
0
  MOZ_CRASH("Looks like bug 1488480/1405521, with the third MaybeWrap failing");
1022
0
  return false;
1023
0
}
1024
1025
MOZ_CAN_RUN_SCRIPT static bool
1026
set_self(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
1027
0
{
1028
0
  AUTO_PROFILER_LABEL_FAST("set Window.self", DOM, cx);
1029
0
1030
0
  return JS_DefineProperty(cx, obj, "self", args[0], JSPROP_ENUMERATE);
1031
0
}
1032
1033
static const JSJitInfo self_getterinfo = {
1034
  { (JSJitGetterOp)get_self },
1035
  { prototypes::id::Window },
1036
  { PrototypeTraits<prototypes::id::Window>::Depth },
1037
  JSJitInfo::Getter,
1038
  JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
1039
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
1040
  false,  /* isInfallible. False in setters. */
1041
  true,  /* isMovable.  Not relevant for setters. */
1042
  true, /* isEliminatable.  Not relevant for setters. */
1043
  true, /* isAlwaysInSlot.  Only relevant for getters. */
1044
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1045
  false,  /* isTypedMethod.  Only relevant for methods. */
1046
  (DOM_INSTANCE_RESERVED_SLOTS + 1)   /* Reserved slot index, if we're stored in a slot, else 0. */
1047
};
1048
static_assert((DOM_INSTANCE_RESERVED_SLOTS + 1) <= JSJitInfo::maxSlotIndex, "We won't fit");
1049
static_assert((DOM_INSTANCE_RESERVED_SLOTS + 1) < 5, "There is no slot for us");
1050
static const JSJitInfo self_setterinfo = {
1051
  { (JSJitGetterOp)set_self },
1052
  { prototypes::id::Window },
1053
  { PrototypeTraits<prototypes::id::Window>::Depth },
1054
  JSJitInfo::Setter,
1055
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1056
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1057
  false,  /* isInfallible. False in setters. */
1058
  false,  /* isMovable.  Not relevant for setters. */
1059
  false, /* isEliminatable.  Not relevant for setters. */
1060
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1061
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1062
  false,  /* isTypedMethod.  Only relevant for methods. */
1063
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1064
};
1065
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1066
static_assert(0 < 5, "There is no slot for us");
1067
1068
static bool
1069
get_document(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
1070
0
{
1071
0
  AUTO_PROFILER_LABEL_FAST("get Window.document", DOM, cx);
1072
0
1073
0
  // Have to either root across the getter call or reget after.
1074
0
  JS::Rooted<JSObject*> slotStorage(cx, js::UncheckedUnwrap(obj, /* stopAtWindowProxy = */ false));
1075
0
  MOZ_ASSERT(IsDOMObject(slotStorage));
1076
0
  const size_t slotIndex = (DOM_INSTANCE_RESERVED_SLOTS + 2);
1077
0
  MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
1078
0
  {
1079
0
    // Scope for cachedVal
1080
0
    JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
1081
0
    if (!cachedVal.isUndefined()) {
1082
0
      args.rval().set(cachedVal);
1083
0
      // The cached value is in the compartment of slotStorage,
1084
0
      // so wrap into the caller compartment as needed.
1085
0
      if (MaybeWrapValue(cx, args.rval())) {
1086
0
        return true;
1087
0
      }
1088
0
      MOZ_CRASH("Looks like bug 1488480/1405521, with cached value wrapping failing");
1089
0
      return false;
1090
0
    }
1091
0
  }
1092
0
1093
0
  auto result(StrongOrRawPtr<nsIDocument>(self->GetDocument()));
1094
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1095
0
  {
1096
0
    JS::Rooted<JSObject*> conversionScope(cx, slotStorage);
1097
0
    JSAutoRealm ar(cx, conversionScope);
1098
0
    do { // block we break out of when done wrapping
1099
0
      if (!result) {
1100
0
        args.rval().setNull();
1101
0
        break;
1102
0
      }
1103
0
      if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1104
0
        MOZ_CRASH("Looks like bug 1488480/1405521, with getting the reflector failing");
1105
0
        MOZ_ASSERT(JS_IsExceptionPending(cx));
1106
0
        return false;
1107
0
      }
1108
0
      break;
1109
0
    } while (false);
1110
0
  }
1111
0
  { // And now store things in the realm of our slotStorage.
1112
0
    JSAutoRealm ar(cx, slotStorage);
1113
0
    // Make a copy so that we don't do unnecessary wrapping on args.rval().
1114
0
    JS::Rooted<JS::Value> storedVal(cx, args.rval());
1115
0
    if (!MaybeWrapValue(cx, &storedVal)) {
1116
0
      MOZ_CRASH("Looks like bug 1488480/1405521, with the other MaybeWrap failing");
1117
0
      return false;
1118
0
    }
1119
0
    js::SetReservedSlot(slotStorage, slotIndex, storedVal);
1120
0
  }
1121
0
  // And now make sure args.rval() is in the caller realm.
1122
0
  if (MaybeWrapValue(cx, args.rval())) {
1123
0
    return true;
1124
0
  }
1125
0
  MOZ_CRASH("Looks like bug 1488480/1405521, with the third MaybeWrap failing");
1126
0
  return false;
1127
0
}
1128
1129
static const JSJitInfo document_getterinfo = {
1130
  { (JSJitGetterOp)get_document },
1131
  { prototypes::id::Window },
1132
  { PrototypeTraits<prototypes::id::Window>::Depth },
1133
  JSJitInfo::Getter,
1134
  JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
1135
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1136
  false,  /* isInfallible. False in setters. */
1137
  true,  /* isMovable.  Not relevant for setters. */
1138
  true, /* isEliminatable.  Not relevant for setters. */
1139
  true, /* isAlwaysInSlot.  Only relevant for getters. */
1140
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1141
  false,  /* isTypedMethod.  Only relevant for methods. */
1142
  (DOM_INSTANCE_RESERVED_SLOTS + 2)   /* Reserved slot index, if we're stored in a slot, else 0. */
1143
};
1144
static_assert((DOM_INSTANCE_RESERVED_SLOTS + 2) <= JSJitInfo::maxSlotIndex, "We won't fit");
1145
static_assert((DOM_INSTANCE_RESERVED_SLOTS + 2) < 5, "There is no slot for us");
1146
1147
MOZ_CAN_RUN_SCRIPT static bool
1148
get_name(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
1149
0
{
1150
0
  AUTO_PROFILER_LABEL_FAST("get Window.name", DOM, cx);
1151
0
1152
0
  FastErrorResult rv;
1153
0
  DOMString result;
1154
0
  self->GetName(result, rv);
1155
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1156
0
    return false;
1157
0
  }
1158
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1159
0
  if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1160
0
    return false;
1161
0
  }
1162
0
  return true;
1163
0
}
1164
1165
MOZ_CAN_RUN_SCRIPT static bool
1166
set_name(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
1167
0
{
1168
0
  AUTO_PROFILER_LABEL_FAST("set Window.name", DOM, cx);
1169
0
1170
0
  binding_detail::FakeString arg0;
1171
0
  if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
1172
0
    return false;
1173
0
  }
1174
0
  FastErrorResult rv;
1175
0
  self->SetName(NonNullHelper(Constify(arg0)), rv);
1176
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1177
0
    return false;
1178
0
  }
1179
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1180
0
1181
0
  return true;
1182
0
}
1183
1184
static const JSJitInfo name_getterinfo = {
1185
  { (JSJitGetterOp)get_name },
1186
  { prototypes::id::Window },
1187
  { PrototypeTraits<prototypes::id::Window>::Depth },
1188
  JSJitInfo::Getter,
1189
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1190
  JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
1191
  false,  /* isInfallible. False in setters. */
1192
  false,  /* isMovable.  Not relevant for setters. */
1193
  false, /* isEliminatable.  Not relevant for setters. */
1194
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1195
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1196
  false,  /* isTypedMethod.  Only relevant for methods. */
1197
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1198
};
1199
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1200
static_assert(0 < 5, "There is no slot for us");
1201
static const JSJitInfo name_setterinfo = {
1202
  { (JSJitGetterOp)set_name },
1203
  { prototypes::id::Window },
1204
  { PrototypeTraits<prototypes::id::Window>::Depth },
1205
  JSJitInfo::Setter,
1206
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1207
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1208
  false,  /* isInfallible. False in setters. */
1209
  false,  /* isMovable.  Not relevant for setters. */
1210
  false, /* isEliminatable.  Not relevant for setters. */
1211
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1212
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1213
  false,  /* isTypedMethod.  Only relevant for methods. */
1214
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1215
};
1216
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1217
static_assert(0 < 5, "There is no slot for us");
1218
1219
MOZ_CAN_RUN_SCRIPT static bool
1220
get_location(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
1221
0
{
1222
0
  AUTO_PROFILER_LABEL_FAST("get Window.location", DOM, cx);
1223
0
1224
0
  auto result(StrongOrRawPtr<mozilla::dom::Location>(self->GetLocation()));
1225
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1226
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1227
0
    MOZ_CRASH("Looks like bug 1488480/1405521, with getting the reflector failing");
1228
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
1229
0
    return false;
1230
0
  }
1231
0
  return true;
1232
0
}
1233
1234
MOZ_CAN_RUN_SCRIPT static bool
1235
set_location(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
1236
0
{
1237
0
  AUTO_PROFILER_LABEL_FAST("set Window.location", DOM, cx);
1238
0
1239
0
  JS::Rooted<JS::Value> v(cx);
1240
0
  if (!JS_GetProperty(cx, obj, "location", &v)) {
1241
0
    return false;
1242
0
  }
1243
0
1244
0
  if (!v.isObject()) {
1245
0
    return ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Window.location");
1246
0
  }
1247
0
1248
0
  JS::Rooted<JSObject*> targetObj(cx, &v.toObject());
1249
0
  return JS_SetProperty(cx, targetObj, "href", args[0]);
1250
0
}
1251
1252
static const JSJitInfo location_getterinfo = {
1253
  { (JSJitGetterOp)get_location },
1254
  { prototypes::id::Window },
1255
  { PrototypeTraits<prototypes::id::Window>::Depth },
1256
  JSJitInfo::Getter,
1257
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1258
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
1259
  false,  /* isInfallible. False in setters. */
1260
  false,  /* isMovable.  Not relevant for setters. */
1261
  false, /* isEliminatable.  Not relevant for setters. */
1262
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1263
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1264
  false,  /* isTypedMethod.  Only relevant for methods. */
1265
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1266
};
1267
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1268
static_assert(0 < 5, "There is no slot for us");
1269
static const JSJitInfo location_setterinfo = {
1270
  { (JSJitGetterOp)set_location },
1271
  { prototypes::id::Window },
1272
  { PrototypeTraits<prototypes::id::Window>::Depth },
1273
  JSJitInfo::Setter,
1274
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1275
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1276
  false,  /* isInfallible. False in setters. */
1277
  false,  /* isMovable.  Not relevant for setters. */
1278
  false, /* isEliminatable.  Not relevant for setters. */
1279
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1280
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1281
  false,  /* isTypedMethod.  Only relevant for methods. */
1282
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1283
};
1284
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1285
static_assert(0 < 5, "There is no slot for us");
1286
1287
MOZ_CAN_RUN_SCRIPT static bool
1288
get_history(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
1289
0
{
1290
0
  AUTO_PROFILER_LABEL_FAST("get Window.history", DOM, cx);
1291
0
1292
0
  FastErrorResult rv;
1293
0
  auto result(StrongOrRawPtr<nsHistory>(self->GetHistory(rv)));
1294
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1295
0
    return false;
1296
0
  }
1297
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1298
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1299
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
1300
0
    return false;
1301
0
  }
1302
0
  return true;
1303
0
}
1304
1305
static const JSJitInfo history_getterinfo = {
1306
  { (JSJitGetterOp)get_history },
1307
  { prototypes::id::Window },
1308
  { PrototypeTraits<prototypes::id::Window>::Depth },
1309
  JSJitInfo::Getter,
1310
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1311
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
1312
  false,  /* isInfallible. False in setters. */
1313
  false,  /* isMovable.  Not relevant for setters. */
1314
  false, /* isEliminatable.  Not relevant for setters. */
1315
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1316
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1317
  false,  /* isTypedMethod.  Only relevant for methods. */
1318
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1319
};
1320
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1321
static_assert(0 < 5, "There is no slot for us");
1322
1323
MOZ_CAN_RUN_SCRIPT static bool
1324
get_customElements(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
1325
0
{
1326
0
  AUTO_PROFILER_LABEL_FAST("get Window.customElements", DOM, cx);
1327
0
1328
0
  auto result(StrongOrRawPtr<mozilla::dom::CustomElementRegistry>(self->CustomElements()));
1329
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1330
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1331
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
1332
0
    return false;
1333
0
  }
1334
0
  return true;
1335
0
}
1336
1337
static const JSJitInfo customElements_getterinfo = {
1338
  { (JSJitGetterOp)get_customElements },
1339
  { prototypes::id::Window },
1340
  { PrototypeTraits<prototypes::id::Window>::Depth },
1341
  JSJitInfo::Getter,
1342
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1343
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
1344
  false,  /* isInfallible. False in setters. */
1345
  false,  /* isMovable.  Not relevant for setters. */
1346
  false, /* isEliminatable.  Not relevant for setters. */
1347
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1348
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1349
  false,  /* isTypedMethod.  Only relevant for methods. */
1350
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1351
};
1352
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1353
static_assert(0 < 5, "There is no slot for us");
1354
1355
MOZ_CAN_RUN_SCRIPT static bool
1356
get_locationbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
1357
0
{
1358
0
  AUTO_PROFILER_LABEL_FAST("get Window.locationbar", DOM, cx);
1359
0
1360
0
  FastErrorResult rv;
1361
0
  auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetLocationbar(rv)));
1362
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1363
0
    return false;
1364
0
  }
1365
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1366
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1367
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
1368
0
    return false;
1369
0
  }
1370
0
  return true;
1371
0
}
1372
1373
MOZ_CAN_RUN_SCRIPT static bool
1374
set_locationbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
1375
0
{
1376
0
  AUTO_PROFILER_LABEL_FAST("set Window.locationbar", DOM, cx);
1377
0
1378
0
  return JS_DefineProperty(cx, obj, "locationbar", args[0], JSPROP_ENUMERATE);
1379
0
}
1380
1381
static const JSJitInfo locationbar_getterinfo = {
1382
  { (JSJitGetterOp)get_locationbar },
1383
  { prototypes::id::Window },
1384
  { PrototypeTraits<prototypes::id::Window>::Depth },
1385
  JSJitInfo::Getter,
1386
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1387
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
1388
  false,  /* isInfallible. False in setters. */
1389
  false,  /* isMovable.  Not relevant for setters. */
1390
  false, /* isEliminatable.  Not relevant for setters. */
1391
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1392
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1393
  false,  /* isTypedMethod.  Only relevant for methods. */
1394
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1395
};
1396
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1397
static_assert(0 < 5, "There is no slot for us");
1398
static const JSJitInfo locationbar_setterinfo = {
1399
  { (JSJitGetterOp)set_locationbar },
1400
  { prototypes::id::Window },
1401
  { PrototypeTraits<prototypes::id::Window>::Depth },
1402
  JSJitInfo::Setter,
1403
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1404
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1405
  false,  /* isInfallible. False in setters. */
1406
  false,  /* isMovable.  Not relevant for setters. */
1407
  false, /* isEliminatable.  Not relevant for setters. */
1408
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1409
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1410
  false,  /* isTypedMethod.  Only relevant for methods. */
1411
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1412
};
1413
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1414
static_assert(0 < 5, "There is no slot for us");
1415
1416
MOZ_CAN_RUN_SCRIPT static bool
1417
get_menubar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
1418
0
{
1419
0
  AUTO_PROFILER_LABEL_FAST("get Window.menubar", DOM, cx);
1420
0
1421
0
  FastErrorResult rv;
1422
0
  auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetMenubar(rv)));
1423
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1424
0
    return false;
1425
0
  }
1426
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1427
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1428
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
1429
0
    return false;
1430
0
  }
1431
0
  return true;
1432
0
}
1433
1434
MOZ_CAN_RUN_SCRIPT static bool
1435
set_menubar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
1436
0
{
1437
0
  AUTO_PROFILER_LABEL_FAST("set Window.menubar", DOM, cx);
1438
0
1439
0
  return JS_DefineProperty(cx, obj, "menubar", args[0], JSPROP_ENUMERATE);
1440
0
}
1441
1442
static const JSJitInfo menubar_getterinfo = {
1443
  { (JSJitGetterOp)get_menubar },
1444
  { prototypes::id::Window },
1445
  { PrototypeTraits<prototypes::id::Window>::Depth },
1446
  JSJitInfo::Getter,
1447
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1448
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
1449
  false,  /* isInfallible. False in setters. */
1450
  false,  /* isMovable.  Not relevant for setters. */
1451
  false, /* isEliminatable.  Not relevant for setters. */
1452
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1453
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1454
  false,  /* isTypedMethod.  Only relevant for methods. */
1455
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1456
};
1457
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1458
static_assert(0 < 5, "There is no slot for us");
1459
static const JSJitInfo menubar_setterinfo = {
1460
  { (JSJitGetterOp)set_menubar },
1461
  { prototypes::id::Window },
1462
  { PrototypeTraits<prototypes::id::Window>::Depth },
1463
  JSJitInfo::Setter,
1464
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1465
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1466
  false,  /* isInfallible. False in setters. */
1467
  false,  /* isMovable.  Not relevant for setters. */
1468
  false, /* isEliminatable.  Not relevant for setters. */
1469
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1470
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1471
  false,  /* isTypedMethod.  Only relevant for methods. */
1472
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1473
};
1474
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1475
static_assert(0 < 5, "There is no slot for us");
1476
1477
MOZ_CAN_RUN_SCRIPT static bool
1478
get_personalbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
1479
0
{
1480
0
  AUTO_PROFILER_LABEL_FAST("get Window.personalbar", DOM, cx);
1481
0
1482
0
  FastErrorResult rv;
1483
0
  auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetPersonalbar(rv)));
1484
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1485
0
    return false;
1486
0
  }
1487
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1488
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1489
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
1490
0
    return false;
1491
0
  }
1492
0
  return true;
1493
0
}
1494
1495
MOZ_CAN_RUN_SCRIPT static bool
1496
set_personalbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
1497
0
{
1498
0
  AUTO_PROFILER_LABEL_FAST("set Window.personalbar", DOM, cx);
1499
0
1500
0
  return JS_DefineProperty(cx, obj, "personalbar", args[0], JSPROP_ENUMERATE);
1501
0
}
1502
1503
static const JSJitInfo personalbar_getterinfo = {
1504
  { (JSJitGetterOp)get_personalbar },
1505
  { prototypes::id::Window },
1506
  { PrototypeTraits<prototypes::id::Window>::Depth },
1507
  JSJitInfo::Getter,
1508
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1509
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
1510
  false,  /* isInfallible. False in setters. */
1511
  false,  /* isMovable.  Not relevant for setters. */
1512
  false, /* isEliminatable.  Not relevant for setters. */
1513
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1514
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1515
  false,  /* isTypedMethod.  Only relevant for methods. */
1516
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1517
};
1518
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1519
static_assert(0 < 5, "There is no slot for us");
1520
static const JSJitInfo personalbar_setterinfo = {
1521
  { (JSJitGetterOp)set_personalbar },
1522
  { prototypes::id::Window },
1523
  { PrototypeTraits<prototypes::id::Window>::Depth },
1524
  JSJitInfo::Setter,
1525
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1526
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1527
  false,  /* isInfallible. False in setters. */
1528
  false,  /* isMovable.  Not relevant for setters. */
1529
  false, /* isEliminatable.  Not relevant for setters. */
1530
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1531
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1532
  false,  /* isTypedMethod.  Only relevant for methods. */
1533
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1534
};
1535
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1536
static_assert(0 < 5, "There is no slot for us");
1537
1538
MOZ_CAN_RUN_SCRIPT static bool
1539
get_scrollbars(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
1540
0
{
1541
0
  AUTO_PROFILER_LABEL_FAST("get Window.scrollbars", DOM, cx);
1542
0
1543
0
  FastErrorResult rv;
1544
0
  auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetScrollbars(rv)));
1545
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1546
0
    return false;
1547
0
  }
1548
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1549
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1550
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
1551
0
    return false;
1552
0
  }
1553
0
  return true;
1554
0
}
1555
1556
MOZ_CAN_RUN_SCRIPT static bool
1557
set_scrollbars(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
1558
0
{
1559
0
  AUTO_PROFILER_LABEL_FAST("set Window.scrollbars", DOM, cx);
1560
0
1561
0
  return JS_DefineProperty(cx, obj, "scrollbars", args[0], JSPROP_ENUMERATE);
1562
0
}
1563
1564
static const JSJitInfo scrollbars_getterinfo = {
1565
  { (JSJitGetterOp)get_scrollbars },
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 scrollbars_setterinfo = {
1582
  { (JSJitGetterOp)set_scrollbars },
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
MOZ_CAN_RUN_SCRIPT static bool
1600
get_statusbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
1601
0
{
1602
0
  AUTO_PROFILER_LABEL_FAST("get Window.statusbar", DOM, cx);
1603
0
1604
0
  FastErrorResult rv;
1605
0
  auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetStatusbar(rv)));
1606
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1607
0
    return false;
1608
0
  }
1609
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1610
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1611
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
1612
0
    return false;
1613
0
  }
1614
0
  return true;
1615
0
}
1616
1617
MOZ_CAN_RUN_SCRIPT static bool
1618
set_statusbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
1619
0
{
1620
0
  AUTO_PROFILER_LABEL_FAST("set Window.statusbar", DOM, cx);
1621
0
1622
0
  return JS_DefineProperty(cx, obj, "statusbar", args[0], JSPROP_ENUMERATE);
1623
0
}
1624
1625
static const JSJitInfo statusbar_getterinfo = {
1626
  { (JSJitGetterOp)get_statusbar },
1627
  { prototypes::id::Window },
1628
  { PrototypeTraits<prototypes::id::Window>::Depth },
1629
  JSJitInfo::Getter,
1630
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1631
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
1632
  false,  /* isInfallible. False in setters. */
1633
  false,  /* isMovable.  Not relevant for setters. */
1634
  false, /* isEliminatable.  Not relevant for setters. */
1635
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1636
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1637
  false,  /* isTypedMethod.  Only relevant for methods. */
1638
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1639
};
1640
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1641
static_assert(0 < 5, "There is no slot for us");
1642
static const JSJitInfo statusbar_setterinfo = {
1643
  { (JSJitGetterOp)set_statusbar },
1644
  { prototypes::id::Window },
1645
  { PrototypeTraits<prototypes::id::Window>::Depth },
1646
  JSJitInfo::Setter,
1647
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1648
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1649
  false,  /* isInfallible. False in setters. */
1650
  false,  /* isMovable.  Not relevant for setters. */
1651
  false, /* isEliminatable.  Not relevant for setters. */
1652
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1653
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1654
  false,  /* isTypedMethod.  Only relevant for methods. */
1655
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1656
};
1657
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1658
static_assert(0 < 5, "There is no slot for us");
1659
1660
MOZ_CAN_RUN_SCRIPT static bool
1661
get_toolbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
1662
0
{
1663
0
  AUTO_PROFILER_LABEL_FAST("get Window.toolbar", DOM, cx);
1664
0
1665
0
  FastErrorResult rv;
1666
0
  auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetToolbar(rv)));
1667
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1668
0
    return false;
1669
0
  }
1670
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1671
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1672
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
1673
0
    return false;
1674
0
  }
1675
0
  return true;
1676
0
}
1677
1678
MOZ_CAN_RUN_SCRIPT static bool
1679
set_toolbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
1680
0
{
1681
0
  AUTO_PROFILER_LABEL_FAST("set Window.toolbar", DOM, cx);
1682
0
1683
0
  return JS_DefineProperty(cx, obj, "toolbar", args[0], JSPROP_ENUMERATE);
1684
0
}
1685
1686
static const JSJitInfo toolbar_getterinfo = {
1687
  { (JSJitGetterOp)get_toolbar },
1688
  { prototypes::id::Window },
1689
  { PrototypeTraits<prototypes::id::Window>::Depth },
1690
  JSJitInfo::Getter,
1691
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1692
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
1693
  false,  /* isInfallible. False in setters. */
1694
  false,  /* isMovable.  Not relevant for setters. */
1695
  false, /* isEliminatable.  Not relevant for setters. */
1696
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1697
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1698
  false,  /* isTypedMethod.  Only relevant for methods. */
1699
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1700
};
1701
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1702
static_assert(0 < 5, "There is no slot for us");
1703
static const JSJitInfo toolbar_setterinfo = {
1704
  { (JSJitGetterOp)set_toolbar },
1705
  { prototypes::id::Window },
1706
  { PrototypeTraits<prototypes::id::Window>::Depth },
1707
  JSJitInfo::Setter,
1708
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1709
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1710
  false,  /* isInfallible. False in setters. */
1711
  false,  /* isMovable.  Not relevant for setters. */
1712
  false, /* isEliminatable.  Not relevant for setters. */
1713
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1714
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1715
  false,  /* isTypedMethod.  Only relevant for methods. */
1716
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1717
};
1718
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1719
static_assert(0 < 5, "There is no slot for us");
1720
1721
MOZ_CAN_RUN_SCRIPT static bool
1722
get_status(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
1723
0
{
1724
0
  AUTO_PROFILER_LABEL_FAST("get Window.status", DOM, cx);
1725
0
1726
0
  FastErrorResult rv;
1727
0
  DOMString result;
1728
0
  self->GetStatus(result, rv);
1729
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1730
0
    return false;
1731
0
  }
1732
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1733
0
  if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1734
0
    return false;
1735
0
  }
1736
0
  return true;
1737
0
}
1738
1739
MOZ_CAN_RUN_SCRIPT static bool
1740
set_status(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
1741
0
{
1742
0
  AUTO_PROFILER_LABEL_FAST("set Window.status", DOM, cx);
1743
0
1744
0
  binding_detail::FakeString arg0;
1745
0
  if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
1746
0
    return false;
1747
0
  }
1748
0
  FastErrorResult rv;
1749
0
  self->SetStatus(NonNullHelper(Constify(arg0)), rv);
1750
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1751
0
    return false;
1752
0
  }
1753
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1754
0
1755
0
  return true;
1756
0
}
1757
1758
static const JSJitInfo status_getterinfo = {
1759
  { (JSJitGetterOp)get_status },
1760
  { prototypes::id::Window },
1761
  { PrototypeTraits<prototypes::id::Window>::Depth },
1762
  JSJitInfo::Getter,
1763
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1764
  JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
1765
  false,  /* isInfallible. False in setters. */
1766
  false,  /* isMovable.  Not relevant for setters. */
1767
  false, /* isEliminatable.  Not relevant for setters. */
1768
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1769
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1770
  false,  /* isTypedMethod.  Only relevant for methods. */
1771
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1772
};
1773
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1774
static_assert(0 < 5, "There is no slot for us");
1775
static const JSJitInfo status_setterinfo = {
1776
  { (JSJitGetterOp)set_status },
1777
  { prototypes::id::Window },
1778
  { PrototypeTraits<prototypes::id::Window>::Depth },
1779
  JSJitInfo::Setter,
1780
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1781
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1782
  false,  /* isInfallible. False in setters. */
1783
  false,  /* isMovable.  Not relevant for setters. */
1784
  false, /* isEliminatable.  Not relevant for setters. */
1785
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1786
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1787
  false,  /* isTypedMethod.  Only relevant for methods. */
1788
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1789
};
1790
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1791
static_assert(0 < 5, "There is no slot for us");
1792
1793
MOZ_CAN_RUN_SCRIPT static bool
1794
close(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
1795
0
{
1796
0
  AUTO_PROFILER_LABEL_FAST("Window.close", DOM, cx);
1797
0
1798
0
  FastErrorResult rv;
1799
0
  self->Close(rv);
1800
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1801
0
    return false;
1802
0
  }
1803
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1804
0
  args.rval().setUndefined();
1805
0
  return true;
1806
0
}
1807
1808
static const JSJitInfo close_methodinfo = {
1809
  { (JSJitGetterOp)close },
1810
  { prototypes::id::Window },
1811
  { PrototypeTraits<prototypes::id::Window>::Depth },
1812
  JSJitInfo::Method,
1813
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1814
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1815
  false,  /* isInfallible. False in setters. */
1816
  false,  /* isMovable.  Not relevant for setters. */
1817
  false, /* isEliminatable.  Not relevant for setters. */
1818
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1819
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1820
  false,  /* isTypedMethod.  Only relevant for methods. */
1821
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1822
};
1823
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1824
static_assert(0 < 5, "There is no slot for us");
1825
1826
MOZ_CAN_RUN_SCRIPT static bool
1827
get_closed(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
1828
0
{
1829
0
  AUTO_PROFILER_LABEL_FAST("get Window.closed", DOM, cx);
1830
0
1831
0
  FastErrorResult rv;
1832
0
  bool result(self->GetClosed(rv));
1833
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1834
0
    return false;
1835
0
  }
1836
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1837
0
  args.rval().setBoolean(result);
1838
0
  return true;
1839
0
}
1840
1841
static const JSJitInfo closed_getterinfo = {
1842
  { (JSJitGetterOp)get_closed },
1843
  { prototypes::id::Window },
1844
  { PrototypeTraits<prototypes::id::Window>::Depth },
1845
  JSJitInfo::Getter,
1846
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1847
  JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
1848
  false,  /* isInfallible. False in setters. */
1849
  false,  /* isMovable.  Not relevant for setters. */
1850
  false, /* isEliminatable.  Not relevant for setters. */
1851
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1852
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1853
  false,  /* isTypedMethod.  Only relevant for methods. */
1854
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1855
};
1856
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1857
static_assert(0 < 5, "There is no slot for us");
1858
1859
MOZ_CAN_RUN_SCRIPT static bool
1860
stop(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
1861
0
{
1862
0
  AUTO_PROFILER_LABEL_FAST("Window.stop", DOM, cx);
1863
0
1864
0
  FastErrorResult rv;
1865
0
  self->Stop(rv);
1866
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1867
0
    return false;
1868
0
  }
1869
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1870
0
  args.rval().setUndefined();
1871
0
  return true;
1872
0
}
1873
1874
static const JSJitInfo stop_methodinfo = {
1875
  { (JSJitGetterOp)stop },
1876
  { prototypes::id::Window },
1877
  { PrototypeTraits<prototypes::id::Window>::Depth },
1878
  JSJitInfo::Method,
1879
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1880
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1881
  false,  /* isInfallible. False in setters. */
1882
  false,  /* isMovable.  Not relevant for setters. */
1883
  false, /* isEliminatable.  Not relevant for setters. */
1884
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1885
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1886
  false,  /* isTypedMethod.  Only relevant for methods. */
1887
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1888
};
1889
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1890
static_assert(0 < 5, "There is no slot for us");
1891
1892
MOZ_CAN_RUN_SCRIPT static bool
1893
focus(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
1894
0
{
1895
0
  AUTO_PROFILER_LABEL_FAST("Window.focus", DOM, cx);
1896
0
1897
0
  FastErrorResult rv;
1898
0
  self->Focus(rv);
1899
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1900
0
    return false;
1901
0
  }
1902
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1903
0
  args.rval().setUndefined();
1904
0
  return true;
1905
0
}
1906
1907
static const JSJitInfo focus_methodinfo = {
1908
  { (JSJitGetterOp)focus },
1909
  { prototypes::id::Window },
1910
  { PrototypeTraits<prototypes::id::Window>::Depth },
1911
  JSJitInfo::Method,
1912
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1913
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1914
  false,  /* isInfallible. False in setters. */
1915
  false,  /* isMovable.  Not relevant for setters. */
1916
  false, /* isEliminatable.  Not relevant for setters. */
1917
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1918
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1919
  false,  /* isTypedMethod.  Only relevant for methods. */
1920
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1921
};
1922
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1923
static_assert(0 < 5, "There is no slot for us");
1924
1925
MOZ_CAN_RUN_SCRIPT static bool
1926
blur(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
1927
0
{
1928
0
  AUTO_PROFILER_LABEL_FAST("Window.blur", DOM, cx);
1929
0
1930
0
  FastErrorResult rv;
1931
0
  self->Blur(rv);
1932
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1933
0
    return false;
1934
0
  }
1935
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1936
0
  args.rval().setUndefined();
1937
0
  return true;
1938
0
}
1939
1940
static const JSJitInfo blur_methodinfo = {
1941
  { (JSJitGetterOp)blur },
1942
  { prototypes::id::Window },
1943
  { PrototypeTraits<prototypes::id::Window>::Depth },
1944
  JSJitInfo::Method,
1945
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1946
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1947
  false,  /* isInfallible. False in setters. */
1948
  false,  /* isMovable.  Not relevant for setters. */
1949
  false, /* isEliminatable.  Not relevant for setters. */
1950
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1951
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1952
  false,  /* isTypedMethod.  Only relevant for methods. */
1953
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1954
};
1955
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1956
static_assert(0 < 5, "There is no slot for us");
1957
1958
MOZ_CAN_RUN_SCRIPT static bool
1959
get_event(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
1960
0
{
1961
0
  AUTO_PROFILER_LABEL_FAST("get Window.event", DOM, cx);
1962
0
1963
0
  JS::Rooted<JS::Value> result(cx);
1964
0
  self->GetEvent(cx, &result);
1965
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1966
0
  JS::ExposeValueToActiveJS(result);
1967
0
  args.rval().set(result);
1968
0
  if (!MaybeWrapValue(cx, args.rval())) {
1969
0
    return false;
1970
0
  }
1971
0
  return true;
1972
0
}
1973
1974
MOZ_CAN_RUN_SCRIPT static bool
1975
set_event(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
1976
0
{
1977
0
  AUTO_PROFILER_LABEL_FAST("set Window.event", DOM, cx);
1978
0
1979
0
  return JS_DefineProperty(cx, obj, "event", args[0], JSPROP_ENUMERATE);
1980
0
}
1981
1982
static const JSJitInfo event_getterinfo = {
1983
  { (JSJitGetterOp)get_event },
1984
  { prototypes::id::Window },
1985
  { PrototypeTraits<prototypes::id::Window>::Depth },
1986
  JSJitInfo::Getter,
1987
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1988
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1989
  false,  /* isInfallible. False in setters. */
1990
  false,  /* isMovable.  Not relevant for setters. */
1991
  false, /* isEliminatable.  Not relevant for setters. */
1992
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1993
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1994
  false,  /* isTypedMethod.  Only relevant for methods. */
1995
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1996
};
1997
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1998
static_assert(0 < 5, "There is no slot for us");
1999
static const JSJitInfo event_setterinfo = {
2000
  { (JSJitGetterOp)set_event },
2001
  { prototypes::id::Window },
2002
  { PrototypeTraits<prototypes::id::Window>::Depth },
2003
  JSJitInfo::Setter,
2004
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2005
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2006
  false,  /* isInfallible. False in setters. */
2007
  false,  /* isMovable.  Not relevant for setters. */
2008
  false, /* isEliminatable.  Not relevant for setters. */
2009
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2010
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2011
  false,  /* isTypedMethod.  Only relevant for methods. */
2012
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2013
};
2014
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2015
static_assert(0 < 5, "There is no slot for us");
2016
2017
MOZ_CAN_RUN_SCRIPT static bool
2018
get_frames(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
2019
0
{
2020
0
  AUTO_PROFILER_LABEL_FAST("get Window.frames", DOM, cx);
2021
0
2022
0
  FastErrorResult rv;
2023
0
  auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->GetFrames(rv)));
2024
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2025
0
    return false;
2026
0
  }
2027
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2028
0
  if (!WrapObject(cx, result, args.rval())) {
2029
0
    return false;
2030
0
  }
2031
0
  return true;
2032
0
}
2033
2034
MOZ_CAN_RUN_SCRIPT static bool
2035
set_frames(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
2036
0
{
2037
0
  AUTO_PROFILER_LABEL_FAST("set Window.frames", DOM, cx);
2038
0
2039
0
  return JS_DefineProperty(cx, obj, "frames", args[0], JSPROP_ENUMERATE);
2040
0
}
2041
2042
static const JSJitInfo frames_getterinfo = {
2043
  { (JSJitGetterOp)get_frames },
2044
  { prototypes::id::Window },
2045
  { PrototypeTraits<prototypes::id::Window>::Depth },
2046
  JSJitInfo::Getter,
2047
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2048
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
2049
  false,  /* isInfallible. False in setters. */
2050
  false,  /* isMovable.  Not relevant for setters. */
2051
  false, /* isEliminatable.  Not relevant for setters. */
2052
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2053
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2054
  false,  /* isTypedMethod.  Only relevant for methods. */
2055
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2056
};
2057
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2058
static_assert(0 < 5, "There is no slot for us");
2059
static const JSJitInfo frames_setterinfo = {
2060
  { (JSJitGetterOp)set_frames },
2061
  { prototypes::id::Window },
2062
  { PrototypeTraits<prototypes::id::Window>::Depth },
2063
  JSJitInfo::Setter,
2064
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2065
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2066
  false,  /* isInfallible. False in setters. */
2067
  false,  /* isMovable.  Not relevant for setters. */
2068
  false, /* isEliminatable.  Not relevant for setters. */
2069
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2070
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2071
  false,  /* isTypedMethod.  Only relevant for methods. */
2072
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2073
};
2074
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2075
static_assert(0 < 5, "There is no slot for us");
2076
2077
MOZ_CAN_RUN_SCRIPT static bool
2078
get_length(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
2079
0
{
2080
0
  AUTO_PROFILER_LABEL_FAST("get Window.length", DOM, cx);
2081
0
2082
0
  uint32_t result(self->Length());
2083
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2084
0
  args.rval().setNumber(result);
2085
0
  return true;
2086
0
}
2087
2088
MOZ_CAN_RUN_SCRIPT static bool
2089
set_length(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
2090
0
{
2091
0
  AUTO_PROFILER_LABEL_FAST("set Window.length", DOM, cx);
2092
0
2093
0
  return JS_DefineProperty(cx, obj, "length", args[0], JSPROP_ENUMERATE);
2094
0
}
2095
2096
static const JSJitInfo length_getterinfo = {
2097
  { (JSJitGetterOp)get_length },
2098
  { prototypes::id::Window },
2099
  { PrototypeTraits<prototypes::id::Window>::Depth },
2100
  JSJitInfo::Getter,
2101
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2102
  JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
2103
  true,  /* isInfallible. False in setters. */
2104
  false,  /* isMovable.  Not relevant for setters. */
2105
  false, /* isEliminatable.  Not relevant for setters. */
2106
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2107
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2108
  false,  /* isTypedMethod.  Only relevant for methods. */
2109
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2110
};
2111
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2112
static_assert(0 < 5, "There is no slot for us");
2113
static const JSJitInfo length_setterinfo = {
2114
  { (JSJitGetterOp)set_length },
2115
  { prototypes::id::Window },
2116
  { PrototypeTraits<prototypes::id::Window>::Depth },
2117
  JSJitInfo::Setter,
2118
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2119
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2120
  false,  /* isInfallible. False in setters. */
2121
  false,  /* isMovable.  Not relevant for setters. */
2122
  false, /* isEliminatable.  Not relevant for setters. */
2123
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2124
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2125
  false,  /* isTypedMethod.  Only relevant for methods. */
2126
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2127
};
2128
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2129
static_assert(0 < 5, "There is no slot for us");
2130
2131
MOZ_CAN_RUN_SCRIPT static bool
2132
get_top(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
2133
0
{
2134
0
  AUTO_PROFILER_LABEL_FAST("get Window.top", DOM, cx);
2135
0
2136
0
  FastErrorResult rv;
2137
0
  auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->GetTop(rv)));
2138
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2139
0
    return false;
2140
0
  }
2141
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2142
0
  if (!result) {
2143
0
    args.rval().setNull();
2144
0
    return true;
2145
0
  }
2146
0
  if (!WrapObject(cx, result, args.rval())) {
2147
0
    return false;
2148
0
  }
2149
0
  return true;
2150
0
}
2151
2152
static const JSJitInfo top_getterinfo = {
2153
  { (JSJitGetterOp)get_top },
2154
  { prototypes::id::Window },
2155
  { PrototypeTraits<prototypes::id::Window>::Depth },
2156
  JSJitInfo::Getter,
2157
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2158
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2159
  false,  /* isInfallible. False in setters. */
2160
  false,  /* isMovable.  Not relevant for setters. */
2161
  false, /* isEliminatable.  Not relevant for setters. */
2162
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2163
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2164
  false,  /* isTypedMethod.  Only relevant for methods. */
2165
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2166
};
2167
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2168
static_assert(0 < 5, "There is no slot for us");
2169
2170
MOZ_CAN_RUN_SCRIPT static bool
2171
get_opener(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
2172
0
{
2173
0
  AUTO_PROFILER_LABEL_FAST("get Window.opener", DOM, cx);
2174
0
2175
0
  FastErrorResult rv;
2176
0
  JS::Rooted<JS::Value> result(cx);
2177
0
  self->GetOpener(cx, &result, rv);
2178
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2179
0
    return false;
2180
0
  }
2181
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2182
0
  JS::ExposeValueToActiveJS(result);
2183
0
  args.rval().set(result);
2184
0
  if (!MaybeWrapValue(cx, args.rval())) {
2185
0
    return false;
2186
0
  }
2187
0
  return true;
2188
0
}
2189
2190
MOZ_CAN_RUN_SCRIPT static bool
2191
set_opener(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
2192
0
{
2193
0
  AUTO_PROFILER_LABEL_FAST("set Window.opener", DOM, cx);
2194
0
2195
0
  JS::Rooted<JS::Value> arg0(cx);
2196
0
  arg0 = args[0];
2197
0
  FastErrorResult rv;
2198
0
  self->SetOpener(cx, arg0, rv);
2199
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2200
0
    return false;
2201
0
  }
2202
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2203
0
2204
0
  return true;
2205
0
}
2206
2207
static const JSJitInfo opener_getterinfo = {
2208
  { (JSJitGetterOp)get_opener },
2209
  { prototypes::id::Window },
2210
  { PrototypeTraits<prototypes::id::Window>::Depth },
2211
  JSJitInfo::Getter,
2212
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2213
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2214
  false,  /* isInfallible. False in setters. */
2215
  false,  /* isMovable.  Not relevant for setters. */
2216
  false, /* isEliminatable.  Not relevant for setters. */
2217
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2218
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2219
  false,  /* isTypedMethod.  Only relevant for methods. */
2220
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2221
};
2222
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2223
static_assert(0 < 5, "There is no slot for us");
2224
static const JSJitInfo opener_setterinfo = {
2225
  { (JSJitGetterOp)set_opener },
2226
  { prototypes::id::Window },
2227
  { PrototypeTraits<prototypes::id::Window>::Depth },
2228
  JSJitInfo::Setter,
2229
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2230
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2231
  false,  /* isInfallible. False in setters. */
2232
  false,  /* isMovable.  Not relevant for setters. */
2233
  false, /* isEliminatable.  Not relevant for setters. */
2234
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2235
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2236
  false,  /* isTypedMethod.  Only relevant for methods. */
2237
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2238
};
2239
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2240
static_assert(0 < 5, "There is no slot for us");
2241
2242
MOZ_CAN_RUN_SCRIPT static bool
2243
get_parent(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
2244
0
{
2245
0
  AUTO_PROFILER_LABEL_FAST("get Window.parent", DOM, cx);
2246
0
2247
0
  FastErrorResult rv;
2248
0
  auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->GetParent(rv)));
2249
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2250
0
    return false;
2251
0
  }
2252
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2253
0
  if (!result) {
2254
0
    args.rval().setNull();
2255
0
    return true;
2256
0
  }
2257
0
  if (!WrapObject(cx, result, args.rval())) {
2258
0
    return false;
2259
0
  }
2260
0
  return true;
2261
0
}
2262
2263
MOZ_CAN_RUN_SCRIPT static bool
2264
set_parent(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
2265
0
{
2266
0
  AUTO_PROFILER_LABEL_FAST("set Window.parent", DOM, cx);
2267
0
2268
0
  return JS_DefineProperty(cx, obj, "parent", args[0], JSPROP_ENUMERATE);
2269
0
}
2270
2271
static const JSJitInfo parent_getterinfo = {
2272
  { (JSJitGetterOp)get_parent },
2273
  { prototypes::id::Window },
2274
  { PrototypeTraits<prototypes::id::Window>::Depth },
2275
  JSJitInfo::Getter,
2276
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2277
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2278
  false,  /* isInfallible. False in setters. */
2279
  false,  /* isMovable.  Not relevant for setters. */
2280
  false, /* isEliminatable.  Not relevant for setters. */
2281
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2282
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2283
  false,  /* isTypedMethod.  Only relevant for methods. */
2284
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2285
};
2286
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2287
static_assert(0 < 5, "There is no slot for us");
2288
static const JSJitInfo parent_setterinfo = {
2289
  { (JSJitGetterOp)set_parent },
2290
  { prototypes::id::Window },
2291
  { PrototypeTraits<prototypes::id::Window>::Depth },
2292
  JSJitInfo::Setter,
2293
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2294
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2295
  false,  /* isInfallible. False in setters. */
2296
  false,  /* isMovable.  Not relevant for setters. */
2297
  false, /* isEliminatable.  Not relevant for setters. */
2298
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2299
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2300
  false,  /* isTypedMethod.  Only relevant for methods. */
2301
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2302
};
2303
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2304
static_assert(0 < 5, "There is no slot for us");
2305
2306
MOZ_CAN_RUN_SCRIPT static bool
2307
get_frameElement(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
2308
0
{
2309
0
  AUTO_PROFILER_LABEL_FAST("get Window.frameElement", DOM, cx);
2310
0
2311
0
  FastErrorResult rv;
2312
0
  NonNull<nsIPrincipal> subjectPrincipal;
2313
0
  {
2314
0
    JS::Realm* realm = js::GetContextRealm(cx);
2315
0
    MOZ_ASSERT(realm);
2316
0
    JSPrincipals* principals = JS::GetRealmPrincipals(realm);
2317
0
    nsIPrincipal* principal = nsJSPrincipals::get(principals);
2318
0
2319
0
    subjectPrincipal = principal;
2320
0
  }
2321
0
  auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetFrameElement(subjectPrincipal, rv)));
2322
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2323
0
    return false;
2324
0
  }
2325
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2326
0
  if (!result) {
2327
0
    args.rval().setNull();
2328
0
    return true;
2329
0
  }
2330
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
2331
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
2332
0
    return false;
2333
0
  }
2334
0
  return true;
2335
0
}
2336
2337
static const JSJitInfo frameElement_getterinfo = {
2338
  { (JSJitGetterOp)get_frameElement },
2339
  { prototypes::id::Window },
2340
  { PrototypeTraits<prototypes::id::Window>::Depth },
2341
  JSJitInfo::Getter,
2342
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2343
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2344
  false,  /* isInfallible. False in setters. */
2345
  false,  /* isMovable.  Not relevant for setters. */
2346
  false, /* isEliminatable.  Not relevant for setters. */
2347
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2348
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2349
  false,  /* isTypedMethod.  Only relevant for methods. */
2350
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2351
};
2352
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2353
static_assert(0 < 5, "There is no slot for us");
2354
2355
MOZ_CAN_RUN_SCRIPT static bool
2356
open(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
2357
0
{
2358
0
  AUTO_PROFILER_LABEL_FAST("Window.open", DOM, cx);
2359
0
2360
0
  binding_detail::FakeString arg0;
2361
0
  if (args.hasDefined(0)) {
2362
0
    if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2363
0
      return false;
2364
0
    }
2365
0
  } else {
2366
0
    static const char16_t data[] = { 0 };
2367
0
    arg0.Rebind(data, ArrayLength(data) - 1);
2368
0
  }
2369
0
  binding_detail::FakeString arg1;
2370
0
  if (args.hasDefined(1)) {
2371
0
    if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
2372
0
      return false;
2373
0
    }
2374
0
  } else {
2375
0
    static const char16_t data[] = { 0 };
2376
0
    arg1.Rebind(data, ArrayLength(data) - 1);
2377
0
  }
2378
0
  binding_detail::FakeString arg2;
2379
0
  if (args.hasDefined(2)) {
2380
0
    if (!ConvertJSValueToString(cx, args[2], eEmpty, eStringify, arg2)) {
2381
0
      return false;
2382
0
    }
2383
0
  } else {
2384
0
    static const char16_t data[] = { 0 };
2385
0
    arg2.Rebind(data, ArrayLength(data) - 1);
2386
0
  }
2387
0
  FastErrorResult rv;
2388
0
  auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->Open(NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)), NonNullHelper(Constify(arg2)), rv)));
2389
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2390
0
    return false;
2391
0
  }
2392
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2393
0
  if (!result) {
2394
0
    args.rval().setNull();
2395
0
    return true;
2396
0
  }
2397
0
  if (!WrapObject(cx, result, args.rval())) {
2398
0
    return false;
2399
0
  }
2400
0
  return true;
2401
0
}
2402
2403
static const JSJitInfo open_methodinfo = {
2404
  { (JSJitGetterOp)open },
2405
  { prototypes::id::Window },
2406
  { PrototypeTraits<prototypes::id::Window>::Depth },
2407
  JSJitInfo::Method,
2408
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2409
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2410
  false,  /* isInfallible. False in setters. */
2411
  false,  /* isMovable.  Not relevant for setters. */
2412
  false, /* isEliminatable.  Not relevant for setters. */
2413
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2414
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2415
  false,  /* isTypedMethod.  Only relevant for methods. */
2416
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2417
};
2418
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2419
static_assert(0 < 5, "There is no slot for us");
2420
2421
MOZ_CAN_RUN_SCRIPT static bool
2422
get_navigator(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
2423
0
{
2424
0
  AUTO_PROFILER_LABEL_FAST("get Window.navigator", DOM, cx);
2425
0
2426
0
  auto result(StrongOrRawPtr<mozilla::dom::Navigator>(self->Navigator()));
2427
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2428
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
2429
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
2430
0
    return false;
2431
0
  }
2432
0
  return true;
2433
0
}
2434
2435
static const JSJitInfo navigator_getterinfo = {
2436
  { (JSJitGetterOp)get_navigator },
2437
  { prototypes::id::Window },
2438
  { PrototypeTraits<prototypes::id::Window>::Depth },
2439
  JSJitInfo::Getter,
2440
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2441
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
2442
  false,  /* isInfallible. False in setters. */
2443
  false,  /* isMovable.  Not relevant for setters. */
2444
  false, /* isEliminatable.  Not relevant for setters. */
2445
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2446
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2447
  false,  /* isTypedMethod.  Only relevant for methods. */
2448
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2449
};
2450
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2451
static_assert(0 < 5, "There is no slot for us");
2452
2453
MOZ_CAN_RUN_SCRIPT static bool
2454
get_external(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
2455
0
{
2456
0
  AUTO_PROFILER_LABEL_FAST("get Window.external", DOM, cx);
2457
0
2458
0
  FastErrorResult rv;
2459
0
  auto result(StrongOrRawPtr<mozilla::dom::External>(self->GetExternal(rv)));
2460
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2461
0
    return false;
2462
0
  }
2463
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2464
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
2465
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
2466
0
    return false;
2467
0
  }
2468
0
  return true;
2469
0
}
2470
2471
MOZ_CAN_RUN_SCRIPT static bool
2472
set_external(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
2473
0
{
2474
0
  AUTO_PROFILER_LABEL_FAST("set Window.external", DOM, cx);
2475
0
2476
0
  return JS_DefineProperty(cx, obj, "external", args[0], JSPROP_ENUMERATE);
2477
0
}
2478
2479
static const JSJitInfo external_getterinfo = {
2480
  { (JSJitGetterOp)get_external },
2481
  { prototypes::id::Window },
2482
  { PrototypeTraits<prototypes::id::Window>::Depth },
2483
  JSJitInfo::Getter,
2484
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2485
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
2486
  false,  /* isInfallible. False in setters. */
2487
  false,  /* isMovable.  Not relevant for setters. */
2488
  false, /* isEliminatable.  Not relevant for setters. */
2489
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2490
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2491
  false,  /* isTypedMethod.  Only relevant for methods. */
2492
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2493
};
2494
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2495
static_assert(0 < 5, "There is no slot for us");
2496
static const JSJitInfo external_setterinfo = {
2497
  { (JSJitGetterOp)set_external },
2498
  { prototypes::id::Window },
2499
  { PrototypeTraits<prototypes::id::Window>::Depth },
2500
  JSJitInfo::Setter,
2501
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2502
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2503
  false,  /* isInfallible. False in setters. */
2504
  false,  /* isMovable.  Not relevant for setters. */
2505
  false, /* isEliminatable.  Not relevant for setters. */
2506
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2507
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2508
  false,  /* isTypedMethod.  Only relevant for methods. */
2509
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2510
};
2511
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2512
static_assert(0 < 5, "There is no slot for us");
2513
2514
MOZ_CAN_RUN_SCRIPT static bool
2515
get_applicationCache(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
2516
0
{
2517
0
  AUTO_PROFILER_LABEL_FAST("get Window.applicationCache", DOM, cx);
2518
0
2519
0
  FastErrorResult rv;
2520
0
  auto result(StrongOrRawPtr<nsDOMOfflineResourceList>(self->GetApplicationCache(rv)));
2521
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2522
0
    return false;
2523
0
  }
2524
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2525
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
2526
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
2527
0
    return false;
2528
0
  }
2529
0
  return true;
2530
0
}
2531
2532
static const JSJitInfo applicationCache_getterinfo = {
2533
  { (JSJitGetterOp)get_applicationCache },
2534
  { prototypes::id::Window },
2535
  { PrototypeTraits<prototypes::id::Window>::Depth },
2536
  JSJitInfo::Getter,
2537
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2538
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
2539
  false,  /* isInfallible. False in setters. */
2540
  false,  /* isMovable.  Not relevant for setters. */
2541
  false, /* isEliminatable.  Not relevant for setters. */
2542
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2543
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2544
  false,  /* isTypedMethod.  Only relevant for methods. */
2545
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2546
};
2547
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2548
static_assert(0 < 5, "There is no slot for us");
2549
2550
MOZ_CAN_RUN_SCRIPT static bool
2551
alert(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
2552
0
{
2553
0
  AUTO_PROFILER_LABEL_FAST("Window.alert", DOM, cx);
2554
0
2555
0
  unsigned argcount = std::min(args.length(), 1u);
2556
0
  switch (argcount) {
2557
0
    case 0: {
2558
0
      FastErrorResult rv;
2559
0
      NonNull<nsIPrincipal> subjectPrincipal;
2560
0
      {
2561
0
        JS::Realm* realm = js::GetContextRealm(cx);
2562
0
        MOZ_ASSERT(realm);
2563
0
        JSPrincipals* principals = JS::GetRealmPrincipals(realm);
2564
0
        nsIPrincipal* principal = nsJSPrincipals::get(principals);
2565
0
2566
0
        subjectPrincipal = principal;
2567
0
      }
2568
0
      self->Alert(subjectPrincipal, rv);
2569
0
      if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2570
0
        return false;
2571
0
      }
2572
0
      MOZ_ASSERT(!JS_IsExceptionPending(cx));
2573
0
      args.rval().setUndefined();
2574
0
      return true;
2575
0
      break;
2576
0
    }
2577
0
    case 1: {
2578
0
      binding_detail::FakeString arg0;
2579
0
      if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2580
0
        return false;
2581
0
      }
2582
0
      FastErrorResult rv;
2583
0
      NonNull<nsIPrincipal> subjectPrincipal;
2584
0
      {
2585
0
        JS::Realm* realm = js::GetContextRealm(cx);
2586
0
        MOZ_ASSERT(realm);
2587
0
        JSPrincipals* principals = JS::GetRealmPrincipals(realm);
2588
0
        nsIPrincipal* principal = nsJSPrincipals::get(principals);
2589
0
2590
0
        subjectPrincipal = principal;
2591
0
      }
2592
0
      self->Alert(NonNullHelper(Constify(arg0)), subjectPrincipal, rv);
2593
0
      if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2594
0
        return false;
2595
0
      }
2596
0
      MOZ_ASSERT(!JS_IsExceptionPending(cx));
2597
0
      args.rval().setUndefined();
2598
0
      return true;
2599
0
      break;
2600
0
    }
2601
0
    default: {
2602
0
      return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.alert");
2603
0
      break;
2604
0
    }
2605
0
  }
2606
0
  MOZ_CRASH("We have an always-returning default case");
2607
0
  return false;
2608
0
}
2609
2610
static const JSJitInfo alert_methodinfo = {
2611
  { (JSJitGetterOp)alert },
2612
  { prototypes::id::Window },
2613
  { PrototypeTraits<prototypes::id::Window>::Depth },
2614
  JSJitInfo::Method,
2615
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2616
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2617
  false,  /* isInfallible. False in setters. */
2618
  false,  /* isMovable.  Not relevant for setters. */
2619
  false, /* isEliminatable.  Not relevant for setters. */
2620
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2621
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2622
  false,  /* isTypedMethod.  Only relevant for methods. */
2623
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2624
};
2625
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2626
static_assert(0 < 5, "There is no slot for us");
2627
2628
MOZ_CAN_RUN_SCRIPT static bool
2629
confirm(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
2630
0
{
2631
0
  AUTO_PROFILER_LABEL_FAST("Window.confirm", DOM, cx);
2632
0
2633
0
  binding_detail::FakeString arg0;
2634
0
  if (args.hasDefined(0)) {
2635
0
    if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2636
0
      return false;
2637
0
    }
2638
0
  } else {
2639
0
    static const char16_t data[] = { 0 };
2640
0
    arg0.Rebind(data, ArrayLength(data) - 1);
2641
0
  }
2642
0
  FastErrorResult rv;
2643
0
  NonNull<nsIPrincipal> subjectPrincipal;
2644
0
  {
2645
0
    JS::Realm* realm = js::GetContextRealm(cx);
2646
0
    MOZ_ASSERT(realm);
2647
0
    JSPrincipals* principals = JS::GetRealmPrincipals(realm);
2648
0
    nsIPrincipal* principal = nsJSPrincipals::get(principals);
2649
0
2650
0
    subjectPrincipal = principal;
2651
0
  }
2652
0
  bool result(self->Confirm(NonNullHelper(Constify(arg0)), subjectPrincipal, rv));
2653
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2654
0
    return false;
2655
0
  }
2656
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2657
0
  args.rval().setBoolean(result);
2658
0
  return true;
2659
0
}
2660
2661
static const JSJitInfo confirm_methodinfo = {
2662
  { (JSJitGetterOp)confirm },
2663
  { prototypes::id::Window },
2664
  { PrototypeTraits<prototypes::id::Window>::Depth },
2665
  JSJitInfo::Method,
2666
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2667
  JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
2668
  false,  /* isInfallible. False in setters. */
2669
  false,  /* isMovable.  Not relevant for setters. */
2670
  false, /* isEliminatable.  Not relevant for setters. */
2671
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2672
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2673
  false,  /* isTypedMethod.  Only relevant for methods. */
2674
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2675
};
2676
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2677
static_assert(0 < 5, "There is no slot for us");
2678
2679
MOZ_CAN_RUN_SCRIPT static bool
2680
prompt(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
2681
0
{
2682
0
  AUTO_PROFILER_LABEL_FAST("Window.prompt", DOM, cx);
2683
0
2684
0
  binding_detail::FakeString arg0;
2685
0
  if (args.hasDefined(0)) {
2686
0
    if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2687
0
      return false;
2688
0
    }
2689
0
  } else {
2690
0
    static const char16_t data[] = { 0 };
2691
0
    arg0.Rebind(data, ArrayLength(data) - 1);
2692
0
  }
2693
0
  binding_detail::FakeString arg1;
2694
0
  if (args.hasDefined(1)) {
2695
0
    if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
2696
0
      return false;
2697
0
    }
2698
0
  } else {
2699
0
    static const char16_t data[] = { 0 };
2700
0
    arg1.Rebind(data, ArrayLength(data) - 1);
2701
0
  }
2702
0
  FastErrorResult rv;
2703
0
  NonNull<nsIPrincipal> subjectPrincipal;
2704
0
  {
2705
0
    JS::Realm* realm = js::GetContextRealm(cx);
2706
0
    MOZ_ASSERT(realm);
2707
0
    JSPrincipals* principals = JS::GetRealmPrincipals(realm);
2708
0
    nsIPrincipal* principal = nsJSPrincipals::get(principals);
2709
0
2710
0
    subjectPrincipal = principal;
2711
0
  }
2712
0
  DOMString result;
2713
0
  self->Prompt(NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)), result, subjectPrincipal, rv);
2714
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2715
0
    return false;
2716
0
  }
2717
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2718
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
2719
0
    return false;
2720
0
  }
2721
0
  return true;
2722
0
}
2723
2724
static const JSJitInfo prompt_methodinfo = {
2725
  { (JSJitGetterOp)prompt },
2726
  { prototypes::id::Window },
2727
  { PrototypeTraits<prototypes::id::Window>::Depth },
2728
  JSJitInfo::Method,
2729
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2730
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2731
  false,  /* isInfallible. False in setters. */
2732
  false,  /* isMovable.  Not relevant for setters. */
2733
  false, /* isEliminatable.  Not relevant for setters. */
2734
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2735
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2736
  false,  /* isTypedMethod.  Only relevant for methods. */
2737
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2738
};
2739
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2740
static_assert(0 < 5, "There is no slot for us");
2741
2742
MOZ_CAN_RUN_SCRIPT static bool
2743
print(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
2744
0
{
2745
0
  AUTO_PROFILER_LABEL_FAST("Window.print", DOM, cx);
2746
0
2747
0
  FastErrorResult rv;
2748
0
  self->Print(rv);
2749
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2750
0
    return false;
2751
0
  }
2752
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2753
0
  args.rval().setUndefined();
2754
0
  return true;
2755
0
}
2756
2757
static const JSJitInfo print_methodinfo = {
2758
  { (JSJitGetterOp)print },
2759
  { prototypes::id::Window },
2760
  { PrototypeTraits<prototypes::id::Window>::Depth },
2761
  JSJitInfo::Method,
2762
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2763
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2764
  false,  /* isInfallible. False in setters. */
2765
  false,  /* isMovable.  Not relevant for setters. */
2766
  false, /* isEliminatable.  Not relevant for setters. */
2767
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2768
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2769
  false,  /* isTypedMethod.  Only relevant for methods. */
2770
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2771
};
2772
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2773
static_assert(0 < 5, "There is no slot for us");
2774
2775
MOZ_CAN_RUN_SCRIPT static bool
2776
postMessage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
2777
0
{
2778
0
  AUTO_PROFILER_LABEL_FAST("Window.postMessage", DOM, cx);
2779
0
2780
0
  if (MOZ_UNLIKELY(args.length() < 2)) {
2781
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.postMessage");
2782
0
  }
2783
0
  JS::Rooted<JS::Value> arg0(cx);
2784
0
  arg0 = args[0];
2785
0
  binding_detail::FakeString arg1;
2786
0
  if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
2787
0
    return false;
2788
0
  }
2789
0
  binding_detail::AutoSequence<JSObject*> arg2;
2790
0
  SequenceRooter<JSObject*> arg2_holder(cx, &arg2);
2791
0
  if (args.hasDefined(2)) {
2792
0
    if (args[2].isObject()) {
2793
0
      JS::ForOfIterator iter(cx);
2794
0
      if (!iter.init(args[2], JS::ForOfIterator::AllowNonIterable)) {
2795
0
        return false;
2796
0
      }
2797
0
      if (!iter.valueIsIterable()) {
2798
0
        ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 3 of Window.postMessage");
2799
0
        return false;
2800
0
      }
2801
0
      binding_detail::AutoSequence<JSObject*> &arr = arg2;
2802
0
      JS::Rooted<JS::Value> temp(cx);
2803
0
      while (true) {
2804
0
        bool done;
2805
0
        if (!iter.next(&temp, &done)) {
2806
0
          return false;
2807
0
        }
2808
0
        if (done) {
2809
0
          break;
2810
0
        }
2811
0
        JSObject** slotPtr = arr.AppendElement(mozilla::fallible);
2812
0
        if (!slotPtr) {
2813
0
          JS_ReportOutOfMemory(cx);
2814
0
          return false;
2815
0
        }
2816
0
        JSObject*& slot = *slotPtr;
2817
0
        if (temp.isObject()) {
2818
0
          slot = &temp.toObject();
2819
0
        } else {
2820
0
          ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Element of argument 3 of Window.postMessage");
2821
0
          return false;
2822
0
        }
2823
0
      }
2824
0
    } else {
2825
0
      ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 3 of Window.postMessage");
2826
0
      return false;
2827
0
    }
2828
0
  } else {
2829
0
    /* Array is already empty; nothing to do */
2830
0
  }
2831
0
  FastErrorResult rv;
2832
0
  NonNull<nsIPrincipal> subjectPrincipal;
2833
0
  {
2834
0
    JS::Realm* realm = js::GetContextRealm(cx);
2835
0
    MOZ_ASSERT(realm);
2836
0
    JSPrincipals* principals = JS::GetRealmPrincipals(realm);
2837
0
    nsIPrincipal* principal = nsJSPrincipals::get(principals);
2838
0
2839
0
    subjectPrincipal = principal;
2840
0
  }
2841
0
  self->PostMessageMoz(cx, arg0, NonNullHelper(Constify(arg1)), Constify(arg2), subjectPrincipal, rv);
2842
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2843
0
    return false;
2844
0
  }
2845
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2846
0
  args.rval().setUndefined();
2847
0
  return true;
2848
0
}
2849
2850
static const JSJitInfo postMessage_methodinfo = {
2851
  { (JSJitGetterOp)postMessage },
2852
  { prototypes::id::Window },
2853
  { PrototypeTraits<prototypes::id::Window>::Depth },
2854
  JSJitInfo::Method,
2855
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2856
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2857
  false,  /* isInfallible. False in setters. */
2858
  false,  /* isMovable.  Not relevant for setters. */
2859
  false, /* isEliminatable.  Not relevant for setters. */
2860
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2861
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2862
  false,  /* isTypedMethod.  Only relevant for methods. */
2863
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2864
};
2865
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2866
static_assert(0 < 5, "There is no slot for us");
2867
2868
MOZ_CAN_RUN_SCRIPT static bool
2869
get_onappinstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
2870
0
{
2871
0
  AUTO_PROFILER_LABEL_FAST("get Window.onappinstalled", DOM, cx);
2872
0
2873
0
  RefPtr<EventHandlerNonNull> result(self->GetOnappinstalled());
2874
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2875
0
  if (result) {
2876
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
2877
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
2878
0
      return false;
2879
0
    }
2880
0
    return true;
2881
0
  } else {
2882
0
    args.rval().setNull();
2883
0
    return true;
2884
0
  }
2885
0
}
2886
2887
MOZ_CAN_RUN_SCRIPT static bool
2888
set_onappinstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
2889
0
{
2890
0
  AUTO_PROFILER_LABEL_FAST("set Window.onappinstalled", DOM, cx);
2891
0
2892
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
2893
0
  if (args[0].isObject()) {
2894
0
    { // scope for tempRoot and tempGlobalRoot if needed
2895
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
2896
0
    }
2897
0
  } else {
2898
0
    arg0 = nullptr;
2899
0
  }
2900
0
  self->SetOnappinstalled(Constify(arg0));
2901
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2902
0
2903
0
  return true;
2904
0
}
2905
2906
static const JSJitInfo onappinstalled_getterinfo = {
2907
  { (JSJitGetterOp)get_onappinstalled },
2908
  { prototypes::id::Window },
2909
  { PrototypeTraits<prototypes::id::Window>::Depth },
2910
  JSJitInfo::Getter,
2911
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2912
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2913
  false,  /* isInfallible. False in setters. */
2914
  false,  /* isMovable.  Not relevant for setters. */
2915
  false, /* isEliminatable.  Not relevant for setters. */
2916
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2917
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2918
  false,  /* isTypedMethod.  Only relevant for methods. */
2919
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2920
};
2921
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2922
static_assert(0 < 5, "There is no slot for us");
2923
static const JSJitInfo onappinstalled_setterinfo = {
2924
  { (JSJitGetterOp)set_onappinstalled },
2925
  { prototypes::id::Window },
2926
  { PrototypeTraits<prototypes::id::Window>::Depth },
2927
  JSJitInfo::Setter,
2928
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2929
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2930
  false,  /* isInfallible. False in setters. */
2931
  false,  /* isMovable.  Not relevant for setters. */
2932
  false, /* isEliminatable.  Not relevant for setters. */
2933
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2934
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2935
  false,  /* isTypedMethod.  Only relevant for methods. */
2936
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2937
};
2938
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2939
static_assert(0 < 5, "There is no slot for us");
2940
2941
MOZ_CAN_RUN_SCRIPT static bool
2942
captureEvents(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
2943
0
{
2944
0
  AUTO_PROFILER_LABEL_FAST("Window.captureEvents", DOM, cx);
2945
0
2946
0
  self->CaptureEvents();
2947
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2948
0
  args.rval().setUndefined();
2949
0
  return true;
2950
0
}
2951
2952
static const JSJitInfo captureEvents_methodinfo = {
2953
  { (JSJitGetterOp)captureEvents },
2954
  { prototypes::id::Window },
2955
  { PrototypeTraits<prototypes::id::Window>::Depth },
2956
  JSJitInfo::Method,
2957
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2958
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2959
  true,  /* isInfallible. False in setters. */
2960
  false,  /* isMovable.  Not relevant for setters. */
2961
  false, /* isEliminatable.  Not relevant for setters. */
2962
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2963
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2964
  false,  /* isTypedMethod.  Only relevant for methods. */
2965
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2966
};
2967
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2968
static_assert(0 < 5, "There is no slot for us");
2969
2970
MOZ_CAN_RUN_SCRIPT static bool
2971
releaseEvents(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
2972
0
{
2973
0
  AUTO_PROFILER_LABEL_FAST("Window.releaseEvents", DOM, cx);
2974
0
2975
0
  self->ReleaseEvents();
2976
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2977
0
  args.rval().setUndefined();
2978
0
  return true;
2979
0
}
2980
2981
static const JSJitInfo releaseEvents_methodinfo = {
2982
  { (JSJitGetterOp)releaseEvents },
2983
  { prototypes::id::Window },
2984
  { PrototypeTraits<prototypes::id::Window>::Depth },
2985
  JSJitInfo::Method,
2986
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2987
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2988
  true,  /* isInfallible. False in setters. */
2989
  false,  /* isMovable.  Not relevant for setters. */
2990
  false, /* isEliminatable.  Not relevant for setters. */
2991
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2992
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2993
  false,  /* isTypedMethod.  Only relevant for methods. */
2994
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2995
};
2996
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2997
static_assert(0 < 5, "There is no slot for us");
2998
2999
MOZ_CAN_RUN_SCRIPT static bool
3000
getSelection(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
3001
0
{
3002
0
  AUTO_PROFILER_LABEL_FAST("Window.getSelection", DOM, cx);
3003
0
3004
0
  FastErrorResult rv;
3005
0
  auto result(StrongOrRawPtr<mozilla::dom::Selection>(self->GetSelection(rv)));
3006
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3007
0
    return false;
3008
0
  }
3009
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3010
0
  if (!result) {
3011
0
    args.rval().setNull();
3012
0
    return true;
3013
0
  }
3014
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
3015
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
3016
0
    return false;
3017
0
  }
3018
0
  return true;
3019
0
}
3020
3021
static const JSJitInfo getSelection_methodinfo = {
3022
  { (JSJitGetterOp)getSelection },
3023
  { prototypes::id::Window },
3024
  { PrototypeTraits<prototypes::id::Window>::Depth },
3025
  JSJitInfo::Method,
3026
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3027
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
3028
  false,  /* isInfallible. False in setters. */
3029
  false,  /* isMovable.  Not relevant for setters. */
3030
  false, /* isEliminatable.  Not relevant for setters. */
3031
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3032
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3033
  false,  /* isTypedMethod.  Only relevant for methods. */
3034
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3035
};
3036
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3037
static_assert(0 < 5, "There is no slot for us");
3038
3039
MOZ_CAN_RUN_SCRIPT static bool
3040
getComputedStyle(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
3041
0
{
3042
0
  AUTO_PROFILER_LABEL_FAST("Window.getComputedStyle", DOM, cx);
3043
0
3044
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
3045
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getComputedStyle");
3046
0
  }
3047
0
  NonNull<mozilla::dom::Element> arg0;
3048
0
  if (args[0].isObject()) {
3049
0
    {
3050
0
      nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[0], arg0);
3051
0
      if (NS_FAILED(rv)) {
3052
0
        ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.getComputedStyle", "Element");
3053
0
        return false;
3054
0
      }
3055
0
    }
3056
0
  } else {
3057
0
    ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.getComputedStyle");
3058
0
    return false;
3059
0
  }
3060
0
  binding_detail::FakeString arg1;
3061
0
  if (args.hasDefined(1)) {
3062
0
    if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
3063
0
      return false;
3064
0
    }
3065
0
  } else {
3066
0
    static const char16_t data[] = { 0 };
3067
0
    arg1.Rebind(data, ArrayLength(data) - 1);
3068
0
  }
3069
0
  FastErrorResult rv;
3070
0
  auto result(StrongOrRawPtr<nsICSSDeclaration>(self->GetComputedStyle(MOZ_KnownLive(NonNullHelper(arg0)), NonNullHelper(Constify(arg1)), rv)));
3071
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3072
0
    return false;
3073
0
  }
3074
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3075
0
  static_assert(!IsPointer<decltype(result)>::value,
3076
0
                "NewObject implies that we need to keep the object alive with a strong reference.");
3077
0
  if (!result) {
3078
0
    args.rval().setNull();
3079
0
    return true;
3080
0
  }
3081
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
3082
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
3083
0
    return false;
3084
0
  }
3085
0
  return true;
3086
0
}
3087
3088
static const JSJitInfo getComputedStyle_methodinfo = {
3089
  { (JSJitGetterOp)getComputedStyle },
3090
  { prototypes::id::Window },
3091
  { PrototypeTraits<prototypes::id::Window>::Depth },
3092
  JSJitInfo::Method,
3093
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3094
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
3095
  false,  /* isInfallible. False in setters. */
3096
  false,  /* isMovable.  Not relevant for setters. */
3097
  false, /* isEliminatable.  Not relevant for setters. */
3098
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3099
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3100
  false,  /* isTypedMethod.  Only relevant for methods. */
3101
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3102
};
3103
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3104
static_assert(0 < 5, "There is no slot for us");
3105
3106
MOZ_CAN_RUN_SCRIPT static bool
3107
matchMedia(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
3108
0
{
3109
0
  AUTO_PROFILER_LABEL_FAST("Window.matchMedia", DOM, cx);
3110
0
3111
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
3112
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.matchMedia");
3113
0
  }
3114
0
  binding_detail::FakeString arg0;
3115
0
  if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
3116
0
    return false;
3117
0
  }
3118
0
  FastErrorResult rv;
3119
0
  auto result(StrongOrRawPtr<mozilla::dom::MediaQueryList>(self->MatchMedia(NonNullHelper(Constify(arg0)), nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv)));
3120
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3121
0
    return false;
3122
0
  }
3123
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3124
0
  static_assert(!IsPointer<decltype(result)>::value,
3125
0
                "NewObject implies that we need to keep the object alive with a strong reference.");
3126
0
  if (!result) {
3127
0
    args.rval().setNull();
3128
0
    return true;
3129
0
  }
3130
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
3131
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
3132
0
    return false;
3133
0
  }
3134
0
  return true;
3135
0
}
3136
3137
static const JSJitInfo matchMedia_methodinfo = {
3138
  { (JSJitGetterOp)matchMedia },
3139
  { prototypes::id::Window },
3140
  { PrototypeTraits<prototypes::id::Window>::Depth },
3141
  JSJitInfo::Method,
3142
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3143
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
3144
  false,  /* isInfallible. False in setters. */
3145
  false,  /* isMovable.  Not relevant for setters. */
3146
  false, /* isEliminatable.  Not relevant for setters. */
3147
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3148
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3149
  false,  /* isTypedMethod.  Only relevant for methods. */
3150
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3151
};
3152
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3153
static_assert(0 < 5, "There is no slot for us");
3154
3155
MOZ_CAN_RUN_SCRIPT static bool
3156
get_screen(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
3157
0
{
3158
0
  AUTO_PROFILER_LABEL_FAST("get Window.screen", DOM, cx);
3159
0
3160
0
  FastErrorResult rv;
3161
0
  auto result(StrongOrRawPtr<nsScreen>(self->GetScreen(rv)));
3162
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3163
0
    return false;
3164
0
  }
3165
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3166
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
3167
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
3168
0
    return false;
3169
0
  }
3170
0
  return true;
3171
0
}
3172
3173
MOZ_CAN_RUN_SCRIPT static bool
3174
set_screen(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
3175
0
{
3176
0
  AUTO_PROFILER_LABEL_FAST("set Window.screen", DOM, cx);
3177
0
3178
0
  return JS_DefineProperty(cx, obj, "screen", args[0], JSPROP_ENUMERATE);
3179
0
}
3180
3181
static const JSJitInfo screen_getterinfo = {
3182
  { (JSJitGetterOp)get_screen },
3183
  { prototypes::id::Window },
3184
  { PrototypeTraits<prototypes::id::Window>::Depth },
3185
  JSJitInfo::Getter,
3186
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3187
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
3188
  false,  /* isInfallible. False in setters. */
3189
  false,  /* isMovable.  Not relevant for setters. */
3190
  false, /* isEliminatable.  Not relevant for setters. */
3191
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3192
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3193
  false,  /* isTypedMethod.  Only relevant for methods. */
3194
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3195
};
3196
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3197
static_assert(0 < 5, "There is no slot for us");
3198
static const JSJitInfo screen_setterinfo = {
3199
  { (JSJitGetterOp)set_screen },
3200
  { prototypes::id::Window },
3201
  { PrototypeTraits<prototypes::id::Window>::Depth },
3202
  JSJitInfo::Setter,
3203
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3204
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3205
  false,  /* isInfallible. False in setters. */
3206
  false,  /* isMovable.  Not relevant for setters. */
3207
  false, /* isEliminatable.  Not relevant for setters. */
3208
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3209
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3210
  false,  /* isTypedMethod.  Only relevant for methods. */
3211
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3212
};
3213
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3214
static_assert(0 < 5, "There is no slot for us");
3215
3216
MOZ_CAN_RUN_SCRIPT static bool
3217
moveTo(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
3218
0
{
3219
0
  AUTO_PROFILER_LABEL_FAST("Window.moveTo", DOM, cx);
3220
0
3221
0
  if (MOZ_UNLIKELY(args.length() < 2)) {
3222
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.moveTo");
3223
0
  }
3224
0
  int32_t arg0;
3225
0
  if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
3226
0
    return false;
3227
0
  }
3228
0
  int32_t arg1;
3229
0
  if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
3230
0
    return false;
3231
0
  }
3232
0
  FastErrorResult rv;
3233
0
  self->MoveTo(arg0, arg1, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3234
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3235
0
    return false;
3236
0
  }
3237
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3238
0
  args.rval().setUndefined();
3239
0
  return true;
3240
0
}
3241
3242
static const JSJitInfo moveTo_methodinfo = {
3243
  { (JSJitGetterOp)moveTo },
3244
  { prototypes::id::Window },
3245
  { PrototypeTraits<prototypes::id::Window>::Depth },
3246
  JSJitInfo::Method,
3247
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3248
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3249
  false,  /* isInfallible. False in setters. */
3250
  false,  /* isMovable.  Not relevant for setters. */
3251
  false, /* isEliminatable.  Not relevant for setters. */
3252
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3253
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3254
  false,  /* isTypedMethod.  Only relevant for methods. */
3255
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3256
};
3257
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3258
static_assert(0 < 5, "There is no slot for us");
3259
3260
MOZ_CAN_RUN_SCRIPT static bool
3261
moveBy(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
3262
0
{
3263
0
  AUTO_PROFILER_LABEL_FAST("Window.moveBy", DOM, cx);
3264
0
3265
0
  if (MOZ_UNLIKELY(args.length() < 2)) {
3266
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.moveBy");
3267
0
  }
3268
0
  int32_t arg0;
3269
0
  if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
3270
0
    return false;
3271
0
  }
3272
0
  int32_t arg1;
3273
0
  if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
3274
0
    return false;
3275
0
  }
3276
0
  FastErrorResult rv;
3277
0
  self->MoveBy(arg0, arg1, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3278
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3279
0
    return false;
3280
0
  }
3281
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3282
0
  args.rval().setUndefined();
3283
0
  return true;
3284
0
}
3285
3286
static const JSJitInfo moveBy_methodinfo = {
3287
  { (JSJitGetterOp)moveBy },
3288
  { prototypes::id::Window },
3289
  { PrototypeTraits<prototypes::id::Window>::Depth },
3290
  JSJitInfo::Method,
3291
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3292
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3293
  false,  /* isInfallible. False in setters. */
3294
  false,  /* isMovable.  Not relevant for setters. */
3295
  false, /* isEliminatable.  Not relevant for setters. */
3296
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3297
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3298
  false,  /* isTypedMethod.  Only relevant for methods. */
3299
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3300
};
3301
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3302
static_assert(0 < 5, "There is no slot for us");
3303
3304
MOZ_CAN_RUN_SCRIPT static bool
3305
resizeTo(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
3306
0
{
3307
0
  AUTO_PROFILER_LABEL_FAST("Window.resizeTo", DOM, cx);
3308
0
3309
0
  if (MOZ_UNLIKELY(args.length() < 2)) {
3310
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.resizeTo");
3311
0
  }
3312
0
  int32_t arg0;
3313
0
  if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
3314
0
    return false;
3315
0
  }
3316
0
  int32_t arg1;
3317
0
  if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
3318
0
    return false;
3319
0
  }
3320
0
  FastErrorResult rv;
3321
0
  self->ResizeTo(arg0, arg1, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3322
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3323
0
    return false;
3324
0
  }
3325
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3326
0
  args.rval().setUndefined();
3327
0
  return true;
3328
0
}
3329
3330
static const JSJitInfo resizeTo_methodinfo = {
3331
  { (JSJitGetterOp)resizeTo },
3332
  { prototypes::id::Window },
3333
  { PrototypeTraits<prototypes::id::Window>::Depth },
3334
  JSJitInfo::Method,
3335
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3336
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3337
  false,  /* isInfallible. False in setters. */
3338
  false,  /* isMovable.  Not relevant for setters. */
3339
  false, /* isEliminatable.  Not relevant for setters. */
3340
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3341
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3342
  false,  /* isTypedMethod.  Only relevant for methods. */
3343
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3344
};
3345
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3346
static_assert(0 < 5, "There is no slot for us");
3347
3348
MOZ_CAN_RUN_SCRIPT static bool
3349
resizeBy(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
3350
0
{
3351
0
  AUTO_PROFILER_LABEL_FAST("Window.resizeBy", DOM, cx);
3352
0
3353
0
  if (MOZ_UNLIKELY(args.length() < 2)) {
3354
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.resizeBy");
3355
0
  }
3356
0
  int32_t arg0;
3357
0
  if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
3358
0
    return false;
3359
0
  }
3360
0
  int32_t arg1;
3361
0
  if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
3362
0
    return false;
3363
0
  }
3364
0
  FastErrorResult rv;
3365
0
  self->ResizeBy(arg0, arg1, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3366
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3367
0
    return false;
3368
0
  }
3369
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3370
0
  args.rval().setUndefined();
3371
0
  return true;
3372
0
}
3373
3374
static const JSJitInfo resizeBy_methodinfo = {
3375
  { (JSJitGetterOp)resizeBy },
3376
  { prototypes::id::Window },
3377
  { PrototypeTraits<prototypes::id::Window>::Depth },
3378
  JSJitInfo::Method,
3379
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3380
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3381
  false,  /* isInfallible. False in setters. */
3382
  false,  /* isMovable.  Not relevant for setters. */
3383
  false, /* isEliminatable.  Not relevant for setters. */
3384
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3385
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3386
  false,  /* isTypedMethod.  Only relevant for methods. */
3387
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3388
};
3389
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3390
static_assert(0 < 5, "There is no slot for us");
3391
3392
MOZ_CAN_RUN_SCRIPT static bool
3393
get_innerWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
3394
0
{
3395
0
  AUTO_PROFILER_LABEL_FAST("get Window.innerWidth", DOM, cx);
3396
0
3397
0
  FastErrorResult rv;
3398
0
  JS::Rooted<JS::Value> result(cx);
3399
0
  self->GetInnerWidth(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3400
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3401
0
    return false;
3402
0
  }
3403
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3404
0
  JS::ExposeValueToActiveJS(result);
3405
0
  args.rval().set(result);
3406
0
  if (!MaybeWrapValue(cx, args.rval())) {
3407
0
    return false;
3408
0
  }
3409
0
  return true;
3410
0
}
3411
3412
MOZ_CAN_RUN_SCRIPT static bool
3413
set_innerWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
3414
0
{
3415
0
  AUTO_PROFILER_LABEL_FAST("set Window.innerWidth", DOM, cx);
3416
0
3417
0
  JS::Rooted<JS::Value> arg0(cx);
3418
0
  arg0 = args[0];
3419
0
  FastErrorResult rv;
3420
0
  self->SetInnerWidth(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3421
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3422
0
    return false;
3423
0
  }
3424
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3425
0
3426
0
  return true;
3427
0
}
3428
3429
static const JSJitInfo innerWidth_getterinfo = {
3430
  { (JSJitGetterOp)get_innerWidth },
3431
  { prototypes::id::Window },
3432
  { PrototypeTraits<prototypes::id::Window>::Depth },
3433
  JSJitInfo::Getter,
3434
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3435
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
3436
  false,  /* isInfallible. False in setters. */
3437
  false,  /* isMovable.  Not relevant for setters. */
3438
  false, /* isEliminatable.  Not relevant for setters. */
3439
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3440
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3441
  false,  /* isTypedMethod.  Only relevant for methods. */
3442
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3443
};
3444
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3445
static_assert(0 < 5, "There is no slot for us");
3446
static const JSJitInfo innerWidth_setterinfo = {
3447
  { (JSJitGetterOp)set_innerWidth },
3448
  { prototypes::id::Window },
3449
  { PrototypeTraits<prototypes::id::Window>::Depth },
3450
  JSJitInfo::Setter,
3451
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3452
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3453
  false,  /* isInfallible. False in setters. */
3454
  false,  /* isMovable.  Not relevant for setters. */
3455
  false, /* isEliminatable.  Not relevant for setters. */
3456
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3457
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3458
  false,  /* isTypedMethod.  Only relevant for methods. */
3459
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3460
};
3461
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3462
static_assert(0 < 5, "There is no slot for us");
3463
3464
MOZ_CAN_RUN_SCRIPT static bool
3465
get_innerHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
3466
0
{
3467
0
  AUTO_PROFILER_LABEL_FAST("get Window.innerHeight", DOM, cx);
3468
0
3469
0
  FastErrorResult rv;
3470
0
  JS::Rooted<JS::Value> result(cx);
3471
0
  self->GetInnerHeight(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3472
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3473
0
    return false;
3474
0
  }
3475
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3476
0
  JS::ExposeValueToActiveJS(result);
3477
0
  args.rval().set(result);
3478
0
  if (!MaybeWrapValue(cx, args.rval())) {
3479
0
    return false;
3480
0
  }
3481
0
  return true;
3482
0
}
3483
3484
MOZ_CAN_RUN_SCRIPT static bool
3485
set_innerHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
3486
0
{
3487
0
  AUTO_PROFILER_LABEL_FAST("set Window.innerHeight", DOM, cx);
3488
0
3489
0
  JS::Rooted<JS::Value> arg0(cx);
3490
0
  arg0 = args[0];
3491
0
  FastErrorResult rv;
3492
0
  self->SetInnerHeight(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3493
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3494
0
    return false;
3495
0
  }
3496
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3497
0
3498
0
  return true;
3499
0
}
3500
3501
static const JSJitInfo innerHeight_getterinfo = {
3502
  { (JSJitGetterOp)get_innerHeight },
3503
  { prototypes::id::Window },
3504
  { PrototypeTraits<prototypes::id::Window>::Depth },
3505
  JSJitInfo::Getter,
3506
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3507
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
3508
  false,  /* isInfallible. False in setters. */
3509
  false,  /* isMovable.  Not relevant for setters. */
3510
  false, /* isEliminatable.  Not relevant for setters. */
3511
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3512
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3513
  false,  /* isTypedMethod.  Only relevant for methods. */
3514
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3515
};
3516
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3517
static_assert(0 < 5, "There is no slot for us");
3518
static const JSJitInfo innerHeight_setterinfo = {
3519
  { (JSJitGetterOp)set_innerHeight },
3520
  { prototypes::id::Window },
3521
  { PrototypeTraits<prototypes::id::Window>::Depth },
3522
  JSJitInfo::Setter,
3523
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3524
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3525
  false,  /* isInfallible. False in setters. */
3526
  false,  /* isMovable.  Not relevant for setters. */
3527
  false, /* isEliminatable.  Not relevant for setters. */
3528
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3529
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3530
  false,  /* isTypedMethod.  Only relevant for methods. */
3531
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3532
};
3533
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3534
static_assert(0 < 5, "There is no slot for us");
3535
3536
MOZ_CAN_RUN_SCRIPT static bool
3537
scroll(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
3538
0
{
3539
0
  AUTO_PROFILER_LABEL_FAST("Window.scroll", DOM, cx);
3540
0
3541
0
  unsigned argcount = std::min(args.length(), 2u);
3542
0
  switch (argcount) {
3543
0
    case 0: {
3544
0
      MOZ_FALLTHROUGH;
3545
0
    }
3546
0
    case 1: {
3547
0
      binding_detail::FastScrollToOptions arg0;
3548
0
      if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue,  "Argument 1 of Window.scroll", false)) {
3549
0
        return false;
3550
0
      }
3551
0
      self->Scroll(Constify(arg0));
3552
0
      MOZ_ASSERT(!JS_IsExceptionPending(cx));
3553
0
      args.rval().setUndefined();
3554
0
      return true;
3555
0
      break;
3556
0
    }
3557
0
    case 2: {
3558
0
      double arg0;
3559
0
      if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
3560
0
        return false;
3561
0
      }
3562
0
      double arg1;
3563
0
      if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
3564
0
        return false;
3565
0
      }
3566
0
      self->Scroll(arg0, arg1);
3567
0
      MOZ_ASSERT(!JS_IsExceptionPending(cx));
3568
0
      args.rval().setUndefined();
3569
0
      return true;
3570
0
      break;
3571
0
    }
3572
0
    default: {
3573
0
      return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scroll");
3574
0
      break;
3575
0
    }
3576
0
  }
3577
0
  MOZ_CRASH("We have an always-returning default case");
3578
0
  return false;
3579
0
}
3580
3581
static const JSJitInfo scroll_methodinfo = {
3582
  { (JSJitGetterOp)scroll },
3583
  { prototypes::id::Window },
3584
  { PrototypeTraits<prototypes::id::Window>::Depth },
3585
  JSJitInfo::Method,
3586
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3587
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3588
  false,  /* isInfallible. False in setters. */
3589
  false,  /* isMovable.  Not relevant for setters. */
3590
  false, /* isEliminatable.  Not relevant for setters. */
3591
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3592
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3593
  false,  /* isTypedMethod.  Only relevant for methods. */
3594
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3595
};
3596
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3597
static_assert(0 < 5, "There is no slot for us");
3598
3599
MOZ_CAN_RUN_SCRIPT static bool
3600
scrollTo(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
3601
0
{
3602
0
  AUTO_PROFILER_LABEL_FAST("Window.scrollTo", DOM, cx);
3603
0
3604
0
  unsigned argcount = std::min(args.length(), 2u);
3605
0
  switch (argcount) {
3606
0
    case 0: {
3607
0
      MOZ_FALLTHROUGH;
3608
0
    }
3609
0
    case 1: {
3610
0
      binding_detail::FastScrollToOptions arg0;
3611
0
      if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue,  "Argument 1 of Window.scrollTo", false)) {
3612
0
        return false;
3613
0
      }
3614
0
      self->ScrollTo(Constify(arg0));
3615
0
      MOZ_ASSERT(!JS_IsExceptionPending(cx));
3616
0
      args.rval().setUndefined();
3617
0
      return true;
3618
0
      break;
3619
0
    }
3620
0
    case 2: {
3621
0
      double arg0;
3622
0
      if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
3623
0
        return false;
3624
0
      }
3625
0
      double arg1;
3626
0
      if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
3627
0
        return false;
3628
0
      }
3629
0
      self->ScrollTo(arg0, arg1);
3630
0
      MOZ_ASSERT(!JS_IsExceptionPending(cx));
3631
0
      args.rval().setUndefined();
3632
0
      return true;
3633
0
      break;
3634
0
    }
3635
0
    default: {
3636
0
      return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scrollTo");
3637
0
      break;
3638
0
    }
3639
0
  }
3640
0
  MOZ_CRASH("We have an always-returning default case");
3641
0
  return false;
3642
0
}
3643
3644
static const JSJitInfo scrollTo_methodinfo = {
3645
  { (JSJitGetterOp)scrollTo },
3646
  { prototypes::id::Window },
3647
  { PrototypeTraits<prototypes::id::Window>::Depth },
3648
  JSJitInfo::Method,
3649
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3650
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3651
  false,  /* isInfallible. False in setters. */
3652
  false,  /* isMovable.  Not relevant for setters. */
3653
  false, /* isEliminatable.  Not relevant for setters. */
3654
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3655
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3656
  false,  /* isTypedMethod.  Only relevant for methods. */
3657
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3658
};
3659
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3660
static_assert(0 < 5, "There is no slot for us");
3661
3662
MOZ_CAN_RUN_SCRIPT static bool
3663
scrollBy(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
3664
0
{
3665
0
  AUTO_PROFILER_LABEL_FAST("Window.scrollBy", DOM, cx);
3666
0
3667
0
  unsigned argcount = std::min(args.length(), 2u);
3668
0
  switch (argcount) {
3669
0
    case 0: {
3670
0
      MOZ_FALLTHROUGH;
3671
0
    }
3672
0
    case 1: {
3673
0
      binding_detail::FastScrollToOptions arg0;
3674
0
      if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue,  "Argument 1 of Window.scrollBy", false)) {
3675
0
        return false;
3676
0
      }
3677
0
      self->ScrollBy(Constify(arg0));
3678
0
      MOZ_ASSERT(!JS_IsExceptionPending(cx));
3679
0
      args.rval().setUndefined();
3680
0
      return true;
3681
0
      break;
3682
0
    }
3683
0
    case 2: {
3684
0
      double arg0;
3685
0
      if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
3686
0
        return false;
3687
0
      }
3688
0
      double arg1;
3689
0
      if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
3690
0
        return false;
3691
0
      }
3692
0
      self->ScrollBy(arg0, arg1);
3693
0
      MOZ_ASSERT(!JS_IsExceptionPending(cx));
3694
0
      args.rval().setUndefined();
3695
0
      return true;
3696
0
      break;
3697
0
    }
3698
0
    default: {
3699
0
      return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scrollBy");
3700
0
      break;
3701
0
    }
3702
0
  }
3703
0
  MOZ_CRASH("We have an always-returning default case");
3704
0
  return false;
3705
0
}
3706
3707
static const JSJitInfo scrollBy_methodinfo = {
3708
  { (JSJitGetterOp)scrollBy },
3709
  { prototypes::id::Window },
3710
  { PrototypeTraits<prototypes::id::Window>::Depth },
3711
  JSJitInfo::Method,
3712
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3713
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3714
  false,  /* isInfallible. False in setters. */
3715
  false,  /* isMovable.  Not relevant for setters. */
3716
  false, /* isEliminatable.  Not relevant for setters. */
3717
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3718
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3719
  false,  /* isTypedMethod.  Only relevant for methods. */
3720
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3721
};
3722
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3723
static_assert(0 < 5, "There is no slot for us");
3724
3725
MOZ_CAN_RUN_SCRIPT static bool
3726
mozScrollSnap(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
3727
0
{
3728
0
  AUTO_PROFILER_LABEL_FAST("Window.mozScrollSnap", DOM, cx);
3729
0
3730
0
  self->MozScrollSnap();
3731
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3732
0
  args.rval().setUndefined();
3733
0
  return true;
3734
0
}
3735
3736
static const JSJitInfo mozScrollSnap_methodinfo = {
3737
  { (JSJitGetterOp)mozScrollSnap },
3738
  { prototypes::id::Window },
3739
  { PrototypeTraits<prototypes::id::Window>::Depth },
3740
  JSJitInfo::Method,
3741
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3742
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3743
  true,  /* isInfallible. False in setters. */
3744
  false,  /* isMovable.  Not relevant for setters. */
3745
  false, /* isEliminatable.  Not relevant for setters. */
3746
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3747
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3748
  false,  /* isTypedMethod.  Only relevant for methods. */
3749
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3750
};
3751
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3752
static_assert(0 < 5, "There is no slot for us");
3753
3754
MOZ_CAN_RUN_SCRIPT static bool
3755
get_scrollX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
3756
0
{
3757
0
  AUTO_PROFILER_LABEL_FAST("get Window.scrollX", DOM, cx);
3758
0
3759
0
  FastErrorResult rv;
3760
0
  double result(self->GetScrollX(rv));
3761
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3762
0
    return false;
3763
0
  }
3764
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3765
0
  args.rval().set(JS_NumberValue(double(result)));
3766
0
  return true;
3767
0
}
3768
3769
MOZ_CAN_RUN_SCRIPT static bool
3770
set_scrollX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
3771
0
{
3772
0
  AUTO_PROFILER_LABEL_FAST("set Window.scrollX", DOM, cx);
3773
0
3774
0
  return JS_DefineProperty(cx, obj, "scrollX", args[0], JSPROP_ENUMERATE);
3775
0
}
3776
3777
static const JSJitInfo scrollX_getterinfo = {
3778
  { (JSJitGetterOp)get_scrollX },
3779
  { prototypes::id::Window },
3780
  { PrototypeTraits<prototypes::id::Window>::Depth },
3781
  JSJitInfo::Getter,
3782
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3783
  JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
3784
  false,  /* isInfallible. False in setters. */
3785
  false,  /* isMovable.  Not relevant for setters. */
3786
  false, /* isEliminatable.  Not relevant for setters. */
3787
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3788
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3789
  false,  /* isTypedMethod.  Only relevant for methods. */
3790
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3791
};
3792
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3793
static_assert(0 < 5, "There is no slot for us");
3794
static const JSJitInfo scrollX_setterinfo = {
3795
  { (JSJitGetterOp)set_scrollX },
3796
  { prototypes::id::Window },
3797
  { PrototypeTraits<prototypes::id::Window>::Depth },
3798
  JSJitInfo::Setter,
3799
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3800
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3801
  false,  /* isInfallible. False in setters. */
3802
  false,  /* isMovable.  Not relevant for setters. */
3803
  false, /* isEliminatable.  Not relevant for setters. */
3804
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3805
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3806
  false,  /* isTypedMethod.  Only relevant for methods. */
3807
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3808
};
3809
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3810
static_assert(0 < 5, "There is no slot for us");
3811
3812
MOZ_CAN_RUN_SCRIPT static bool
3813
get_pageXOffset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
3814
0
{
3815
0
  AUTO_PROFILER_LABEL_FAST("get Window.pageXOffset", DOM, cx);
3816
0
3817
0
  FastErrorResult rv;
3818
0
  double result(self->GetPageXOffset(rv));
3819
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3820
0
    return false;
3821
0
  }
3822
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3823
0
  args.rval().set(JS_NumberValue(double(result)));
3824
0
  return true;
3825
0
}
3826
3827
MOZ_CAN_RUN_SCRIPT static bool
3828
set_pageXOffset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
3829
0
{
3830
0
  AUTO_PROFILER_LABEL_FAST("set Window.pageXOffset", DOM, cx);
3831
0
3832
0
  return JS_DefineProperty(cx, obj, "pageXOffset", args[0], JSPROP_ENUMERATE);
3833
0
}
3834
3835
static const JSJitInfo pageXOffset_getterinfo = {
3836
  { (JSJitGetterOp)get_pageXOffset },
3837
  { prototypes::id::Window },
3838
  { PrototypeTraits<prototypes::id::Window>::Depth },
3839
  JSJitInfo::Getter,
3840
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3841
  JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
3842
  false,  /* isInfallible. False in setters. */
3843
  false,  /* isMovable.  Not relevant for setters. */
3844
  false, /* isEliminatable.  Not relevant for setters. */
3845
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3846
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3847
  false,  /* isTypedMethod.  Only relevant for methods. */
3848
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3849
};
3850
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3851
static_assert(0 < 5, "There is no slot for us");
3852
static const JSJitInfo pageXOffset_setterinfo = {
3853
  { (JSJitGetterOp)set_pageXOffset },
3854
  { prototypes::id::Window },
3855
  { PrototypeTraits<prototypes::id::Window>::Depth },
3856
  JSJitInfo::Setter,
3857
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3858
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3859
  false,  /* isInfallible. False in setters. */
3860
  false,  /* isMovable.  Not relevant for setters. */
3861
  false, /* isEliminatable.  Not relevant for setters. */
3862
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3863
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3864
  false,  /* isTypedMethod.  Only relevant for methods. */
3865
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3866
};
3867
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3868
static_assert(0 < 5, "There is no slot for us");
3869
3870
MOZ_CAN_RUN_SCRIPT static bool
3871
get_scrollY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
3872
0
{
3873
0
  AUTO_PROFILER_LABEL_FAST("get Window.scrollY", DOM, cx);
3874
0
3875
0
  FastErrorResult rv;
3876
0
  double result(self->GetScrollY(rv));
3877
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3878
0
    return false;
3879
0
  }
3880
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3881
0
  args.rval().set(JS_NumberValue(double(result)));
3882
0
  return true;
3883
0
}
3884
3885
MOZ_CAN_RUN_SCRIPT static bool
3886
set_scrollY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
3887
0
{
3888
0
  AUTO_PROFILER_LABEL_FAST("set Window.scrollY", DOM, cx);
3889
0
3890
0
  return JS_DefineProperty(cx, obj, "scrollY", args[0], JSPROP_ENUMERATE);
3891
0
}
3892
3893
static const JSJitInfo scrollY_getterinfo = {
3894
  { (JSJitGetterOp)get_scrollY },
3895
  { prototypes::id::Window },
3896
  { PrototypeTraits<prototypes::id::Window>::Depth },
3897
  JSJitInfo::Getter,
3898
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3899
  JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
3900
  false,  /* isInfallible. False in setters. */
3901
  false,  /* isMovable.  Not relevant for setters. */
3902
  false, /* isEliminatable.  Not relevant for setters. */
3903
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3904
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3905
  false,  /* isTypedMethod.  Only relevant for methods. */
3906
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3907
};
3908
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3909
static_assert(0 < 5, "There is no slot for us");
3910
static const JSJitInfo scrollY_setterinfo = {
3911
  { (JSJitGetterOp)set_scrollY },
3912
  { prototypes::id::Window },
3913
  { PrototypeTraits<prototypes::id::Window>::Depth },
3914
  JSJitInfo::Setter,
3915
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3916
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3917
  false,  /* isInfallible. False in setters. */
3918
  false,  /* isMovable.  Not relevant for setters. */
3919
  false, /* isEliminatable.  Not relevant for setters. */
3920
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3921
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3922
  false,  /* isTypedMethod.  Only relevant for methods. */
3923
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3924
};
3925
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3926
static_assert(0 < 5, "There is no slot for us");
3927
3928
MOZ_CAN_RUN_SCRIPT static bool
3929
get_pageYOffset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
3930
0
{
3931
0
  AUTO_PROFILER_LABEL_FAST("get Window.pageYOffset", DOM, cx);
3932
0
3933
0
  FastErrorResult rv;
3934
0
  double result(self->GetPageYOffset(rv));
3935
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3936
0
    return false;
3937
0
  }
3938
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3939
0
  args.rval().set(JS_NumberValue(double(result)));
3940
0
  return true;
3941
0
}
3942
3943
MOZ_CAN_RUN_SCRIPT static bool
3944
set_pageYOffset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
3945
0
{
3946
0
  AUTO_PROFILER_LABEL_FAST("set Window.pageYOffset", DOM, cx);
3947
0
3948
0
  return JS_DefineProperty(cx, obj, "pageYOffset", args[0], JSPROP_ENUMERATE);
3949
0
}
3950
3951
static const JSJitInfo pageYOffset_getterinfo = {
3952
  { (JSJitGetterOp)get_pageYOffset },
3953
  { prototypes::id::Window },
3954
  { PrototypeTraits<prototypes::id::Window>::Depth },
3955
  JSJitInfo::Getter,
3956
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3957
  JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
3958
  false,  /* isInfallible. False in setters. */
3959
  false,  /* isMovable.  Not relevant for setters. */
3960
  false, /* isEliminatable.  Not relevant for setters. */
3961
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3962
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3963
  false,  /* isTypedMethod.  Only relevant for methods. */
3964
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3965
};
3966
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3967
static_assert(0 < 5, "There is no slot for us");
3968
static const JSJitInfo pageYOffset_setterinfo = {
3969
  { (JSJitGetterOp)set_pageYOffset },
3970
  { prototypes::id::Window },
3971
  { PrototypeTraits<prototypes::id::Window>::Depth },
3972
  JSJitInfo::Setter,
3973
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3974
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3975
  false,  /* isInfallible. False in setters. */
3976
  false,  /* isMovable.  Not relevant for setters. */
3977
  false, /* isEliminatable.  Not relevant for setters. */
3978
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3979
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3980
  false,  /* isTypedMethod.  Only relevant for methods. */
3981
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3982
};
3983
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3984
static_assert(0 < 5, "There is no slot for us");
3985
3986
MOZ_CAN_RUN_SCRIPT static bool
3987
get_screenX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
3988
0
{
3989
0
  AUTO_PROFILER_LABEL_FAST("get Window.screenX", DOM, cx);
3990
0
3991
0
  FastErrorResult rv;
3992
0
  JS::Rooted<JS::Value> result(cx);
3993
0
  self->GetScreenX(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3994
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3995
0
    return false;
3996
0
  }
3997
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3998
0
  JS::ExposeValueToActiveJS(result);
3999
0
  args.rval().set(result);
4000
0
  if (!MaybeWrapValue(cx, args.rval())) {
4001
0
    return false;
4002
0
  }
4003
0
  return true;
4004
0
}
4005
4006
MOZ_CAN_RUN_SCRIPT static bool
4007
set_screenX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
4008
0
{
4009
0
  AUTO_PROFILER_LABEL_FAST("set Window.screenX", DOM, cx);
4010
0
4011
0
  JS::Rooted<JS::Value> arg0(cx);
4012
0
  arg0 = args[0];
4013
0
  FastErrorResult rv;
4014
0
  self->SetScreenX(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4015
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4016
0
    return false;
4017
0
  }
4018
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4019
0
4020
0
  return true;
4021
0
}
4022
4023
static const JSJitInfo screenX_getterinfo = {
4024
  { (JSJitGetterOp)get_screenX },
4025
  { prototypes::id::Window },
4026
  { PrototypeTraits<prototypes::id::Window>::Depth },
4027
  JSJitInfo::Getter,
4028
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4029
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
4030
  false,  /* isInfallible. False in setters. */
4031
  false,  /* isMovable.  Not relevant for setters. */
4032
  false, /* isEliminatable.  Not relevant for setters. */
4033
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4034
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4035
  false,  /* isTypedMethod.  Only relevant for methods. */
4036
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4037
};
4038
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4039
static_assert(0 < 5, "There is no slot for us");
4040
static const JSJitInfo screenX_setterinfo = {
4041
  { (JSJitGetterOp)set_screenX },
4042
  { prototypes::id::Window },
4043
  { PrototypeTraits<prototypes::id::Window>::Depth },
4044
  JSJitInfo::Setter,
4045
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4046
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
4047
  false,  /* isInfallible. False in setters. */
4048
  false,  /* isMovable.  Not relevant for setters. */
4049
  false, /* isEliminatable.  Not relevant for setters. */
4050
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4051
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4052
  false,  /* isTypedMethod.  Only relevant for methods. */
4053
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4054
};
4055
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4056
static_assert(0 < 5, "There is no slot for us");
4057
4058
MOZ_CAN_RUN_SCRIPT static bool
4059
get_screenY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
4060
0
{
4061
0
  AUTO_PROFILER_LABEL_FAST("get Window.screenY", DOM, cx);
4062
0
4063
0
  FastErrorResult rv;
4064
0
  JS::Rooted<JS::Value> result(cx);
4065
0
  self->GetScreenY(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4066
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4067
0
    return false;
4068
0
  }
4069
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4070
0
  JS::ExposeValueToActiveJS(result);
4071
0
  args.rval().set(result);
4072
0
  if (!MaybeWrapValue(cx, args.rval())) {
4073
0
    return false;
4074
0
  }
4075
0
  return true;
4076
0
}
4077
4078
MOZ_CAN_RUN_SCRIPT static bool
4079
set_screenY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
4080
0
{
4081
0
  AUTO_PROFILER_LABEL_FAST("set Window.screenY", DOM, cx);
4082
0
4083
0
  JS::Rooted<JS::Value> arg0(cx);
4084
0
  arg0 = args[0];
4085
0
  FastErrorResult rv;
4086
0
  self->SetScreenY(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4087
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4088
0
    return false;
4089
0
  }
4090
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4091
0
4092
0
  return true;
4093
0
}
4094
4095
static const JSJitInfo screenY_getterinfo = {
4096
  { (JSJitGetterOp)get_screenY },
4097
  { prototypes::id::Window },
4098
  { PrototypeTraits<prototypes::id::Window>::Depth },
4099
  JSJitInfo::Getter,
4100
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4101
  JSVAL_TYPE_UNKNOWN,  /* 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
static const JSJitInfo screenY_setterinfo = {
4113
  { (JSJitGetterOp)set_screenY },
4114
  { prototypes::id::Window },
4115
  { PrototypeTraits<prototypes::id::Window>::Depth },
4116
  JSJitInfo::Setter,
4117
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4118
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
4119
  false,  /* isInfallible. False in setters. */
4120
  false,  /* isMovable.  Not relevant for setters. */
4121
  false, /* isEliminatable.  Not relevant for setters. */
4122
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4123
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4124
  false,  /* isTypedMethod.  Only relevant for methods. */
4125
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4126
};
4127
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4128
static_assert(0 < 5, "There is no slot for us");
4129
4130
MOZ_CAN_RUN_SCRIPT static bool
4131
get_outerWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
4132
0
{
4133
0
  AUTO_PROFILER_LABEL_FAST("get Window.outerWidth", DOM, cx);
4134
0
4135
0
  FastErrorResult rv;
4136
0
  JS::Rooted<JS::Value> result(cx);
4137
0
  self->GetOuterWidth(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4138
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4139
0
    return false;
4140
0
  }
4141
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4142
0
  JS::ExposeValueToActiveJS(result);
4143
0
  args.rval().set(result);
4144
0
  if (!MaybeWrapValue(cx, args.rval())) {
4145
0
    return false;
4146
0
  }
4147
0
  return true;
4148
0
}
4149
4150
MOZ_CAN_RUN_SCRIPT static bool
4151
set_outerWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
4152
0
{
4153
0
  AUTO_PROFILER_LABEL_FAST("set Window.outerWidth", DOM, cx);
4154
0
4155
0
  JS::Rooted<JS::Value> arg0(cx);
4156
0
  arg0 = args[0];
4157
0
  FastErrorResult rv;
4158
0
  self->SetOuterWidth(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4159
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4160
0
    return false;
4161
0
  }
4162
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4163
0
4164
0
  return true;
4165
0
}
4166
4167
static const JSJitInfo outerWidth_getterinfo = {
4168
  { (JSJitGetterOp)get_outerWidth },
4169
  { prototypes::id::Window },
4170
  { PrototypeTraits<prototypes::id::Window>::Depth },
4171
  JSJitInfo::Getter,
4172
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4173
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
4174
  false,  /* isInfallible. False in setters. */
4175
  false,  /* isMovable.  Not relevant for setters. */
4176
  false, /* isEliminatable.  Not relevant for setters. */
4177
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4178
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4179
  false,  /* isTypedMethod.  Only relevant for methods. */
4180
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4181
};
4182
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4183
static_assert(0 < 5, "There is no slot for us");
4184
static const JSJitInfo outerWidth_setterinfo = {
4185
  { (JSJitGetterOp)set_outerWidth },
4186
  { prototypes::id::Window },
4187
  { PrototypeTraits<prototypes::id::Window>::Depth },
4188
  JSJitInfo::Setter,
4189
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4190
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
4191
  false,  /* isInfallible. False in setters. */
4192
  false,  /* isMovable.  Not relevant for setters. */
4193
  false, /* isEliminatable.  Not relevant for setters. */
4194
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4195
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4196
  false,  /* isTypedMethod.  Only relevant for methods. */
4197
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4198
};
4199
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4200
static_assert(0 < 5, "There is no slot for us");
4201
4202
MOZ_CAN_RUN_SCRIPT static bool
4203
get_outerHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
4204
0
{
4205
0
  AUTO_PROFILER_LABEL_FAST("get Window.outerHeight", DOM, cx);
4206
0
4207
0
  FastErrorResult rv;
4208
0
  JS::Rooted<JS::Value> result(cx);
4209
0
  self->GetOuterHeight(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4210
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4211
0
    return false;
4212
0
  }
4213
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4214
0
  JS::ExposeValueToActiveJS(result);
4215
0
  args.rval().set(result);
4216
0
  if (!MaybeWrapValue(cx, args.rval())) {
4217
0
    return false;
4218
0
  }
4219
0
  return true;
4220
0
}
4221
4222
MOZ_CAN_RUN_SCRIPT static bool
4223
set_outerHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
4224
0
{
4225
0
  AUTO_PROFILER_LABEL_FAST("set Window.outerHeight", DOM, cx);
4226
0
4227
0
  JS::Rooted<JS::Value> arg0(cx);
4228
0
  arg0 = args[0];
4229
0
  FastErrorResult rv;
4230
0
  self->SetOuterHeight(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4231
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4232
0
    return false;
4233
0
  }
4234
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4235
0
4236
0
  return true;
4237
0
}
4238
4239
static const JSJitInfo outerHeight_getterinfo = {
4240
  { (JSJitGetterOp)get_outerHeight },
4241
  { prototypes::id::Window },
4242
  { PrototypeTraits<prototypes::id::Window>::Depth },
4243
  JSJitInfo::Getter,
4244
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4245
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
4246
  false,  /* isInfallible. False in setters. */
4247
  false,  /* isMovable.  Not relevant for setters. */
4248
  false, /* isEliminatable.  Not relevant for setters. */
4249
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4250
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4251
  false,  /* isTypedMethod.  Only relevant for methods. */
4252
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4253
};
4254
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4255
static_assert(0 < 5, "There is no slot for us");
4256
static const JSJitInfo outerHeight_setterinfo = {
4257
  { (JSJitGetterOp)set_outerHeight },
4258
  { prototypes::id::Window },
4259
  { PrototypeTraits<prototypes::id::Window>::Depth },
4260
  JSJitInfo::Setter,
4261
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4262
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
4263
  false,  /* isInfallible. False in setters. */
4264
  false,  /* isMovable.  Not relevant for setters. */
4265
  false, /* isEliminatable.  Not relevant for setters. */
4266
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4267
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4268
  false,  /* isTypedMethod.  Only relevant for methods. */
4269
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4270
};
4271
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4272
static_assert(0 < 5, "There is no slot for us");
4273
4274
MOZ_CAN_RUN_SCRIPT static bool
4275
requestAnimationFrame(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
4276
0
{
4277
0
  AUTO_PROFILER_LABEL_FAST("Window.requestAnimationFrame", DOM, cx);
4278
0
4279
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
4280
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.requestAnimationFrame");
4281
0
  }
4282
0
  RootedCallback<OwningNonNull<binding_detail::FastFrameRequestCallback>> arg0(cx);
4283
0
  if (args[0].isObject()) {
4284
0
    if (JS::IsCallable(&args[0].toObject())) {
4285
0
    { // scope for tempRoot and tempGlobalRoot if needed
4286
0
      arg0 = new binding_detail::FastFrameRequestCallback(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
4287
0
    }
4288
0
    } else {
4289
0
      ThrowErrorMessage(cx, MSG_NOT_CALLABLE, "Argument 1 of Window.requestAnimationFrame");
4290
0
      return false;
4291
0
    }
4292
0
  } else {
4293
0
    ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.requestAnimationFrame");
4294
0
    return false;
4295
0
  }
4296
0
  FastErrorResult rv;
4297
0
  int32_t result(self->RequestAnimationFrame(NonNullHelper(arg0), rv));
4298
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4299
0
    return false;
4300
0
  }
4301
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4302
0
  args.rval().setInt32(int32_t(result));
4303
0
  return true;
4304
0
}
4305
4306
static const JSJitInfo requestAnimationFrame_methodinfo = {
4307
  { (JSJitGetterOp)requestAnimationFrame },
4308
  { prototypes::id::Window },
4309
  { PrototypeTraits<prototypes::id::Window>::Depth },
4310
  JSJitInfo::Method,
4311
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4312
  JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
4313
  false,  /* isInfallible. False in setters. */
4314
  false,  /* isMovable.  Not relevant for setters. */
4315
  false, /* isEliminatable.  Not relevant for setters. */
4316
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4317
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4318
  false,  /* isTypedMethod.  Only relevant for methods. */
4319
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4320
};
4321
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4322
static_assert(0 < 5, "There is no slot for us");
4323
4324
MOZ_CAN_RUN_SCRIPT static bool
4325
cancelAnimationFrame(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
4326
0
{
4327
0
  AUTO_PROFILER_LABEL_FAST("Window.cancelAnimationFrame", DOM, cx);
4328
0
4329
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
4330
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.cancelAnimationFrame");
4331
0
  }
4332
0
  int32_t arg0;
4333
0
  if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
4334
0
    return false;
4335
0
  }
4336
0
  FastErrorResult rv;
4337
0
  self->CancelAnimationFrame(arg0, rv);
4338
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4339
0
    return false;
4340
0
  }
4341
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4342
0
  args.rval().setUndefined();
4343
0
  return true;
4344
0
}
4345
4346
static const JSJitInfo cancelAnimationFrame_methodinfo = {
4347
  { (JSJitGetterOp)cancelAnimationFrame },
4348
  { prototypes::id::Window },
4349
  { PrototypeTraits<prototypes::id::Window>::Depth },
4350
  JSJitInfo::Method,
4351
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4352
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
4353
  false,  /* isInfallible. False in setters. */
4354
  false,  /* isMovable.  Not relevant for setters. */
4355
  false, /* isEliminatable.  Not relevant for setters. */
4356
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4357
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4358
  false,  /* isTypedMethod.  Only relevant for methods. */
4359
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4360
};
4361
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4362
static_assert(0 < 5, "There is no slot for us");
4363
4364
static bool
4365
get_performance(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
4366
0
{
4367
0
  AUTO_PROFILER_LABEL_FAST("get Window.performance", DOM, cx);
4368
0
4369
0
  // Have to either root across the getter call or reget after.
4370
0
  JS::Rooted<JSObject*> slotStorage(cx, js::UncheckedUnwrap(obj, /* stopAtWindowProxy = */ false));
4371
0
  MOZ_ASSERT(IsDOMObject(slotStorage));
4372
0
  const size_t slotIndex = (DOM_INSTANCE_RESERVED_SLOTS + 3);
4373
0
  MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
4374
0
  {
4375
0
    // Scope for cachedVal
4376
0
    JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
4377
0
    if (!cachedVal.isUndefined()) {
4378
0
      args.rval().set(cachedVal);
4379
0
      // The cached value is in the compartment of slotStorage,
4380
0
      // so wrap into the caller compartment as needed.
4381
0
      if (MaybeWrapValue(cx, args.rval())) {
4382
0
        return true;
4383
0
      }
4384
0
      MOZ_CRASH("Looks like bug 1488480/1405521, with cached value wrapping failing");
4385
0
      return false;
4386
0
    }
4387
0
  }
4388
0
4389
0
  auto result(StrongOrRawPtr<mozilla::dom::Performance>(self->GetPerformance()));
4390
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4391
0
  {
4392
0
    JS::Rooted<JSObject*> conversionScope(cx, slotStorage);
4393
0
    JSAutoRealm ar(cx, conversionScope);
4394
0
    do { // block we break out of when done wrapping
4395
0
      if (!result) {
4396
0
        args.rval().setNull();
4397
0
        break;
4398
0
      }
4399
0
      if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
4400
0
        MOZ_ASSERT(JS_IsExceptionPending(cx));
4401
0
        return false;
4402
0
      }
4403
0
      break;
4404
0
    } while (false);
4405
0
  }
4406
0
  { // And now store things in the realm of our slotStorage.
4407
0
    JSAutoRealm ar(cx, slotStorage);
4408
0
    // Make a copy so that we don't do unnecessary wrapping on args.rval().
4409
0
    JS::Rooted<JS::Value> storedVal(cx, args.rval());
4410
0
    if (!MaybeWrapValue(cx, &storedVal)) {
4411
0
      MOZ_CRASH("Looks like bug 1488480/1405521, with the other MaybeWrap failing");
4412
0
      return false;
4413
0
    }
4414
0
    js::SetReservedSlot(slotStorage, slotIndex, storedVal);
4415
0
  }
4416
0
  // And now make sure args.rval() is in the caller realm.
4417
0
  if (MaybeWrapValue(cx, args.rval())) {
4418
0
    return true;
4419
0
  }
4420
0
  MOZ_CRASH("Looks like bug 1488480/1405521, with the third MaybeWrap failing");
4421
0
  return false;
4422
0
}
4423
4424
MOZ_CAN_RUN_SCRIPT static bool
4425
set_performance(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
4426
0
{
4427
0
  AUTO_PROFILER_LABEL_FAST("set Window.performance", DOM, cx);
4428
0
4429
0
  return JS_DefineProperty(cx, obj, "performance", args[0], JSPROP_ENUMERATE);
4430
0
}
4431
4432
static const JSJitInfo performance_getterinfo = {
4433
  { (JSJitGetterOp)get_performance },
4434
  { prototypes::id::Window },
4435
  { PrototypeTraits<prototypes::id::Window>::Depth },
4436
  JSJitInfo::Getter,
4437
  JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
4438
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
4439
  false,  /* isInfallible. False in setters. */
4440
  true,  /* isMovable.  Not relevant for setters. */
4441
  true, /* isEliminatable.  Not relevant for setters. */
4442
  true, /* isAlwaysInSlot.  Only relevant for getters. */
4443
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4444
  false,  /* isTypedMethod.  Only relevant for methods. */
4445
  (DOM_INSTANCE_RESERVED_SLOTS + 3)   /* Reserved slot index, if we're stored in a slot, else 0. */
4446
};
4447
static_assert((DOM_INSTANCE_RESERVED_SLOTS + 3) <= JSJitInfo::maxSlotIndex, "We won't fit");
4448
static_assert((DOM_INSTANCE_RESERVED_SLOTS + 3) < 5, "There is no slot for us");
4449
static const JSJitInfo performance_setterinfo = {
4450
  { (JSJitGetterOp)set_performance },
4451
  { prototypes::id::Window },
4452
  { PrototypeTraits<prototypes::id::Window>::Depth },
4453
  JSJitInfo::Setter,
4454
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4455
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
4456
  false,  /* isInfallible. False in setters. */
4457
  false,  /* isMovable.  Not relevant for setters. */
4458
  false, /* isEliminatable.  Not relevant for setters. */
4459
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4460
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4461
  false,  /* isTypedMethod.  Only relevant for methods. */
4462
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4463
};
4464
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4465
static_assert(0 < 5, "There is no slot for us");
4466
4467
MOZ_CAN_RUN_SCRIPT static bool
4468
getDefaultComputedStyle(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
4469
0
{
4470
0
  AUTO_PROFILER_LABEL_FAST("Window.getDefaultComputedStyle", DOM, cx);
4471
0
4472
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
4473
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getDefaultComputedStyle");
4474
0
  }
4475
0
  NonNull<mozilla::dom::Element> arg0;
4476
0
  if (args[0].isObject()) {
4477
0
    {
4478
0
      nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[0], arg0);
4479
0
      if (NS_FAILED(rv)) {
4480
0
        ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.getDefaultComputedStyle", "Element");
4481
0
        return false;
4482
0
      }
4483
0
    }
4484
0
  } else {
4485
0
    ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.getDefaultComputedStyle");
4486
0
    return false;
4487
0
  }
4488
0
  binding_detail::FakeString arg1;
4489
0
  if (args.hasDefined(1)) {
4490
0
    if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
4491
0
      return false;
4492
0
    }
4493
0
  } else {
4494
0
    static const char16_t data[] = { 0 };
4495
0
    arg1.Rebind(data, ArrayLength(data) - 1);
4496
0
  }
4497
0
  FastErrorResult rv;
4498
0
  auto result(StrongOrRawPtr<nsICSSDeclaration>(self->GetDefaultComputedStyle(MOZ_KnownLive(NonNullHelper(arg0)), NonNullHelper(Constify(arg1)), rv)));
4499
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4500
0
    return false;
4501
0
  }
4502
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4503
0
  static_assert(!IsPointer<decltype(result)>::value,
4504
0
                "NewObject implies that we need to keep the object alive with a strong reference.");
4505
0
  if (!result) {
4506
0
    args.rval().setNull();
4507
0
    return true;
4508
0
  }
4509
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
4510
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
4511
0
    return false;
4512
0
  }
4513
0
  return true;
4514
0
}
4515
4516
static const JSJitInfo getDefaultComputedStyle_methodinfo = {
4517
  { (JSJitGetterOp)getDefaultComputedStyle },
4518
  { prototypes::id::Window },
4519
  { PrototypeTraits<prototypes::id::Window>::Depth },
4520
  JSJitInfo::Method,
4521
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4522
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
4523
  false,  /* isInfallible. False in setters. */
4524
  false,  /* isMovable.  Not relevant for setters. */
4525
  false, /* isEliminatable.  Not relevant for setters. */
4526
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4527
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4528
  false,  /* isTypedMethod.  Only relevant for methods. */
4529
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4530
};
4531
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4532
static_assert(0 < 5, "There is no slot for us");
4533
4534
MOZ_CAN_RUN_SCRIPT static bool
4535
scrollByLines(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
4536
0
{
4537
0
  AUTO_PROFILER_LABEL_FAST("Window.scrollByLines", DOM, cx);
4538
0
4539
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
4540
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scrollByLines");
4541
0
  }
4542
0
  int32_t arg0;
4543
0
  if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
4544
0
    return false;
4545
0
  }
4546
0
  binding_detail::FastScrollOptions arg1;
4547
0
  if (!arg1.Init(cx, (args.hasDefined(1)) ? args[1] : JS::NullHandleValue,  "Argument 2 of Window.scrollByLines", false)) {
4548
0
    return false;
4549
0
  }
4550
0
  self->ScrollByLines(arg0, Constify(arg1));
4551
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4552
0
  args.rval().setUndefined();
4553
0
  return true;
4554
0
}
4555
4556
static const JSJitInfo scrollByLines_methodinfo = {
4557
  { (JSJitGetterOp)scrollByLines },
4558
  { prototypes::id::Window },
4559
  { PrototypeTraits<prototypes::id::Window>::Depth },
4560
  JSJitInfo::Method,
4561
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4562
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
4563
  false,  /* isInfallible. False in setters. */
4564
  false,  /* isMovable.  Not relevant for setters. */
4565
  false, /* isEliminatable.  Not relevant for setters. */
4566
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4567
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4568
  false,  /* isTypedMethod.  Only relevant for methods. */
4569
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4570
};
4571
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4572
static_assert(0 < 5, "There is no slot for us");
4573
4574
MOZ_CAN_RUN_SCRIPT static bool
4575
scrollByPages(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
4576
0
{
4577
0
  AUTO_PROFILER_LABEL_FAST("Window.scrollByPages", DOM, cx);
4578
0
4579
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
4580
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scrollByPages");
4581
0
  }
4582
0
  int32_t arg0;
4583
0
  if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
4584
0
    return false;
4585
0
  }
4586
0
  binding_detail::FastScrollOptions arg1;
4587
0
  if (!arg1.Init(cx, (args.hasDefined(1)) ? args[1] : JS::NullHandleValue,  "Argument 2 of Window.scrollByPages", false)) {
4588
0
    return false;
4589
0
  }
4590
0
  self->ScrollByPages(arg0, Constify(arg1));
4591
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4592
0
  args.rval().setUndefined();
4593
0
  return true;
4594
0
}
4595
4596
static const JSJitInfo scrollByPages_methodinfo = {
4597
  { (JSJitGetterOp)scrollByPages },
4598
  { prototypes::id::Window },
4599
  { PrototypeTraits<prototypes::id::Window>::Depth },
4600
  JSJitInfo::Method,
4601
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4602
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
4603
  false,  /* isInfallible. False in setters. */
4604
  false,  /* isMovable.  Not relevant for setters. */
4605
  false, /* isEliminatable.  Not relevant for setters. */
4606
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4607
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4608
  false,  /* isTypedMethod.  Only relevant for methods. */
4609
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4610
};
4611
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4612
static_assert(0 < 5, "There is no slot for us");
4613
4614
MOZ_CAN_RUN_SCRIPT static bool
4615
sizeToContent(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
4616
0
{
4617
0
  AUTO_PROFILER_LABEL_FAST("Window.sizeToContent", DOM, cx);
4618
0
4619
0
  FastErrorResult rv;
4620
0
  self->SizeToContent(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4621
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4622
0
    return false;
4623
0
  }
4624
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4625
0
  args.rval().setUndefined();
4626
0
  return true;
4627
0
}
4628
4629
static const JSJitInfo sizeToContent_methodinfo = {
4630
  { (JSJitGetterOp)sizeToContent },
4631
  { prototypes::id::Window },
4632
  { PrototypeTraits<prototypes::id::Window>::Depth },
4633
  JSJitInfo::Method,
4634
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4635
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
4636
  false,  /* isInfallible. False in setters. */
4637
  false,  /* isMovable.  Not relevant for setters. */
4638
  false, /* isEliminatable.  Not relevant for setters. */
4639
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4640
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4641
  false,  /* isTypedMethod.  Only relevant for methods. */
4642
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4643
};
4644
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4645
static_assert(0 < 5, "There is no slot for us");
4646
4647
MOZ_CAN_RUN_SCRIPT static bool
4648
get_controllers(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
4649
0
{
4650
0
  AUTO_PROFILER_LABEL_FAST("get Window.controllers", DOM, cx);
4651
0
4652
0
  FastErrorResult rv;
4653
0
  auto result(StrongOrRawPtr<nsIControllers>(self->GetControllers(rv)));
4654
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4655
0
    return false;
4656
0
  }
4657
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4658
0
  if (!WrapObject(cx, result, &NS_GET_IID(nsIControllers), args.rval())) {
4659
0
    return false;
4660
0
  }
4661
0
  return true;
4662
0
}
4663
4664
MOZ_CAN_RUN_SCRIPT static bool
4665
set_controllers(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
4666
0
{
4667
0
  AUTO_PROFILER_LABEL_FAST("set Window.controllers", DOM, cx);
4668
0
4669
0
  return JS_DefineProperty(cx, obj, "controllers", args[0], JSPROP_ENUMERATE);
4670
0
}
4671
4672
static const JSJitInfo controllers_getterinfo = {
4673
  { (JSJitGetterOp)get_controllers },
4674
  { prototypes::id::Window },
4675
  { PrototypeTraits<prototypes::id::Window>::Depth },
4676
  JSJitInfo::Getter,
4677
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4678
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
4679
  false,  /* isInfallible. False in setters. */
4680
  false,  /* isMovable.  Not relevant for setters. */
4681
  false, /* isEliminatable.  Not relevant for setters. */
4682
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4683
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4684
  false,  /* isTypedMethod.  Only relevant for methods. */
4685
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4686
};
4687
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4688
static_assert(0 < 5, "There is no slot for us");
4689
static const JSJitInfo controllers_setterinfo = {
4690
  { (JSJitGetterOp)set_controllers },
4691
  { prototypes::id::Window },
4692
  { PrototypeTraits<prototypes::id::Window>::Depth },
4693
  JSJitInfo::Setter,
4694
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4695
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
4696
  false,  /* isInfallible. False in setters. */
4697
  false,  /* isMovable.  Not relevant for setters. */
4698
  false, /* isEliminatable.  Not relevant for setters. */
4699
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4700
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4701
  false,  /* isTypedMethod.  Only relevant for methods. */
4702
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4703
};
4704
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4705
static_assert(0 < 5, "There is no slot for us");
4706
4707
MOZ_CAN_RUN_SCRIPT static bool
4708
get_realFrameElement(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
4709
0
{
4710
0
  AUTO_PROFILER_LABEL_FAST("get Window.realFrameElement", DOM, cx);
4711
0
4712
0
  FastErrorResult rv;
4713
0
  auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetRealFrameElement(rv)));
4714
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4715
0
    return false;
4716
0
  }
4717
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4718
0
  if (!result) {
4719
0
    args.rval().setNull();
4720
0
    return true;
4721
0
  }
4722
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
4723
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
4724
0
    return false;
4725
0
  }
4726
0
  return true;
4727
0
}
4728
4729
static const JSJitInfo realFrameElement_getterinfo = {
4730
  { (JSJitGetterOp)get_realFrameElement },
4731
  { prototypes::id::Window },
4732
  { PrototypeTraits<prototypes::id::Window>::Depth },
4733
  JSJitInfo::Getter,
4734
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4735
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
4736
  false,  /* isInfallible. False in setters. */
4737
  false,  /* isMovable.  Not relevant for setters. */
4738
  false, /* isEliminatable.  Not relevant for setters. */
4739
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4740
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4741
  false,  /* isTypedMethod.  Only relevant for methods. */
4742
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4743
};
4744
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4745
static_assert(0 < 5, "There is no slot for us");
4746
4747
MOZ_CAN_RUN_SCRIPT static bool
4748
get_docShell(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
4749
0
{
4750
0
  AUTO_PROFILER_LABEL_FAST("get Window.docShell", DOM, cx);
4751
0
4752
0
  auto result(StrongOrRawPtr<nsIDocShell>(self->GetDocShell()));
4753
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4754
0
  if (!result) {
4755
0
    args.rval().setNull();
4756
0
    return true;
4757
0
  }
4758
0
  if (!WrapObject(cx, result, &NS_GET_IID(nsIDocShell), args.rval())) {
4759
0
    return false;
4760
0
  }
4761
0
  return true;
4762
0
}
4763
4764
static const JSJitInfo docShell_getterinfo = {
4765
  { (JSJitGetterOp)get_docShell },
4766
  { prototypes::id::Window },
4767
  { PrototypeTraits<prototypes::id::Window>::Depth },
4768
  JSJitInfo::Getter,
4769
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4770
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
4771
  false,  /* isInfallible. False in setters. */
4772
  false,  /* isMovable.  Not relevant for setters. */
4773
  false, /* isEliminatable.  Not relevant for setters. */
4774
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4775
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4776
  false,  /* isTypedMethod.  Only relevant for methods. */
4777
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4778
};
4779
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4780
static_assert(0 < 5, "There is no slot for us");
4781
4782
MOZ_CAN_RUN_SCRIPT static bool
4783
get_mozInnerScreenX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
4784
0
{
4785
0
  AUTO_PROFILER_LABEL_FAST("get Window.mozInnerScreenX", DOM, cx);
4786
0
4787
0
  FastErrorResult rv;
4788
0
  float result(self->GetMozInnerScreenX(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv));
4789
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4790
0
    return false;
4791
0
  }
4792
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4793
0
  args.rval().set(JS_NumberValue(double(result)));
4794
0
  return true;
4795
0
}
4796
4797
static const JSJitInfo mozInnerScreenX_getterinfo = {
4798
  { (JSJitGetterOp)get_mozInnerScreenX },
4799
  { prototypes::id::Window },
4800
  { PrototypeTraits<prototypes::id::Window>::Depth },
4801
  JSJitInfo::Getter,
4802
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4803
  JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
4804
  false,  /* isInfallible. False in setters. */
4805
  false,  /* isMovable.  Not relevant for setters. */
4806
  false, /* isEliminatable.  Not relevant for setters. */
4807
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4808
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4809
  false,  /* isTypedMethod.  Only relevant for methods. */
4810
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4811
};
4812
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4813
static_assert(0 < 5, "There is no slot for us");
4814
4815
MOZ_CAN_RUN_SCRIPT static bool
4816
get_mozInnerScreenY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
4817
0
{
4818
0
  AUTO_PROFILER_LABEL_FAST("get Window.mozInnerScreenY", DOM, cx);
4819
0
4820
0
  FastErrorResult rv;
4821
0
  float result(self->GetMozInnerScreenY(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv));
4822
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4823
0
    return false;
4824
0
  }
4825
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4826
0
  args.rval().set(JS_NumberValue(double(result)));
4827
0
  return true;
4828
0
}
4829
4830
static const JSJitInfo mozInnerScreenY_getterinfo = {
4831
  { (JSJitGetterOp)get_mozInnerScreenY },
4832
  { prototypes::id::Window },
4833
  { PrototypeTraits<prototypes::id::Window>::Depth },
4834
  JSJitInfo::Getter,
4835
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4836
  JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
4837
  false,  /* isInfallible. False in setters. */
4838
  false,  /* isMovable.  Not relevant for setters. */
4839
  false, /* isEliminatable.  Not relevant for setters. */
4840
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4841
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4842
  false,  /* isTypedMethod.  Only relevant for methods. */
4843
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4844
};
4845
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4846
static_assert(0 < 5, "There is no slot for us");
4847
4848
MOZ_CAN_RUN_SCRIPT static bool
4849
get_devicePixelRatio(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
4850
0
{
4851
0
  AUTO_PROFILER_LABEL_FAST("get Window.devicePixelRatio", DOM, cx);
4852
0
4853
0
  FastErrorResult rv;
4854
0
  double result(self->GetDevicePixelRatio(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv));
4855
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4856
0
    return false;
4857
0
  }
4858
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4859
0
  args.rval().set(JS_NumberValue(double(result)));
4860
0
  return true;
4861
0
}
4862
4863
MOZ_CAN_RUN_SCRIPT static bool
4864
set_devicePixelRatio(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
4865
0
{
4866
0
  AUTO_PROFILER_LABEL_FAST("set Window.devicePixelRatio", DOM, cx);
4867
0
4868
0
  return JS_DefineProperty(cx, obj, "devicePixelRatio", args[0], JSPROP_ENUMERATE);
4869
0
}
4870
4871
static const JSJitInfo devicePixelRatio_getterinfo = {
4872
  { (JSJitGetterOp)get_devicePixelRatio },
4873
  { prototypes::id::Window },
4874
  { PrototypeTraits<prototypes::id::Window>::Depth },
4875
  JSJitInfo::Getter,
4876
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4877
  JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
4878
  false,  /* isInfallible. False in setters. */
4879
  false,  /* isMovable.  Not relevant for setters. */
4880
  false, /* isEliminatable.  Not relevant for setters. */
4881
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4882
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4883
  false,  /* isTypedMethod.  Only relevant for methods. */
4884
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4885
};
4886
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4887
static_assert(0 < 5, "There is no slot for us");
4888
static const JSJitInfo devicePixelRatio_setterinfo = {
4889
  { (JSJitGetterOp)set_devicePixelRatio },
4890
  { prototypes::id::Window },
4891
  { PrototypeTraits<prototypes::id::Window>::Depth },
4892
  JSJitInfo::Setter,
4893
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4894
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
4895
  false,  /* isInfallible. False in setters. */
4896
  false,  /* isMovable.  Not relevant for setters. */
4897
  false, /* isEliminatable.  Not relevant for setters. */
4898
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4899
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4900
  false,  /* isTypedMethod.  Only relevant for methods. */
4901
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4902
};
4903
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4904
static_assert(0 < 5, "There is no slot for us");
4905
4906
MOZ_CAN_RUN_SCRIPT static bool
4907
get_scrollMinX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
4908
0
{
4909
0
  AUTO_PROFILER_LABEL_FAST("get Window.scrollMinX", DOM, cx);
4910
0
4911
0
  FastErrorResult rv;
4912
0
  int32_t result(self->GetScrollMinX(rv));
4913
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4914
0
    return false;
4915
0
  }
4916
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4917
0
  args.rval().setInt32(int32_t(result));
4918
0
  return true;
4919
0
}
4920
4921
static const JSJitInfo scrollMinX_getterinfo = {
4922
  { (JSJitGetterOp)get_scrollMinX },
4923
  { prototypes::id::Window },
4924
  { PrototypeTraits<prototypes::id::Window>::Depth },
4925
  JSJitInfo::Getter,
4926
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4927
  JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
4928
  false,  /* isInfallible. False in setters. */
4929
  false,  /* isMovable.  Not relevant for setters. */
4930
  false, /* isEliminatable.  Not relevant for setters. */
4931
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4932
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4933
  false,  /* isTypedMethod.  Only relevant for methods. */
4934
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4935
};
4936
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4937
static_assert(0 < 5, "There is no slot for us");
4938
4939
MOZ_CAN_RUN_SCRIPT static bool
4940
get_scrollMinY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
4941
0
{
4942
0
  AUTO_PROFILER_LABEL_FAST("get Window.scrollMinY", DOM, cx);
4943
0
4944
0
  FastErrorResult rv;
4945
0
  int32_t result(self->GetScrollMinY(rv));
4946
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4947
0
    return false;
4948
0
  }
4949
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4950
0
  args.rval().setInt32(int32_t(result));
4951
0
  return true;
4952
0
}
4953
4954
static const JSJitInfo scrollMinY_getterinfo = {
4955
  { (JSJitGetterOp)get_scrollMinY },
4956
  { prototypes::id::Window },
4957
  { PrototypeTraits<prototypes::id::Window>::Depth },
4958
  JSJitInfo::Getter,
4959
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
4960
  JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
4961
  false,  /* isInfallible. False in setters. */
4962
  false,  /* isMovable.  Not relevant for setters. */
4963
  false, /* isEliminatable.  Not relevant for setters. */
4964
  false, /* isAlwaysInSlot.  Only relevant for getters. */
4965
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
4966
  false,  /* isTypedMethod.  Only relevant for methods. */
4967
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
4968
};
4969
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4970
static_assert(0 < 5, "There is no slot for us");
4971
4972
MOZ_CAN_RUN_SCRIPT static bool
4973
get_scrollMaxX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
4974
0
{
4975
0
  AUTO_PROFILER_LABEL_FAST("get Window.scrollMaxX", DOM, cx);
4976
0
4977
0
  FastErrorResult rv;
4978
0
  int32_t result(self->GetScrollMaxX(rv));
4979
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4980
0
    return false;
4981
0
  }
4982
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
4983
0
  args.rval().setInt32(int32_t(result));
4984
0
  return true;
4985
0
}
4986
4987
MOZ_CAN_RUN_SCRIPT static bool
4988
set_scrollMaxX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
4989
0
{
4990
0
  AUTO_PROFILER_LABEL_FAST("set Window.scrollMaxX", DOM, cx);
4991
0
4992
0
  return JS_DefineProperty(cx, obj, "scrollMaxX", args[0], JSPROP_ENUMERATE);
4993
0
}
4994
4995
static const JSJitInfo scrollMaxX_getterinfo = {
4996
  { (JSJitGetterOp)get_scrollMaxX },
4997
  { prototypes::id::Window },
4998
  { PrototypeTraits<prototypes::id::Window>::Depth },
4999
  JSJitInfo::Getter,
5000
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5001
  JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
5002
  false,  /* isInfallible. False in setters. */
5003
  false,  /* isMovable.  Not relevant for setters. */
5004
  false, /* isEliminatable.  Not relevant for setters. */
5005
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5006
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5007
  false,  /* isTypedMethod.  Only relevant for methods. */
5008
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5009
};
5010
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5011
static_assert(0 < 5, "There is no slot for us");
5012
static const JSJitInfo scrollMaxX_setterinfo = {
5013
  { (JSJitGetterOp)set_scrollMaxX },
5014
  { prototypes::id::Window },
5015
  { PrototypeTraits<prototypes::id::Window>::Depth },
5016
  JSJitInfo::Setter,
5017
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5018
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
5019
  false,  /* isInfallible. False in setters. */
5020
  false,  /* isMovable.  Not relevant for setters. */
5021
  false, /* isEliminatable.  Not relevant for setters. */
5022
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5023
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5024
  false,  /* isTypedMethod.  Only relevant for methods. */
5025
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5026
};
5027
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5028
static_assert(0 < 5, "There is no slot for us");
5029
5030
MOZ_CAN_RUN_SCRIPT static bool
5031
get_scrollMaxY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
5032
0
{
5033
0
  AUTO_PROFILER_LABEL_FAST("get Window.scrollMaxY", DOM, cx);
5034
0
5035
0
  FastErrorResult rv;
5036
0
  int32_t result(self->GetScrollMaxY(rv));
5037
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5038
0
    return false;
5039
0
  }
5040
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5041
0
  args.rval().setInt32(int32_t(result));
5042
0
  return true;
5043
0
}
5044
5045
MOZ_CAN_RUN_SCRIPT static bool
5046
set_scrollMaxY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
5047
0
{
5048
0
  AUTO_PROFILER_LABEL_FAST("set Window.scrollMaxY", DOM, cx);
5049
0
5050
0
  return JS_DefineProperty(cx, obj, "scrollMaxY", args[0], JSPROP_ENUMERATE);
5051
0
}
5052
5053
static const JSJitInfo scrollMaxY_getterinfo = {
5054
  { (JSJitGetterOp)get_scrollMaxY },
5055
  { prototypes::id::Window },
5056
  { PrototypeTraits<prototypes::id::Window>::Depth },
5057
  JSJitInfo::Getter,
5058
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5059
  JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
5060
  false,  /* isInfallible. False in setters. */
5061
  false,  /* isMovable.  Not relevant for setters. */
5062
  false, /* isEliminatable.  Not relevant for setters. */
5063
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5064
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5065
  false,  /* isTypedMethod.  Only relevant for methods. */
5066
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5067
};
5068
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5069
static_assert(0 < 5, "There is no slot for us");
5070
static const JSJitInfo scrollMaxY_setterinfo = {
5071
  { (JSJitGetterOp)set_scrollMaxY },
5072
  { prototypes::id::Window },
5073
  { PrototypeTraits<prototypes::id::Window>::Depth },
5074
  JSJitInfo::Setter,
5075
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5076
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
5077
  false,  /* isInfallible. False in setters. */
5078
  false,  /* isMovable.  Not relevant for setters. */
5079
  false, /* isEliminatable.  Not relevant for setters. */
5080
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5081
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5082
  false,  /* isTypedMethod.  Only relevant for methods. */
5083
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5084
};
5085
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5086
static_assert(0 < 5, "There is no slot for us");
5087
5088
MOZ_CAN_RUN_SCRIPT static bool
5089
get_fullScreen(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
5090
0
{
5091
0
  AUTO_PROFILER_LABEL_FAST("get Window.fullScreen", DOM, cx);
5092
0
5093
0
  FastErrorResult rv;
5094
0
  bool result(self->GetFullScreen(rv));
5095
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5096
0
    return false;
5097
0
  }
5098
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5099
0
  args.rval().setBoolean(result);
5100
0
  return true;
5101
0
}
5102
5103
MOZ_CAN_RUN_SCRIPT static bool
5104
set_fullScreen(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
5105
0
{
5106
0
  AUTO_PROFILER_LABEL_FAST("set Window.fullScreen", DOM, cx);
5107
0
5108
0
  bool arg0;
5109
0
  if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
5110
0
    return false;
5111
0
  }
5112
0
  FastErrorResult rv;
5113
0
  self->SetFullScreen(arg0, rv);
5114
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5115
0
    return false;
5116
0
  }
5117
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5118
0
5119
0
  return true;
5120
0
}
5121
5122
static const JSJitInfo fullScreen_getterinfo = {
5123
  { (JSJitGetterOp)get_fullScreen },
5124
  { prototypes::id::Window },
5125
  { PrototypeTraits<prototypes::id::Window>::Depth },
5126
  JSJitInfo::Getter,
5127
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5128
  JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
5129
  false,  /* isInfallible. False in setters. */
5130
  false,  /* isMovable.  Not relevant for setters. */
5131
  false, /* isEliminatable.  Not relevant for setters. */
5132
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5133
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5134
  false,  /* isTypedMethod.  Only relevant for methods. */
5135
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5136
};
5137
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5138
static_assert(0 < 5, "There is no slot for us");
5139
static const JSJitInfo fullScreen_setterinfo = {
5140
  { (JSJitGetterOp)set_fullScreen },
5141
  { prototypes::id::Window },
5142
  { PrototypeTraits<prototypes::id::Window>::Depth },
5143
  JSJitInfo::Setter,
5144
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5145
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
5146
  false,  /* isInfallible. False in setters. */
5147
  false,  /* isMovable.  Not relevant for setters. */
5148
  false, /* isEliminatable.  Not relevant for setters. */
5149
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5150
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5151
  false,  /* isTypedMethod.  Only relevant for methods. */
5152
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5153
};
5154
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5155
static_assert(0 < 5, "There is no slot for us");
5156
5157
MOZ_CAN_RUN_SCRIPT static bool
5158
updateCommands(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
5159
0
{
5160
0
  AUTO_PROFILER_LABEL_FAST("Window.updateCommands", DOM, cx);
5161
0
5162
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
5163
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.updateCommands");
5164
0
  }
5165
0
  binding_detail::FakeString arg0;
5166
0
  if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
5167
0
    return false;
5168
0
  }
5169
0
  mozilla::dom::Selection* arg1;
5170
0
  if (args.hasDefined(1)) {
5171
0
    if (args[1].isObject()) {
5172
0
      {
5173
0
        nsresult rv = UnwrapObject<prototypes::id::Selection, mozilla::dom::Selection>(args[1], arg1);
5174
0
        if (NS_FAILED(rv)) {
5175
0
          ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of Window.updateCommands", "Selection");
5176
0
          return false;
5177
0
        }
5178
0
      }
5179
0
    } else if (args[1].isNullOrUndefined()) {
5180
0
      arg1 = nullptr;
5181
0
    } else {
5182
0
      ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of Window.updateCommands");
5183
0
      return false;
5184
0
    }
5185
0
  } else {
5186
0
    arg1 = nullptr;
5187
0
  }
5188
0
  int16_t arg2;
5189
0
  if (args.hasDefined(2)) {
5190
0
    if (!ValueToPrimitive<int16_t, eDefault>(cx, args[2], &arg2)) {
5191
0
      return false;
5192
0
    }
5193
0
  } else {
5194
0
    arg2 = 0;
5195
0
  }
5196
0
  self->UpdateCommands(NonNullHelper(Constify(arg0)), MOZ_KnownLive(Constify(arg1)), arg2);
5197
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5198
0
  args.rval().setUndefined();
5199
0
  return true;
5200
0
}
5201
5202
static const JSJitInfo updateCommands_methodinfo = {
5203
  { (JSJitGetterOp)updateCommands },
5204
  { prototypes::id::Window },
5205
  { PrototypeTraits<prototypes::id::Window>::Depth },
5206
  JSJitInfo::Method,
5207
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5208
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
5209
  false,  /* isInfallible. False in setters. */
5210
  false,  /* isMovable.  Not relevant for setters. */
5211
  false, /* isEliminatable.  Not relevant for setters. */
5212
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5213
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5214
  false,  /* isTypedMethod.  Only relevant for methods. */
5215
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5216
};
5217
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5218
static_assert(0 < 5, "There is no slot for us");
5219
5220
MOZ_CAN_RUN_SCRIPT static bool
5221
find(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
5222
0
{
5223
0
  AUTO_PROFILER_LABEL_FAST("Window.find", DOM, cx);
5224
0
5225
0
  binding_detail::FakeString arg0;
5226
0
  if (args.hasDefined(0)) {
5227
0
    if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
5228
0
      return false;
5229
0
    }
5230
0
  } else {
5231
0
    static const char16_t data[] = { 0 };
5232
0
    arg0.Rebind(data, ArrayLength(data) - 1);
5233
0
  }
5234
0
  bool arg1;
5235
0
  if (args.hasDefined(1)) {
5236
0
    if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
5237
0
      return false;
5238
0
    }
5239
0
  } else {
5240
0
    arg1 = false;
5241
0
  }
5242
0
  bool arg2;
5243
0
  if (args.hasDefined(2)) {
5244
0
    if (!ValueToPrimitive<bool, eDefault>(cx, args[2], &arg2)) {
5245
0
      return false;
5246
0
    }
5247
0
  } else {
5248
0
    arg2 = false;
5249
0
  }
5250
0
  bool arg3;
5251
0
  if (args.hasDefined(3)) {
5252
0
    if (!ValueToPrimitive<bool, eDefault>(cx, args[3], &arg3)) {
5253
0
      return false;
5254
0
    }
5255
0
  } else {
5256
0
    arg3 = false;
5257
0
  }
5258
0
  bool arg4;
5259
0
  if (args.hasDefined(4)) {
5260
0
    if (!ValueToPrimitive<bool, eDefault>(cx, args[4], &arg4)) {
5261
0
      return false;
5262
0
    }
5263
0
  } else {
5264
0
    arg4 = false;
5265
0
  }
5266
0
  bool arg5;
5267
0
  if (args.hasDefined(5)) {
5268
0
    if (!ValueToPrimitive<bool, eDefault>(cx, args[5], &arg5)) {
5269
0
      return false;
5270
0
    }
5271
0
  } else {
5272
0
    arg5 = false;
5273
0
  }
5274
0
  bool arg6;
5275
0
  if (args.hasDefined(6)) {
5276
0
    if (!ValueToPrimitive<bool, eDefault>(cx, args[6], &arg6)) {
5277
0
      return false;
5278
0
    }
5279
0
  } else {
5280
0
    arg6 = false;
5281
0
  }
5282
0
  FastErrorResult rv;
5283
0
  bool result(self->Find(NonNullHelper(Constify(arg0)), arg1, arg2, arg3, arg4, arg5, arg6, rv));
5284
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5285
0
    return false;
5286
0
  }
5287
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5288
0
  args.rval().setBoolean(result);
5289
0
  return true;
5290
0
}
5291
5292
static const JSJitInfo find_methodinfo = {
5293
  { (JSJitGetterOp)find },
5294
  { prototypes::id::Window },
5295
  { PrototypeTraits<prototypes::id::Window>::Depth },
5296
  JSJitInfo::Method,
5297
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5298
  JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
5299
  false,  /* isInfallible. False in setters. */
5300
  false,  /* isMovable.  Not relevant for setters. */
5301
  false, /* isEliminatable.  Not relevant for setters. */
5302
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5303
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5304
  false,  /* isTypedMethod.  Only relevant for methods. */
5305
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5306
};
5307
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5308
static_assert(0 < 5, "There is no slot for us");
5309
5310
MOZ_CAN_RUN_SCRIPT static bool
5311
get_mozPaintCount(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
5312
0
{
5313
0
  AUTO_PROFILER_LABEL_FAST("get Window.mozPaintCount", DOM, cx);
5314
0
5315
0
  FastErrorResult rv;
5316
0
  uint64_t result(self->GetMozPaintCount(rv));
5317
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5318
0
    return false;
5319
0
  }
5320
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5321
0
  args.rval().set(JS_NumberValue(double(result)));
5322
0
  return true;
5323
0
}
5324
5325
static const JSJitInfo mozPaintCount_getterinfo = {
5326
  { (JSJitGetterOp)get_mozPaintCount },
5327
  { prototypes::id::Window },
5328
  { PrototypeTraits<prototypes::id::Window>::Depth },
5329
  JSJitInfo::Getter,
5330
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5331
  JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
5332
  false,  /* isInfallible. False in setters. */
5333
  false,  /* isMovable.  Not relevant for setters. */
5334
  false, /* isEliminatable.  Not relevant for setters. */
5335
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5336
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5337
  false,  /* isTypedMethod.  Only relevant for methods. */
5338
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5339
};
5340
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5341
static_assert(0 < 5, "There is no slot for us");
5342
5343
MOZ_CAN_RUN_SCRIPT static bool
5344
get_ondevicemotion(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
5345
0
{
5346
0
  AUTO_PROFILER_LABEL_FAST("get Window.ondevicemotion", DOM, cx);
5347
0
5348
0
  RefPtr<EventHandlerNonNull> result(self->GetOndevicemotion());
5349
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5350
0
  if (result) {
5351
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
5352
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
5353
0
      return false;
5354
0
    }
5355
0
    return true;
5356
0
  } else {
5357
0
    args.rval().setNull();
5358
0
    return true;
5359
0
  }
5360
0
}
5361
5362
MOZ_CAN_RUN_SCRIPT static bool
5363
set_ondevicemotion(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
5364
0
{
5365
0
  AUTO_PROFILER_LABEL_FAST("set Window.ondevicemotion", DOM, cx);
5366
0
5367
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
5368
0
  if (args[0].isObject()) {
5369
0
    { // scope for tempRoot and tempGlobalRoot if needed
5370
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
5371
0
    }
5372
0
  } else {
5373
0
    arg0 = nullptr;
5374
0
  }
5375
0
  self->SetOndevicemotion(Constify(arg0));
5376
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5377
0
5378
0
  return true;
5379
0
}
5380
5381
static const JSJitInfo ondevicemotion_getterinfo = {
5382
  { (JSJitGetterOp)get_ondevicemotion },
5383
  { prototypes::id::Window },
5384
  { PrototypeTraits<prototypes::id::Window>::Depth },
5385
  JSJitInfo::Getter,
5386
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5387
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
5388
  false,  /* isInfallible. False in setters. */
5389
  false,  /* isMovable.  Not relevant for setters. */
5390
  false, /* isEliminatable.  Not relevant for setters. */
5391
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5392
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5393
  false,  /* isTypedMethod.  Only relevant for methods. */
5394
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5395
};
5396
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5397
static_assert(0 < 5, "There is no slot for us");
5398
static const JSJitInfo ondevicemotion_setterinfo = {
5399
  { (JSJitGetterOp)set_ondevicemotion },
5400
  { prototypes::id::Window },
5401
  { PrototypeTraits<prototypes::id::Window>::Depth },
5402
  JSJitInfo::Setter,
5403
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5404
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
5405
  false,  /* isInfallible. False in setters. */
5406
  false,  /* isMovable.  Not relevant for setters. */
5407
  false, /* isEliminatable.  Not relevant for setters. */
5408
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5409
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5410
  false,  /* isTypedMethod.  Only relevant for methods. */
5411
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5412
};
5413
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5414
static_assert(0 < 5, "There is no slot for us");
5415
5416
MOZ_CAN_RUN_SCRIPT static bool
5417
get_ondeviceorientation(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
5418
0
{
5419
0
  AUTO_PROFILER_LABEL_FAST("get Window.ondeviceorientation", DOM, cx);
5420
0
5421
0
  RefPtr<EventHandlerNonNull> result(self->GetOndeviceorientation());
5422
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5423
0
  if (result) {
5424
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
5425
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
5426
0
      return false;
5427
0
    }
5428
0
    return true;
5429
0
  } else {
5430
0
    args.rval().setNull();
5431
0
    return true;
5432
0
  }
5433
0
}
5434
5435
MOZ_CAN_RUN_SCRIPT static bool
5436
set_ondeviceorientation(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
5437
0
{
5438
0
  AUTO_PROFILER_LABEL_FAST("set Window.ondeviceorientation", DOM, cx);
5439
0
5440
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
5441
0
  if (args[0].isObject()) {
5442
0
    { // scope for tempRoot and tempGlobalRoot if needed
5443
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
5444
0
    }
5445
0
  } else {
5446
0
    arg0 = nullptr;
5447
0
  }
5448
0
  self->SetOndeviceorientation(Constify(arg0));
5449
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5450
0
5451
0
  return true;
5452
0
}
5453
5454
static const JSJitInfo ondeviceorientation_getterinfo = {
5455
  { (JSJitGetterOp)get_ondeviceorientation },
5456
  { prototypes::id::Window },
5457
  { PrototypeTraits<prototypes::id::Window>::Depth },
5458
  JSJitInfo::Getter,
5459
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5460
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
5461
  false,  /* isInfallible. False in setters. */
5462
  false,  /* isMovable.  Not relevant for setters. */
5463
  false, /* isEliminatable.  Not relevant for setters. */
5464
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5465
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5466
  false,  /* isTypedMethod.  Only relevant for methods. */
5467
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5468
};
5469
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5470
static_assert(0 < 5, "There is no slot for us");
5471
static const JSJitInfo ondeviceorientation_setterinfo = {
5472
  { (JSJitGetterOp)set_ondeviceorientation },
5473
  { prototypes::id::Window },
5474
  { PrototypeTraits<prototypes::id::Window>::Depth },
5475
  JSJitInfo::Setter,
5476
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5477
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
5478
  false,  /* isInfallible. False in setters. */
5479
  false,  /* isMovable.  Not relevant for setters. */
5480
  false, /* isEliminatable.  Not relevant for setters. */
5481
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5482
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5483
  false,  /* isTypedMethod.  Only relevant for methods. */
5484
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5485
};
5486
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5487
static_assert(0 < 5, "There is no slot for us");
5488
5489
MOZ_CAN_RUN_SCRIPT static bool
5490
get_onabsolutedeviceorientation(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
5491
0
{
5492
0
  AUTO_PROFILER_LABEL_FAST("get Window.onabsolutedeviceorientation", DOM, cx);
5493
0
5494
0
  RefPtr<EventHandlerNonNull> result(self->GetOnabsolutedeviceorientation());
5495
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5496
0
  if (result) {
5497
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
5498
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
5499
0
      return false;
5500
0
    }
5501
0
    return true;
5502
0
  } else {
5503
0
    args.rval().setNull();
5504
0
    return true;
5505
0
  }
5506
0
}
5507
5508
MOZ_CAN_RUN_SCRIPT static bool
5509
set_onabsolutedeviceorientation(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
5510
0
{
5511
0
  AUTO_PROFILER_LABEL_FAST("set Window.onabsolutedeviceorientation", DOM, cx);
5512
0
5513
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
5514
0
  if (args[0].isObject()) {
5515
0
    { // scope for tempRoot and tempGlobalRoot if needed
5516
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
5517
0
    }
5518
0
  } else {
5519
0
    arg0 = nullptr;
5520
0
  }
5521
0
  self->SetOnabsolutedeviceorientation(Constify(arg0));
5522
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5523
0
5524
0
  return true;
5525
0
}
5526
5527
static const JSJitInfo onabsolutedeviceorientation_getterinfo = {
5528
  { (JSJitGetterOp)get_onabsolutedeviceorientation },
5529
  { prototypes::id::Window },
5530
  { PrototypeTraits<prototypes::id::Window>::Depth },
5531
  JSJitInfo::Getter,
5532
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5533
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
5534
  false,  /* isInfallible. False in setters. */
5535
  false,  /* isMovable.  Not relevant for setters. */
5536
  false, /* isEliminatable.  Not relevant for setters. */
5537
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5538
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5539
  false,  /* isTypedMethod.  Only relevant for methods. */
5540
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5541
};
5542
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5543
static_assert(0 < 5, "There is no slot for us");
5544
static const JSJitInfo onabsolutedeviceorientation_setterinfo = {
5545
  { (JSJitGetterOp)set_onabsolutedeviceorientation },
5546
  { prototypes::id::Window },
5547
  { PrototypeTraits<prototypes::id::Window>::Depth },
5548
  JSJitInfo::Setter,
5549
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5550
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
5551
  false,  /* isInfallible. False in setters. */
5552
  false,  /* isMovable.  Not relevant for setters. */
5553
  false, /* isEliminatable.  Not relevant for setters. */
5554
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5555
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5556
  false,  /* isTypedMethod.  Only relevant for methods. */
5557
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5558
};
5559
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5560
static_assert(0 < 5, "There is no slot for us");
5561
5562
MOZ_CAN_RUN_SCRIPT static bool
5563
get_ondeviceproximity(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
5564
0
{
5565
0
  AUTO_PROFILER_LABEL_FAST("get Window.ondeviceproximity", DOM, cx);
5566
0
5567
0
  RefPtr<EventHandlerNonNull> result(self->GetOndeviceproximity());
5568
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5569
0
  if (result) {
5570
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
5571
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
5572
0
      return false;
5573
0
    }
5574
0
    return true;
5575
0
  } else {
5576
0
    args.rval().setNull();
5577
0
    return true;
5578
0
  }
5579
0
}
5580
5581
MOZ_CAN_RUN_SCRIPT static bool
5582
set_ondeviceproximity(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
5583
0
{
5584
0
  AUTO_PROFILER_LABEL_FAST("set Window.ondeviceproximity", DOM, cx);
5585
0
5586
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
5587
0
  if (args[0].isObject()) {
5588
0
    { // scope for tempRoot and tempGlobalRoot if needed
5589
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
5590
0
    }
5591
0
  } else {
5592
0
    arg0 = nullptr;
5593
0
  }
5594
0
  self->SetOndeviceproximity(Constify(arg0));
5595
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5596
0
5597
0
  return true;
5598
0
}
5599
5600
static const JSJitInfo ondeviceproximity_getterinfo = {
5601
  { (JSJitGetterOp)get_ondeviceproximity },
5602
  { prototypes::id::Window },
5603
  { PrototypeTraits<prototypes::id::Window>::Depth },
5604
  JSJitInfo::Getter,
5605
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5606
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
5607
  false,  /* isInfallible. False in setters. */
5608
  false,  /* isMovable.  Not relevant for setters. */
5609
  false, /* isEliminatable.  Not relevant for setters. */
5610
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5611
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5612
  false,  /* isTypedMethod.  Only relevant for methods. */
5613
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5614
};
5615
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5616
static_assert(0 < 5, "There is no slot for us");
5617
static const JSJitInfo ondeviceproximity_setterinfo = {
5618
  { (JSJitGetterOp)set_ondeviceproximity },
5619
  { prototypes::id::Window },
5620
  { PrototypeTraits<prototypes::id::Window>::Depth },
5621
  JSJitInfo::Setter,
5622
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5623
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
5624
  false,  /* isInfallible. False in setters. */
5625
  false,  /* isMovable.  Not relevant for setters. */
5626
  false, /* isEliminatable.  Not relevant for setters. */
5627
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5628
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5629
  false,  /* isTypedMethod.  Only relevant for methods. */
5630
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5631
};
5632
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5633
static_assert(0 < 5, "There is no slot for us");
5634
5635
MOZ_CAN_RUN_SCRIPT static bool
5636
get_onuserproximity(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
5637
0
{
5638
0
  AUTO_PROFILER_LABEL_FAST("get Window.onuserproximity", DOM, cx);
5639
0
5640
0
  RefPtr<EventHandlerNonNull> result(self->GetOnuserproximity());
5641
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5642
0
  if (result) {
5643
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
5644
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
5645
0
      return false;
5646
0
    }
5647
0
    return true;
5648
0
  } else {
5649
0
    args.rval().setNull();
5650
0
    return true;
5651
0
  }
5652
0
}
5653
5654
MOZ_CAN_RUN_SCRIPT static bool
5655
set_onuserproximity(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
5656
0
{
5657
0
  AUTO_PROFILER_LABEL_FAST("set Window.onuserproximity", DOM, cx);
5658
0
5659
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
5660
0
  if (args[0].isObject()) {
5661
0
    { // scope for tempRoot and tempGlobalRoot if needed
5662
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
5663
0
    }
5664
0
  } else {
5665
0
    arg0 = nullptr;
5666
0
  }
5667
0
  self->SetOnuserproximity(Constify(arg0));
5668
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5669
0
5670
0
  return true;
5671
0
}
5672
5673
static const JSJitInfo onuserproximity_getterinfo = {
5674
  { (JSJitGetterOp)get_onuserproximity },
5675
  { prototypes::id::Window },
5676
  { PrototypeTraits<prototypes::id::Window>::Depth },
5677
  JSJitInfo::Getter,
5678
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5679
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
5680
  false,  /* isInfallible. False in setters. */
5681
  false,  /* isMovable.  Not relevant for setters. */
5682
  false, /* isEliminatable.  Not relevant for setters. */
5683
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5684
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5685
  false,  /* isTypedMethod.  Only relevant for methods. */
5686
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5687
};
5688
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5689
static_assert(0 < 5, "There is no slot for us");
5690
static const JSJitInfo onuserproximity_setterinfo = {
5691
  { (JSJitGetterOp)set_onuserproximity },
5692
  { prototypes::id::Window },
5693
  { PrototypeTraits<prototypes::id::Window>::Depth },
5694
  JSJitInfo::Setter,
5695
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5696
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
5697
  false,  /* isInfallible. False in setters. */
5698
  false,  /* isMovable.  Not relevant for setters. */
5699
  false, /* isEliminatable.  Not relevant for setters. */
5700
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5701
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5702
  false,  /* isTypedMethod.  Only relevant for methods. */
5703
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5704
};
5705
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5706
static_assert(0 < 5, "There is no slot for us");
5707
5708
MOZ_CAN_RUN_SCRIPT static bool
5709
get_ondevicelight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
5710
0
{
5711
0
  AUTO_PROFILER_LABEL_FAST("get Window.ondevicelight", DOM, cx);
5712
0
5713
0
  RefPtr<EventHandlerNonNull> result(self->GetOndevicelight());
5714
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5715
0
  if (result) {
5716
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
5717
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
5718
0
      return false;
5719
0
    }
5720
0
    return true;
5721
0
  } else {
5722
0
    args.rval().setNull();
5723
0
    return true;
5724
0
  }
5725
0
}
5726
5727
MOZ_CAN_RUN_SCRIPT static bool
5728
set_ondevicelight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
5729
0
{
5730
0
  AUTO_PROFILER_LABEL_FAST("set Window.ondevicelight", DOM, cx);
5731
0
5732
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
5733
0
  if (args[0].isObject()) {
5734
0
    { // scope for tempRoot and tempGlobalRoot if needed
5735
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
5736
0
    }
5737
0
  } else {
5738
0
    arg0 = nullptr;
5739
0
  }
5740
0
  self->SetOndevicelight(Constify(arg0));
5741
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5742
0
5743
0
  return true;
5744
0
}
5745
5746
static const JSJitInfo ondevicelight_getterinfo = {
5747
  { (JSJitGetterOp)get_ondevicelight },
5748
  { prototypes::id::Window },
5749
  { PrototypeTraits<prototypes::id::Window>::Depth },
5750
  JSJitInfo::Getter,
5751
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5752
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
5753
  false,  /* isInfallible. False in setters. */
5754
  false,  /* isMovable.  Not relevant for setters. */
5755
  false, /* isEliminatable.  Not relevant for setters. */
5756
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5757
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5758
  false,  /* isTypedMethod.  Only relevant for methods. */
5759
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5760
};
5761
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5762
static_assert(0 < 5, "There is no slot for us");
5763
static const JSJitInfo ondevicelight_setterinfo = {
5764
  { (JSJitGetterOp)set_ondevicelight },
5765
  { prototypes::id::Window },
5766
  { PrototypeTraits<prototypes::id::Window>::Depth },
5767
  JSJitInfo::Setter,
5768
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5769
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
5770
  false,  /* isInfallible. False in setters. */
5771
  false,  /* isMovable.  Not relevant for setters. */
5772
  false, /* isEliminatable.  Not relevant for setters. */
5773
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5774
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5775
  false,  /* isTypedMethod.  Only relevant for methods. */
5776
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5777
};
5778
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5779
static_assert(0 < 5, "There is no slot for us");
5780
5781
MOZ_CAN_RUN_SCRIPT static bool
5782
dump(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
5783
0
{
5784
0
  AUTO_PROFILER_LABEL_FAST("Window.dump", DOM, cx);
5785
0
5786
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
5787
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.dump");
5788
0
  }
5789
0
  binding_detail::FakeString arg0;
5790
0
  if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
5791
0
    return false;
5792
0
  }
5793
0
  self->Dump(NonNullHelper(Constify(arg0)));
5794
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5795
0
  args.rval().setUndefined();
5796
0
  return true;
5797
0
}
5798
5799
static const JSJitInfo dump_methodinfo = {
5800
  { (JSJitGetterOp)dump },
5801
  { prototypes::id::Window },
5802
  { PrototypeTraits<prototypes::id::Window>::Depth },
5803
  JSJitInfo::Method,
5804
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5805
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
5806
  false,  /* isInfallible. False in setters. */
5807
  false,  /* isMovable.  Not relevant for setters. */
5808
  false, /* isEliminatable.  Not relevant for setters. */
5809
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5810
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5811
  false,  /* isTypedMethod.  Only relevant for methods. */
5812
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5813
};
5814
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5815
static_assert(0 < 5, "There is no slot for us");
5816
5817
MOZ_CAN_RUN_SCRIPT static bool
5818
setResizable(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
5819
0
{
5820
0
  AUTO_PROFILER_LABEL_FAST("Window.setResizable", DOM, cx);
5821
0
5822
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
5823
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.setResizable");
5824
0
  }
5825
0
  bool arg0;
5826
0
  if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
5827
0
    return false;
5828
0
  }
5829
0
  self->SetResizable(arg0);
5830
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5831
0
  args.rval().setUndefined();
5832
0
  return true;
5833
0
}
5834
5835
static const JSJitInfo setResizable_methodinfo = {
5836
  { (JSJitGetterOp)setResizable },
5837
  { prototypes::id::Window },
5838
  { PrototypeTraits<prototypes::id::Window>::Depth },
5839
  JSJitInfo::Method,
5840
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5841
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
5842
  false,  /* isInfallible. False in setters. */
5843
  false,  /* isMovable.  Not relevant for setters. */
5844
  false, /* isEliminatable.  Not relevant for setters. */
5845
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5846
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5847
  false,  /* isTypedMethod.  Only relevant for methods. */
5848
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5849
};
5850
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5851
static_assert(0 < 5, "There is no slot for us");
5852
5853
MOZ_CAN_RUN_SCRIPT static bool
5854
openDialog(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
5855
0
{
5856
0
  AUTO_PROFILER_LABEL_FAST("Window.openDialog", DOM, cx);
5857
0
5858
0
  binding_detail::FakeString arg0;
5859
0
  if (args.hasDefined(0)) {
5860
0
    if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
5861
0
      return false;
5862
0
    }
5863
0
  } else {
5864
0
    static const char16_t data[] = { 0 };
5865
0
    arg0.Rebind(data, ArrayLength(data) - 1);
5866
0
  }
5867
0
  binding_detail::FakeString arg1;
5868
0
  if (args.hasDefined(1)) {
5869
0
    if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
5870
0
      return false;
5871
0
    }
5872
0
  } else {
5873
0
    static const char16_t data[] = { 0 };
5874
0
    arg1.Rebind(data, ArrayLength(data) - 1);
5875
0
  }
5876
0
  binding_detail::FakeString arg2;
5877
0
  if (args.hasDefined(2)) {
5878
0
    if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2)) {
5879
0
      return false;
5880
0
    }
5881
0
  } else {
5882
0
    static const char16_t data[] = { 0 };
5883
0
    arg2.Rebind(data, ArrayLength(data) - 1);
5884
0
  }
5885
0
  AutoSequence<JS::Value> arg3;
5886
0
  SequenceRooter<JS::Value> arg3_holder(cx, &arg3);
5887
0
  if (args.length() > 3) {
5888
0
    if (!arg3.SetCapacity(args.length() - 3, mozilla::fallible)) {
5889
0
      JS_ReportOutOfMemory(cx);
5890
0
      return false;
5891
0
    }
5892
0
    for (uint32_t variadicArg = 3; variadicArg < args.length(); ++variadicArg) {
5893
0
      JS::Value& slot = *arg3.AppendElement(mozilla::fallible);
5894
0
      slot = args[variadicArg];
5895
0
    }
5896
0
  }
5897
0
  FastErrorResult rv;
5898
0
  auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->OpenDialog(cx, NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)), NonNullHelper(Constify(arg2)), Constify(arg3), rv)));
5899
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5900
0
    return false;
5901
0
  }
5902
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5903
0
  if (!result) {
5904
0
    args.rval().setNull();
5905
0
    return true;
5906
0
  }
5907
0
  if (!WrapObject(cx, result, args.rval())) {
5908
0
    return false;
5909
0
  }
5910
0
  return true;
5911
0
}
5912
5913
static const JSJitInfo openDialog_methodinfo = {
5914
  { (JSJitGetterOp)openDialog },
5915
  { prototypes::id::Window },
5916
  { PrototypeTraits<prototypes::id::Window>::Depth },
5917
  JSJitInfo::Method,
5918
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5919
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
5920
  false,  /* isInfallible. False in setters. */
5921
  false,  /* isMovable.  Not relevant for setters. */
5922
  false, /* isEliminatable.  Not relevant for setters. */
5923
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5924
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5925
  false,  /* isTypedMethod.  Only relevant for methods. */
5926
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5927
};
5928
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5929
static_assert(0 < 5, "There is no slot for us");
5930
5931
MOZ_CAN_RUN_SCRIPT static bool
5932
get_content(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
5933
0
{
5934
0
  AUTO_PROFILER_LABEL_FAST("get Window.content", DOM, cx);
5935
0
5936
0
  FastErrorResult rv;
5937
0
  JS::Rooted<JSObject*> result(cx);
5938
0
  self->GetContent(cx, &result, SystemCallerGuarantee(), rv);
5939
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5940
0
    return false;
5941
0
  }
5942
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
5943
0
  if (result) {
5944
0
                JS::ExposeObjectToActiveJS(result);
5945
0
              }
5946
0
              args.rval().setObjectOrNull(result);
5947
0
  if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
5948
0
    return false;
5949
0
  }
5950
0
  return true;
5951
0
}
5952
5953
MOZ_CAN_RUN_SCRIPT static bool
5954
set_content(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
5955
0
{
5956
0
  AUTO_PROFILER_LABEL_FAST("set Window.content", DOM, cx);
5957
0
5958
0
  return JS_DefineProperty(cx, obj, "content", args[0], JSPROP_ENUMERATE);
5959
0
}
5960
5961
static const JSJitInfo content_getterinfo = {
5962
  { (JSJitGetterOp)get_content },
5963
  { prototypes::id::Window },
5964
  { PrototypeTraits<prototypes::id::Window>::Depth },
5965
  JSJitInfo::Getter,
5966
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5967
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
5968
  false,  /* isInfallible. False in setters. */
5969
  false,  /* isMovable.  Not relevant for setters. */
5970
  false, /* isEliminatable.  Not relevant for setters. */
5971
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5972
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5973
  false,  /* isTypedMethod.  Only relevant for methods. */
5974
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5975
};
5976
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5977
static_assert(0 < 5, "There is no slot for us");
5978
static const JSJitInfo content_setterinfo = {
5979
  { (JSJitGetterOp)set_content },
5980
  { prototypes::id::Window },
5981
  { PrototypeTraits<prototypes::id::Window>::Depth },
5982
  JSJitInfo::Setter,
5983
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
5984
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
5985
  false,  /* isInfallible. False in setters. */
5986
  false,  /* isMovable.  Not relevant for setters. */
5987
  false, /* isEliminatable.  Not relevant for setters. */
5988
  false, /* isAlwaysInSlot.  Only relevant for getters. */
5989
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
5990
  false,  /* isTypedMethod.  Only relevant for methods. */
5991
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
5992
};
5993
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5994
static_assert(0 < 5, "There is no slot for us");
5995
5996
MOZ_CAN_RUN_SCRIPT static bool
5997
getInterface(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
5998
0
{
5999
0
  AUTO_PROFILER_LABEL_FAST("Window.getInterface", DOM, cx);
6000
0
6001
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
6002
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getInterface");
6003
0
  }
6004
0
  nsIJSID* arg0;
6005
0
  RefPtr<nsIJSID> arg0_holder;
6006
0
  if (args[0].isObject()) {
6007
0
    JS::Rooted<JSObject*> source(cx, &args[0].toObject());
6008
0
    if (NS_FAILED(UnwrapArg<nsIJSID>(cx, source, getter_AddRefs(arg0_holder)))) {
6009
0
      ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.getInterface", "IID");
6010
0
      return false;
6011
0
    }
6012
0
    MOZ_ASSERT(arg0_holder);
6013
0
    arg0 = arg0_holder;
6014
0
  } else {
6015
0
    ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.getInterface");
6016
0
    return false;
6017
0
  }
6018
0
  FastErrorResult rv;
6019
0
  JS::Rooted<JS::Value> result(cx);
6020
0
  self->GetInterface(cx, MOZ_KnownLive(NonNullHelper(arg0)), &result, rv);
6021
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6022
0
    return false;
6023
0
  }
6024
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6025
0
  JS::ExposeValueToActiveJS(result);
6026
0
  args.rval().set(result);
6027
0
  if (!MaybeWrapValue(cx, args.rval())) {
6028
0
    return false;
6029
0
  }
6030
0
  return true;
6031
0
}
6032
6033
static const JSJitInfo getInterface_methodinfo = {
6034
  { (JSJitGetterOp)getInterface },
6035
  { prototypes::id::Window },
6036
  { PrototypeTraits<prototypes::id::Window>::Depth },
6037
  JSJitInfo::Method,
6038
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6039
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
6040
  false,  /* isInfallible. False in setters. */
6041
  false,  /* isMovable.  Not relevant for setters. */
6042
  false, /* isEliminatable.  Not relevant for setters. */
6043
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6044
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6045
  false,  /* isTypedMethod.  Only relevant for methods. */
6046
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6047
};
6048
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6049
static_assert(0 < 5, "There is no slot for us");
6050
6051
MOZ_CAN_RUN_SCRIPT static bool
6052
get_windowRoot(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
6053
0
{
6054
0
  AUTO_PROFILER_LABEL_FAST("get Window.windowRoot", DOM, cx);
6055
0
6056
0
  FastErrorResult rv;
6057
0
  auto result(StrongOrRawPtr<nsWindowRoot>(self->GetWindowRoot(rv)));
6058
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6059
0
    return false;
6060
0
  }
6061
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6062
0
  if (!result) {
6063
0
    args.rval().setNull();
6064
0
    return true;
6065
0
  }
6066
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
6067
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
6068
0
    return false;
6069
0
  }
6070
0
  return true;
6071
0
}
6072
6073
static const JSJitInfo windowRoot_getterinfo = {
6074
  { (JSJitGetterOp)get_windowRoot },
6075
  { prototypes::id::Window },
6076
  { PrototypeTraits<prototypes::id::Window>::Depth },
6077
  JSJitInfo::Getter,
6078
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6079
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
6080
  false,  /* isInfallible. False in setters. */
6081
  false,  /* isMovable.  Not relevant for setters. */
6082
  false, /* isEliminatable.  Not relevant for setters. */
6083
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6084
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6085
  false,  /* isTypedMethod.  Only relevant for methods. */
6086
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6087
};
6088
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6089
static_assert(0 < 5, "There is no slot for us");
6090
6091
MOZ_CAN_RUN_SCRIPT static bool
6092
shouldReportForServiceWorkerScope(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
6093
0
{
6094
0
  AUTO_PROFILER_LABEL_FAST("Window.shouldReportForServiceWorkerScope", DOM, cx);
6095
0
6096
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
6097
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.shouldReportForServiceWorkerScope");
6098
0
  }
6099
0
  binding_detail::FakeString arg0;
6100
0
  if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
6101
0
    return false;
6102
0
  }
6103
0
  NormalizeUSVString(arg0);
6104
0
  bool result(self->ShouldReportForServiceWorkerScope(Constify(arg0)));
6105
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6106
0
  args.rval().setBoolean(result);
6107
0
  return true;
6108
0
}
6109
6110
static const JSJitInfo shouldReportForServiceWorkerScope_methodinfo = {
6111
  { (JSJitGetterOp)shouldReportForServiceWorkerScope },
6112
  { prototypes::id::Window },
6113
  { PrototypeTraits<prototypes::id::Window>::Depth },
6114
  JSJitInfo::Method,
6115
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6116
  JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
6117
  false,  /* isInfallible. False in setters. */
6118
  false,  /* isMovable.  Not relevant for setters. */
6119
  false, /* isEliminatable.  Not relevant for setters. */
6120
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6121
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6122
  false,  /* isTypedMethod.  Only relevant for methods. */
6123
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6124
};
6125
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6126
static_assert(0 < 5, "There is no slot for us");
6127
6128
MOZ_CAN_RUN_SCRIPT static bool
6129
get_InstallTrigger(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
6130
0
{
6131
0
  AUTO_PROFILER_LABEL_FAST("get Window.InstallTrigger", DOM, cx);
6132
0
6133
0
  auto result(StrongOrRawPtr<mozilla::dom::InstallTriggerImpl>(self->GetInstallTrigger()));
6134
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6135
0
  if (!result) {
6136
0
    args.rval().setNull();
6137
0
    return true;
6138
0
  }
6139
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
6140
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
6141
0
    return false;
6142
0
  }
6143
0
  return true;
6144
0
}
6145
6146
MOZ_CAN_RUN_SCRIPT static bool
6147
set_InstallTrigger(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
6148
0
{
6149
0
  AUTO_PROFILER_LABEL_FAST("set Window.InstallTrigger", DOM, cx);
6150
0
6151
0
  return JS_DefineProperty(cx, obj, "InstallTrigger", args[0], JSPROP_ENUMERATE);
6152
0
}
6153
6154
static const JSJitInfo InstallTrigger_getterinfo = {
6155
  { (JSJitGetterOp)get_InstallTrigger },
6156
  { prototypes::id::Window },
6157
  { PrototypeTraits<prototypes::id::Window>::Depth },
6158
  JSJitInfo::Getter,
6159
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6160
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
6161
  false,  /* isInfallible. False in setters. */
6162
  false,  /* isMovable.  Not relevant for setters. */
6163
  false, /* isEliminatable.  Not relevant for setters. */
6164
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6165
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6166
  false,  /* isTypedMethod.  Only relevant for methods. */
6167
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6168
};
6169
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6170
static_assert(0 < 5, "There is no slot for us");
6171
static const JSJitInfo InstallTrigger_setterinfo = {
6172
  { (JSJitGetterOp)set_InstallTrigger },
6173
  { prototypes::id::Window },
6174
  { PrototypeTraits<prototypes::id::Window>::Depth },
6175
  JSJitInfo::Setter,
6176
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6177
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
6178
  false,  /* isInfallible. False in setters. */
6179
  false,  /* isMovable.  Not relevant for setters. */
6180
  false, /* isEliminatable.  Not relevant for setters. */
6181
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6182
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6183
  false,  /* isTypedMethod.  Only relevant for methods. */
6184
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6185
};
6186
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6187
static_assert(0 < 5, "There is no slot for us");
6188
6189
MOZ_CAN_RUN_SCRIPT static bool
6190
get_windowUtils(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
6191
0
{
6192
0
  AUTO_PROFILER_LABEL_FAST("get Window.windowUtils", DOM, cx);
6193
0
6194
0
  FastErrorResult rv;
6195
0
  auto result(StrongOrRawPtr<nsIDOMWindowUtils>(self->GetWindowUtils(rv)));
6196
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6197
0
    return false;
6198
0
  }
6199
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6200
0
  if (!WrapObject(cx, result, &NS_GET_IID(nsIDOMWindowUtils), args.rval())) {
6201
0
    return false;
6202
0
  }
6203
0
  return true;
6204
0
}
6205
6206
static const JSJitInfo windowUtils_getterinfo = {
6207
  { (JSJitGetterOp)get_windowUtils },
6208
  { prototypes::id::Window },
6209
  { PrototypeTraits<prototypes::id::Window>::Depth },
6210
  JSJitInfo::Getter,
6211
  JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
6212
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
6213
  false,  /* isInfallible. False in setters. */
6214
  false,  /* isMovable.  Not relevant for setters. */
6215
  false, /* isEliminatable.  Not relevant for setters. */
6216
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6217
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6218
  false,  /* isTypedMethod.  Only relevant for methods. */
6219
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6220
};
6221
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6222
static_assert(0 < 5, "There is no slot for us");
6223
6224
MOZ_CAN_RUN_SCRIPT static bool
6225
get_sidebar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
6226
0
{
6227
0
  AUTO_PROFILER_LABEL_FAST("get Window.sidebar", DOM, cx);
6228
0
6229
0
  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
0
  }
6235
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6236
0
  SetDocumentAndPageUseCounter(obj, eUseCounter_Window_sidebar_getter);
6237
0
  if (!result.ToJSVal(cx, obj, args.rval())) {
6238
0
    return false;
6239
0
  }
6240
0
  return true;
6241
0
}
6242
6243
MOZ_CAN_RUN_SCRIPT static bool
6244
set_sidebar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
6245
0
{
6246
0
  AUTO_PROFILER_LABEL_FAST("set Window.sidebar", DOM, cx);
6247
0
6248
0
  return JS_DefineProperty(cx, obj, "sidebar", args[0], JSPROP_ENUMERATE);
6249
0
}
6250
6251
static const JSJitInfo sidebar_getterinfo = {
6252
  { (JSJitGetterOp)get_sidebar },
6253
  { prototypes::id::Window },
6254
  { PrototypeTraits<prototypes::id::Window>::Depth },
6255
  JSJitInfo::Getter,
6256
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6257
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
6258
  false,  /* isInfallible. False in setters. */
6259
  false,  /* isMovable.  Not relevant for setters. */
6260
  false, /* isEliminatable.  Not relevant for setters. */
6261
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6262
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6263
  false,  /* isTypedMethod.  Only relevant for methods. */
6264
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6265
};
6266
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6267
static_assert(0 < 5, "There is no slot for us");
6268
static const JSJitInfo sidebar_setterinfo = {
6269
  { (JSJitGetterOp)set_sidebar },
6270
  { prototypes::id::Window },
6271
  { PrototypeTraits<prototypes::id::Window>::Depth },
6272
  JSJitInfo::Setter,
6273
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6274
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
6275
  false,  /* isInfallible. False in setters. */
6276
  false,  /* isMovable.  Not relevant for setters. */
6277
  false, /* isEliminatable.  Not relevant for setters. */
6278
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6279
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6280
  false,  /* isTypedMethod.  Only relevant for methods. */
6281
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6282
};
6283
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6284
static_assert(0 < 5, "There is no slot for us");
6285
6286
MOZ_CAN_RUN_SCRIPT static bool
6287
get_windowState(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
6288
0
{
6289
0
  AUTO_PROFILER_LABEL_FAST("get Window.windowState", DOM, cx);
6290
0
6291
0
  uint16_t result(self->WindowState());
6292
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6293
0
  args.rval().setInt32(int32_t(result));
6294
0
  return true;
6295
0
}
6296
6297
static const JSJitInfo windowState_getterinfo = {
6298
  { (JSJitGetterOp)get_windowState },
6299
  { prototypes::id::Window },
6300
  { PrototypeTraits<prototypes::id::Window>::Depth },
6301
  JSJitInfo::Getter,
6302
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6303
  JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
6304
  true,  /* isInfallible. False in setters. */
6305
  false,  /* isMovable.  Not relevant for setters. */
6306
  false, /* isEliminatable.  Not relevant for setters. */
6307
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6308
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6309
  false,  /* isTypedMethod.  Only relevant for methods. */
6310
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6311
};
6312
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6313
static_assert(0 < 5, "There is no slot for us");
6314
6315
MOZ_CAN_RUN_SCRIPT static bool
6316
get_isFullyOccluded(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
6317
0
{
6318
0
  AUTO_PROFILER_LABEL_FAST("get Window.isFullyOccluded", DOM, cx);
6319
0
6320
0
  bool result(self->IsFullyOccluded());
6321
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6322
0
  args.rval().setBoolean(result);
6323
0
  return true;
6324
0
}
6325
6326
static const JSJitInfo isFullyOccluded_getterinfo = {
6327
  { (JSJitGetterOp)get_isFullyOccluded },
6328
  { prototypes::id::Window },
6329
  { PrototypeTraits<prototypes::id::Window>::Depth },
6330
  JSJitInfo::Getter,
6331
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6332
  JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
6333
  true,  /* isInfallible. False in setters. */
6334
  false,  /* isMovable.  Not relevant for setters. */
6335
  false, /* isEliminatable.  Not relevant for setters. */
6336
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6337
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6338
  false,  /* isTypedMethod.  Only relevant for methods. */
6339
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6340
};
6341
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6342
static_assert(0 < 5, "There is no slot for us");
6343
6344
MOZ_CAN_RUN_SCRIPT static bool
6345
get_browserDOMWindow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
6346
0
{
6347
0
  AUTO_PROFILER_LABEL_FAST("get Window.browserDOMWindow", DOM, cx);
6348
0
6349
0
  FastErrorResult rv;
6350
0
  auto result(StrongOrRawPtr<nsIBrowserDOMWindow>(self->GetBrowserDOMWindow(rv)));
6351
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6352
0
    return false;
6353
0
  }
6354
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6355
0
  if (!result) {
6356
0
    args.rval().setNull();
6357
0
    return true;
6358
0
  }
6359
0
  if (!WrapObject(cx, result, &NS_GET_IID(nsIBrowserDOMWindow), args.rval())) {
6360
0
    return false;
6361
0
  }
6362
0
  return true;
6363
0
}
6364
6365
MOZ_CAN_RUN_SCRIPT static bool
6366
set_browserDOMWindow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
6367
0
{
6368
0
  AUTO_PROFILER_LABEL_FAST("set Window.browserDOMWindow", DOM, cx);
6369
0
6370
0
  nsIBrowserDOMWindow* arg0;
6371
0
  RefPtr<nsIBrowserDOMWindow> arg0_holder;
6372
0
  if (args[0].isObject()) {
6373
0
    JS::Rooted<JSObject*> source(cx, &args[0].toObject());
6374
0
    if (NS_FAILED(UnwrapArg<nsIBrowserDOMWindow>(cx, source, getter_AddRefs(arg0_holder)))) {
6375
0
      ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Value being assigned to Window.browserDOMWindow", "nsIBrowserDOMWindow");
6376
0
      return false;
6377
0
    }
6378
0
    MOZ_ASSERT(arg0_holder);
6379
0
    arg0 = arg0_holder;
6380
0
  } else if (args[0].isNullOrUndefined()) {
6381
0
    arg0 = nullptr;
6382
0
  } else {
6383
0
    ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Value being assigned to Window.browserDOMWindow");
6384
0
    return false;
6385
0
  }
6386
0
  FastErrorResult rv;
6387
0
  self->SetBrowserDOMWindow(MOZ_KnownLive(Constify(arg0)), rv);
6388
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6389
0
    return false;
6390
0
  }
6391
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6392
0
6393
0
  return true;
6394
0
}
6395
6396
static const JSJitInfo browserDOMWindow_getterinfo = {
6397
  { (JSJitGetterOp)get_browserDOMWindow },
6398
  { prototypes::id::Window },
6399
  { PrototypeTraits<prototypes::id::Window>::Depth },
6400
  JSJitInfo::Getter,
6401
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6402
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
6403
  false,  /* isInfallible. False in setters. */
6404
  false,  /* isMovable.  Not relevant for setters. */
6405
  false, /* isEliminatable.  Not relevant for setters. */
6406
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6407
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6408
  false,  /* isTypedMethod.  Only relevant for methods. */
6409
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6410
};
6411
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6412
static_assert(0 < 5, "There is no slot for us");
6413
static const JSJitInfo browserDOMWindow_setterinfo = {
6414
  { (JSJitGetterOp)set_browserDOMWindow },
6415
  { prototypes::id::Window },
6416
  { PrototypeTraits<prototypes::id::Window>::Depth },
6417
  JSJitInfo::Setter,
6418
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6419
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
6420
  false,  /* isInfallible. False in setters. */
6421
  false,  /* isMovable.  Not relevant for setters. */
6422
  false, /* isEliminatable.  Not relevant for setters. */
6423
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6424
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6425
  false,  /* isTypedMethod.  Only relevant for methods. */
6426
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6427
};
6428
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6429
static_assert(0 < 5, "There is no slot for us");
6430
6431
MOZ_CAN_RUN_SCRIPT static bool
6432
getAttention(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
6433
0
{
6434
0
  AUTO_PROFILER_LABEL_FAST("Window.getAttention", DOM, cx);
6435
0
6436
0
  FastErrorResult rv;
6437
0
  self->GetAttention(rv);
6438
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6439
0
    return false;
6440
0
  }
6441
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6442
0
  args.rval().setUndefined();
6443
0
  return true;
6444
0
}
6445
6446
static const JSJitInfo getAttention_methodinfo = {
6447
  { (JSJitGetterOp)getAttention },
6448
  { prototypes::id::Window },
6449
  { PrototypeTraits<prototypes::id::Window>::Depth },
6450
  JSJitInfo::Method,
6451
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6452
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
6453
  false,  /* isInfallible. False in setters. */
6454
  false,  /* isMovable.  Not relevant for setters. */
6455
  false, /* isEliminatable.  Not relevant for setters. */
6456
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6457
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6458
  false,  /* isTypedMethod.  Only relevant for methods. */
6459
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6460
};
6461
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6462
static_assert(0 < 5, "There is no slot for us");
6463
6464
MOZ_CAN_RUN_SCRIPT static bool
6465
getAttentionWithCycleCount(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
6466
0
{
6467
0
  AUTO_PROFILER_LABEL_FAST("Window.getAttentionWithCycleCount", DOM, cx);
6468
0
6469
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
6470
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getAttentionWithCycleCount");
6471
0
  }
6472
0
  int32_t arg0;
6473
0
  if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
6474
0
    return false;
6475
0
  }
6476
0
  FastErrorResult rv;
6477
0
  self->GetAttentionWithCycleCount(arg0, rv);
6478
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6479
0
    return false;
6480
0
  }
6481
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6482
0
  args.rval().setUndefined();
6483
0
  return true;
6484
0
}
6485
6486
static const JSJitInfo getAttentionWithCycleCount_methodinfo = {
6487
  { (JSJitGetterOp)getAttentionWithCycleCount },
6488
  { prototypes::id::Window },
6489
  { PrototypeTraits<prototypes::id::Window>::Depth },
6490
  JSJitInfo::Method,
6491
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6492
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
6493
  false,  /* isInfallible. False in setters. */
6494
  false,  /* isMovable.  Not relevant for setters. */
6495
  false, /* isEliminatable.  Not relevant for setters. */
6496
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6497
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6498
  false,  /* isTypedMethod.  Only relevant for methods. */
6499
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6500
};
6501
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6502
static_assert(0 < 5, "There is no slot for us");
6503
6504
MOZ_CAN_RUN_SCRIPT static bool
6505
setCursor(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
6506
0
{
6507
0
  AUTO_PROFILER_LABEL_FAST("Window.setCursor", DOM, cx);
6508
0
6509
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
6510
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.setCursor");
6511
0
  }
6512
0
  binding_detail::FakeString arg0;
6513
0
  if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
6514
0
    return false;
6515
0
  }
6516
0
  FastErrorResult rv;
6517
0
  self->SetCursor(NonNullHelper(Constify(arg0)), rv);
6518
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6519
0
    return false;
6520
0
  }
6521
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6522
0
  args.rval().setUndefined();
6523
0
  return true;
6524
0
}
6525
6526
static const JSJitInfo setCursor_methodinfo = {
6527
  { (JSJitGetterOp)setCursor },
6528
  { prototypes::id::Window },
6529
  { PrototypeTraits<prototypes::id::Window>::Depth },
6530
  JSJitInfo::Method,
6531
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6532
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
6533
  false,  /* isInfallible. False in setters. */
6534
  false,  /* isMovable.  Not relevant for setters. */
6535
  false, /* isEliminatable.  Not relevant for setters. */
6536
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6537
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6538
  false,  /* isTypedMethod.  Only relevant for methods. */
6539
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6540
};
6541
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6542
static_assert(0 < 5, "There is no slot for us");
6543
6544
MOZ_CAN_RUN_SCRIPT static bool
6545
maximize(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
6546
0
{
6547
0
  AUTO_PROFILER_LABEL_FAST("Window.maximize", DOM, cx);
6548
0
6549
0
  self->Maximize();
6550
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6551
0
  args.rval().setUndefined();
6552
0
  return true;
6553
0
}
6554
6555
static const JSJitInfo maximize_methodinfo = {
6556
  { (JSJitGetterOp)maximize },
6557
  { prototypes::id::Window },
6558
  { PrototypeTraits<prototypes::id::Window>::Depth },
6559
  JSJitInfo::Method,
6560
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6561
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
6562
  true,  /* isInfallible. False in setters. */
6563
  false,  /* isMovable.  Not relevant for setters. */
6564
  false, /* isEliminatable.  Not relevant for setters. */
6565
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6566
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6567
  false,  /* isTypedMethod.  Only relevant for methods. */
6568
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6569
};
6570
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6571
static_assert(0 < 5, "There is no slot for us");
6572
6573
MOZ_CAN_RUN_SCRIPT static bool
6574
minimize(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
6575
0
{
6576
0
  AUTO_PROFILER_LABEL_FAST("Window.minimize", DOM, cx);
6577
0
6578
0
  self->Minimize();
6579
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6580
0
  args.rval().setUndefined();
6581
0
  return true;
6582
0
}
6583
6584
static const JSJitInfo minimize_methodinfo = {
6585
  { (JSJitGetterOp)minimize },
6586
  { prototypes::id::Window },
6587
  { PrototypeTraits<prototypes::id::Window>::Depth },
6588
  JSJitInfo::Method,
6589
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6590
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
6591
  true,  /* isInfallible. False in setters. */
6592
  false,  /* isMovable.  Not relevant for setters. */
6593
  false, /* isEliminatable.  Not relevant for setters. */
6594
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6595
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6596
  false,  /* isTypedMethod.  Only relevant for methods. */
6597
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6598
};
6599
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6600
static_assert(0 < 5, "There is no slot for us");
6601
6602
MOZ_CAN_RUN_SCRIPT static bool
6603
restore(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
6604
0
{
6605
0
  AUTO_PROFILER_LABEL_FAST("Window.restore", DOM, cx);
6606
0
6607
0
  self->Restore();
6608
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6609
0
  args.rval().setUndefined();
6610
0
  return true;
6611
0
}
6612
6613
static const JSJitInfo restore_methodinfo = {
6614
  { (JSJitGetterOp)restore },
6615
  { prototypes::id::Window },
6616
  { PrototypeTraits<prototypes::id::Window>::Depth },
6617
  JSJitInfo::Method,
6618
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6619
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
6620
  true,  /* isInfallible. False in setters. */
6621
  false,  /* isMovable.  Not relevant for setters. */
6622
  false, /* isEliminatable.  Not relevant for setters. */
6623
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6624
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6625
  false,  /* isTypedMethod.  Only relevant for methods. */
6626
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6627
};
6628
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6629
static_assert(0 < 5, "There is no slot for us");
6630
6631
MOZ_CAN_RUN_SCRIPT static bool
6632
notifyDefaultButtonLoaded(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
6633
0
{
6634
0
  AUTO_PROFILER_LABEL_FAST("Window.notifyDefaultButtonLoaded", DOM, cx);
6635
0
6636
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
6637
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.notifyDefaultButtonLoaded");
6638
0
  }
6639
0
  NonNull<mozilla::dom::Element> arg0;
6640
0
  if (args[0].isObject()) {
6641
0
    {
6642
0
      nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[0], arg0);
6643
0
      if (NS_FAILED(rv)) {
6644
0
        ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.notifyDefaultButtonLoaded", "Element");
6645
0
        return false;
6646
0
      }
6647
0
    }
6648
0
  } else {
6649
0
    ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.notifyDefaultButtonLoaded");
6650
0
    return false;
6651
0
  }
6652
0
  FastErrorResult rv;
6653
0
  self->NotifyDefaultButtonLoaded(MOZ_KnownLive(NonNullHelper(arg0)), rv);
6654
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6655
0
    return false;
6656
0
  }
6657
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6658
0
  args.rval().setUndefined();
6659
0
  return true;
6660
0
}
6661
6662
static const JSJitInfo notifyDefaultButtonLoaded_methodinfo = {
6663
  { (JSJitGetterOp)notifyDefaultButtonLoaded },
6664
  { prototypes::id::Window },
6665
  { PrototypeTraits<prototypes::id::Window>::Depth },
6666
  JSJitInfo::Method,
6667
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6668
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
6669
  false,  /* isInfallible. False in setters. */
6670
  false,  /* isMovable.  Not relevant for setters. */
6671
  false, /* isEliminatable.  Not relevant for setters. */
6672
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6673
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6674
  false,  /* isTypedMethod.  Only relevant for methods. */
6675
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6676
};
6677
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6678
static_assert(0 < 5, "There is no slot for us");
6679
6680
MOZ_CAN_RUN_SCRIPT static bool
6681
get_messageManager(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
6682
0
{
6683
0
  AUTO_PROFILER_LABEL_FAST("get Window.messageManager", DOM, cx);
6684
0
6685
0
  auto result(StrongOrRawPtr<mozilla::dom::ChromeMessageBroadcaster>(self->MessageManager()));
6686
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6687
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
6688
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
6689
0
    return false;
6690
0
  }
6691
0
  return true;
6692
0
}
6693
6694
static const JSJitInfo messageManager_getterinfo = {
6695
  { (JSJitGetterOp)get_messageManager },
6696
  { prototypes::id::Window },
6697
  { PrototypeTraits<prototypes::id::Window>::Depth },
6698
  JSJitInfo::Getter,
6699
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6700
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
6701
  false,  /* isInfallible. False in setters. */
6702
  false,  /* isMovable.  Not relevant for setters. */
6703
  false, /* isEliminatable.  Not relevant for setters. */
6704
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6705
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6706
  false,  /* isTypedMethod.  Only relevant for methods. */
6707
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6708
};
6709
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6710
static_assert(0 < 5, "There is no slot for us");
6711
6712
MOZ_CAN_RUN_SCRIPT static bool
6713
getGroupMessageManager(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
6714
0
{
6715
0
  AUTO_PROFILER_LABEL_FAST("Window.getGroupMessageManager", DOM, cx);
6716
0
6717
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
6718
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getGroupMessageManager");
6719
0
  }
6720
0
  binding_detail::FakeString arg0;
6721
0
  if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
6722
0
    return false;
6723
0
  }
6724
0
  auto result(StrongOrRawPtr<mozilla::dom::ChromeMessageBroadcaster>(self->GetGroupMessageManager(NonNullHelper(Constify(arg0)))));
6725
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6726
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
6727
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
6728
0
    return false;
6729
0
  }
6730
0
  return true;
6731
0
}
6732
6733
static const JSJitInfo getGroupMessageManager_methodinfo = {
6734
  { (JSJitGetterOp)getGroupMessageManager },
6735
  { prototypes::id::Window },
6736
  { PrototypeTraits<prototypes::id::Window>::Depth },
6737
  JSJitInfo::Method,
6738
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6739
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
6740
  false,  /* isInfallible. False in setters. */
6741
  false,  /* isMovable.  Not relevant for setters. */
6742
  false, /* isEliminatable.  Not relevant for setters. */
6743
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6744
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6745
  false,  /* isTypedMethod.  Only relevant for methods. */
6746
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6747
};
6748
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6749
static_assert(0 < 5, "There is no slot for us");
6750
6751
MOZ_CAN_RUN_SCRIPT static bool
6752
beginWindowMove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
6753
0
{
6754
0
  AUTO_PROFILER_LABEL_FAST("Window.beginWindowMove", DOM, cx);
6755
0
6756
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
6757
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.beginWindowMove");
6758
0
  }
6759
0
  NonNull<mozilla::dom::Event> arg0;
6760
0
  if (args[0].isObject()) {
6761
0
    {
6762
0
      nsresult rv = UnwrapObject<prototypes::id::Event, mozilla::dom::Event>(args[0], arg0);
6763
0
      if (NS_FAILED(rv)) {
6764
0
        ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.beginWindowMove", "Event");
6765
0
        return false;
6766
0
      }
6767
0
    }
6768
0
  } else {
6769
0
    ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.beginWindowMove");
6770
0
    return false;
6771
0
  }
6772
0
  FastErrorResult rv;
6773
0
  self->BeginWindowMove(MOZ_KnownLive(NonNullHelper(arg0)), rv);
6774
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6775
0
    return false;
6776
0
  }
6777
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6778
0
  args.rval().setUndefined();
6779
0
  return true;
6780
0
}
6781
6782
static const JSJitInfo beginWindowMove_methodinfo = {
6783
  { (JSJitGetterOp)beginWindowMove },
6784
  { prototypes::id::Window },
6785
  { PrototypeTraits<prototypes::id::Window>::Depth },
6786
  JSJitInfo::Method,
6787
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6788
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
6789
  false,  /* isInfallible. False in setters. */
6790
  false,  /* isMovable.  Not relevant for setters. */
6791
  false, /* isEliminatable.  Not relevant for setters. */
6792
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6793
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6794
  false,  /* isTypedMethod.  Only relevant for methods. */
6795
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6796
};
6797
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6798
static_assert(0 < 5, "There is no slot for us");
6799
6800
MOZ_CAN_RUN_SCRIPT static bool
6801
promiseDocumentFlushed(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
6802
0
{
6803
0
  AUTO_PROFILER_LABEL_FAST("Window.promiseDocumentFlushed", DOM, cx);
6804
0
6805
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
6806
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.promiseDocumentFlushed");
6807
0
  }
6808
0
  RootedCallback<OwningNonNull<binding_detail::FastPromiseDocumentFlushedCallback>> arg0(cx);
6809
0
  if (args[0].isObject()) {
6810
0
    if (JS::IsCallable(&args[0].toObject())) {
6811
0
    { // scope for tempRoot and tempGlobalRoot if needed
6812
0
      arg0 = new binding_detail::FastPromiseDocumentFlushedCallback(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
6813
0
    }
6814
0
    } else {
6815
0
      ThrowErrorMessage(cx, MSG_NOT_CALLABLE, "Argument 1 of Window.promiseDocumentFlushed");
6816
0
      return false;
6817
0
    }
6818
0
  } else {
6819
0
    ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.promiseDocumentFlushed");
6820
0
    return false;
6821
0
  }
6822
0
  FastErrorResult rv;
6823
0
  auto result(StrongOrRawPtr<Promise>(self->PromiseDocumentFlushed(NonNullHelper(arg0), rv)));
6824
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6825
0
    return false;
6826
0
  }
6827
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6828
0
  if (!ToJSValue(cx, result, args.rval())) {
6829
0
    return false;
6830
0
  }
6831
0
  return true;
6832
0
}
6833
6834
MOZ_CAN_RUN_SCRIPT static bool
6835
promiseDocumentFlushed_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
6836
0
{
6837
0
  bool ok = promiseDocumentFlushed(cx, obj, self, args);
6838
0
  if (ok) {
6839
0
    return true;
6840
0
  }
6841
0
  return ConvertExceptionToPromise(cx, args.rval());
6842
0
}
6843
6844
static const JSJitInfo promiseDocumentFlushed_methodinfo = {
6845
  { (JSJitGetterOp)promiseDocumentFlushed_promiseWrapper },
6846
  { prototypes::id::Window },
6847
  { PrototypeTraits<prototypes::id::Window>::Depth },
6848
  JSJitInfo::Method,
6849
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6850
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
6851
  false,  /* isInfallible. False in setters. */
6852
  false,  /* isMovable.  Not relevant for setters. */
6853
  false, /* isEliminatable.  Not relevant for setters. */
6854
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6855
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6856
  false,  /* isTypedMethod.  Only relevant for methods. */
6857
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6858
};
6859
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6860
static_assert(0 < 5, "There is no slot for us");
6861
6862
MOZ_CAN_RUN_SCRIPT static bool
6863
get_isChromeWindow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
6864
0
{
6865
0
  AUTO_PROFILER_LABEL_FAST("get Window.isChromeWindow", DOM, cx);
6866
0
6867
0
  bool result(self->IsChromeWindow());
6868
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6869
0
  args.rval().setBoolean(result);
6870
0
  return true;
6871
0
}
6872
6873
static const JSJitInfo isChromeWindow_getterinfo = {
6874
  { (JSJitGetterOp)get_isChromeWindow },
6875
  { prototypes::id::Window },
6876
  { PrototypeTraits<prototypes::id::Window>::Depth },
6877
  JSJitInfo::Getter,
6878
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6879
  JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
6880
  true,  /* isInfallible. False in setters. */
6881
  false,  /* isMovable.  Not relevant for setters. */
6882
  false, /* isEliminatable.  Not relevant for setters. */
6883
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6884
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6885
  false,  /* isTypedMethod.  Only relevant for methods. */
6886
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6887
};
6888
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6889
static_assert(0 < 5, "There is no slot for us");
6890
6891
MOZ_CAN_RUN_SCRIPT static bool
6892
get_onvrdisplayconnect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
6893
0
{
6894
0
  AUTO_PROFILER_LABEL_FAST("get Window.onvrdisplayconnect", DOM, cx);
6895
0
6896
0
  RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplayconnect());
6897
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6898
0
  if (result) {
6899
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
6900
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
6901
0
      return false;
6902
0
    }
6903
0
    return true;
6904
0
  } else {
6905
0
    args.rval().setNull();
6906
0
    return true;
6907
0
  }
6908
0
}
6909
6910
MOZ_CAN_RUN_SCRIPT static bool
6911
set_onvrdisplayconnect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
6912
0
{
6913
0
  AUTO_PROFILER_LABEL_FAST("set Window.onvrdisplayconnect", DOM, cx);
6914
0
6915
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
6916
0
  if (args[0].isObject()) {
6917
0
    { // scope for tempRoot and tempGlobalRoot if needed
6918
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
6919
0
    }
6920
0
  } else {
6921
0
    arg0 = nullptr;
6922
0
  }
6923
0
  self->SetOnvrdisplayconnect(Constify(arg0));
6924
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6925
0
6926
0
  return true;
6927
0
}
6928
6929
static const JSJitInfo onvrdisplayconnect_getterinfo = {
6930
  { (JSJitGetterOp)get_onvrdisplayconnect },
6931
  { prototypes::id::Window },
6932
  { PrototypeTraits<prototypes::id::Window>::Depth },
6933
  JSJitInfo::Getter,
6934
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6935
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
6936
  false,  /* isInfallible. False in setters. */
6937
  false,  /* isMovable.  Not relevant for setters. */
6938
  false, /* isEliminatable.  Not relevant for setters. */
6939
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6940
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6941
  false,  /* isTypedMethod.  Only relevant for methods. */
6942
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6943
};
6944
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6945
static_assert(0 < 5, "There is no slot for us");
6946
static const JSJitInfo onvrdisplayconnect_setterinfo = {
6947
  { (JSJitGetterOp)set_onvrdisplayconnect },
6948
  { prototypes::id::Window },
6949
  { PrototypeTraits<prototypes::id::Window>::Depth },
6950
  JSJitInfo::Setter,
6951
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
6952
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
6953
  false,  /* isInfallible. False in setters. */
6954
  false,  /* isMovable.  Not relevant for setters. */
6955
  false, /* isEliminatable.  Not relevant for setters. */
6956
  false, /* isAlwaysInSlot.  Only relevant for getters. */
6957
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
6958
  false,  /* isTypedMethod.  Only relevant for methods. */
6959
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
6960
};
6961
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6962
static_assert(0 < 5, "There is no slot for us");
6963
6964
MOZ_CAN_RUN_SCRIPT static bool
6965
get_onvrdisplaydisconnect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
6966
0
{
6967
0
  AUTO_PROFILER_LABEL_FAST("get Window.onvrdisplaydisconnect", DOM, cx);
6968
0
6969
0
  RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplaydisconnect());
6970
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6971
0
  if (result) {
6972
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
6973
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
6974
0
      return false;
6975
0
    }
6976
0
    return true;
6977
0
  } else {
6978
0
    args.rval().setNull();
6979
0
    return true;
6980
0
  }
6981
0
}
6982
6983
MOZ_CAN_RUN_SCRIPT static bool
6984
set_onvrdisplaydisconnect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
6985
0
{
6986
0
  AUTO_PROFILER_LABEL_FAST("set Window.onvrdisplaydisconnect", DOM, cx);
6987
0
6988
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
6989
0
  if (args[0].isObject()) {
6990
0
    { // scope for tempRoot and tempGlobalRoot if needed
6991
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
6992
0
    }
6993
0
  } else {
6994
0
    arg0 = nullptr;
6995
0
  }
6996
0
  self->SetOnvrdisplaydisconnect(Constify(arg0));
6997
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
6998
0
6999
0
  return true;
7000
0
}
7001
7002
static const JSJitInfo onvrdisplaydisconnect_getterinfo = {
7003
  { (JSJitGetterOp)get_onvrdisplaydisconnect },
7004
  { prototypes::id::Window },
7005
  { PrototypeTraits<prototypes::id::Window>::Depth },
7006
  JSJitInfo::Getter,
7007
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7008
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
7009
  false,  /* isInfallible. False in setters. */
7010
  false,  /* isMovable.  Not relevant for setters. */
7011
  false, /* isEliminatable.  Not relevant for setters. */
7012
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7013
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7014
  false,  /* isTypedMethod.  Only relevant for methods. */
7015
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7016
};
7017
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7018
static_assert(0 < 5, "There is no slot for us");
7019
static const JSJitInfo onvrdisplaydisconnect_setterinfo = {
7020
  { (JSJitGetterOp)set_onvrdisplaydisconnect },
7021
  { prototypes::id::Window },
7022
  { PrototypeTraits<prototypes::id::Window>::Depth },
7023
  JSJitInfo::Setter,
7024
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7025
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
7026
  false,  /* isInfallible. False in setters. */
7027
  false,  /* isMovable.  Not relevant for setters. */
7028
  false, /* isEliminatable.  Not relevant for setters. */
7029
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7030
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7031
  false,  /* isTypedMethod.  Only relevant for methods. */
7032
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7033
};
7034
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7035
static_assert(0 < 5, "There is no slot for us");
7036
7037
MOZ_CAN_RUN_SCRIPT static bool
7038
get_onvrdisplayactivate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
7039
0
{
7040
0
  AUTO_PROFILER_LABEL_FAST("get Window.onvrdisplayactivate", DOM, cx);
7041
0
7042
0
  RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplayactivate());
7043
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7044
0
  if (result) {
7045
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
7046
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7047
0
      return false;
7048
0
    }
7049
0
    return true;
7050
0
  } else {
7051
0
    args.rval().setNull();
7052
0
    return true;
7053
0
  }
7054
0
}
7055
7056
MOZ_CAN_RUN_SCRIPT static bool
7057
set_onvrdisplayactivate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
7058
0
{
7059
0
  AUTO_PROFILER_LABEL_FAST("set Window.onvrdisplayactivate", DOM, cx);
7060
0
7061
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7062
0
  if (args[0].isObject()) {
7063
0
    { // scope for tempRoot and tempGlobalRoot if needed
7064
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
7065
0
    }
7066
0
  } else {
7067
0
    arg0 = nullptr;
7068
0
  }
7069
0
  self->SetOnvrdisplayactivate(Constify(arg0));
7070
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7071
0
7072
0
  return true;
7073
0
}
7074
7075
static const JSJitInfo onvrdisplayactivate_getterinfo = {
7076
  { (JSJitGetterOp)get_onvrdisplayactivate },
7077
  { prototypes::id::Window },
7078
  { PrototypeTraits<prototypes::id::Window>::Depth },
7079
  JSJitInfo::Getter,
7080
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7081
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
7082
  false,  /* isInfallible. False in setters. */
7083
  false,  /* isMovable.  Not relevant for setters. */
7084
  false, /* isEliminatable.  Not relevant for setters. */
7085
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7086
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7087
  false,  /* isTypedMethod.  Only relevant for methods. */
7088
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7089
};
7090
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7091
static_assert(0 < 5, "There is no slot for us");
7092
static const JSJitInfo onvrdisplayactivate_setterinfo = {
7093
  { (JSJitGetterOp)set_onvrdisplayactivate },
7094
  { prototypes::id::Window },
7095
  { PrototypeTraits<prototypes::id::Window>::Depth },
7096
  JSJitInfo::Setter,
7097
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7098
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
7099
  false,  /* isInfallible. False in setters. */
7100
  false,  /* isMovable.  Not relevant for setters. */
7101
  false, /* isEliminatable.  Not relevant for setters. */
7102
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7103
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7104
  false,  /* isTypedMethod.  Only relevant for methods. */
7105
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7106
};
7107
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7108
static_assert(0 < 5, "There is no slot for us");
7109
7110
MOZ_CAN_RUN_SCRIPT static bool
7111
get_onvrdisplaydeactivate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
7112
0
{
7113
0
  AUTO_PROFILER_LABEL_FAST("get Window.onvrdisplaydeactivate", DOM, cx);
7114
0
7115
0
  RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplaydeactivate());
7116
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7117
0
  if (result) {
7118
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
7119
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7120
0
      return false;
7121
0
    }
7122
0
    return true;
7123
0
  } else {
7124
0
    args.rval().setNull();
7125
0
    return true;
7126
0
  }
7127
0
}
7128
7129
MOZ_CAN_RUN_SCRIPT static bool
7130
set_onvrdisplaydeactivate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
7131
0
{
7132
0
  AUTO_PROFILER_LABEL_FAST("set Window.onvrdisplaydeactivate", DOM, cx);
7133
0
7134
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7135
0
  if (args[0].isObject()) {
7136
0
    { // scope for tempRoot and tempGlobalRoot if needed
7137
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
7138
0
    }
7139
0
  } else {
7140
0
    arg0 = nullptr;
7141
0
  }
7142
0
  self->SetOnvrdisplaydeactivate(Constify(arg0));
7143
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7144
0
7145
0
  return true;
7146
0
}
7147
7148
static const JSJitInfo onvrdisplaydeactivate_getterinfo = {
7149
  { (JSJitGetterOp)get_onvrdisplaydeactivate },
7150
  { prototypes::id::Window },
7151
  { PrototypeTraits<prototypes::id::Window>::Depth },
7152
  JSJitInfo::Getter,
7153
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7154
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
7155
  false,  /* isInfallible. False in setters. */
7156
  false,  /* isMovable.  Not relevant for setters. */
7157
  false, /* isEliminatable.  Not relevant for setters. */
7158
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7159
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7160
  false,  /* isTypedMethod.  Only relevant for methods. */
7161
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7162
};
7163
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7164
static_assert(0 < 5, "There is no slot for us");
7165
static const JSJitInfo onvrdisplaydeactivate_setterinfo = {
7166
  { (JSJitGetterOp)set_onvrdisplaydeactivate },
7167
  { prototypes::id::Window },
7168
  { PrototypeTraits<prototypes::id::Window>::Depth },
7169
  JSJitInfo::Setter,
7170
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7171
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
7172
  false,  /* isInfallible. False in setters. */
7173
  false,  /* isMovable.  Not relevant for setters. */
7174
  false, /* isEliminatable.  Not relevant for setters. */
7175
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7176
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7177
  false,  /* isTypedMethod.  Only relevant for methods. */
7178
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7179
};
7180
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7181
static_assert(0 < 5, "There is no slot for us");
7182
7183
MOZ_CAN_RUN_SCRIPT static bool
7184
get_onvrdisplaypresentchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
7185
0
{
7186
0
  AUTO_PROFILER_LABEL_FAST("get Window.onvrdisplaypresentchange", DOM, cx);
7187
0
7188
0
  RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplaypresentchange());
7189
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7190
0
  if (result) {
7191
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
7192
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7193
0
      return false;
7194
0
    }
7195
0
    return true;
7196
0
  } else {
7197
0
    args.rval().setNull();
7198
0
    return true;
7199
0
  }
7200
0
}
7201
7202
MOZ_CAN_RUN_SCRIPT static bool
7203
set_onvrdisplaypresentchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
7204
0
{
7205
0
  AUTO_PROFILER_LABEL_FAST("set Window.onvrdisplaypresentchange", DOM, cx);
7206
0
7207
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7208
0
  if (args[0].isObject()) {
7209
0
    { // scope for tempRoot and tempGlobalRoot if needed
7210
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
7211
0
    }
7212
0
  } else {
7213
0
    arg0 = nullptr;
7214
0
  }
7215
0
  self->SetOnvrdisplaypresentchange(Constify(arg0));
7216
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7217
0
7218
0
  return true;
7219
0
}
7220
7221
static const JSJitInfo onvrdisplaypresentchange_getterinfo = {
7222
  { (JSJitGetterOp)get_onvrdisplaypresentchange },
7223
  { prototypes::id::Window },
7224
  { PrototypeTraits<prototypes::id::Window>::Depth },
7225
  JSJitInfo::Getter,
7226
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7227
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
7228
  false,  /* isInfallible. False in setters. */
7229
  false,  /* isMovable.  Not relevant for setters. */
7230
  false, /* isEliminatable.  Not relevant for setters. */
7231
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7232
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7233
  false,  /* isTypedMethod.  Only relevant for methods. */
7234
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7235
};
7236
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7237
static_assert(0 < 5, "There is no slot for us");
7238
static const JSJitInfo onvrdisplaypresentchange_setterinfo = {
7239
  { (JSJitGetterOp)set_onvrdisplaypresentchange },
7240
  { prototypes::id::Window },
7241
  { PrototypeTraits<prototypes::id::Window>::Depth },
7242
  JSJitInfo::Setter,
7243
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7244
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
7245
  false,  /* isInfallible. False in setters. */
7246
  false,  /* isMovable.  Not relevant for setters. */
7247
  false, /* isEliminatable.  Not relevant for setters. */
7248
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7249
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7250
  false,  /* isTypedMethod.  Only relevant for methods. */
7251
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7252
};
7253
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7254
static_assert(0 < 5, "There is no slot for us");
7255
7256
MOZ_CAN_RUN_SCRIPT static bool
7257
get_paintWorklet(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
7258
0
{
7259
0
  AUTO_PROFILER_LABEL_FAST("get Window.paintWorklet", DOM, cx);
7260
0
7261
0
  FastErrorResult rv;
7262
0
  auto result(StrongOrRawPtr<mozilla::dom::Worklet>(self->GetPaintWorklet(rv)));
7263
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
7264
0
    return false;
7265
0
  }
7266
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7267
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
7268
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
7269
0
    return false;
7270
0
  }
7271
0
  return true;
7272
0
}
7273
7274
static const JSJitInfo paintWorklet_getterinfo = {
7275
  { (JSJitGetterOp)get_paintWorklet },
7276
  { prototypes::id::Window },
7277
  { PrototypeTraits<prototypes::id::Window>::Depth },
7278
  JSJitInfo::Getter,
7279
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7280
  JSVAL_TYPE_OBJECT,  /* 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
MOZ_CAN_RUN_SCRIPT static bool
7293
requestIdleCallback(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
7294
0
{
7295
0
  AUTO_PROFILER_LABEL_FAST("Window.requestIdleCallback", DOM, cx);
7296
0
7297
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
7298
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.requestIdleCallback");
7299
0
  }
7300
0
  RootedCallback<OwningNonNull<binding_detail::FastIdleRequestCallback>> arg0(cx);
7301
0
  if (args[0].isObject()) {
7302
0
    if (JS::IsCallable(&args[0].toObject())) {
7303
0
    { // scope for tempRoot and tempGlobalRoot if needed
7304
0
      arg0 = new binding_detail::FastIdleRequestCallback(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
7305
0
    }
7306
0
    } else {
7307
0
      ThrowErrorMessage(cx, MSG_NOT_CALLABLE, "Argument 1 of Window.requestIdleCallback");
7308
0
      return false;
7309
0
    }
7310
0
  } else {
7311
0
    ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.requestIdleCallback");
7312
0
    return false;
7313
0
  }
7314
0
  binding_detail::FastIdleRequestOptions arg1;
7315
0
  if (!arg1.Init(cx, (args.hasDefined(1)) ? args[1] : JS::NullHandleValue,  "Argument 2 of Window.requestIdleCallback", false)) {
7316
0
    return false;
7317
0
  }
7318
0
  FastErrorResult rv;
7319
0
  uint32_t result(self->RequestIdleCallback(cx, NonNullHelper(arg0), Constify(arg1), rv));
7320
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
7321
0
    return false;
7322
0
  }
7323
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7324
0
  args.rval().setNumber(result);
7325
0
  return true;
7326
0
}
7327
7328
static const JSJitInfo requestIdleCallback_methodinfo = {
7329
  { (JSJitGetterOp)requestIdleCallback },
7330
  { prototypes::id::Window },
7331
  { PrototypeTraits<prototypes::id::Window>::Depth },
7332
  JSJitInfo::Method,
7333
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7334
  JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
7335
  false,  /* isInfallible. False in setters. */
7336
  false,  /* isMovable.  Not relevant for setters. */
7337
  false, /* isEliminatable.  Not relevant for setters. */
7338
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7339
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7340
  false,  /* isTypedMethod.  Only relevant for methods. */
7341
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7342
};
7343
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7344
static_assert(0 < 5, "There is no slot for us");
7345
7346
MOZ_CAN_RUN_SCRIPT static bool
7347
cancelIdleCallback(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
7348
0
{
7349
0
  AUTO_PROFILER_LABEL_FAST("Window.cancelIdleCallback", DOM, cx);
7350
0
7351
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
7352
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.cancelIdleCallback");
7353
0
  }
7354
0
  uint32_t arg0;
7355
0
  if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
7356
0
    return false;
7357
0
  }
7358
0
  self->CancelIdleCallback(arg0);
7359
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7360
0
  args.rval().setUndefined();
7361
0
  return true;
7362
0
}
7363
7364
static const JSJitInfo cancelIdleCallback_methodinfo = {
7365
  { (JSJitGetterOp)cancelIdleCallback },
7366
  { prototypes::id::Window },
7367
  { PrototypeTraits<prototypes::id::Window>::Depth },
7368
  JSJitInfo::Method,
7369
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7370
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
7371
  false,  /* isInfallible. False in setters. */
7372
  false,  /* isMovable.  Not relevant for setters. */
7373
  false, /* isEliminatable.  Not relevant for setters. */
7374
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7375
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7376
  false,  /* isTypedMethod.  Only relevant for methods. */
7377
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7378
};
7379
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7380
static_assert(0 < 5, "There is no slot for us");
7381
7382
MOZ_CAN_RUN_SCRIPT static bool
7383
getRegionalPrefsLocales(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
7384
0
{
7385
0
  AUTO_PROFILER_LABEL_FAST("Window.getRegionalPrefsLocales", DOM, cx);
7386
0
7387
0
  nsTArray<nsString> result;
7388
0
  self->GetRegionalPrefsLocales(result);
7389
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7390
0
7391
0
  uint32_t length = result.Length();
7392
0
  JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
7393
0
  if (!returnArray) {
7394
0
    return false;
7395
0
  }
7396
0
  // Scope for 'tmp'
7397
0
  {
7398
0
    JS::Rooted<JS::Value> tmp(cx);
7399
0
    for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
7400
0
      // Control block to let us common up the JS_DefineElement calls when there
7401
0
      // are different ways to succeed at wrapping the object.
7402
0
      do {
7403
0
        if (!xpc::NonVoidStringToJsval(cx, result[sequenceIdx0], &tmp)) {
7404
0
          return false;
7405
0
        }
7406
0
        break;
7407
0
      } while (false);
7408
0
      if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
7409
0
                            JSPROP_ENUMERATE)) {
7410
0
        return false;
7411
0
      }
7412
0
    }
7413
0
  }
7414
0
  args.rval().setObject(*returnArray);
7415
0
  return true;
7416
0
}
7417
7418
static const JSJitInfo getRegionalPrefsLocales_methodinfo = {
7419
  { (JSJitGetterOp)getRegionalPrefsLocales },
7420
  { prototypes::id::Window },
7421
  { PrototypeTraits<prototypes::id::Window>::Depth },
7422
  JSJitInfo::Method,
7423
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7424
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
7425
  false,  /* isInfallible. False in setters. */
7426
  false,  /* isMovable.  Not relevant for setters. */
7427
  false, /* isEliminatable.  Not relevant for setters. */
7428
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7429
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7430
  false,  /* isTypedMethod.  Only relevant for methods. */
7431
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7432
};
7433
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7434
static_assert(0 < 5, "There is no slot for us");
7435
7436
MOZ_CAN_RUN_SCRIPT static bool
7437
get_intlUtils(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
7438
0
{
7439
0
  AUTO_PROFILER_LABEL_FAST("get Window.intlUtils", DOM, cx);
7440
0
7441
0
  FastErrorResult rv;
7442
0
  auto result(StrongOrRawPtr<mozilla::dom::IntlUtils>(self->GetIntlUtils(rv)));
7443
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
7444
0
    return false;
7445
0
  }
7446
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7447
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
7448
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
7449
0
    return false;
7450
0
  }
7451
0
  return true;
7452
0
}
7453
7454
static const JSJitInfo intlUtils_getterinfo = {
7455
  { (JSJitGetterOp)get_intlUtils },
7456
  { prototypes::id::Window },
7457
  { PrototypeTraits<prototypes::id::Window>::Depth },
7458
  JSJitInfo::Getter,
7459
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7460
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
7461
  false,  /* isInfallible. False in setters. */
7462
  false,  /* isMovable.  Not relevant for setters. */
7463
  false, /* isEliminatable.  Not relevant for setters. */
7464
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7465
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7466
  false,  /* isTypedMethod.  Only relevant for methods. */
7467
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7468
};
7469
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7470
static_assert(0 < 5, "There is no slot for us");
7471
7472
MOZ_CAN_RUN_SCRIPT static bool
7473
get_visualViewport(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
7474
0
{
7475
0
  AUTO_PROFILER_LABEL_FAST("get Window.visualViewport", DOM, cx);
7476
0
7477
0
  auto result(StrongOrRawPtr<mozilla::dom::VisualViewport>(self->VisualViewport()));
7478
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7479
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
7480
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
7481
0
    return false;
7482
0
  }
7483
0
  return true;
7484
0
}
7485
7486
MOZ_CAN_RUN_SCRIPT static bool
7487
set_visualViewport(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
7488
0
{
7489
0
  AUTO_PROFILER_LABEL_FAST("set Window.visualViewport", DOM, cx);
7490
0
7491
0
  return JS_DefineProperty(cx, obj, "visualViewport", args[0], JSPROP_ENUMERATE);
7492
0
}
7493
7494
static const JSJitInfo visualViewport_getterinfo = {
7495
  { (JSJitGetterOp)get_visualViewport },
7496
  { prototypes::id::Window },
7497
  { PrototypeTraits<prototypes::id::Window>::Depth },
7498
  JSJitInfo::Getter,
7499
  JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
7500
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
7501
  false,  /* isInfallible. False in setters. */
7502
  true,  /* isMovable.  Not relevant for setters. */
7503
  true, /* isEliminatable.  Not relevant for setters. */
7504
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7505
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7506
  false,  /* isTypedMethod.  Only relevant for methods. */
7507
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7508
};
7509
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7510
static_assert(0 < 5, "There is no slot for us");
7511
static const JSJitInfo visualViewport_setterinfo = {
7512
  { (JSJitGetterOp)set_visualViewport },
7513
  { prototypes::id::Window },
7514
  { PrototypeTraits<prototypes::id::Window>::Depth },
7515
  JSJitInfo::Setter,
7516
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7517
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
7518
  false,  /* isInfallible. False in setters. */
7519
  false,  /* isMovable.  Not relevant for setters. */
7520
  false, /* isEliminatable.  Not relevant for setters. */
7521
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7522
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7523
  false,  /* isTypedMethod.  Only relevant for methods. */
7524
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7525
};
7526
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7527
static_assert(0 < 5, "There is no slot for us");
7528
7529
MOZ_CAN_RUN_SCRIPT static bool
7530
get_crypto(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
7531
0
{
7532
0
  AUTO_PROFILER_LABEL_FAST("get Window.crypto", DOM, cx);
7533
0
7534
0
  FastErrorResult rv;
7535
0
  auto result(StrongOrRawPtr<mozilla::dom::Crypto>(self->GetCrypto(rv)));
7536
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
7537
0
    return false;
7538
0
  }
7539
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7540
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
7541
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
7542
0
    return false;
7543
0
  }
7544
0
  return true;
7545
0
}
7546
7547
static const JSJitInfo crypto_getterinfo = {
7548
  { (JSJitGetterOp)get_crypto },
7549
  { prototypes::id::Window },
7550
  { PrototypeTraits<prototypes::id::Window>::Depth },
7551
  JSJitInfo::Getter,
7552
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7553
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
7554
  false,  /* isInfallible. False in setters. */
7555
  false,  /* isMovable.  Not relevant for setters. */
7556
  false, /* isEliminatable.  Not relevant for setters. */
7557
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7558
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7559
  false,  /* isTypedMethod.  Only relevant for methods. */
7560
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7561
};
7562
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7563
static_assert(0 < 5, "There is no slot for us");
7564
7565
MOZ_CAN_RUN_SCRIPT static bool
7566
get_onabort(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
7567
0
{
7568
0
  AUTO_PROFILER_LABEL_FAST("get Window.onabort", DOM, cx);
7569
0
7570
0
  RefPtr<EventHandlerNonNull> result(self->GetOnabort());
7571
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7572
0
  if (result) {
7573
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
7574
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7575
0
      return false;
7576
0
    }
7577
0
    return true;
7578
0
  } else {
7579
0
    args.rval().setNull();
7580
0
    return true;
7581
0
  }
7582
0
}
7583
7584
MOZ_CAN_RUN_SCRIPT static bool
7585
set_onabort(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
7586
0
{
7587
0
  AUTO_PROFILER_LABEL_FAST("set Window.onabort", DOM, cx);
7588
0
7589
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7590
0
  if (args[0].isObject()) {
7591
0
    { // scope for tempRoot and tempGlobalRoot if needed
7592
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
7593
0
    }
7594
0
  } else {
7595
0
    arg0 = nullptr;
7596
0
  }
7597
0
  self->SetOnabort(Constify(arg0));
7598
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7599
0
7600
0
  return true;
7601
0
}
7602
7603
static const JSJitInfo onabort_getterinfo = {
7604
  { (JSJitGetterOp)get_onabort },
7605
  { prototypes::id::Window },
7606
  { PrototypeTraits<prototypes::id::Window>::Depth },
7607
  JSJitInfo::Getter,
7608
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7609
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
7610
  false,  /* isInfallible. False in setters. */
7611
  false,  /* isMovable.  Not relevant for setters. */
7612
  false, /* isEliminatable.  Not relevant for setters. */
7613
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7614
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7615
  false,  /* isTypedMethod.  Only relevant for methods. */
7616
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7617
};
7618
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7619
static_assert(0 < 5, "There is no slot for us");
7620
static const JSJitInfo onabort_setterinfo = {
7621
  { (JSJitGetterOp)set_onabort },
7622
  { prototypes::id::Window },
7623
  { PrototypeTraits<prototypes::id::Window>::Depth },
7624
  JSJitInfo::Setter,
7625
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7626
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
7627
  false,  /* isInfallible. False in setters. */
7628
  false,  /* isMovable.  Not relevant for setters. */
7629
  false, /* isEliminatable.  Not relevant for setters. */
7630
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7631
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7632
  false,  /* isTypedMethod.  Only relevant for methods. */
7633
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7634
};
7635
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7636
static_assert(0 < 5, "There is no slot for us");
7637
7638
MOZ_CAN_RUN_SCRIPT static bool
7639
get_onblur(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
7640
0
{
7641
0
  AUTO_PROFILER_LABEL_FAST("get Window.onblur", DOM, cx);
7642
0
7643
0
  RefPtr<EventHandlerNonNull> result(self->GetOnblur());
7644
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7645
0
  if (result) {
7646
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
7647
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7648
0
      return false;
7649
0
    }
7650
0
    return true;
7651
0
  } else {
7652
0
    args.rval().setNull();
7653
0
    return true;
7654
0
  }
7655
0
}
7656
7657
MOZ_CAN_RUN_SCRIPT static bool
7658
set_onblur(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
7659
0
{
7660
0
  AUTO_PROFILER_LABEL_FAST("set Window.onblur", DOM, cx);
7661
0
7662
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7663
0
  if (args[0].isObject()) {
7664
0
    { // scope for tempRoot and tempGlobalRoot if needed
7665
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
7666
0
    }
7667
0
  } else {
7668
0
    arg0 = nullptr;
7669
0
  }
7670
0
  self->SetOnblur(Constify(arg0));
7671
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7672
0
7673
0
  return true;
7674
0
}
7675
7676
static const JSJitInfo onblur_getterinfo = {
7677
  { (JSJitGetterOp)get_onblur },
7678
  { prototypes::id::Window },
7679
  { PrototypeTraits<prototypes::id::Window>::Depth },
7680
  JSJitInfo::Getter,
7681
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7682
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
7683
  false,  /* isInfallible. False in setters. */
7684
  false,  /* isMovable.  Not relevant for setters. */
7685
  false, /* isEliminatable.  Not relevant for setters. */
7686
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7687
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7688
  false,  /* isTypedMethod.  Only relevant for methods. */
7689
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7690
};
7691
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7692
static_assert(0 < 5, "There is no slot for us");
7693
static const JSJitInfo onblur_setterinfo = {
7694
  { (JSJitGetterOp)set_onblur },
7695
  { prototypes::id::Window },
7696
  { PrototypeTraits<prototypes::id::Window>::Depth },
7697
  JSJitInfo::Setter,
7698
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7699
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
7700
  false,  /* isInfallible. False in setters. */
7701
  false,  /* isMovable.  Not relevant for setters. */
7702
  false, /* isEliminatable.  Not relevant for setters. */
7703
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7704
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7705
  false,  /* isTypedMethod.  Only relevant for methods. */
7706
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7707
};
7708
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7709
static_assert(0 < 5, "There is no slot for us");
7710
7711
MOZ_CAN_RUN_SCRIPT static bool
7712
get_onfocus(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
7713
0
{
7714
0
  AUTO_PROFILER_LABEL_FAST("get Window.onfocus", DOM, cx);
7715
0
7716
0
  RefPtr<EventHandlerNonNull> result(self->GetOnfocus());
7717
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7718
0
  if (result) {
7719
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
7720
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7721
0
      return false;
7722
0
    }
7723
0
    return true;
7724
0
  } else {
7725
0
    args.rval().setNull();
7726
0
    return true;
7727
0
  }
7728
0
}
7729
7730
MOZ_CAN_RUN_SCRIPT static bool
7731
set_onfocus(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
7732
0
{
7733
0
  AUTO_PROFILER_LABEL_FAST("set Window.onfocus", DOM, cx);
7734
0
7735
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7736
0
  if (args[0].isObject()) {
7737
0
    { // scope for tempRoot and tempGlobalRoot if needed
7738
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
7739
0
    }
7740
0
  } else {
7741
0
    arg0 = nullptr;
7742
0
  }
7743
0
  self->SetOnfocus(Constify(arg0));
7744
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7745
0
7746
0
  return true;
7747
0
}
7748
7749
static const JSJitInfo onfocus_getterinfo = {
7750
  { (JSJitGetterOp)get_onfocus },
7751
  { prototypes::id::Window },
7752
  { PrototypeTraits<prototypes::id::Window>::Depth },
7753
  JSJitInfo::Getter,
7754
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7755
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
7756
  false,  /* isInfallible. False in setters. */
7757
  false,  /* isMovable.  Not relevant for setters. */
7758
  false, /* isEliminatable.  Not relevant for setters. */
7759
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7760
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7761
  false,  /* isTypedMethod.  Only relevant for methods. */
7762
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7763
};
7764
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7765
static_assert(0 < 5, "There is no slot for us");
7766
static const JSJitInfo onfocus_setterinfo = {
7767
  { (JSJitGetterOp)set_onfocus },
7768
  { prototypes::id::Window },
7769
  { PrototypeTraits<prototypes::id::Window>::Depth },
7770
  JSJitInfo::Setter,
7771
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7772
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
7773
  false,  /* isInfallible. False in setters. */
7774
  false,  /* isMovable.  Not relevant for setters. */
7775
  false, /* isEliminatable.  Not relevant for setters. */
7776
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7777
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7778
  false,  /* isTypedMethod.  Only relevant for methods. */
7779
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7780
};
7781
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7782
static_assert(0 < 5, "There is no slot for us");
7783
7784
MOZ_CAN_RUN_SCRIPT static bool
7785
get_onauxclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
7786
0
{
7787
0
  AUTO_PROFILER_LABEL_FAST("get Window.onauxclick", DOM, cx);
7788
0
7789
0
  RefPtr<EventHandlerNonNull> result(self->GetOnauxclick());
7790
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7791
0
  if (result) {
7792
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
7793
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7794
0
      return false;
7795
0
    }
7796
0
    return true;
7797
0
  } else {
7798
0
    args.rval().setNull();
7799
0
    return true;
7800
0
  }
7801
0
}
7802
7803
MOZ_CAN_RUN_SCRIPT static bool
7804
set_onauxclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
7805
0
{
7806
0
  AUTO_PROFILER_LABEL_FAST("set Window.onauxclick", DOM, cx);
7807
0
7808
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7809
0
  if (args[0].isObject()) {
7810
0
    { // scope for tempRoot and tempGlobalRoot if needed
7811
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
7812
0
    }
7813
0
  } else {
7814
0
    arg0 = nullptr;
7815
0
  }
7816
0
  self->SetOnauxclick(Constify(arg0));
7817
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7818
0
7819
0
  return true;
7820
0
}
7821
7822
static const JSJitInfo onauxclick_getterinfo = {
7823
  { (JSJitGetterOp)get_onauxclick },
7824
  { prototypes::id::Window },
7825
  { PrototypeTraits<prototypes::id::Window>::Depth },
7826
  JSJitInfo::Getter,
7827
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7828
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
7829
  false,  /* isInfallible. False in setters. */
7830
  false,  /* isMovable.  Not relevant for setters. */
7831
  false, /* isEliminatable.  Not relevant for setters. */
7832
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7833
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7834
  false,  /* isTypedMethod.  Only relevant for methods. */
7835
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7836
};
7837
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7838
static_assert(0 < 5, "There is no slot for us");
7839
static const JSJitInfo onauxclick_setterinfo = {
7840
  { (JSJitGetterOp)set_onauxclick },
7841
  { prototypes::id::Window },
7842
  { PrototypeTraits<prototypes::id::Window>::Depth },
7843
  JSJitInfo::Setter,
7844
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7845
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
7846
  false,  /* isInfallible. False in setters. */
7847
  false,  /* isMovable.  Not relevant for setters. */
7848
  false, /* isEliminatable.  Not relevant for setters. */
7849
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7850
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7851
  false,  /* isTypedMethod.  Only relevant for methods. */
7852
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7853
};
7854
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7855
static_assert(0 < 5, "There is no slot for us");
7856
7857
MOZ_CAN_RUN_SCRIPT static bool
7858
get_oncanplay(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
7859
0
{
7860
0
  AUTO_PROFILER_LABEL_FAST("get Window.oncanplay", DOM, cx);
7861
0
7862
0
  RefPtr<EventHandlerNonNull> result(self->GetOncanplay());
7863
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7864
0
  if (result) {
7865
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
7866
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7867
0
      return false;
7868
0
    }
7869
0
    return true;
7870
0
  } else {
7871
0
    args.rval().setNull();
7872
0
    return true;
7873
0
  }
7874
0
}
7875
7876
MOZ_CAN_RUN_SCRIPT static bool
7877
set_oncanplay(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
7878
0
{
7879
0
  AUTO_PROFILER_LABEL_FAST("set Window.oncanplay", DOM, cx);
7880
0
7881
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7882
0
  if (args[0].isObject()) {
7883
0
    { // scope for tempRoot and tempGlobalRoot if needed
7884
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
7885
0
    }
7886
0
  } else {
7887
0
    arg0 = nullptr;
7888
0
  }
7889
0
  self->SetOncanplay(Constify(arg0));
7890
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7891
0
7892
0
  return true;
7893
0
}
7894
7895
static const JSJitInfo oncanplay_getterinfo = {
7896
  { (JSJitGetterOp)get_oncanplay },
7897
  { prototypes::id::Window },
7898
  { PrototypeTraits<prototypes::id::Window>::Depth },
7899
  JSJitInfo::Getter,
7900
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7901
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
7902
  false,  /* isInfallible. False in setters. */
7903
  false,  /* isMovable.  Not relevant for setters. */
7904
  false, /* isEliminatable.  Not relevant for setters. */
7905
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7906
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7907
  false,  /* isTypedMethod.  Only relevant for methods. */
7908
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7909
};
7910
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7911
static_assert(0 < 5, "There is no slot for us");
7912
static const JSJitInfo oncanplay_setterinfo = {
7913
  { (JSJitGetterOp)set_oncanplay },
7914
  { prototypes::id::Window },
7915
  { PrototypeTraits<prototypes::id::Window>::Depth },
7916
  JSJitInfo::Setter,
7917
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7918
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
7919
  false,  /* isInfallible. False in setters. */
7920
  false,  /* isMovable.  Not relevant for setters. */
7921
  false, /* isEliminatable.  Not relevant for setters. */
7922
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7923
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7924
  false,  /* isTypedMethod.  Only relevant for methods. */
7925
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7926
};
7927
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7928
static_assert(0 < 5, "There is no slot for us");
7929
7930
MOZ_CAN_RUN_SCRIPT static bool
7931
get_oncanplaythrough(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
7932
0
{
7933
0
  AUTO_PROFILER_LABEL_FAST("get Window.oncanplaythrough", DOM, cx);
7934
0
7935
0
  RefPtr<EventHandlerNonNull> result(self->GetOncanplaythrough());
7936
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7937
0
  if (result) {
7938
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
7939
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7940
0
      return false;
7941
0
    }
7942
0
    return true;
7943
0
  } else {
7944
0
    args.rval().setNull();
7945
0
    return true;
7946
0
  }
7947
0
}
7948
7949
MOZ_CAN_RUN_SCRIPT static bool
7950
set_oncanplaythrough(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
7951
0
{
7952
0
  AUTO_PROFILER_LABEL_FAST("set Window.oncanplaythrough", DOM, cx);
7953
0
7954
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7955
0
  if (args[0].isObject()) {
7956
0
    { // scope for tempRoot and tempGlobalRoot if needed
7957
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
7958
0
    }
7959
0
  } else {
7960
0
    arg0 = nullptr;
7961
0
  }
7962
0
  self->SetOncanplaythrough(Constify(arg0));
7963
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
7964
0
7965
0
  return true;
7966
0
}
7967
7968
static const JSJitInfo oncanplaythrough_getterinfo = {
7969
  { (JSJitGetterOp)get_oncanplaythrough },
7970
  { prototypes::id::Window },
7971
  { PrototypeTraits<prototypes::id::Window>::Depth },
7972
  JSJitInfo::Getter,
7973
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7974
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
7975
  false,  /* isInfallible. False in setters. */
7976
  false,  /* isMovable.  Not relevant for setters. */
7977
  false, /* isEliminatable.  Not relevant for setters. */
7978
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7979
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7980
  false,  /* isTypedMethod.  Only relevant for methods. */
7981
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7982
};
7983
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7984
static_assert(0 < 5, "There is no slot for us");
7985
static const JSJitInfo oncanplaythrough_setterinfo = {
7986
  { (JSJitGetterOp)set_oncanplaythrough },
7987
  { prototypes::id::Window },
7988
  { PrototypeTraits<prototypes::id::Window>::Depth },
7989
  JSJitInfo::Setter,
7990
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
7991
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
7992
  false,  /* isInfallible. False in setters. */
7993
  false,  /* isMovable.  Not relevant for setters. */
7994
  false, /* isEliminatable.  Not relevant for setters. */
7995
  false, /* isAlwaysInSlot.  Only relevant for getters. */
7996
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
7997
  false,  /* isTypedMethod.  Only relevant for methods. */
7998
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
7999
};
8000
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8001
static_assert(0 < 5, "There is no slot for us");
8002
8003
MOZ_CAN_RUN_SCRIPT static bool
8004
get_onchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
8005
0
{
8006
0
  AUTO_PROFILER_LABEL_FAST("get Window.onchange", DOM, cx);
8007
0
8008
0
  RefPtr<EventHandlerNonNull> result(self->GetOnchange());
8009
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8010
0
  if (result) {
8011
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
8012
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8013
0
      return false;
8014
0
    }
8015
0
    return true;
8016
0
  } else {
8017
0
    args.rval().setNull();
8018
0
    return true;
8019
0
  }
8020
0
}
8021
8022
MOZ_CAN_RUN_SCRIPT static bool
8023
set_onchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
8024
0
{
8025
0
  AUTO_PROFILER_LABEL_FAST("set Window.onchange", DOM, cx);
8026
0
8027
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8028
0
  if (args[0].isObject()) {
8029
0
    { // scope for tempRoot and tempGlobalRoot if needed
8030
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
8031
0
    }
8032
0
  } else {
8033
0
    arg0 = nullptr;
8034
0
  }
8035
0
  self->SetOnchange(Constify(arg0));
8036
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8037
0
8038
0
  return true;
8039
0
}
8040
8041
static const JSJitInfo onchange_getterinfo = {
8042
  { (JSJitGetterOp)get_onchange },
8043
  { prototypes::id::Window },
8044
  { PrototypeTraits<prototypes::id::Window>::Depth },
8045
  JSJitInfo::Getter,
8046
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8047
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
8048
  false,  /* isInfallible. False in setters. */
8049
  false,  /* isMovable.  Not relevant for setters. */
8050
  false, /* isEliminatable.  Not relevant for setters. */
8051
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8052
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8053
  false,  /* isTypedMethod.  Only relevant for methods. */
8054
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8055
};
8056
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8057
static_assert(0 < 5, "There is no slot for us");
8058
static const JSJitInfo onchange_setterinfo = {
8059
  { (JSJitGetterOp)set_onchange },
8060
  { prototypes::id::Window },
8061
  { PrototypeTraits<prototypes::id::Window>::Depth },
8062
  JSJitInfo::Setter,
8063
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8064
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
8065
  false,  /* isInfallible. False in setters. */
8066
  false,  /* isMovable.  Not relevant for setters. */
8067
  false, /* isEliminatable.  Not relevant for setters. */
8068
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8069
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8070
  false,  /* isTypedMethod.  Only relevant for methods. */
8071
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8072
};
8073
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8074
static_assert(0 < 5, "There is no slot for us");
8075
8076
MOZ_CAN_RUN_SCRIPT static bool
8077
get_onclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
8078
0
{
8079
0
  AUTO_PROFILER_LABEL_FAST("get Window.onclick", DOM, cx);
8080
0
8081
0
  RefPtr<EventHandlerNonNull> result(self->GetOnclick());
8082
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8083
0
  if (result) {
8084
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
8085
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8086
0
      return false;
8087
0
    }
8088
0
    return true;
8089
0
  } else {
8090
0
    args.rval().setNull();
8091
0
    return true;
8092
0
  }
8093
0
}
8094
8095
MOZ_CAN_RUN_SCRIPT static bool
8096
set_onclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
8097
0
{
8098
0
  AUTO_PROFILER_LABEL_FAST("set Window.onclick", DOM, cx);
8099
0
8100
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8101
0
  if (args[0].isObject()) {
8102
0
    { // scope for tempRoot and tempGlobalRoot if needed
8103
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
8104
0
    }
8105
0
  } else {
8106
0
    arg0 = nullptr;
8107
0
  }
8108
0
  self->SetOnclick(Constify(arg0));
8109
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8110
0
8111
0
  return true;
8112
0
}
8113
8114
static const JSJitInfo onclick_getterinfo = {
8115
  { (JSJitGetterOp)get_onclick },
8116
  { prototypes::id::Window },
8117
  { PrototypeTraits<prototypes::id::Window>::Depth },
8118
  JSJitInfo::Getter,
8119
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8120
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
8121
  false,  /* isInfallible. False in setters. */
8122
  false,  /* isMovable.  Not relevant for setters. */
8123
  false, /* isEliminatable.  Not relevant for setters. */
8124
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8125
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8126
  false,  /* isTypedMethod.  Only relevant for methods. */
8127
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8128
};
8129
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8130
static_assert(0 < 5, "There is no slot for us");
8131
static const JSJitInfo onclick_setterinfo = {
8132
  { (JSJitGetterOp)set_onclick },
8133
  { prototypes::id::Window },
8134
  { PrototypeTraits<prototypes::id::Window>::Depth },
8135
  JSJitInfo::Setter,
8136
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8137
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
8138
  false,  /* isInfallible. False in setters. */
8139
  false,  /* isMovable.  Not relevant for setters. */
8140
  false, /* isEliminatable.  Not relevant for setters. */
8141
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8142
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8143
  false,  /* isTypedMethod.  Only relevant for methods. */
8144
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8145
};
8146
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8147
static_assert(0 < 5, "There is no slot for us");
8148
8149
MOZ_CAN_RUN_SCRIPT static bool
8150
get_onclose(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
8151
0
{
8152
0
  AUTO_PROFILER_LABEL_FAST("get Window.onclose", DOM, cx);
8153
0
8154
0
  RefPtr<EventHandlerNonNull> result(self->GetOnclose());
8155
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8156
0
  if (result) {
8157
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
8158
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8159
0
      return false;
8160
0
    }
8161
0
    return true;
8162
0
  } else {
8163
0
    args.rval().setNull();
8164
0
    return true;
8165
0
  }
8166
0
}
8167
8168
MOZ_CAN_RUN_SCRIPT static bool
8169
set_onclose(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
8170
0
{
8171
0
  AUTO_PROFILER_LABEL_FAST("set Window.onclose", DOM, cx);
8172
0
8173
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8174
0
  if (args[0].isObject()) {
8175
0
    { // scope for tempRoot and tempGlobalRoot if needed
8176
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
8177
0
    }
8178
0
  } else {
8179
0
    arg0 = nullptr;
8180
0
  }
8181
0
  self->SetOnclose(Constify(arg0));
8182
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8183
0
8184
0
  return true;
8185
0
}
8186
8187
static const JSJitInfo onclose_getterinfo = {
8188
  { (JSJitGetterOp)get_onclose },
8189
  { prototypes::id::Window },
8190
  { PrototypeTraits<prototypes::id::Window>::Depth },
8191
  JSJitInfo::Getter,
8192
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8193
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
8194
  false,  /* isInfallible. False in setters. */
8195
  false,  /* isMovable.  Not relevant for setters. */
8196
  false, /* isEliminatable.  Not relevant for setters. */
8197
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8198
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8199
  false,  /* isTypedMethod.  Only relevant for methods. */
8200
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8201
};
8202
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8203
static_assert(0 < 5, "There is no slot for us");
8204
static const JSJitInfo onclose_setterinfo = {
8205
  { (JSJitGetterOp)set_onclose },
8206
  { prototypes::id::Window },
8207
  { PrototypeTraits<prototypes::id::Window>::Depth },
8208
  JSJitInfo::Setter,
8209
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8210
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
8211
  false,  /* isInfallible. False in setters. */
8212
  false,  /* isMovable.  Not relevant for setters. */
8213
  false, /* isEliminatable.  Not relevant for setters. */
8214
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8215
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8216
  false,  /* isTypedMethod.  Only relevant for methods. */
8217
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8218
};
8219
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8220
static_assert(0 < 5, "There is no slot for us");
8221
8222
MOZ_CAN_RUN_SCRIPT static bool
8223
get_oncontextmenu(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
8224
0
{
8225
0
  AUTO_PROFILER_LABEL_FAST("get Window.oncontextmenu", DOM, cx);
8226
0
8227
0
  RefPtr<EventHandlerNonNull> result(self->GetOncontextmenu());
8228
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8229
0
  if (result) {
8230
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
8231
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8232
0
      return false;
8233
0
    }
8234
0
    return true;
8235
0
  } else {
8236
0
    args.rval().setNull();
8237
0
    return true;
8238
0
  }
8239
0
}
8240
8241
MOZ_CAN_RUN_SCRIPT static bool
8242
set_oncontextmenu(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
8243
0
{
8244
0
  AUTO_PROFILER_LABEL_FAST("set Window.oncontextmenu", DOM, cx);
8245
0
8246
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8247
0
  if (args[0].isObject()) {
8248
0
    { // scope for tempRoot and tempGlobalRoot if needed
8249
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
8250
0
    }
8251
0
  } else {
8252
0
    arg0 = nullptr;
8253
0
  }
8254
0
  self->SetOncontextmenu(Constify(arg0));
8255
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8256
0
8257
0
  return true;
8258
0
}
8259
8260
static const JSJitInfo oncontextmenu_getterinfo = {
8261
  { (JSJitGetterOp)get_oncontextmenu },
8262
  { prototypes::id::Window },
8263
  { PrototypeTraits<prototypes::id::Window>::Depth },
8264
  JSJitInfo::Getter,
8265
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8266
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
8267
  false,  /* isInfallible. False in setters. */
8268
  false,  /* isMovable.  Not relevant for setters. */
8269
  false, /* isEliminatable.  Not relevant for setters. */
8270
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8271
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8272
  false,  /* isTypedMethod.  Only relevant for methods. */
8273
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8274
};
8275
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8276
static_assert(0 < 5, "There is no slot for us");
8277
static const JSJitInfo oncontextmenu_setterinfo = {
8278
  { (JSJitGetterOp)set_oncontextmenu },
8279
  { prototypes::id::Window },
8280
  { PrototypeTraits<prototypes::id::Window>::Depth },
8281
  JSJitInfo::Setter,
8282
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8283
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
8284
  false,  /* isInfallible. False in setters. */
8285
  false,  /* isMovable.  Not relevant for setters. */
8286
  false, /* isEliminatable.  Not relevant for setters. */
8287
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8288
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8289
  false,  /* isTypedMethod.  Only relevant for methods. */
8290
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8291
};
8292
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8293
static_assert(0 < 5, "There is no slot for us");
8294
8295
MOZ_CAN_RUN_SCRIPT static bool
8296
get_ondblclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
8297
0
{
8298
0
  AUTO_PROFILER_LABEL_FAST("get Window.ondblclick", DOM, cx);
8299
0
8300
0
  RefPtr<EventHandlerNonNull> result(self->GetOndblclick());
8301
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8302
0
  if (result) {
8303
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
8304
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8305
0
      return false;
8306
0
    }
8307
0
    return true;
8308
0
  } else {
8309
0
    args.rval().setNull();
8310
0
    return true;
8311
0
  }
8312
0
}
8313
8314
MOZ_CAN_RUN_SCRIPT static bool
8315
set_ondblclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
8316
0
{
8317
0
  AUTO_PROFILER_LABEL_FAST("set Window.ondblclick", DOM, cx);
8318
0
8319
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8320
0
  if (args[0].isObject()) {
8321
0
    { // scope for tempRoot and tempGlobalRoot if needed
8322
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
8323
0
    }
8324
0
  } else {
8325
0
    arg0 = nullptr;
8326
0
  }
8327
0
  self->SetOndblclick(Constify(arg0));
8328
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8329
0
8330
0
  return true;
8331
0
}
8332
8333
static const JSJitInfo ondblclick_getterinfo = {
8334
  { (JSJitGetterOp)get_ondblclick },
8335
  { prototypes::id::Window },
8336
  { PrototypeTraits<prototypes::id::Window>::Depth },
8337
  JSJitInfo::Getter,
8338
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8339
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
8340
  false,  /* isInfallible. False in setters. */
8341
  false,  /* isMovable.  Not relevant for setters. */
8342
  false, /* isEliminatable.  Not relevant for setters. */
8343
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8344
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8345
  false,  /* isTypedMethod.  Only relevant for methods. */
8346
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8347
};
8348
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8349
static_assert(0 < 5, "There is no slot for us");
8350
static const JSJitInfo ondblclick_setterinfo = {
8351
  { (JSJitGetterOp)set_ondblclick },
8352
  { prototypes::id::Window },
8353
  { PrototypeTraits<prototypes::id::Window>::Depth },
8354
  JSJitInfo::Setter,
8355
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8356
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
8357
  false,  /* isInfallible. False in setters. */
8358
  false,  /* isMovable.  Not relevant for setters. */
8359
  false, /* isEliminatable.  Not relevant for setters. */
8360
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8361
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8362
  false,  /* isTypedMethod.  Only relevant for methods. */
8363
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8364
};
8365
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8366
static_assert(0 < 5, "There is no slot for us");
8367
8368
MOZ_CAN_RUN_SCRIPT static bool
8369
get_ondrag(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
8370
0
{
8371
0
  AUTO_PROFILER_LABEL_FAST("get Window.ondrag", DOM, cx);
8372
0
8373
0
  RefPtr<EventHandlerNonNull> result(self->GetOndrag());
8374
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8375
0
  if (result) {
8376
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
8377
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8378
0
      return false;
8379
0
    }
8380
0
    return true;
8381
0
  } else {
8382
0
    args.rval().setNull();
8383
0
    return true;
8384
0
  }
8385
0
}
8386
8387
MOZ_CAN_RUN_SCRIPT static bool
8388
set_ondrag(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
8389
0
{
8390
0
  AUTO_PROFILER_LABEL_FAST("set Window.ondrag", DOM, cx);
8391
0
8392
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8393
0
  if (args[0].isObject()) {
8394
0
    { // scope for tempRoot and tempGlobalRoot if needed
8395
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
8396
0
    }
8397
0
  } else {
8398
0
    arg0 = nullptr;
8399
0
  }
8400
0
  self->SetOndrag(Constify(arg0));
8401
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8402
0
8403
0
  return true;
8404
0
}
8405
8406
static const JSJitInfo ondrag_getterinfo = {
8407
  { (JSJitGetterOp)get_ondrag },
8408
  { prototypes::id::Window },
8409
  { PrototypeTraits<prototypes::id::Window>::Depth },
8410
  JSJitInfo::Getter,
8411
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8412
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
8413
  false,  /* isInfallible. False in setters. */
8414
  false,  /* isMovable.  Not relevant for setters. */
8415
  false, /* isEliminatable.  Not relevant for setters. */
8416
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8417
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8418
  false,  /* isTypedMethod.  Only relevant for methods. */
8419
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8420
};
8421
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8422
static_assert(0 < 5, "There is no slot for us");
8423
static const JSJitInfo ondrag_setterinfo = {
8424
  { (JSJitGetterOp)set_ondrag },
8425
  { prototypes::id::Window },
8426
  { PrototypeTraits<prototypes::id::Window>::Depth },
8427
  JSJitInfo::Setter,
8428
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8429
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
8430
  false,  /* isInfallible. False in setters. */
8431
  false,  /* isMovable.  Not relevant for setters. */
8432
  false, /* isEliminatable.  Not relevant for setters. */
8433
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8434
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8435
  false,  /* isTypedMethod.  Only relevant for methods. */
8436
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8437
};
8438
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8439
static_assert(0 < 5, "There is no slot for us");
8440
8441
MOZ_CAN_RUN_SCRIPT static bool
8442
get_ondragend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
8443
0
{
8444
0
  AUTO_PROFILER_LABEL_FAST("get Window.ondragend", DOM, cx);
8445
0
8446
0
  RefPtr<EventHandlerNonNull> result(self->GetOndragend());
8447
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8448
0
  if (result) {
8449
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
8450
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8451
0
      return false;
8452
0
    }
8453
0
    return true;
8454
0
  } else {
8455
0
    args.rval().setNull();
8456
0
    return true;
8457
0
  }
8458
0
}
8459
8460
MOZ_CAN_RUN_SCRIPT static bool
8461
set_ondragend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
8462
0
{
8463
0
  AUTO_PROFILER_LABEL_FAST("set Window.ondragend", DOM, cx);
8464
0
8465
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8466
0
  if (args[0].isObject()) {
8467
0
    { // scope for tempRoot and tempGlobalRoot if needed
8468
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
8469
0
    }
8470
0
  } else {
8471
0
    arg0 = nullptr;
8472
0
  }
8473
0
  self->SetOndragend(Constify(arg0));
8474
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8475
0
8476
0
  return true;
8477
0
}
8478
8479
static const JSJitInfo ondragend_getterinfo = {
8480
  { (JSJitGetterOp)get_ondragend },
8481
  { prototypes::id::Window },
8482
  { PrototypeTraits<prototypes::id::Window>::Depth },
8483
  JSJitInfo::Getter,
8484
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8485
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
8486
  false,  /* isInfallible. False in setters. */
8487
  false,  /* isMovable.  Not relevant for setters. */
8488
  false, /* isEliminatable.  Not relevant for setters. */
8489
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8490
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8491
  false,  /* isTypedMethod.  Only relevant for methods. */
8492
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8493
};
8494
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8495
static_assert(0 < 5, "There is no slot for us");
8496
static const JSJitInfo ondragend_setterinfo = {
8497
  { (JSJitGetterOp)set_ondragend },
8498
  { prototypes::id::Window },
8499
  { PrototypeTraits<prototypes::id::Window>::Depth },
8500
  JSJitInfo::Setter,
8501
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8502
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
8503
  false,  /* isInfallible. False in setters. */
8504
  false,  /* isMovable.  Not relevant for setters. */
8505
  false, /* isEliminatable.  Not relevant for setters. */
8506
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8507
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8508
  false,  /* isTypedMethod.  Only relevant for methods. */
8509
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8510
};
8511
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8512
static_assert(0 < 5, "There is no slot for us");
8513
8514
MOZ_CAN_RUN_SCRIPT static bool
8515
get_ondragenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
8516
0
{
8517
0
  AUTO_PROFILER_LABEL_FAST("get Window.ondragenter", DOM, cx);
8518
0
8519
0
  RefPtr<EventHandlerNonNull> result(self->GetOndragenter());
8520
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8521
0
  if (result) {
8522
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
8523
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8524
0
      return false;
8525
0
    }
8526
0
    return true;
8527
0
  } else {
8528
0
    args.rval().setNull();
8529
0
    return true;
8530
0
  }
8531
0
}
8532
8533
MOZ_CAN_RUN_SCRIPT static bool
8534
set_ondragenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
8535
0
{
8536
0
  AUTO_PROFILER_LABEL_FAST("set Window.ondragenter", DOM, cx);
8537
0
8538
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8539
0
  if (args[0].isObject()) {
8540
0
    { // scope for tempRoot and tempGlobalRoot if needed
8541
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
8542
0
    }
8543
0
  } else {
8544
0
    arg0 = nullptr;
8545
0
  }
8546
0
  self->SetOndragenter(Constify(arg0));
8547
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8548
0
8549
0
  return true;
8550
0
}
8551
8552
static const JSJitInfo ondragenter_getterinfo = {
8553
  { (JSJitGetterOp)get_ondragenter },
8554
  { prototypes::id::Window },
8555
  { PrototypeTraits<prototypes::id::Window>::Depth },
8556
  JSJitInfo::Getter,
8557
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8558
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
8559
  false,  /* isInfallible. False in setters. */
8560
  false,  /* isMovable.  Not relevant for setters. */
8561
  false, /* isEliminatable.  Not relevant for setters. */
8562
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8563
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8564
  false,  /* isTypedMethod.  Only relevant for methods. */
8565
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8566
};
8567
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8568
static_assert(0 < 5, "There is no slot for us");
8569
static const JSJitInfo ondragenter_setterinfo = {
8570
  { (JSJitGetterOp)set_ondragenter },
8571
  { prototypes::id::Window },
8572
  { PrototypeTraits<prototypes::id::Window>::Depth },
8573
  JSJitInfo::Setter,
8574
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8575
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
8576
  false,  /* isInfallible. False in setters. */
8577
  false,  /* isMovable.  Not relevant for setters. */
8578
  false, /* isEliminatable.  Not relevant for setters. */
8579
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8580
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8581
  false,  /* isTypedMethod.  Only relevant for methods. */
8582
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8583
};
8584
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8585
static_assert(0 < 5, "There is no slot for us");
8586
8587
MOZ_CAN_RUN_SCRIPT static bool
8588
get_ondragexit(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
8589
0
{
8590
0
  AUTO_PROFILER_LABEL_FAST("get Window.ondragexit", DOM, cx);
8591
0
8592
0
  RefPtr<EventHandlerNonNull> result(self->GetOndragexit());
8593
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8594
0
  if (result) {
8595
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
8596
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8597
0
      return false;
8598
0
    }
8599
0
    return true;
8600
0
  } else {
8601
0
    args.rval().setNull();
8602
0
    return true;
8603
0
  }
8604
0
}
8605
8606
MOZ_CAN_RUN_SCRIPT static bool
8607
set_ondragexit(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
8608
0
{
8609
0
  AUTO_PROFILER_LABEL_FAST("set Window.ondragexit", DOM, cx);
8610
0
8611
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8612
0
  if (args[0].isObject()) {
8613
0
    { // scope for tempRoot and tempGlobalRoot if needed
8614
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
8615
0
    }
8616
0
  } else {
8617
0
    arg0 = nullptr;
8618
0
  }
8619
0
  self->SetOndragexit(Constify(arg0));
8620
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8621
0
8622
0
  return true;
8623
0
}
8624
8625
static const JSJitInfo ondragexit_getterinfo = {
8626
  { (JSJitGetterOp)get_ondragexit },
8627
  { prototypes::id::Window },
8628
  { PrototypeTraits<prototypes::id::Window>::Depth },
8629
  JSJitInfo::Getter,
8630
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8631
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
8632
  false,  /* isInfallible. False in setters. */
8633
  false,  /* isMovable.  Not relevant for setters. */
8634
  false, /* isEliminatable.  Not relevant for setters. */
8635
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8636
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8637
  false,  /* isTypedMethod.  Only relevant for methods. */
8638
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8639
};
8640
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8641
static_assert(0 < 5, "There is no slot for us");
8642
static const JSJitInfo ondragexit_setterinfo = {
8643
  { (JSJitGetterOp)set_ondragexit },
8644
  { prototypes::id::Window },
8645
  { PrototypeTraits<prototypes::id::Window>::Depth },
8646
  JSJitInfo::Setter,
8647
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8648
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
8649
  false,  /* isInfallible. False in setters. */
8650
  false,  /* isMovable.  Not relevant for setters. */
8651
  false, /* isEliminatable.  Not relevant for setters. */
8652
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8653
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8654
  false,  /* isTypedMethod.  Only relevant for methods. */
8655
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8656
};
8657
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8658
static_assert(0 < 5, "There is no slot for us");
8659
8660
MOZ_CAN_RUN_SCRIPT static bool
8661
get_ondragleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
8662
0
{
8663
0
  AUTO_PROFILER_LABEL_FAST("get Window.ondragleave", DOM, cx);
8664
0
8665
0
  RefPtr<EventHandlerNonNull> result(self->GetOndragleave());
8666
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8667
0
  if (result) {
8668
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
8669
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8670
0
      return false;
8671
0
    }
8672
0
    return true;
8673
0
  } else {
8674
0
    args.rval().setNull();
8675
0
    return true;
8676
0
  }
8677
0
}
8678
8679
MOZ_CAN_RUN_SCRIPT static bool
8680
set_ondragleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
8681
0
{
8682
0
  AUTO_PROFILER_LABEL_FAST("set Window.ondragleave", DOM, cx);
8683
0
8684
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8685
0
  if (args[0].isObject()) {
8686
0
    { // scope for tempRoot and tempGlobalRoot if needed
8687
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
8688
0
    }
8689
0
  } else {
8690
0
    arg0 = nullptr;
8691
0
  }
8692
0
  self->SetOndragleave(Constify(arg0));
8693
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8694
0
8695
0
  return true;
8696
0
}
8697
8698
static const JSJitInfo ondragleave_getterinfo = {
8699
  { (JSJitGetterOp)get_ondragleave },
8700
  { prototypes::id::Window },
8701
  { PrototypeTraits<prototypes::id::Window>::Depth },
8702
  JSJitInfo::Getter,
8703
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8704
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
8705
  false,  /* isInfallible. False in setters. */
8706
  false,  /* isMovable.  Not relevant for setters. */
8707
  false, /* isEliminatable.  Not relevant for setters. */
8708
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8709
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8710
  false,  /* isTypedMethod.  Only relevant for methods. */
8711
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8712
};
8713
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8714
static_assert(0 < 5, "There is no slot for us");
8715
static const JSJitInfo ondragleave_setterinfo = {
8716
  { (JSJitGetterOp)set_ondragleave },
8717
  { prototypes::id::Window },
8718
  { PrototypeTraits<prototypes::id::Window>::Depth },
8719
  JSJitInfo::Setter,
8720
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8721
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
8722
  false,  /* isInfallible. False in setters. */
8723
  false,  /* isMovable.  Not relevant for setters. */
8724
  false, /* isEliminatable.  Not relevant for setters. */
8725
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8726
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8727
  false,  /* isTypedMethod.  Only relevant for methods. */
8728
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8729
};
8730
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8731
static_assert(0 < 5, "There is no slot for us");
8732
8733
MOZ_CAN_RUN_SCRIPT static bool
8734
get_ondragover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
8735
0
{
8736
0
  AUTO_PROFILER_LABEL_FAST("get Window.ondragover", DOM, cx);
8737
0
8738
0
  RefPtr<EventHandlerNonNull> result(self->GetOndragover());
8739
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8740
0
  if (result) {
8741
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
8742
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8743
0
      return false;
8744
0
    }
8745
0
    return true;
8746
0
  } else {
8747
0
    args.rval().setNull();
8748
0
    return true;
8749
0
  }
8750
0
}
8751
8752
MOZ_CAN_RUN_SCRIPT static bool
8753
set_ondragover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
8754
0
{
8755
0
  AUTO_PROFILER_LABEL_FAST("set Window.ondragover", DOM, cx);
8756
0
8757
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8758
0
  if (args[0].isObject()) {
8759
0
    { // scope for tempRoot and tempGlobalRoot if needed
8760
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
8761
0
    }
8762
0
  } else {
8763
0
    arg0 = nullptr;
8764
0
  }
8765
0
  self->SetOndragover(Constify(arg0));
8766
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8767
0
8768
0
  return true;
8769
0
}
8770
8771
static const JSJitInfo ondragover_getterinfo = {
8772
  { (JSJitGetterOp)get_ondragover },
8773
  { prototypes::id::Window },
8774
  { PrototypeTraits<prototypes::id::Window>::Depth },
8775
  JSJitInfo::Getter,
8776
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8777
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
8778
  false,  /* isInfallible. False in setters. */
8779
  false,  /* isMovable.  Not relevant for setters. */
8780
  false, /* isEliminatable.  Not relevant for setters. */
8781
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8782
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8783
  false,  /* isTypedMethod.  Only relevant for methods. */
8784
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8785
};
8786
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8787
static_assert(0 < 5, "There is no slot for us");
8788
static const JSJitInfo ondragover_setterinfo = {
8789
  { (JSJitGetterOp)set_ondragover },
8790
  { prototypes::id::Window },
8791
  { PrototypeTraits<prototypes::id::Window>::Depth },
8792
  JSJitInfo::Setter,
8793
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8794
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
8795
  false,  /* isInfallible. False in setters. */
8796
  false,  /* isMovable.  Not relevant for setters. */
8797
  false, /* isEliminatable.  Not relevant for setters. */
8798
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8799
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8800
  false,  /* isTypedMethod.  Only relevant for methods. */
8801
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8802
};
8803
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8804
static_assert(0 < 5, "There is no slot for us");
8805
8806
MOZ_CAN_RUN_SCRIPT static bool
8807
get_ondragstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
8808
0
{
8809
0
  AUTO_PROFILER_LABEL_FAST("get Window.ondragstart", DOM, cx);
8810
0
8811
0
  RefPtr<EventHandlerNonNull> result(self->GetOndragstart());
8812
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8813
0
  if (result) {
8814
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
8815
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8816
0
      return false;
8817
0
    }
8818
0
    return true;
8819
0
  } else {
8820
0
    args.rval().setNull();
8821
0
    return true;
8822
0
  }
8823
0
}
8824
8825
MOZ_CAN_RUN_SCRIPT static bool
8826
set_ondragstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
8827
0
{
8828
0
  AUTO_PROFILER_LABEL_FAST("set Window.ondragstart", DOM, cx);
8829
0
8830
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8831
0
  if (args[0].isObject()) {
8832
0
    { // scope for tempRoot and tempGlobalRoot if needed
8833
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
8834
0
    }
8835
0
  } else {
8836
0
    arg0 = nullptr;
8837
0
  }
8838
0
  self->SetOndragstart(Constify(arg0));
8839
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8840
0
8841
0
  return true;
8842
0
}
8843
8844
static const JSJitInfo ondragstart_getterinfo = {
8845
  { (JSJitGetterOp)get_ondragstart },
8846
  { prototypes::id::Window },
8847
  { PrototypeTraits<prototypes::id::Window>::Depth },
8848
  JSJitInfo::Getter,
8849
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8850
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
8851
  false,  /* isInfallible. False in setters. */
8852
  false,  /* isMovable.  Not relevant for setters. */
8853
  false, /* isEliminatable.  Not relevant for setters. */
8854
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8855
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8856
  false,  /* isTypedMethod.  Only relevant for methods. */
8857
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8858
};
8859
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8860
static_assert(0 < 5, "There is no slot for us");
8861
static const JSJitInfo ondragstart_setterinfo = {
8862
  { (JSJitGetterOp)set_ondragstart },
8863
  { prototypes::id::Window },
8864
  { PrototypeTraits<prototypes::id::Window>::Depth },
8865
  JSJitInfo::Setter,
8866
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8867
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
8868
  false,  /* isInfallible. False in setters. */
8869
  false,  /* isMovable.  Not relevant for setters. */
8870
  false, /* isEliminatable.  Not relevant for setters. */
8871
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8872
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8873
  false,  /* isTypedMethod.  Only relevant for methods. */
8874
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8875
};
8876
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8877
static_assert(0 < 5, "There is no slot for us");
8878
8879
MOZ_CAN_RUN_SCRIPT static bool
8880
get_ondrop(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
8881
0
{
8882
0
  AUTO_PROFILER_LABEL_FAST("get Window.ondrop", DOM, cx);
8883
0
8884
0
  RefPtr<EventHandlerNonNull> result(self->GetOndrop());
8885
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8886
0
  if (result) {
8887
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
8888
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8889
0
      return false;
8890
0
    }
8891
0
    return true;
8892
0
  } else {
8893
0
    args.rval().setNull();
8894
0
    return true;
8895
0
  }
8896
0
}
8897
8898
MOZ_CAN_RUN_SCRIPT static bool
8899
set_ondrop(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
8900
0
{
8901
0
  AUTO_PROFILER_LABEL_FAST("set Window.ondrop", DOM, cx);
8902
0
8903
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8904
0
  if (args[0].isObject()) {
8905
0
    { // scope for tempRoot and tempGlobalRoot if needed
8906
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
8907
0
    }
8908
0
  } else {
8909
0
    arg0 = nullptr;
8910
0
  }
8911
0
  self->SetOndrop(Constify(arg0));
8912
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8913
0
8914
0
  return true;
8915
0
}
8916
8917
static const JSJitInfo ondrop_getterinfo = {
8918
  { (JSJitGetterOp)get_ondrop },
8919
  { prototypes::id::Window },
8920
  { PrototypeTraits<prototypes::id::Window>::Depth },
8921
  JSJitInfo::Getter,
8922
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8923
  JSVAL_TYPE_UNKNOWN,  /* 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
static const JSJitInfo ondrop_setterinfo = {
8935
  { (JSJitGetterOp)set_ondrop },
8936
  { prototypes::id::Window },
8937
  { PrototypeTraits<prototypes::id::Window>::Depth },
8938
  JSJitInfo::Setter,
8939
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8940
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
8941
  false,  /* isInfallible. False in setters. */
8942
  false,  /* isMovable.  Not relevant for setters. */
8943
  false, /* isEliminatable.  Not relevant for setters. */
8944
  false, /* isAlwaysInSlot.  Only relevant for getters. */
8945
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
8946
  false,  /* isTypedMethod.  Only relevant for methods. */
8947
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
8948
};
8949
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8950
static_assert(0 < 5, "There is no slot for us");
8951
8952
MOZ_CAN_RUN_SCRIPT static bool
8953
get_ondurationchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
8954
0
{
8955
0
  AUTO_PROFILER_LABEL_FAST("get Window.ondurationchange", DOM, cx);
8956
0
8957
0
  RefPtr<EventHandlerNonNull> result(self->GetOndurationchange());
8958
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8959
0
  if (result) {
8960
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
8961
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8962
0
      return false;
8963
0
    }
8964
0
    return true;
8965
0
  } else {
8966
0
    args.rval().setNull();
8967
0
    return true;
8968
0
  }
8969
0
}
8970
8971
MOZ_CAN_RUN_SCRIPT static bool
8972
set_ondurationchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
8973
0
{
8974
0
  AUTO_PROFILER_LABEL_FAST("set Window.ondurationchange", DOM, cx);
8975
0
8976
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8977
0
  if (args[0].isObject()) {
8978
0
    { // scope for tempRoot and tempGlobalRoot if needed
8979
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
8980
0
    }
8981
0
  } else {
8982
0
    arg0 = nullptr;
8983
0
  }
8984
0
  self->SetOndurationchange(Constify(arg0));
8985
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
8986
0
8987
0
  return true;
8988
0
}
8989
8990
static const JSJitInfo ondurationchange_getterinfo = {
8991
  { (JSJitGetterOp)get_ondurationchange },
8992
  { prototypes::id::Window },
8993
  { PrototypeTraits<prototypes::id::Window>::Depth },
8994
  JSJitInfo::Getter,
8995
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
8996
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
8997
  false,  /* isInfallible. False in setters. */
8998
  false,  /* isMovable.  Not relevant for setters. */
8999
  false, /* isEliminatable.  Not relevant for setters. */
9000
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9001
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9002
  false,  /* isTypedMethod.  Only relevant for methods. */
9003
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9004
};
9005
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9006
static_assert(0 < 5, "There is no slot for us");
9007
static const JSJitInfo ondurationchange_setterinfo = {
9008
  { (JSJitGetterOp)set_ondurationchange },
9009
  { prototypes::id::Window },
9010
  { PrototypeTraits<prototypes::id::Window>::Depth },
9011
  JSJitInfo::Setter,
9012
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9013
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
9014
  false,  /* isInfallible. False in setters. */
9015
  false,  /* isMovable.  Not relevant for setters. */
9016
  false, /* isEliminatable.  Not relevant for setters. */
9017
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9018
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9019
  false,  /* isTypedMethod.  Only relevant for methods. */
9020
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9021
};
9022
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9023
static_assert(0 < 5, "There is no slot for us");
9024
9025
MOZ_CAN_RUN_SCRIPT static bool
9026
get_onemptied(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
9027
0
{
9028
0
  AUTO_PROFILER_LABEL_FAST("get Window.onemptied", DOM, cx);
9029
0
9030
0
  RefPtr<EventHandlerNonNull> result(self->GetOnemptied());
9031
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9032
0
  if (result) {
9033
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
9034
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9035
0
      return false;
9036
0
    }
9037
0
    return true;
9038
0
  } else {
9039
0
    args.rval().setNull();
9040
0
    return true;
9041
0
  }
9042
0
}
9043
9044
MOZ_CAN_RUN_SCRIPT static bool
9045
set_onemptied(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
9046
0
{
9047
0
  AUTO_PROFILER_LABEL_FAST("set Window.onemptied", DOM, cx);
9048
0
9049
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9050
0
  if (args[0].isObject()) {
9051
0
    { // scope for tempRoot and tempGlobalRoot if needed
9052
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
9053
0
    }
9054
0
  } else {
9055
0
    arg0 = nullptr;
9056
0
  }
9057
0
  self->SetOnemptied(Constify(arg0));
9058
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9059
0
9060
0
  return true;
9061
0
}
9062
9063
static const JSJitInfo onemptied_getterinfo = {
9064
  { (JSJitGetterOp)get_onemptied },
9065
  { prototypes::id::Window },
9066
  { PrototypeTraits<prototypes::id::Window>::Depth },
9067
  JSJitInfo::Getter,
9068
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9069
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
9070
  false,  /* isInfallible. False in setters. */
9071
  false,  /* isMovable.  Not relevant for setters. */
9072
  false, /* isEliminatable.  Not relevant for setters. */
9073
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9074
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9075
  false,  /* isTypedMethod.  Only relevant for methods. */
9076
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9077
};
9078
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9079
static_assert(0 < 5, "There is no slot for us");
9080
static const JSJitInfo onemptied_setterinfo = {
9081
  { (JSJitGetterOp)set_onemptied },
9082
  { prototypes::id::Window },
9083
  { PrototypeTraits<prototypes::id::Window>::Depth },
9084
  JSJitInfo::Setter,
9085
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9086
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
9087
  false,  /* isInfallible. False in setters. */
9088
  false,  /* isMovable.  Not relevant for setters. */
9089
  false, /* isEliminatable.  Not relevant for setters. */
9090
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9091
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9092
  false,  /* isTypedMethod.  Only relevant for methods. */
9093
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9094
};
9095
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9096
static_assert(0 < 5, "There is no slot for us");
9097
9098
MOZ_CAN_RUN_SCRIPT static bool
9099
get_onended(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
9100
0
{
9101
0
  AUTO_PROFILER_LABEL_FAST("get Window.onended", DOM, cx);
9102
0
9103
0
  RefPtr<EventHandlerNonNull> result(self->GetOnended());
9104
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9105
0
  if (result) {
9106
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
9107
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9108
0
      return false;
9109
0
    }
9110
0
    return true;
9111
0
  } else {
9112
0
    args.rval().setNull();
9113
0
    return true;
9114
0
  }
9115
0
}
9116
9117
MOZ_CAN_RUN_SCRIPT static bool
9118
set_onended(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
9119
0
{
9120
0
  AUTO_PROFILER_LABEL_FAST("set Window.onended", DOM, cx);
9121
0
9122
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9123
0
  if (args[0].isObject()) {
9124
0
    { // scope for tempRoot and tempGlobalRoot if needed
9125
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
9126
0
    }
9127
0
  } else {
9128
0
    arg0 = nullptr;
9129
0
  }
9130
0
  self->SetOnended(Constify(arg0));
9131
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9132
0
9133
0
  return true;
9134
0
}
9135
9136
static const JSJitInfo onended_getterinfo = {
9137
  { (JSJitGetterOp)get_onended },
9138
  { prototypes::id::Window },
9139
  { PrototypeTraits<prototypes::id::Window>::Depth },
9140
  JSJitInfo::Getter,
9141
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9142
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
9143
  false,  /* isInfallible. False in setters. */
9144
  false,  /* isMovable.  Not relevant for setters. */
9145
  false, /* isEliminatable.  Not relevant for setters. */
9146
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9147
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9148
  false,  /* isTypedMethod.  Only relevant for methods. */
9149
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9150
};
9151
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9152
static_assert(0 < 5, "There is no slot for us");
9153
static const JSJitInfo onended_setterinfo = {
9154
  { (JSJitGetterOp)set_onended },
9155
  { prototypes::id::Window },
9156
  { PrototypeTraits<prototypes::id::Window>::Depth },
9157
  JSJitInfo::Setter,
9158
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9159
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
9160
  false,  /* isInfallible. False in setters. */
9161
  false,  /* isMovable.  Not relevant for setters. */
9162
  false, /* isEliminatable.  Not relevant for setters. */
9163
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9164
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9165
  false,  /* isTypedMethod.  Only relevant for methods. */
9166
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9167
};
9168
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9169
static_assert(0 < 5, "There is no slot for us");
9170
9171
MOZ_CAN_RUN_SCRIPT static bool
9172
get_oninput(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
9173
0
{
9174
0
  AUTO_PROFILER_LABEL_FAST("get Window.oninput", DOM, cx);
9175
0
9176
0
  RefPtr<EventHandlerNonNull> result(self->GetOninput());
9177
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9178
0
  if (result) {
9179
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
9180
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9181
0
      return false;
9182
0
    }
9183
0
    return true;
9184
0
  } else {
9185
0
    args.rval().setNull();
9186
0
    return true;
9187
0
  }
9188
0
}
9189
9190
MOZ_CAN_RUN_SCRIPT static bool
9191
set_oninput(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
9192
0
{
9193
0
  AUTO_PROFILER_LABEL_FAST("set Window.oninput", DOM, cx);
9194
0
9195
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9196
0
  if (args[0].isObject()) {
9197
0
    { // scope for tempRoot and tempGlobalRoot if needed
9198
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
9199
0
    }
9200
0
  } else {
9201
0
    arg0 = nullptr;
9202
0
  }
9203
0
  self->SetOninput(Constify(arg0));
9204
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9205
0
9206
0
  return true;
9207
0
}
9208
9209
static const JSJitInfo oninput_getterinfo = {
9210
  { (JSJitGetterOp)get_oninput },
9211
  { prototypes::id::Window },
9212
  { PrototypeTraits<prototypes::id::Window>::Depth },
9213
  JSJitInfo::Getter,
9214
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9215
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
9216
  false,  /* isInfallible. False in setters. */
9217
  false,  /* isMovable.  Not relevant for setters. */
9218
  false, /* isEliminatable.  Not relevant for setters. */
9219
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9220
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9221
  false,  /* isTypedMethod.  Only relevant for methods. */
9222
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9223
};
9224
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9225
static_assert(0 < 5, "There is no slot for us");
9226
static const JSJitInfo oninput_setterinfo = {
9227
  { (JSJitGetterOp)set_oninput },
9228
  { prototypes::id::Window },
9229
  { PrototypeTraits<prototypes::id::Window>::Depth },
9230
  JSJitInfo::Setter,
9231
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9232
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
9233
  false,  /* isInfallible. False in setters. */
9234
  false,  /* isMovable.  Not relevant for setters. */
9235
  false, /* isEliminatable.  Not relevant for setters. */
9236
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9237
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9238
  false,  /* isTypedMethod.  Only relevant for methods. */
9239
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9240
};
9241
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9242
static_assert(0 < 5, "There is no slot for us");
9243
9244
MOZ_CAN_RUN_SCRIPT static bool
9245
get_oninvalid(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
9246
0
{
9247
0
  AUTO_PROFILER_LABEL_FAST("get Window.oninvalid", DOM, cx);
9248
0
9249
0
  RefPtr<EventHandlerNonNull> result(self->GetOninvalid());
9250
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9251
0
  if (result) {
9252
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
9253
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9254
0
      return false;
9255
0
    }
9256
0
    return true;
9257
0
  } else {
9258
0
    args.rval().setNull();
9259
0
    return true;
9260
0
  }
9261
0
}
9262
9263
MOZ_CAN_RUN_SCRIPT static bool
9264
set_oninvalid(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
9265
0
{
9266
0
  AUTO_PROFILER_LABEL_FAST("set Window.oninvalid", DOM, cx);
9267
0
9268
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9269
0
  if (args[0].isObject()) {
9270
0
    { // scope for tempRoot and tempGlobalRoot if needed
9271
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
9272
0
    }
9273
0
  } else {
9274
0
    arg0 = nullptr;
9275
0
  }
9276
0
  self->SetOninvalid(Constify(arg0));
9277
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9278
0
9279
0
  return true;
9280
0
}
9281
9282
static const JSJitInfo oninvalid_getterinfo = {
9283
  { (JSJitGetterOp)get_oninvalid },
9284
  { prototypes::id::Window },
9285
  { PrototypeTraits<prototypes::id::Window>::Depth },
9286
  JSJitInfo::Getter,
9287
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9288
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
9289
  false,  /* isInfallible. False in setters. */
9290
  false,  /* isMovable.  Not relevant for setters. */
9291
  false, /* isEliminatable.  Not relevant for setters. */
9292
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9293
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9294
  false,  /* isTypedMethod.  Only relevant for methods. */
9295
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9296
};
9297
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9298
static_assert(0 < 5, "There is no slot for us");
9299
static const JSJitInfo oninvalid_setterinfo = {
9300
  { (JSJitGetterOp)set_oninvalid },
9301
  { prototypes::id::Window },
9302
  { PrototypeTraits<prototypes::id::Window>::Depth },
9303
  JSJitInfo::Setter,
9304
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9305
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
9306
  false,  /* isInfallible. False in setters. */
9307
  false,  /* isMovable.  Not relevant for setters. */
9308
  false, /* isEliminatable.  Not relevant for setters. */
9309
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9310
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9311
  false,  /* isTypedMethod.  Only relevant for methods. */
9312
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9313
};
9314
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9315
static_assert(0 < 5, "There is no slot for us");
9316
9317
MOZ_CAN_RUN_SCRIPT static bool
9318
get_onkeydown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
9319
0
{
9320
0
  AUTO_PROFILER_LABEL_FAST("get Window.onkeydown", DOM, cx);
9321
0
9322
0
  RefPtr<EventHandlerNonNull> result(self->GetOnkeydown());
9323
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9324
0
  if (result) {
9325
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
9326
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9327
0
      return false;
9328
0
    }
9329
0
    return true;
9330
0
  } else {
9331
0
    args.rval().setNull();
9332
0
    return true;
9333
0
  }
9334
0
}
9335
9336
MOZ_CAN_RUN_SCRIPT static bool
9337
set_onkeydown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
9338
0
{
9339
0
  AUTO_PROFILER_LABEL_FAST("set Window.onkeydown", DOM, cx);
9340
0
9341
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9342
0
  if (args[0].isObject()) {
9343
0
    { // scope for tempRoot and tempGlobalRoot if needed
9344
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
9345
0
    }
9346
0
  } else {
9347
0
    arg0 = nullptr;
9348
0
  }
9349
0
  self->SetOnkeydown(Constify(arg0));
9350
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9351
0
9352
0
  return true;
9353
0
}
9354
9355
static const JSJitInfo onkeydown_getterinfo = {
9356
  { (JSJitGetterOp)get_onkeydown },
9357
  { prototypes::id::Window },
9358
  { PrototypeTraits<prototypes::id::Window>::Depth },
9359
  JSJitInfo::Getter,
9360
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9361
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
9362
  false,  /* isInfallible. False in setters. */
9363
  false,  /* isMovable.  Not relevant for setters. */
9364
  false, /* isEliminatable.  Not relevant for setters. */
9365
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9366
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9367
  false,  /* isTypedMethod.  Only relevant for methods. */
9368
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9369
};
9370
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9371
static_assert(0 < 5, "There is no slot for us");
9372
static const JSJitInfo onkeydown_setterinfo = {
9373
  { (JSJitGetterOp)set_onkeydown },
9374
  { prototypes::id::Window },
9375
  { PrototypeTraits<prototypes::id::Window>::Depth },
9376
  JSJitInfo::Setter,
9377
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9378
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
9379
  false,  /* isInfallible. False in setters. */
9380
  false,  /* isMovable.  Not relevant for setters. */
9381
  false, /* isEliminatable.  Not relevant for setters. */
9382
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9383
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9384
  false,  /* isTypedMethod.  Only relevant for methods. */
9385
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9386
};
9387
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9388
static_assert(0 < 5, "There is no slot for us");
9389
9390
MOZ_CAN_RUN_SCRIPT static bool
9391
get_onkeypress(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
9392
0
{
9393
0
  AUTO_PROFILER_LABEL_FAST("get Window.onkeypress", DOM, cx);
9394
0
9395
0
  RefPtr<EventHandlerNonNull> result(self->GetOnkeypress());
9396
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9397
0
  if (result) {
9398
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
9399
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9400
0
      return false;
9401
0
    }
9402
0
    return true;
9403
0
  } else {
9404
0
    args.rval().setNull();
9405
0
    return true;
9406
0
  }
9407
0
}
9408
9409
MOZ_CAN_RUN_SCRIPT static bool
9410
set_onkeypress(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
9411
0
{
9412
0
  AUTO_PROFILER_LABEL_FAST("set Window.onkeypress", DOM, cx);
9413
0
9414
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9415
0
  if (args[0].isObject()) {
9416
0
    { // scope for tempRoot and tempGlobalRoot if needed
9417
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
9418
0
    }
9419
0
  } else {
9420
0
    arg0 = nullptr;
9421
0
  }
9422
0
  self->SetOnkeypress(Constify(arg0));
9423
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9424
0
9425
0
  return true;
9426
0
}
9427
9428
static const JSJitInfo onkeypress_getterinfo = {
9429
  { (JSJitGetterOp)get_onkeypress },
9430
  { prototypes::id::Window },
9431
  { PrototypeTraits<prototypes::id::Window>::Depth },
9432
  JSJitInfo::Getter,
9433
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9434
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
9435
  false,  /* isInfallible. False in setters. */
9436
  false,  /* isMovable.  Not relevant for setters. */
9437
  false, /* isEliminatable.  Not relevant for setters. */
9438
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9439
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9440
  false,  /* isTypedMethod.  Only relevant for methods. */
9441
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9442
};
9443
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9444
static_assert(0 < 5, "There is no slot for us");
9445
static const JSJitInfo onkeypress_setterinfo = {
9446
  { (JSJitGetterOp)set_onkeypress },
9447
  { prototypes::id::Window },
9448
  { PrototypeTraits<prototypes::id::Window>::Depth },
9449
  JSJitInfo::Setter,
9450
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9451
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
9452
  false,  /* isInfallible. False in setters. */
9453
  false,  /* isMovable.  Not relevant for setters. */
9454
  false, /* isEliminatable.  Not relevant for setters. */
9455
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9456
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9457
  false,  /* isTypedMethod.  Only relevant for methods. */
9458
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9459
};
9460
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9461
static_assert(0 < 5, "There is no slot for us");
9462
9463
MOZ_CAN_RUN_SCRIPT static bool
9464
get_onkeyup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
9465
0
{
9466
0
  AUTO_PROFILER_LABEL_FAST("get Window.onkeyup", DOM, cx);
9467
0
9468
0
  RefPtr<EventHandlerNonNull> result(self->GetOnkeyup());
9469
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9470
0
  if (result) {
9471
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
9472
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9473
0
      return false;
9474
0
    }
9475
0
    return true;
9476
0
  } else {
9477
0
    args.rval().setNull();
9478
0
    return true;
9479
0
  }
9480
0
}
9481
9482
MOZ_CAN_RUN_SCRIPT static bool
9483
set_onkeyup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
9484
0
{
9485
0
  AUTO_PROFILER_LABEL_FAST("set Window.onkeyup", DOM, cx);
9486
0
9487
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9488
0
  if (args[0].isObject()) {
9489
0
    { // scope for tempRoot and tempGlobalRoot if needed
9490
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
9491
0
    }
9492
0
  } else {
9493
0
    arg0 = nullptr;
9494
0
  }
9495
0
  self->SetOnkeyup(Constify(arg0));
9496
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9497
0
9498
0
  return true;
9499
0
}
9500
9501
static const JSJitInfo onkeyup_getterinfo = {
9502
  { (JSJitGetterOp)get_onkeyup },
9503
  { prototypes::id::Window },
9504
  { PrototypeTraits<prototypes::id::Window>::Depth },
9505
  JSJitInfo::Getter,
9506
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9507
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
9508
  false,  /* isInfallible. False in setters. */
9509
  false,  /* isMovable.  Not relevant for setters. */
9510
  false, /* isEliminatable.  Not relevant for setters. */
9511
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9512
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9513
  false,  /* isTypedMethod.  Only relevant for methods. */
9514
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9515
};
9516
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9517
static_assert(0 < 5, "There is no slot for us");
9518
static const JSJitInfo onkeyup_setterinfo = {
9519
  { (JSJitGetterOp)set_onkeyup },
9520
  { prototypes::id::Window },
9521
  { PrototypeTraits<prototypes::id::Window>::Depth },
9522
  JSJitInfo::Setter,
9523
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9524
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
9525
  false,  /* isInfallible. False in setters. */
9526
  false,  /* isMovable.  Not relevant for setters. */
9527
  false, /* isEliminatable.  Not relevant for setters. */
9528
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9529
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9530
  false,  /* isTypedMethod.  Only relevant for methods. */
9531
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9532
};
9533
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9534
static_assert(0 < 5, "There is no slot for us");
9535
9536
MOZ_CAN_RUN_SCRIPT static bool
9537
get_onload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
9538
0
{
9539
0
  AUTO_PROFILER_LABEL_FAST("get Window.onload", DOM, cx);
9540
0
9541
0
  RefPtr<EventHandlerNonNull> result(self->GetOnload());
9542
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9543
0
  if (result) {
9544
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
9545
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9546
0
      return false;
9547
0
    }
9548
0
    return true;
9549
0
  } else {
9550
0
    args.rval().setNull();
9551
0
    return true;
9552
0
  }
9553
0
}
9554
9555
MOZ_CAN_RUN_SCRIPT static bool
9556
set_onload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
9557
0
{
9558
0
  AUTO_PROFILER_LABEL_FAST("set Window.onload", DOM, cx);
9559
0
9560
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9561
0
  if (args[0].isObject()) {
9562
0
    { // scope for tempRoot and tempGlobalRoot if needed
9563
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
9564
0
    }
9565
0
  } else {
9566
0
    arg0 = nullptr;
9567
0
  }
9568
0
  self->SetOnload(Constify(arg0));
9569
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9570
0
9571
0
  return true;
9572
0
}
9573
9574
static const JSJitInfo onload_getterinfo = {
9575
  { (JSJitGetterOp)get_onload },
9576
  { prototypes::id::Window },
9577
  { PrototypeTraits<prototypes::id::Window>::Depth },
9578
  JSJitInfo::Getter,
9579
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9580
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
9581
  false,  /* isInfallible. False in setters. */
9582
  false,  /* isMovable.  Not relevant for setters. */
9583
  false, /* isEliminatable.  Not relevant for setters. */
9584
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9585
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9586
  false,  /* isTypedMethod.  Only relevant for methods. */
9587
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9588
};
9589
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9590
static_assert(0 < 5, "There is no slot for us");
9591
static const JSJitInfo onload_setterinfo = {
9592
  { (JSJitGetterOp)set_onload },
9593
  { prototypes::id::Window },
9594
  { PrototypeTraits<prototypes::id::Window>::Depth },
9595
  JSJitInfo::Setter,
9596
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9597
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
9598
  false,  /* isInfallible. False in setters. */
9599
  false,  /* isMovable.  Not relevant for setters. */
9600
  false, /* isEliminatable.  Not relevant for setters. */
9601
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9602
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9603
  false,  /* isTypedMethod.  Only relevant for methods. */
9604
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9605
};
9606
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9607
static_assert(0 < 5, "There is no slot for us");
9608
9609
MOZ_CAN_RUN_SCRIPT static bool
9610
get_onloadeddata(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
9611
0
{
9612
0
  AUTO_PROFILER_LABEL_FAST("get Window.onloadeddata", DOM, cx);
9613
0
9614
0
  RefPtr<EventHandlerNonNull> result(self->GetOnloadeddata());
9615
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9616
0
  if (result) {
9617
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
9618
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9619
0
      return false;
9620
0
    }
9621
0
    return true;
9622
0
  } else {
9623
0
    args.rval().setNull();
9624
0
    return true;
9625
0
  }
9626
0
}
9627
9628
MOZ_CAN_RUN_SCRIPT static bool
9629
set_onloadeddata(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
9630
0
{
9631
0
  AUTO_PROFILER_LABEL_FAST("set Window.onloadeddata", DOM, cx);
9632
0
9633
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9634
0
  if (args[0].isObject()) {
9635
0
    { // scope for tempRoot and tempGlobalRoot if needed
9636
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
9637
0
    }
9638
0
  } else {
9639
0
    arg0 = nullptr;
9640
0
  }
9641
0
  self->SetOnloadeddata(Constify(arg0));
9642
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9643
0
9644
0
  return true;
9645
0
}
9646
9647
static const JSJitInfo onloadeddata_getterinfo = {
9648
  { (JSJitGetterOp)get_onloadeddata },
9649
  { prototypes::id::Window },
9650
  { PrototypeTraits<prototypes::id::Window>::Depth },
9651
  JSJitInfo::Getter,
9652
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9653
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
9654
  false,  /* isInfallible. False in setters. */
9655
  false,  /* isMovable.  Not relevant for setters. */
9656
  false, /* isEliminatable.  Not relevant for setters. */
9657
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9658
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9659
  false,  /* isTypedMethod.  Only relevant for methods. */
9660
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9661
};
9662
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9663
static_assert(0 < 5, "There is no slot for us");
9664
static const JSJitInfo onloadeddata_setterinfo = {
9665
  { (JSJitGetterOp)set_onloadeddata },
9666
  { prototypes::id::Window },
9667
  { PrototypeTraits<prototypes::id::Window>::Depth },
9668
  JSJitInfo::Setter,
9669
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9670
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
9671
  false,  /* isInfallible. False in setters. */
9672
  false,  /* isMovable.  Not relevant for setters. */
9673
  false, /* isEliminatable.  Not relevant for setters. */
9674
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9675
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9676
  false,  /* isTypedMethod.  Only relevant for methods. */
9677
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9678
};
9679
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9680
static_assert(0 < 5, "There is no slot for us");
9681
9682
MOZ_CAN_RUN_SCRIPT static bool
9683
get_onloadedmetadata(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
9684
0
{
9685
0
  AUTO_PROFILER_LABEL_FAST("get Window.onloadedmetadata", DOM, cx);
9686
0
9687
0
  RefPtr<EventHandlerNonNull> result(self->GetOnloadedmetadata());
9688
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9689
0
  if (result) {
9690
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
9691
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9692
0
      return false;
9693
0
    }
9694
0
    return true;
9695
0
  } else {
9696
0
    args.rval().setNull();
9697
0
    return true;
9698
0
  }
9699
0
}
9700
9701
MOZ_CAN_RUN_SCRIPT static bool
9702
set_onloadedmetadata(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
9703
0
{
9704
0
  AUTO_PROFILER_LABEL_FAST("set Window.onloadedmetadata", DOM, cx);
9705
0
9706
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9707
0
  if (args[0].isObject()) {
9708
0
    { // scope for tempRoot and tempGlobalRoot if needed
9709
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
9710
0
    }
9711
0
  } else {
9712
0
    arg0 = nullptr;
9713
0
  }
9714
0
  self->SetOnloadedmetadata(Constify(arg0));
9715
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9716
0
9717
0
  return true;
9718
0
}
9719
9720
static const JSJitInfo onloadedmetadata_getterinfo = {
9721
  { (JSJitGetterOp)get_onloadedmetadata },
9722
  { prototypes::id::Window },
9723
  { PrototypeTraits<prototypes::id::Window>::Depth },
9724
  JSJitInfo::Getter,
9725
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9726
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
9727
  false,  /* isInfallible. False in setters. */
9728
  false,  /* isMovable.  Not relevant for setters. */
9729
  false, /* isEliminatable.  Not relevant for setters. */
9730
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9731
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9732
  false,  /* isTypedMethod.  Only relevant for methods. */
9733
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9734
};
9735
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9736
static_assert(0 < 5, "There is no slot for us");
9737
static const JSJitInfo onloadedmetadata_setterinfo = {
9738
  { (JSJitGetterOp)set_onloadedmetadata },
9739
  { prototypes::id::Window },
9740
  { PrototypeTraits<prototypes::id::Window>::Depth },
9741
  JSJitInfo::Setter,
9742
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9743
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
9744
  false,  /* isInfallible. False in setters. */
9745
  false,  /* isMovable.  Not relevant for setters. */
9746
  false, /* isEliminatable.  Not relevant for setters. */
9747
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9748
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9749
  false,  /* isTypedMethod.  Only relevant for methods. */
9750
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9751
};
9752
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9753
static_assert(0 < 5, "There is no slot for us");
9754
9755
MOZ_CAN_RUN_SCRIPT static bool
9756
get_onloadend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
9757
0
{
9758
0
  AUTO_PROFILER_LABEL_FAST("get Window.onloadend", DOM, cx);
9759
0
9760
0
  RefPtr<EventHandlerNonNull> result(self->GetOnloadend());
9761
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9762
0
  if (result) {
9763
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
9764
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9765
0
      return false;
9766
0
    }
9767
0
    return true;
9768
0
  } else {
9769
0
    args.rval().setNull();
9770
0
    return true;
9771
0
  }
9772
0
}
9773
9774
MOZ_CAN_RUN_SCRIPT static bool
9775
set_onloadend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
9776
0
{
9777
0
  AUTO_PROFILER_LABEL_FAST("set Window.onloadend", DOM, cx);
9778
0
9779
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9780
0
  if (args[0].isObject()) {
9781
0
    { // scope for tempRoot and tempGlobalRoot if needed
9782
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
9783
0
    }
9784
0
  } else {
9785
0
    arg0 = nullptr;
9786
0
  }
9787
0
  self->SetOnloadend(Constify(arg0));
9788
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9789
0
9790
0
  return true;
9791
0
}
9792
9793
static const JSJitInfo onloadend_getterinfo = {
9794
  { (JSJitGetterOp)get_onloadend },
9795
  { prototypes::id::Window },
9796
  { PrototypeTraits<prototypes::id::Window>::Depth },
9797
  JSJitInfo::Getter,
9798
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9799
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
9800
  false,  /* isInfallible. False in setters. */
9801
  false,  /* isMovable.  Not relevant for setters. */
9802
  false, /* isEliminatable.  Not relevant for setters. */
9803
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9804
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9805
  false,  /* isTypedMethod.  Only relevant for methods. */
9806
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9807
};
9808
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9809
static_assert(0 < 5, "There is no slot for us");
9810
static const JSJitInfo onloadend_setterinfo = {
9811
  { (JSJitGetterOp)set_onloadend },
9812
  { prototypes::id::Window },
9813
  { PrototypeTraits<prototypes::id::Window>::Depth },
9814
  JSJitInfo::Setter,
9815
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9816
  JSVAL_TYPE_UNDEFINED,  /* 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
9828
MOZ_CAN_RUN_SCRIPT static bool
9829
get_onloadstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
9830
0
{
9831
0
  AUTO_PROFILER_LABEL_FAST("get Window.onloadstart", DOM, cx);
9832
0
9833
0
  RefPtr<EventHandlerNonNull> result(self->GetOnloadstart());
9834
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9835
0
  if (result) {
9836
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
9837
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9838
0
      return false;
9839
0
    }
9840
0
    return true;
9841
0
  } else {
9842
0
    args.rval().setNull();
9843
0
    return true;
9844
0
  }
9845
0
}
9846
9847
MOZ_CAN_RUN_SCRIPT static bool
9848
set_onloadstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
9849
0
{
9850
0
  AUTO_PROFILER_LABEL_FAST("set Window.onloadstart", DOM, cx);
9851
0
9852
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9853
0
  if (args[0].isObject()) {
9854
0
    { // scope for tempRoot and tempGlobalRoot if needed
9855
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
9856
0
    }
9857
0
  } else {
9858
0
    arg0 = nullptr;
9859
0
  }
9860
0
  self->SetOnloadstart(Constify(arg0));
9861
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9862
0
9863
0
  return true;
9864
0
}
9865
9866
static const JSJitInfo onloadstart_getterinfo = {
9867
  { (JSJitGetterOp)get_onloadstart },
9868
  { prototypes::id::Window },
9869
  { PrototypeTraits<prototypes::id::Window>::Depth },
9870
  JSJitInfo::Getter,
9871
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9872
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
9873
  false,  /* isInfallible. False in setters. */
9874
  false,  /* isMovable.  Not relevant for setters. */
9875
  false, /* isEliminatable.  Not relevant for setters. */
9876
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9877
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9878
  false,  /* isTypedMethod.  Only relevant for methods. */
9879
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9880
};
9881
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9882
static_assert(0 < 5, "There is no slot for us");
9883
static const JSJitInfo onloadstart_setterinfo = {
9884
  { (JSJitGetterOp)set_onloadstart },
9885
  { prototypes::id::Window },
9886
  { PrototypeTraits<prototypes::id::Window>::Depth },
9887
  JSJitInfo::Setter,
9888
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9889
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
9890
  false,  /* isInfallible. False in setters. */
9891
  false,  /* isMovable.  Not relevant for setters. */
9892
  false, /* isEliminatable.  Not relevant for setters. */
9893
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9894
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9895
  false,  /* isTypedMethod.  Only relevant for methods. */
9896
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9897
};
9898
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9899
static_assert(0 < 5, "There is no slot for us");
9900
9901
MOZ_CAN_RUN_SCRIPT static bool
9902
get_onmousedown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
9903
0
{
9904
0
  AUTO_PROFILER_LABEL_FAST("get Window.onmousedown", DOM, cx);
9905
0
9906
0
  RefPtr<EventHandlerNonNull> result(self->GetOnmousedown());
9907
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9908
0
  if (result) {
9909
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
9910
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9911
0
      return false;
9912
0
    }
9913
0
    return true;
9914
0
  } else {
9915
0
    args.rval().setNull();
9916
0
    return true;
9917
0
  }
9918
0
}
9919
9920
MOZ_CAN_RUN_SCRIPT static bool
9921
set_onmousedown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
9922
0
{
9923
0
  AUTO_PROFILER_LABEL_FAST("set Window.onmousedown", DOM, cx);
9924
0
9925
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9926
0
  if (args[0].isObject()) {
9927
0
    { // scope for tempRoot and tempGlobalRoot if needed
9928
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
9929
0
    }
9930
0
  } else {
9931
0
    arg0 = nullptr;
9932
0
  }
9933
0
  self->SetOnmousedown(Constify(arg0));
9934
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9935
0
9936
0
  return true;
9937
0
}
9938
9939
static const JSJitInfo onmousedown_getterinfo = {
9940
  { (JSJitGetterOp)get_onmousedown },
9941
  { prototypes::id::Window },
9942
  { PrototypeTraits<prototypes::id::Window>::Depth },
9943
  JSJitInfo::Getter,
9944
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9945
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
9946
  false,  /* isInfallible. False in setters. */
9947
  false,  /* isMovable.  Not relevant for setters. */
9948
  false, /* isEliminatable.  Not relevant for setters. */
9949
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9950
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9951
  false,  /* isTypedMethod.  Only relevant for methods. */
9952
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9953
};
9954
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9955
static_assert(0 < 5, "There is no slot for us");
9956
static const JSJitInfo onmousedown_setterinfo = {
9957
  { (JSJitGetterOp)set_onmousedown },
9958
  { prototypes::id::Window },
9959
  { PrototypeTraits<prototypes::id::Window>::Depth },
9960
  JSJitInfo::Setter,
9961
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
9962
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
9963
  false,  /* isInfallible. False in setters. */
9964
  false,  /* isMovable.  Not relevant for setters. */
9965
  false, /* isEliminatable.  Not relevant for setters. */
9966
  false, /* isAlwaysInSlot.  Only relevant for getters. */
9967
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
9968
  false,  /* isTypedMethod.  Only relevant for methods. */
9969
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
9970
};
9971
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9972
static_assert(0 < 5, "There is no slot for us");
9973
9974
MOZ_CAN_RUN_SCRIPT static bool
9975
get_onmouseenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
9976
0
{
9977
0
  AUTO_PROFILER_LABEL_FAST("get Window.onmouseenter", DOM, cx);
9978
0
9979
0
  RefPtr<EventHandlerNonNull> result(self->GetOnmouseenter());
9980
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
9981
0
  if (result) {
9982
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
9983
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9984
0
      return false;
9985
0
    }
9986
0
    return true;
9987
0
  } else {
9988
0
    args.rval().setNull();
9989
0
    return true;
9990
0
  }
9991
0
}
9992
9993
MOZ_CAN_RUN_SCRIPT static bool
9994
set_onmouseenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
9995
0
{
9996
0
  AUTO_PROFILER_LABEL_FAST("set Window.onmouseenter", DOM, cx);
9997
0
9998
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9999
0
  if (args[0].isObject()) {
10000
0
    { // scope for tempRoot and tempGlobalRoot if needed
10001
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
10002
0
    }
10003
0
  } else {
10004
0
    arg0 = nullptr;
10005
0
  }
10006
0
  self->SetOnmouseenter(Constify(arg0));
10007
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10008
0
10009
0
  return true;
10010
0
}
10011
10012
static const JSJitInfo onmouseenter_getterinfo = {
10013
  { (JSJitGetterOp)get_onmouseenter },
10014
  { prototypes::id::Window },
10015
  { PrototypeTraits<prototypes::id::Window>::Depth },
10016
  JSJitInfo::Getter,
10017
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10018
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
10019
  false,  /* isInfallible. False in setters. */
10020
  false,  /* isMovable.  Not relevant for setters. */
10021
  false, /* isEliminatable.  Not relevant for setters. */
10022
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10023
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10024
  false,  /* isTypedMethod.  Only relevant for methods. */
10025
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10026
};
10027
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10028
static_assert(0 < 5, "There is no slot for us");
10029
static const JSJitInfo onmouseenter_setterinfo = {
10030
  { (JSJitGetterOp)set_onmouseenter },
10031
  { prototypes::id::Window },
10032
  { PrototypeTraits<prototypes::id::Window>::Depth },
10033
  JSJitInfo::Setter,
10034
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10035
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
10036
  false,  /* isInfallible. False in setters. */
10037
  false,  /* isMovable.  Not relevant for setters. */
10038
  false, /* isEliminatable.  Not relevant for setters. */
10039
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10040
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10041
  false,  /* isTypedMethod.  Only relevant for methods. */
10042
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10043
};
10044
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10045
static_assert(0 < 5, "There is no slot for us");
10046
10047
MOZ_CAN_RUN_SCRIPT static bool
10048
get_onmouseleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
10049
0
{
10050
0
  AUTO_PROFILER_LABEL_FAST("get Window.onmouseleave", DOM, cx);
10051
0
10052
0
  RefPtr<EventHandlerNonNull> result(self->GetOnmouseleave());
10053
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10054
0
  if (result) {
10055
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
10056
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10057
0
      return false;
10058
0
    }
10059
0
    return true;
10060
0
  } else {
10061
0
    args.rval().setNull();
10062
0
    return true;
10063
0
  }
10064
0
}
10065
10066
MOZ_CAN_RUN_SCRIPT static bool
10067
set_onmouseleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
10068
0
{
10069
0
  AUTO_PROFILER_LABEL_FAST("set Window.onmouseleave", DOM, cx);
10070
0
10071
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10072
0
  if (args[0].isObject()) {
10073
0
    { // scope for tempRoot and tempGlobalRoot if needed
10074
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
10075
0
    }
10076
0
  } else {
10077
0
    arg0 = nullptr;
10078
0
  }
10079
0
  self->SetOnmouseleave(Constify(arg0));
10080
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10081
0
10082
0
  return true;
10083
0
}
10084
10085
static const JSJitInfo onmouseleave_getterinfo = {
10086
  { (JSJitGetterOp)get_onmouseleave },
10087
  { prototypes::id::Window },
10088
  { PrototypeTraits<prototypes::id::Window>::Depth },
10089
  JSJitInfo::Getter,
10090
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10091
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
10092
  false,  /* isInfallible. False in setters. */
10093
  false,  /* isMovable.  Not relevant for setters. */
10094
  false, /* isEliminatable.  Not relevant for setters. */
10095
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10096
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10097
  false,  /* isTypedMethod.  Only relevant for methods. */
10098
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10099
};
10100
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10101
static_assert(0 < 5, "There is no slot for us");
10102
static const JSJitInfo onmouseleave_setterinfo = {
10103
  { (JSJitGetterOp)set_onmouseleave },
10104
  { prototypes::id::Window },
10105
  { PrototypeTraits<prototypes::id::Window>::Depth },
10106
  JSJitInfo::Setter,
10107
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10108
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
10109
  false,  /* isInfallible. False in setters. */
10110
  false,  /* isMovable.  Not relevant for setters. */
10111
  false, /* isEliminatable.  Not relevant for setters. */
10112
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10113
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10114
  false,  /* isTypedMethod.  Only relevant for methods. */
10115
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10116
};
10117
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10118
static_assert(0 < 5, "There is no slot for us");
10119
10120
MOZ_CAN_RUN_SCRIPT static bool
10121
get_onmousemove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
10122
0
{
10123
0
  AUTO_PROFILER_LABEL_FAST("get Window.onmousemove", DOM, cx);
10124
0
10125
0
  RefPtr<EventHandlerNonNull> result(self->GetOnmousemove());
10126
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10127
0
  if (result) {
10128
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
10129
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10130
0
      return false;
10131
0
    }
10132
0
    return true;
10133
0
  } else {
10134
0
    args.rval().setNull();
10135
0
    return true;
10136
0
  }
10137
0
}
10138
10139
MOZ_CAN_RUN_SCRIPT static bool
10140
set_onmousemove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
10141
0
{
10142
0
  AUTO_PROFILER_LABEL_FAST("set Window.onmousemove", DOM, cx);
10143
0
10144
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10145
0
  if (args[0].isObject()) {
10146
0
    { // scope for tempRoot and tempGlobalRoot if needed
10147
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
10148
0
    }
10149
0
  } else {
10150
0
    arg0 = nullptr;
10151
0
  }
10152
0
  self->SetOnmousemove(Constify(arg0));
10153
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10154
0
10155
0
  return true;
10156
0
}
10157
10158
static const JSJitInfo onmousemove_getterinfo = {
10159
  { (JSJitGetterOp)get_onmousemove },
10160
  { prototypes::id::Window },
10161
  { PrototypeTraits<prototypes::id::Window>::Depth },
10162
  JSJitInfo::Getter,
10163
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10164
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
10165
  false,  /* isInfallible. False in setters. */
10166
  false,  /* isMovable.  Not relevant for setters. */
10167
  false, /* isEliminatable.  Not relevant for setters. */
10168
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10169
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10170
  false,  /* isTypedMethod.  Only relevant for methods. */
10171
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10172
};
10173
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10174
static_assert(0 < 5, "There is no slot for us");
10175
static const JSJitInfo onmousemove_setterinfo = {
10176
  { (JSJitGetterOp)set_onmousemove },
10177
  { prototypes::id::Window },
10178
  { PrototypeTraits<prototypes::id::Window>::Depth },
10179
  JSJitInfo::Setter,
10180
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10181
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
10182
  false,  /* isInfallible. False in setters. */
10183
  false,  /* isMovable.  Not relevant for setters. */
10184
  false, /* isEliminatable.  Not relevant for setters. */
10185
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10186
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10187
  false,  /* isTypedMethod.  Only relevant for methods. */
10188
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10189
};
10190
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10191
static_assert(0 < 5, "There is no slot for us");
10192
10193
MOZ_CAN_RUN_SCRIPT static bool
10194
get_onmouseout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
10195
0
{
10196
0
  AUTO_PROFILER_LABEL_FAST("get Window.onmouseout", DOM, cx);
10197
0
10198
0
  RefPtr<EventHandlerNonNull> result(self->GetOnmouseout());
10199
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10200
0
  if (result) {
10201
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
10202
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10203
0
      return false;
10204
0
    }
10205
0
    return true;
10206
0
  } else {
10207
0
    args.rval().setNull();
10208
0
    return true;
10209
0
  }
10210
0
}
10211
10212
MOZ_CAN_RUN_SCRIPT static bool
10213
set_onmouseout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
10214
0
{
10215
0
  AUTO_PROFILER_LABEL_FAST("set Window.onmouseout", DOM, cx);
10216
0
10217
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10218
0
  if (args[0].isObject()) {
10219
0
    { // scope for tempRoot and tempGlobalRoot if needed
10220
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
10221
0
    }
10222
0
  } else {
10223
0
    arg0 = nullptr;
10224
0
  }
10225
0
  self->SetOnmouseout(Constify(arg0));
10226
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10227
0
10228
0
  return true;
10229
0
}
10230
10231
static const JSJitInfo onmouseout_getterinfo = {
10232
  { (JSJitGetterOp)get_onmouseout },
10233
  { prototypes::id::Window },
10234
  { PrototypeTraits<prototypes::id::Window>::Depth },
10235
  JSJitInfo::Getter,
10236
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10237
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
10238
  false,  /* isInfallible. False in setters. */
10239
  false,  /* isMovable.  Not relevant for setters. */
10240
  false, /* isEliminatable.  Not relevant for setters. */
10241
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10242
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10243
  false,  /* isTypedMethod.  Only relevant for methods. */
10244
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10245
};
10246
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10247
static_assert(0 < 5, "There is no slot for us");
10248
static const JSJitInfo onmouseout_setterinfo = {
10249
  { (JSJitGetterOp)set_onmouseout },
10250
  { prototypes::id::Window },
10251
  { PrototypeTraits<prototypes::id::Window>::Depth },
10252
  JSJitInfo::Setter,
10253
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10254
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
10255
  false,  /* isInfallible. False in setters. */
10256
  false,  /* isMovable.  Not relevant for setters. */
10257
  false, /* isEliminatable.  Not relevant for setters. */
10258
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10259
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10260
  false,  /* isTypedMethod.  Only relevant for methods. */
10261
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10262
};
10263
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10264
static_assert(0 < 5, "There is no slot for us");
10265
10266
MOZ_CAN_RUN_SCRIPT static bool
10267
get_onmouseover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
10268
0
{
10269
0
  AUTO_PROFILER_LABEL_FAST("get Window.onmouseover", DOM, cx);
10270
0
10271
0
  RefPtr<EventHandlerNonNull> result(self->GetOnmouseover());
10272
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10273
0
  if (result) {
10274
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
10275
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10276
0
      return false;
10277
0
    }
10278
0
    return true;
10279
0
  } else {
10280
0
    args.rval().setNull();
10281
0
    return true;
10282
0
  }
10283
0
}
10284
10285
MOZ_CAN_RUN_SCRIPT static bool
10286
set_onmouseover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
10287
0
{
10288
0
  AUTO_PROFILER_LABEL_FAST("set Window.onmouseover", DOM, cx);
10289
0
10290
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10291
0
  if (args[0].isObject()) {
10292
0
    { // scope for tempRoot and tempGlobalRoot if needed
10293
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
10294
0
    }
10295
0
  } else {
10296
0
    arg0 = nullptr;
10297
0
  }
10298
0
  self->SetOnmouseover(Constify(arg0));
10299
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10300
0
10301
0
  return true;
10302
0
}
10303
10304
static const JSJitInfo onmouseover_getterinfo = {
10305
  { (JSJitGetterOp)get_onmouseover },
10306
  { prototypes::id::Window },
10307
  { PrototypeTraits<prototypes::id::Window>::Depth },
10308
  JSJitInfo::Getter,
10309
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10310
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
10311
  false,  /* isInfallible. False in setters. */
10312
  false,  /* isMovable.  Not relevant for setters. */
10313
  false, /* isEliminatable.  Not relevant for setters. */
10314
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10315
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10316
  false,  /* isTypedMethod.  Only relevant for methods. */
10317
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10318
};
10319
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10320
static_assert(0 < 5, "There is no slot for us");
10321
static const JSJitInfo onmouseover_setterinfo = {
10322
  { (JSJitGetterOp)set_onmouseover },
10323
  { prototypes::id::Window },
10324
  { PrototypeTraits<prototypes::id::Window>::Depth },
10325
  JSJitInfo::Setter,
10326
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10327
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
10328
  false,  /* isInfallible. False in setters. */
10329
  false,  /* isMovable.  Not relevant for setters. */
10330
  false, /* isEliminatable.  Not relevant for setters. */
10331
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10332
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10333
  false,  /* isTypedMethod.  Only relevant for methods. */
10334
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10335
};
10336
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10337
static_assert(0 < 5, "There is no slot for us");
10338
10339
MOZ_CAN_RUN_SCRIPT static bool
10340
get_onmouseup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
10341
0
{
10342
0
  AUTO_PROFILER_LABEL_FAST("get Window.onmouseup", DOM, cx);
10343
0
10344
0
  RefPtr<EventHandlerNonNull> result(self->GetOnmouseup());
10345
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10346
0
  if (result) {
10347
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
10348
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10349
0
      return false;
10350
0
    }
10351
0
    return true;
10352
0
  } else {
10353
0
    args.rval().setNull();
10354
0
    return true;
10355
0
  }
10356
0
}
10357
10358
MOZ_CAN_RUN_SCRIPT static bool
10359
set_onmouseup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
10360
0
{
10361
0
  AUTO_PROFILER_LABEL_FAST("set Window.onmouseup", DOM, cx);
10362
0
10363
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10364
0
  if (args[0].isObject()) {
10365
0
    { // scope for tempRoot and tempGlobalRoot if needed
10366
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
10367
0
    }
10368
0
  } else {
10369
0
    arg0 = nullptr;
10370
0
  }
10371
0
  self->SetOnmouseup(Constify(arg0));
10372
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10373
0
10374
0
  return true;
10375
0
}
10376
10377
static const JSJitInfo onmouseup_getterinfo = {
10378
  { (JSJitGetterOp)get_onmouseup },
10379
  { prototypes::id::Window },
10380
  { PrototypeTraits<prototypes::id::Window>::Depth },
10381
  JSJitInfo::Getter,
10382
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10383
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
10384
  false,  /* isInfallible. False in setters. */
10385
  false,  /* isMovable.  Not relevant for setters. */
10386
  false, /* isEliminatable.  Not relevant for setters. */
10387
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10388
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10389
  false,  /* isTypedMethod.  Only relevant for methods. */
10390
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10391
};
10392
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10393
static_assert(0 < 5, "There is no slot for us");
10394
static const JSJitInfo onmouseup_setterinfo = {
10395
  { (JSJitGetterOp)set_onmouseup },
10396
  { prototypes::id::Window },
10397
  { PrototypeTraits<prototypes::id::Window>::Depth },
10398
  JSJitInfo::Setter,
10399
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10400
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
10401
  false,  /* isInfallible. False in setters. */
10402
  false,  /* isMovable.  Not relevant for setters. */
10403
  false, /* isEliminatable.  Not relevant for setters. */
10404
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10405
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10406
  false,  /* isTypedMethod.  Only relevant for methods. */
10407
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10408
};
10409
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10410
static_assert(0 < 5, "There is no slot for us");
10411
10412
MOZ_CAN_RUN_SCRIPT static bool
10413
get_onwheel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
10414
0
{
10415
0
  AUTO_PROFILER_LABEL_FAST("get Window.onwheel", DOM, cx);
10416
0
10417
0
  RefPtr<EventHandlerNonNull> result(self->GetOnwheel());
10418
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10419
0
  if (result) {
10420
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
10421
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10422
0
      return false;
10423
0
    }
10424
0
    return true;
10425
0
  } else {
10426
0
    args.rval().setNull();
10427
0
    return true;
10428
0
  }
10429
0
}
10430
10431
MOZ_CAN_RUN_SCRIPT static bool
10432
set_onwheel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
10433
0
{
10434
0
  AUTO_PROFILER_LABEL_FAST("set Window.onwheel", DOM, cx);
10435
0
10436
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10437
0
  if (args[0].isObject()) {
10438
0
    { // scope for tempRoot and tempGlobalRoot if needed
10439
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
10440
0
    }
10441
0
  } else {
10442
0
    arg0 = nullptr;
10443
0
  }
10444
0
  self->SetOnwheel(Constify(arg0));
10445
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10446
0
10447
0
  return true;
10448
0
}
10449
10450
static const JSJitInfo onwheel_getterinfo = {
10451
  { (JSJitGetterOp)get_onwheel },
10452
  { prototypes::id::Window },
10453
  { PrototypeTraits<prototypes::id::Window>::Depth },
10454
  JSJitInfo::Getter,
10455
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10456
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
10457
  false,  /* isInfallible. False in setters. */
10458
  false,  /* isMovable.  Not relevant for setters. */
10459
  false, /* isEliminatable.  Not relevant for setters. */
10460
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10461
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10462
  false,  /* isTypedMethod.  Only relevant for methods. */
10463
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10464
};
10465
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10466
static_assert(0 < 5, "There is no slot for us");
10467
static const JSJitInfo onwheel_setterinfo = {
10468
  { (JSJitGetterOp)set_onwheel },
10469
  { prototypes::id::Window },
10470
  { PrototypeTraits<prototypes::id::Window>::Depth },
10471
  JSJitInfo::Setter,
10472
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10473
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
10474
  false,  /* isInfallible. False in setters. */
10475
  false,  /* isMovable.  Not relevant for setters. */
10476
  false, /* isEliminatable.  Not relevant for setters. */
10477
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10478
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10479
  false,  /* isTypedMethod.  Only relevant for methods. */
10480
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10481
};
10482
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10483
static_assert(0 < 5, "There is no slot for us");
10484
10485
MOZ_CAN_RUN_SCRIPT static bool
10486
get_onpause(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
10487
0
{
10488
0
  AUTO_PROFILER_LABEL_FAST("get Window.onpause", DOM, cx);
10489
0
10490
0
  RefPtr<EventHandlerNonNull> result(self->GetOnpause());
10491
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10492
0
  if (result) {
10493
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
10494
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10495
0
      return false;
10496
0
    }
10497
0
    return true;
10498
0
  } else {
10499
0
    args.rval().setNull();
10500
0
    return true;
10501
0
  }
10502
0
}
10503
10504
MOZ_CAN_RUN_SCRIPT static bool
10505
set_onpause(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
10506
0
{
10507
0
  AUTO_PROFILER_LABEL_FAST("set Window.onpause", DOM, cx);
10508
0
10509
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10510
0
  if (args[0].isObject()) {
10511
0
    { // scope for tempRoot and tempGlobalRoot if needed
10512
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
10513
0
    }
10514
0
  } else {
10515
0
    arg0 = nullptr;
10516
0
  }
10517
0
  self->SetOnpause(Constify(arg0));
10518
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10519
0
10520
0
  return true;
10521
0
}
10522
10523
static const JSJitInfo onpause_getterinfo = {
10524
  { (JSJitGetterOp)get_onpause },
10525
  { prototypes::id::Window },
10526
  { PrototypeTraits<prototypes::id::Window>::Depth },
10527
  JSJitInfo::Getter,
10528
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10529
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
10530
  false,  /* isInfallible. False in setters. */
10531
  false,  /* isMovable.  Not relevant for setters. */
10532
  false, /* isEliminatable.  Not relevant for setters. */
10533
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10534
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10535
  false,  /* isTypedMethod.  Only relevant for methods. */
10536
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10537
};
10538
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10539
static_assert(0 < 5, "There is no slot for us");
10540
static const JSJitInfo onpause_setterinfo = {
10541
  { (JSJitGetterOp)set_onpause },
10542
  { prototypes::id::Window },
10543
  { PrototypeTraits<prototypes::id::Window>::Depth },
10544
  JSJitInfo::Setter,
10545
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10546
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
10547
  false,  /* isInfallible. False in setters. */
10548
  false,  /* isMovable.  Not relevant for setters. */
10549
  false, /* isEliminatable.  Not relevant for setters. */
10550
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10551
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10552
  false,  /* isTypedMethod.  Only relevant for methods. */
10553
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10554
};
10555
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10556
static_assert(0 < 5, "There is no slot for us");
10557
10558
MOZ_CAN_RUN_SCRIPT static bool
10559
get_onplay(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
10560
0
{
10561
0
  AUTO_PROFILER_LABEL_FAST("get Window.onplay", DOM, cx);
10562
0
10563
0
  RefPtr<EventHandlerNonNull> result(self->GetOnplay());
10564
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10565
0
  if (result) {
10566
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
10567
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10568
0
      return false;
10569
0
    }
10570
0
    return true;
10571
0
  } else {
10572
0
    args.rval().setNull();
10573
0
    return true;
10574
0
  }
10575
0
}
10576
10577
MOZ_CAN_RUN_SCRIPT static bool
10578
set_onplay(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
10579
0
{
10580
0
  AUTO_PROFILER_LABEL_FAST("set Window.onplay", DOM, cx);
10581
0
10582
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10583
0
  if (args[0].isObject()) {
10584
0
    { // scope for tempRoot and tempGlobalRoot if needed
10585
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
10586
0
    }
10587
0
  } else {
10588
0
    arg0 = nullptr;
10589
0
  }
10590
0
  self->SetOnplay(Constify(arg0));
10591
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10592
0
10593
0
  return true;
10594
0
}
10595
10596
static const JSJitInfo onplay_getterinfo = {
10597
  { (JSJitGetterOp)get_onplay },
10598
  { prototypes::id::Window },
10599
  { PrototypeTraits<prototypes::id::Window>::Depth },
10600
  JSJitInfo::Getter,
10601
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10602
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
10603
  false,  /* isInfallible. False in setters. */
10604
  false,  /* isMovable.  Not relevant for setters. */
10605
  false, /* isEliminatable.  Not relevant for setters. */
10606
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10607
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10608
  false,  /* isTypedMethod.  Only relevant for methods. */
10609
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10610
};
10611
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10612
static_assert(0 < 5, "There is no slot for us");
10613
static const JSJitInfo onplay_setterinfo = {
10614
  { (JSJitGetterOp)set_onplay },
10615
  { prototypes::id::Window },
10616
  { PrototypeTraits<prototypes::id::Window>::Depth },
10617
  JSJitInfo::Setter,
10618
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10619
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
10620
  false,  /* isInfallible. False in setters. */
10621
  false,  /* isMovable.  Not relevant for setters. */
10622
  false, /* isEliminatable.  Not relevant for setters. */
10623
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10624
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10625
  false,  /* isTypedMethod.  Only relevant for methods. */
10626
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10627
};
10628
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10629
static_assert(0 < 5, "There is no slot for us");
10630
10631
MOZ_CAN_RUN_SCRIPT static bool
10632
get_onplaying(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
10633
0
{
10634
0
  AUTO_PROFILER_LABEL_FAST("get Window.onplaying", DOM, cx);
10635
0
10636
0
  RefPtr<EventHandlerNonNull> result(self->GetOnplaying());
10637
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10638
0
  if (result) {
10639
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
10640
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10641
0
      return false;
10642
0
    }
10643
0
    return true;
10644
0
  } else {
10645
0
    args.rval().setNull();
10646
0
    return true;
10647
0
  }
10648
0
}
10649
10650
MOZ_CAN_RUN_SCRIPT static bool
10651
set_onplaying(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
10652
0
{
10653
0
  AUTO_PROFILER_LABEL_FAST("set Window.onplaying", DOM, cx);
10654
0
10655
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10656
0
  if (args[0].isObject()) {
10657
0
    { // scope for tempRoot and tempGlobalRoot if needed
10658
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
10659
0
    }
10660
0
  } else {
10661
0
    arg0 = nullptr;
10662
0
  }
10663
0
  self->SetOnplaying(Constify(arg0));
10664
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10665
0
10666
0
  return true;
10667
0
}
10668
10669
static const JSJitInfo onplaying_getterinfo = {
10670
  { (JSJitGetterOp)get_onplaying },
10671
  { prototypes::id::Window },
10672
  { PrototypeTraits<prototypes::id::Window>::Depth },
10673
  JSJitInfo::Getter,
10674
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10675
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
10676
  false,  /* isInfallible. False in setters. */
10677
  false,  /* isMovable.  Not relevant for setters. */
10678
  false, /* isEliminatable.  Not relevant for setters. */
10679
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10680
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10681
  false,  /* isTypedMethod.  Only relevant for methods. */
10682
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10683
};
10684
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10685
static_assert(0 < 5, "There is no slot for us");
10686
static const JSJitInfo onplaying_setterinfo = {
10687
  { (JSJitGetterOp)set_onplaying },
10688
  { prototypes::id::Window },
10689
  { PrototypeTraits<prototypes::id::Window>::Depth },
10690
  JSJitInfo::Setter,
10691
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10692
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
10693
  false,  /* isInfallible. False in setters. */
10694
  false,  /* isMovable.  Not relevant for setters. */
10695
  false, /* isEliminatable.  Not relevant for setters. */
10696
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10697
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10698
  false,  /* isTypedMethod.  Only relevant for methods. */
10699
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10700
};
10701
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10702
static_assert(0 < 5, "There is no slot for us");
10703
10704
MOZ_CAN_RUN_SCRIPT static bool
10705
get_onprogress(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
10706
0
{
10707
0
  AUTO_PROFILER_LABEL_FAST("get Window.onprogress", DOM, cx);
10708
0
10709
0
  RefPtr<EventHandlerNonNull> result(self->GetOnprogress());
10710
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10711
0
  if (result) {
10712
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
10713
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10714
0
      return false;
10715
0
    }
10716
0
    return true;
10717
0
  } else {
10718
0
    args.rval().setNull();
10719
0
    return true;
10720
0
  }
10721
0
}
10722
10723
MOZ_CAN_RUN_SCRIPT static bool
10724
set_onprogress(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
10725
0
{
10726
0
  AUTO_PROFILER_LABEL_FAST("set Window.onprogress", DOM, cx);
10727
0
10728
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10729
0
  if (args[0].isObject()) {
10730
0
    { // scope for tempRoot and tempGlobalRoot if needed
10731
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
10732
0
    }
10733
0
  } else {
10734
0
    arg0 = nullptr;
10735
0
  }
10736
0
  self->SetOnprogress(Constify(arg0));
10737
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10738
0
10739
0
  return true;
10740
0
}
10741
10742
static const JSJitInfo onprogress_getterinfo = {
10743
  { (JSJitGetterOp)get_onprogress },
10744
  { prototypes::id::Window },
10745
  { PrototypeTraits<prototypes::id::Window>::Depth },
10746
  JSJitInfo::Getter,
10747
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10748
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
10749
  false,  /* isInfallible. False in setters. */
10750
  false,  /* isMovable.  Not relevant for setters. */
10751
  false, /* isEliminatable.  Not relevant for setters. */
10752
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10753
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10754
  false,  /* isTypedMethod.  Only relevant for methods. */
10755
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10756
};
10757
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10758
static_assert(0 < 5, "There is no slot for us");
10759
static const JSJitInfo onprogress_setterinfo = {
10760
  { (JSJitGetterOp)set_onprogress },
10761
  { prototypes::id::Window },
10762
  { PrototypeTraits<prototypes::id::Window>::Depth },
10763
  JSJitInfo::Setter,
10764
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10765
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
10766
  false,  /* isInfallible. False in setters. */
10767
  false,  /* isMovable.  Not relevant for setters. */
10768
  false, /* isEliminatable.  Not relevant for setters. */
10769
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10770
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10771
  false,  /* isTypedMethod.  Only relevant for methods. */
10772
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10773
};
10774
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10775
static_assert(0 < 5, "There is no slot for us");
10776
10777
MOZ_CAN_RUN_SCRIPT static bool
10778
get_onratechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
10779
0
{
10780
0
  AUTO_PROFILER_LABEL_FAST("get Window.onratechange", DOM, cx);
10781
0
10782
0
  RefPtr<EventHandlerNonNull> result(self->GetOnratechange());
10783
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10784
0
  if (result) {
10785
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
10786
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10787
0
      return false;
10788
0
    }
10789
0
    return true;
10790
0
  } else {
10791
0
    args.rval().setNull();
10792
0
    return true;
10793
0
  }
10794
0
}
10795
10796
MOZ_CAN_RUN_SCRIPT static bool
10797
set_onratechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
10798
0
{
10799
0
  AUTO_PROFILER_LABEL_FAST("set Window.onratechange", DOM, cx);
10800
0
10801
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10802
0
  if (args[0].isObject()) {
10803
0
    { // scope for tempRoot and tempGlobalRoot if needed
10804
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
10805
0
    }
10806
0
  } else {
10807
0
    arg0 = nullptr;
10808
0
  }
10809
0
  self->SetOnratechange(Constify(arg0));
10810
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10811
0
10812
0
  return true;
10813
0
}
10814
10815
static const JSJitInfo onratechange_getterinfo = {
10816
  { (JSJitGetterOp)get_onratechange },
10817
  { prototypes::id::Window },
10818
  { PrototypeTraits<prototypes::id::Window>::Depth },
10819
  JSJitInfo::Getter,
10820
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10821
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
10822
  false,  /* isInfallible. False in setters. */
10823
  false,  /* isMovable.  Not relevant for setters. */
10824
  false, /* isEliminatable.  Not relevant for setters. */
10825
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10826
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10827
  false,  /* isTypedMethod.  Only relevant for methods. */
10828
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10829
};
10830
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10831
static_assert(0 < 5, "There is no slot for us");
10832
static const JSJitInfo onratechange_setterinfo = {
10833
  { (JSJitGetterOp)set_onratechange },
10834
  { prototypes::id::Window },
10835
  { PrototypeTraits<prototypes::id::Window>::Depth },
10836
  JSJitInfo::Setter,
10837
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10838
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
10839
  false,  /* isInfallible. False in setters. */
10840
  false,  /* isMovable.  Not relevant for setters. */
10841
  false, /* isEliminatable.  Not relevant for setters. */
10842
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10843
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10844
  false,  /* isTypedMethod.  Only relevant for methods. */
10845
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10846
};
10847
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10848
static_assert(0 < 5, "There is no slot for us");
10849
10850
MOZ_CAN_RUN_SCRIPT static bool
10851
get_onreset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
10852
0
{
10853
0
  AUTO_PROFILER_LABEL_FAST("get Window.onreset", DOM, cx);
10854
0
10855
0
  RefPtr<EventHandlerNonNull> result(self->GetOnreset());
10856
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10857
0
  if (result) {
10858
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
10859
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10860
0
      return false;
10861
0
    }
10862
0
    return true;
10863
0
  } else {
10864
0
    args.rval().setNull();
10865
0
    return true;
10866
0
  }
10867
0
}
10868
10869
MOZ_CAN_RUN_SCRIPT static bool
10870
set_onreset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
10871
0
{
10872
0
  AUTO_PROFILER_LABEL_FAST("set Window.onreset", DOM, cx);
10873
0
10874
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10875
0
  if (args[0].isObject()) {
10876
0
    { // scope for tempRoot and tempGlobalRoot if needed
10877
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
10878
0
    }
10879
0
  } else {
10880
0
    arg0 = nullptr;
10881
0
  }
10882
0
  self->SetOnreset(Constify(arg0));
10883
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10884
0
10885
0
  return true;
10886
0
}
10887
10888
static const JSJitInfo onreset_getterinfo = {
10889
  { (JSJitGetterOp)get_onreset },
10890
  { prototypes::id::Window },
10891
  { PrototypeTraits<prototypes::id::Window>::Depth },
10892
  JSJitInfo::Getter,
10893
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10894
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
10895
  false,  /* isInfallible. False in setters. */
10896
  false,  /* isMovable.  Not relevant for setters. */
10897
  false, /* isEliminatable.  Not relevant for setters. */
10898
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10899
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10900
  false,  /* isTypedMethod.  Only relevant for methods. */
10901
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10902
};
10903
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10904
static_assert(0 < 5, "There is no slot for us");
10905
static const JSJitInfo onreset_setterinfo = {
10906
  { (JSJitGetterOp)set_onreset },
10907
  { prototypes::id::Window },
10908
  { PrototypeTraits<prototypes::id::Window>::Depth },
10909
  JSJitInfo::Setter,
10910
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10911
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
10912
  false,  /* isInfallible. False in setters. */
10913
  false,  /* isMovable.  Not relevant for setters. */
10914
  false, /* isEliminatable.  Not relevant for setters. */
10915
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10916
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10917
  false,  /* isTypedMethod.  Only relevant for methods. */
10918
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10919
};
10920
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10921
static_assert(0 < 5, "There is no slot for us");
10922
10923
MOZ_CAN_RUN_SCRIPT static bool
10924
get_onresize(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
10925
0
{
10926
0
  AUTO_PROFILER_LABEL_FAST("get Window.onresize", DOM, cx);
10927
0
10928
0
  RefPtr<EventHandlerNonNull> result(self->GetOnresize());
10929
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10930
0
  if (result) {
10931
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
10932
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10933
0
      return false;
10934
0
    }
10935
0
    return true;
10936
0
  } else {
10937
0
    args.rval().setNull();
10938
0
    return true;
10939
0
  }
10940
0
}
10941
10942
MOZ_CAN_RUN_SCRIPT static bool
10943
set_onresize(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
10944
0
{
10945
0
  AUTO_PROFILER_LABEL_FAST("set Window.onresize", DOM, cx);
10946
0
10947
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10948
0
  if (args[0].isObject()) {
10949
0
    { // scope for tempRoot and tempGlobalRoot if needed
10950
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
10951
0
    }
10952
0
  } else {
10953
0
    arg0 = nullptr;
10954
0
  }
10955
0
  self->SetOnresize(Constify(arg0));
10956
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
10957
0
10958
0
  return true;
10959
0
}
10960
10961
static const JSJitInfo onresize_getterinfo = {
10962
  { (JSJitGetterOp)get_onresize },
10963
  { prototypes::id::Window },
10964
  { PrototypeTraits<prototypes::id::Window>::Depth },
10965
  JSJitInfo::Getter,
10966
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10967
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
10968
  false,  /* isInfallible. False in setters. */
10969
  false,  /* isMovable.  Not relevant for setters. */
10970
  false, /* isEliminatable.  Not relevant for setters. */
10971
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10972
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10973
  false,  /* isTypedMethod.  Only relevant for methods. */
10974
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10975
};
10976
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10977
static_assert(0 < 5, "There is no slot for us");
10978
static const JSJitInfo onresize_setterinfo = {
10979
  { (JSJitGetterOp)set_onresize },
10980
  { prototypes::id::Window },
10981
  { PrototypeTraits<prototypes::id::Window>::Depth },
10982
  JSJitInfo::Setter,
10983
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
10984
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
10985
  false,  /* isInfallible. False in setters. */
10986
  false,  /* isMovable.  Not relevant for setters. */
10987
  false, /* isEliminatable.  Not relevant for setters. */
10988
  false, /* isAlwaysInSlot.  Only relevant for getters. */
10989
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
10990
  false,  /* isTypedMethod.  Only relevant for methods. */
10991
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
10992
};
10993
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10994
static_assert(0 < 5, "There is no slot for us");
10995
10996
MOZ_CAN_RUN_SCRIPT static bool
10997
get_onscroll(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
10998
0
{
10999
0
  AUTO_PROFILER_LABEL_FAST("get Window.onscroll", DOM, cx);
11000
0
11001
0
  RefPtr<EventHandlerNonNull> result(self->GetOnscroll());
11002
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11003
0
  if (result) {
11004
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
11005
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11006
0
      return false;
11007
0
    }
11008
0
    return true;
11009
0
  } else {
11010
0
    args.rval().setNull();
11011
0
    return true;
11012
0
  }
11013
0
}
11014
11015
MOZ_CAN_RUN_SCRIPT static bool
11016
set_onscroll(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
11017
0
{
11018
0
  AUTO_PROFILER_LABEL_FAST("set Window.onscroll", DOM, cx);
11019
0
11020
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11021
0
  if (args[0].isObject()) {
11022
0
    { // scope for tempRoot and tempGlobalRoot if needed
11023
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
11024
0
    }
11025
0
  } else {
11026
0
    arg0 = nullptr;
11027
0
  }
11028
0
  self->SetOnscroll(Constify(arg0));
11029
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11030
0
11031
0
  return true;
11032
0
}
11033
11034
static const JSJitInfo onscroll_getterinfo = {
11035
  { (JSJitGetterOp)get_onscroll },
11036
  { prototypes::id::Window },
11037
  { PrototypeTraits<prototypes::id::Window>::Depth },
11038
  JSJitInfo::Getter,
11039
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11040
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
11041
  false,  /* isInfallible. False in setters. */
11042
  false,  /* isMovable.  Not relevant for setters. */
11043
  false, /* isEliminatable.  Not relevant for setters. */
11044
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11045
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11046
  false,  /* isTypedMethod.  Only relevant for methods. */
11047
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11048
};
11049
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11050
static_assert(0 < 5, "There is no slot for us");
11051
static const JSJitInfo onscroll_setterinfo = {
11052
  { (JSJitGetterOp)set_onscroll },
11053
  { prototypes::id::Window },
11054
  { PrototypeTraits<prototypes::id::Window>::Depth },
11055
  JSJitInfo::Setter,
11056
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11057
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
11058
  false,  /* isInfallible. False in setters. */
11059
  false,  /* isMovable.  Not relevant for setters. */
11060
  false, /* isEliminatable.  Not relevant for setters. */
11061
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11062
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11063
  false,  /* isTypedMethod.  Only relevant for methods. */
11064
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11065
};
11066
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11067
static_assert(0 < 5, "There is no slot for us");
11068
11069
MOZ_CAN_RUN_SCRIPT static bool
11070
get_onseeked(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
11071
0
{
11072
0
  AUTO_PROFILER_LABEL_FAST("get Window.onseeked", DOM, cx);
11073
0
11074
0
  RefPtr<EventHandlerNonNull> result(self->GetOnseeked());
11075
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11076
0
  if (result) {
11077
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
11078
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11079
0
      return false;
11080
0
    }
11081
0
    return true;
11082
0
  } else {
11083
0
    args.rval().setNull();
11084
0
    return true;
11085
0
  }
11086
0
}
11087
11088
MOZ_CAN_RUN_SCRIPT static bool
11089
set_onseeked(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
11090
0
{
11091
0
  AUTO_PROFILER_LABEL_FAST("set Window.onseeked", DOM, cx);
11092
0
11093
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11094
0
  if (args[0].isObject()) {
11095
0
    { // scope for tempRoot and tempGlobalRoot if needed
11096
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
11097
0
    }
11098
0
  } else {
11099
0
    arg0 = nullptr;
11100
0
  }
11101
0
  self->SetOnseeked(Constify(arg0));
11102
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11103
0
11104
0
  return true;
11105
0
}
11106
11107
static const JSJitInfo onseeked_getterinfo = {
11108
  { (JSJitGetterOp)get_onseeked },
11109
  { prototypes::id::Window },
11110
  { PrototypeTraits<prototypes::id::Window>::Depth },
11111
  JSJitInfo::Getter,
11112
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11113
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
11114
  false,  /* isInfallible. False in setters. */
11115
  false,  /* isMovable.  Not relevant for setters. */
11116
  false, /* isEliminatable.  Not relevant for setters. */
11117
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11118
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11119
  false,  /* isTypedMethod.  Only relevant for methods. */
11120
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11121
};
11122
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11123
static_assert(0 < 5, "There is no slot for us");
11124
static const JSJitInfo onseeked_setterinfo = {
11125
  { (JSJitGetterOp)set_onseeked },
11126
  { prototypes::id::Window },
11127
  { PrototypeTraits<prototypes::id::Window>::Depth },
11128
  JSJitInfo::Setter,
11129
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11130
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
11131
  false,  /* isInfallible. False in setters. */
11132
  false,  /* isMovable.  Not relevant for setters. */
11133
  false, /* isEliminatable.  Not relevant for setters. */
11134
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11135
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11136
  false,  /* isTypedMethod.  Only relevant for methods. */
11137
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11138
};
11139
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11140
static_assert(0 < 5, "There is no slot for us");
11141
11142
MOZ_CAN_RUN_SCRIPT static bool
11143
get_onseeking(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
11144
0
{
11145
0
  AUTO_PROFILER_LABEL_FAST("get Window.onseeking", DOM, cx);
11146
0
11147
0
  RefPtr<EventHandlerNonNull> result(self->GetOnseeking());
11148
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11149
0
  if (result) {
11150
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
11151
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11152
0
      return false;
11153
0
    }
11154
0
    return true;
11155
0
  } else {
11156
0
    args.rval().setNull();
11157
0
    return true;
11158
0
  }
11159
0
}
11160
11161
MOZ_CAN_RUN_SCRIPT static bool
11162
set_onseeking(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
11163
0
{
11164
0
  AUTO_PROFILER_LABEL_FAST("set Window.onseeking", DOM, cx);
11165
0
11166
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11167
0
  if (args[0].isObject()) {
11168
0
    { // scope for tempRoot and tempGlobalRoot if needed
11169
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
11170
0
    }
11171
0
  } else {
11172
0
    arg0 = nullptr;
11173
0
  }
11174
0
  self->SetOnseeking(Constify(arg0));
11175
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11176
0
11177
0
  return true;
11178
0
}
11179
11180
static const JSJitInfo onseeking_getterinfo = {
11181
  { (JSJitGetterOp)get_onseeking },
11182
  { prototypes::id::Window },
11183
  { PrototypeTraits<prototypes::id::Window>::Depth },
11184
  JSJitInfo::Getter,
11185
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11186
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
11187
  false,  /* isInfallible. False in setters. */
11188
  false,  /* isMovable.  Not relevant for setters. */
11189
  false, /* isEliminatable.  Not relevant for setters. */
11190
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11191
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11192
  false,  /* isTypedMethod.  Only relevant for methods. */
11193
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11194
};
11195
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11196
static_assert(0 < 5, "There is no slot for us");
11197
static const JSJitInfo onseeking_setterinfo = {
11198
  { (JSJitGetterOp)set_onseeking },
11199
  { prototypes::id::Window },
11200
  { PrototypeTraits<prototypes::id::Window>::Depth },
11201
  JSJitInfo::Setter,
11202
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11203
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
11204
  false,  /* isInfallible. False in setters. */
11205
  false,  /* isMovable.  Not relevant for setters. */
11206
  false, /* isEliminatable.  Not relevant for setters. */
11207
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11208
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11209
  false,  /* isTypedMethod.  Only relevant for methods. */
11210
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11211
};
11212
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11213
static_assert(0 < 5, "There is no slot for us");
11214
11215
MOZ_CAN_RUN_SCRIPT static bool
11216
get_onselect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
11217
0
{
11218
0
  AUTO_PROFILER_LABEL_FAST("get Window.onselect", DOM, cx);
11219
0
11220
0
  RefPtr<EventHandlerNonNull> result(self->GetOnselect());
11221
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11222
0
  if (result) {
11223
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
11224
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11225
0
      return false;
11226
0
    }
11227
0
    return true;
11228
0
  } else {
11229
0
    args.rval().setNull();
11230
0
    return true;
11231
0
  }
11232
0
}
11233
11234
MOZ_CAN_RUN_SCRIPT static bool
11235
set_onselect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
11236
0
{
11237
0
  AUTO_PROFILER_LABEL_FAST("set Window.onselect", DOM, cx);
11238
0
11239
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11240
0
  if (args[0].isObject()) {
11241
0
    { // scope for tempRoot and tempGlobalRoot if needed
11242
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
11243
0
    }
11244
0
  } else {
11245
0
    arg0 = nullptr;
11246
0
  }
11247
0
  self->SetOnselect(Constify(arg0));
11248
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11249
0
11250
0
  return true;
11251
0
}
11252
11253
static const JSJitInfo onselect_getterinfo = {
11254
  { (JSJitGetterOp)get_onselect },
11255
  { prototypes::id::Window },
11256
  { PrototypeTraits<prototypes::id::Window>::Depth },
11257
  JSJitInfo::Getter,
11258
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11259
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
11260
  false,  /* isInfallible. False in setters. */
11261
  false,  /* isMovable.  Not relevant for setters. */
11262
  false, /* isEliminatable.  Not relevant for setters. */
11263
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11264
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11265
  false,  /* isTypedMethod.  Only relevant for methods. */
11266
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11267
};
11268
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11269
static_assert(0 < 5, "There is no slot for us");
11270
static const JSJitInfo onselect_setterinfo = {
11271
  { (JSJitGetterOp)set_onselect },
11272
  { prototypes::id::Window },
11273
  { PrototypeTraits<prototypes::id::Window>::Depth },
11274
  JSJitInfo::Setter,
11275
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11276
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
11277
  false,  /* isInfallible. False in setters. */
11278
  false,  /* isMovable.  Not relevant for setters. */
11279
  false, /* isEliminatable.  Not relevant for setters. */
11280
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11281
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11282
  false,  /* isTypedMethod.  Only relevant for methods. */
11283
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11284
};
11285
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11286
static_assert(0 < 5, "There is no slot for us");
11287
11288
MOZ_CAN_RUN_SCRIPT static bool
11289
get_onshow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
11290
0
{
11291
0
  AUTO_PROFILER_LABEL_FAST("get Window.onshow", DOM, cx);
11292
0
11293
0
  RefPtr<EventHandlerNonNull> result(self->GetOnshow());
11294
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11295
0
  if (result) {
11296
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
11297
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11298
0
      return false;
11299
0
    }
11300
0
    return true;
11301
0
  } else {
11302
0
    args.rval().setNull();
11303
0
    return true;
11304
0
  }
11305
0
}
11306
11307
MOZ_CAN_RUN_SCRIPT static bool
11308
set_onshow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
11309
0
{
11310
0
  AUTO_PROFILER_LABEL_FAST("set Window.onshow", DOM, cx);
11311
0
11312
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11313
0
  if (args[0].isObject()) {
11314
0
    { // scope for tempRoot and tempGlobalRoot if needed
11315
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
11316
0
    }
11317
0
  } else {
11318
0
    arg0 = nullptr;
11319
0
  }
11320
0
  self->SetOnshow(Constify(arg0));
11321
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11322
0
11323
0
  return true;
11324
0
}
11325
11326
static const JSJitInfo onshow_getterinfo = {
11327
  { (JSJitGetterOp)get_onshow },
11328
  { prototypes::id::Window },
11329
  { PrototypeTraits<prototypes::id::Window>::Depth },
11330
  JSJitInfo::Getter,
11331
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11332
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
11333
  false,  /* isInfallible. False in setters. */
11334
  false,  /* isMovable.  Not relevant for setters. */
11335
  false, /* isEliminatable.  Not relevant for setters. */
11336
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11337
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11338
  false,  /* isTypedMethod.  Only relevant for methods. */
11339
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11340
};
11341
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11342
static_assert(0 < 5, "There is no slot for us");
11343
static const JSJitInfo onshow_setterinfo = {
11344
  { (JSJitGetterOp)set_onshow },
11345
  { prototypes::id::Window },
11346
  { PrototypeTraits<prototypes::id::Window>::Depth },
11347
  JSJitInfo::Setter,
11348
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11349
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
11350
  false,  /* isInfallible. False in setters. */
11351
  false,  /* isMovable.  Not relevant for setters. */
11352
  false, /* isEliminatable.  Not relevant for setters. */
11353
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11354
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11355
  false,  /* isTypedMethod.  Only relevant for methods. */
11356
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11357
};
11358
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11359
static_assert(0 < 5, "There is no slot for us");
11360
11361
MOZ_CAN_RUN_SCRIPT static bool
11362
get_onstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
11363
0
{
11364
0
  AUTO_PROFILER_LABEL_FAST("get Window.onstalled", DOM, cx);
11365
0
11366
0
  RefPtr<EventHandlerNonNull> result(self->GetOnstalled());
11367
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11368
0
  if (result) {
11369
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
11370
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11371
0
      return false;
11372
0
    }
11373
0
    return true;
11374
0
  } else {
11375
0
    args.rval().setNull();
11376
0
    return true;
11377
0
  }
11378
0
}
11379
11380
MOZ_CAN_RUN_SCRIPT static bool
11381
set_onstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
11382
0
{
11383
0
  AUTO_PROFILER_LABEL_FAST("set Window.onstalled", DOM, cx);
11384
0
11385
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11386
0
  if (args[0].isObject()) {
11387
0
    { // scope for tempRoot and tempGlobalRoot if needed
11388
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
11389
0
    }
11390
0
  } else {
11391
0
    arg0 = nullptr;
11392
0
  }
11393
0
  self->SetOnstalled(Constify(arg0));
11394
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11395
0
11396
0
  return true;
11397
0
}
11398
11399
static const JSJitInfo onstalled_getterinfo = {
11400
  { (JSJitGetterOp)get_onstalled },
11401
  { prototypes::id::Window },
11402
  { PrototypeTraits<prototypes::id::Window>::Depth },
11403
  JSJitInfo::Getter,
11404
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11405
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
11406
  false,  /* isInfallible. False in setters. */
11407
  false,  /* isMovable.  Not relevant for setters. */
11408
  false, /* isEliminatable.  Not relevant for setters. */
11409
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11410
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11411
  false,  /* isTypedMethod.  Only relevant for methods. */
11412
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11413
};
11414
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11415
static_assert(0 < 5, "There is no slot for us");
11416
static const JSJitInfo onstalled_setterinfo = {
11417
  { (JSJitGetterOp)set_onstalled },
11418
  { prototypes::id::Window },
11419
  { PrototypeTraits<prototypes::id::Window>::Depth },
11420
  JSJitInfo::Setter,
11421
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11422
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
11423
  false,  /* isInfallible. False in setters. */
11424
  false,  /* isMovable.  Not relevant for setters. */
11425
  false, /* isEliminatable.  Not relevant for setters. */
11426
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11427
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11428
  false,  /* isTypedMethod.  Only relevant for methods. */
11429
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11430
};
11431
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11432
static_assert(0 < 5, "There is no slot for us");
11433
11434
MOZ_CAN_RUN_SCRIPT static bool
11435
get_onsubmit(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
11436
0
{
11437
0
  AUTO_PROFILER_LABEL_FAST("get Window.onsubmit", DOM, cx);
11438
0
11439
0
  RefPtr<EventHandlerNonNull> result(self->GetOnsubmit());
11440
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11441
0
  if (result) {
11442
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
11443
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11444
0
      return false;
11445
0
    }
11446
0
    return true;
11447
0
  } else {
11448
0
    args.rval().setNull();
11449
0
    return true;
11450
0
  }
11451
0
}
11452
11453
MOZ_CAN_RUN_SCRIPT static bool
11454
set_onsubmit(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
11455
0
{
11456
0
  AUTO_PROFILER_LABEL_FAST("set Window.onsubmit", DOM, cx);
11457
0
11458
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11459
0
  if (args[0].isObject()) {
11460
0
    { // scope for tempRoot and tempGlobalRoot if needed
11461
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
11462
0
    }
11463
0
  } else {
11464
0
    arg0 = nullptr;
11465
0
  }
11466
0
  self->SetOnsubmit(Constify(arg0));
11467
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11468
0
11469
0
  return true;
11470
0
}
11471
11472
static const JSJitInfo onsubmit_getterinfo = {
11473
  { (JSJitGetterOp)get_onsubmit },
11474
  { prototypes::id::Window },
11475
  { PrototypeTraits<prototypes::id::Window>::Depth },
11476
  JSJitInfo::Getter,
11477
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11478
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
11479
  false,  /* isInfallible. False in setters. */
11480
  false,  /* isMovable.  Not relevant for setters. */
11481
  false, /* isEliminatable.  Not relevant for setters. */
11482
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11483
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11484
  false,  /* isTypedMethod.  Only relevant for methods. */
11485
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11486
};
11487
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11488
static_assert(0 < 5, "There is no slot for us");
11489
static const JSJitInfo onsubmit_setterinfo = {
11490
  { (JSJitGetterOp)set_onsubmit },
11491
  { prototypes::id::Window },
11492
  { PrototypeTraits<prototypes::id::Window>::Depth },
11493
  JSJitInfo::Setter,
11494
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11495
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
11496
  false,  /* isInfallible. False in setters. */
11497
  false,  /* isMovable.  Not relevant for setters. */
11498
  false, /* isEliminatable.  Not relevant for setters. */
11499
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11500
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11501
  false,  /* isTypedMethod.  Only relevant for methods. */
11502
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11503
};
11504
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11505
static_assert(0 < 5, "There is no slot for us");
11506
11507
MOZ_CAN_RUN_SCRIPT static bool
11508
get_onsuspend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
11509
0
{
11510
0
  AUTO_PROFILER_LABEL_FAST("get Window.onsuspend", DOM, cx);
11511
0
11512
0
  RefPtr<EventHandlerNonNull> result(self->GetOnsuspend());
11513
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11514
0
  if (result) {
11515
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
11516
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11517
0
      return false;
11518
0
    }
11519
0
    return true;
11520
0
  } else {
11521
0
    args.rval().setNull();
11522
0
    return true;
11523
0
  }
11524
0
}
11525
11526
MOZ_CAN_RUN_SCRIPT static bool
11527
set_onsuspend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
11528
0
{
11529
0
  AUTO_PROFILER_LABEL_FAST("set Window.onsuspend", DOM, cx);
11530
0
11531
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11532
0
  if (args[0].isObject()) {
11533
0
    { // scope for tempRoot and tempGlobalRoot if needed
11534
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
11535
0
    }
11536
0
  } else {
11537
0
    arg0 = nullptr;
11538
0
  }
11539
0
  self->SetOnsuspend(Constify(arg0));
11540
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11541
0
11542
0
  return true;
11543
0
}
11544
11545
static const JSJitInfo onsuspend_getterinfo = {
11546
  { (JSJitGetterOp)get_onsuspend },
11547
  { prototypes::id::Window },
11548
  { PrototypeTraits<prototypes::id::Window>::Depth },
11549
  JSJitInfo::Getter,
11550
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11551
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
11552
  false,  /* isInfallible. False in setters. */
11553
  false,  /* isMovable.  Not relevant for setters. */
11554
  false, /* isEliminatable.  Not relevant for setters. */
11555
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11556
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11557
  false,  /* isTypedMethod.  Only relevant for methods. */
11558
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11559
};
11560
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11561
static_assert(0 < 5, "There is no slot for us");
11562
static const JSJitInfo onsuspend_setterinfo = {
11563
  { (JSJitGetterOp)set_onsuspend },
11564
  { prototypes::id::Window },
11565
  { PrototypeTraits<prototypes::id::Window>::Depth },
11566
  JSJitInfo::Setter,
11567
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11568
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
11569
  false,  /* isInfallible. False in setters. */
11570
  false,  /* isMovable.  Not relevant for setters. */
11571
  false, /* isEliminatable.  Not relevant for setters. */
11572
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11573
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11574
  false,  /* isTypedMethod.  Only relevant for methods. */
11575
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11576
};
11577
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11578
static_assert(0 < 5, "There is no slot for us");
11579
11580
MOZ_CAN_RUN_SCRIPT static bool
11581
get_ontimeupdate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
11582
0
{
11583
0
  AUTO_PROFILER_LABEL_FAST("get Window.ontimeupdate", DOM, cx);
11584
0
11585
0
  RefPtr<EventHandlerNonNull> result(self->GetOntimeupdate());
11586
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11587
0
  if (result) {
11588
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
11589
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11590
0
      return false;
11591
0
    }
11592
0
    return true;
11593
0
  } else {
11594
0
    args.rval().setNull();
11595
0
    return true;
11596
0
  }
11597
0
}
11598
11599
MOZ_CAN_RUN_SCRIPT static bool
11600
set_ontimeupdate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
11601
0
{
11602
0
  AUTO_PROFILER_LABEL_FAST("set Window.ontimeupdate", DOM, cx);
11603
0
11604
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11605
0
  if (args[0].isObject()) {
11606
0
    { // scope for tempRoot and tempGlobalRoot if needed
11607
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
11608
0
    }
11609
0
  } else {
11610
0
    arg0 = nullptr;
11611
0
  }
11612
0
  self->SetOntimeupdate(Constify(arg0));
11613
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11614
0
11615
0
  return true;
11616
0
}
11617
11618
static const JSJitInfo ontimeupdate_getterinfo = {
11619
  { (JSJitGetterOp)get_ontimeupdate },
11620
  { prototypes::id::Window },
11621
  { PrototypeTraits<prototypes::id::Window>::Depth },
11622
  JSJitInfo::Getter,
11623
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11624
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
11625
  false,  /* isInfallible. False in setters. */
11626
  false,  /* isMovable.  Not relevant for setters. */
11627
  false, /* isEliminatable.  Not relevant for setters. */
11628
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11629
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11630
  false,  /* isTypedMethod.  Only relevant for methods. */
11631
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11632
};
11633
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11634
static_assert(0 < 5, "There is no slot for us");
11635
static const JSJitInfo ontimeupdate_setterinfo = {
11636
  { (JSJitGetterOp)set_ontimeupdate },
11637
  { prototypes::id::Window },
11638
  { PrototypeTraits<prototypes::id::Window>::Depth },
11639
  JSJitInfo::Setter,
11640
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11641
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
11642
  false,  /* isInfallible. False in setters. */
11643
  false,  /* isMovable.  Not relevant for setters. */
11644
  false, /* isEliminatable.  Not relevant for setters. */
11645
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11646
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11647
  false,  /* isTypedMethod.  Only relevant for methods. */
11648
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11649
};
11650
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11651
static_assert(0 < 5, "There is no slot for us");
11652
11653
MOZ_CAN_RUN_SCRIPT static bool
11654
get_onvolumechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
11655
0
{
11656
0
  AUTO_PROFILER_LABEL_FAST("get Window.onvolumechange", DOM, cx);
11657
0
11658
0
  RefPtr<EventHandlerNonNull> result(self->GetOnvolumechange());
11659
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11660
0
  if (result) {
11661
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
11662
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11663
0
      return false;
11664
0
    }
11665
0
    return true;
11666
0
  } else {
11667
0
    args.rval().setNull();
11668
0
    return true;
11669
0
  }
11670
0
}
11671
11672
MOZ_CAN_RUN_SCRIPT static bool
11673
set_onvolumechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
11674
0
{
11675
0
  AUTO_PROFILER_LABEL_FAST("set Window.onvolumechange", DOM, cx);
11676
0
11677
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11678
0
  if (args[0].isObject()) {
11679
0
    { // scope for tempRoot and tempGlobalRoot if needed
11680
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
11681
0
    }
11682
0
  } else {
11683
0
    arg0 = nullptr;
11684
0
  }
11685
0
  self->SetOnvolumechange(Constify(arg0));
11686
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11687
0
11688
0
  return true;
11689
0
}
11690
11691
static const JSJitInfo onvolumechange_getterinfo = {
11692
  { (JSJitGetterOp)get_onvolumechange },
11693
  { prototypes::id::Window },
11694
  { PrototypeTraits<prototypes::id::Window>::Depth },
11695
  JSJitInfo::Getter,
11696
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11697
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
11698
  false,  /* isInfallible. False in setters. */
11699
  false,  /* isMovable.  Not relevant for setters. */
11700
  false, /* isEliminatable.  Not relevant for setters. */
11701
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11702
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11703
  false,  /* isTypedMethod.  Only relevant for methods. */
11704
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11705
};
11706
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11707
static_assert(0 < 5, "There is no slot for us");
11708
static const JSJitInfo onvolumechange_setterinfo = {
11709
  { (JSJitGetterOp)set_onvolumechange },
11710
  { prototypes::id::Window },
11711
  { PrototypeTraits<prototypes::id::Window>::Depth },
11712
  JSJitInfo::Setter,
11713
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11714
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
11715
  false,  /* isInfallible. False in setters. */
11716
  false,  /* isMovable.  Not relevant for setters. */
11717
  false, /* isEliminatable.  Not relevant for setters. */
11718
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11719
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11720
  false,  /* isTypedMethod.  Only relevant for methods. */
11721
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11722
};
11723
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11724
static_assert(0 < 5, "There is no slot for us");
11725
11726
MOZ_CAN_RUN_SCRIPT static bool
11727
get_onwaiting(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
11728
0
{
11729
0
  AUTO_PROFILER_LABEL_FAST("get Window.onwaiting", DOM, cx);
11730
0
11731
0
  RefPtr<EventHandlerNonNull> result(self->GetOnwaiting());
11732
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11733
0
  if (result) {
11734
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
11735
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11736
0
      return false;
11737
0
    }
11738
0
    return true;
11739
0
  } else {
11740
0
    args.rval().setNull();
11741
0
    return true;
11742
0
  }
11743
0
}
11744
11745
MOZ_CAN_RUN_SCRIPT static bool
11746
set_onwaiting(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
11747
0
{
11748
0
  AUTO_PROFILER_LABEL_FAST("set Window.onwaiting", DOM, cx);
11749
0
11750
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11751
0
  if (args[0].isObject()) {
11752
0
    { // scope for tempRoot and tempGlobalRoot if needed
11753
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
11754
0
    }
11755
0
  } else {
11756
0
    arg0 = nullptr;
11757
0
  }
11758
0
  self->SetOnwaiting(Constify(arg0));
11759
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11760
0
11761
0
  return true;
11762
0
}
11763
11764
static const JSJitInfo onwaiting_getterinfo = {
11765
  { (JSJitGetterOp)get_onwaiting },
11766
  { prototypes::id::Window },
11767
  { PrototypeTraits<prototypes::id::Window>::Depth },
11768
  JSJitInfo::Getter,
11769
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11770
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
11771
  false,  /* isInfallible. False in setters. */
11772
  false,  /* isMovable.  Not relevant for setters. */
11773
  false, /* isEliminatable.  Not relevant for setters. */
11774
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11775
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11776
  false,  /* isTypedMethod.  Only relevant for methods. */
11777
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11778
};
11779
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11780
static_assert(0 < 5, "There is no slot for us");
11781
static const JSJitInfo onwaiting_setterinfo = {
11782
  { (JSJitGetterOp)set_onwaiting },
11783
  { prototypes::id::Window },
11784
  { PrototypeTraits<prototypes::id::Window>::Depth },
11785
  JSJitInfo::Setter,
11786
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11787
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
11788
  false,  /* isInfallible. False in setters. */
11789
  false,  /* isMovable.  Not relevant for setters. */
11790
  false, /* isEliminatable.  Not relevant for setters. */
11791
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11792
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11793
  false,  /* isTypedMethod.  Only relevant for methods. */
11794
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11795
};
11796
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11797
static_assert(0 < 5, "There is no slot for us");
11798
11799
MOZ_CAN_RUN_SCRIPT static bool
11800
get_onselectstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
11801
0
{
11802
0
  AUTO_PROFILER_LABEL_FAST("get Window.onselectstart", DOM, cx);
11803
0
11804
0
  RefPtr<EventHandlerNonNull> result(self->GetOnselectstart());
11805
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11806
0
  if (result) {
11807
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
11808
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11809
0
      return false;
11810
0
    }
11811
0
    return true;
11812
0
  } else {
11813
0
    args.rval().setNull();
11814
0
    return true;
11815
0
  }
11816
0
}
11817
11818
MOZ_CAN_RUN_SCRIPT static bool
11819
set_onselectstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
11820
0
{
11821
0
  AUTO_PROFILER_LABEL_FAST("set Window.onselectstart", DOM, cx);
11822
0
11823
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11824
0
  if (args[0].isObject()) {
11825
0
    { // scope for tempRoot and tempGlobalRoot if needed
11826
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
11827
0
    }
11828
0
  } else {
11829
0
    arg0 = nullptr;
11830
0
  }
11831
0
  self->SetOnselectstart(Constify(arg0));
11832
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11833
0
11834
0
  return true;
11835
0
}
11836
11837
static const JSJitInfo onselectstart_getterinfo = {
11838
  { (JSJitGetterOp)get_onselectstart },
11839
  { prototypes::id::Window },
11840
  { PrototypeTraits<prototypes::id::Window>::Depth },
11841
  JSJitInfo::Getter,
11842
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11843
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
11844
  false,  /* isInfallible. False in setters. */
11845
  false,  /* isMovable.  Not relevant for setters. */
11846
  false, /* isEliminatable.  Not relevant for setters. */
11847
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11848
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11849
  false,  /* isTypedMethod.  Only relevant for methods. */
11850
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11851
};
11852
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11853
static_assert(0 < 5, "There is no slot for us");
11854
static const JSJitInfo onselectstart_setterinfo = {
11855
  { (JSJitGetterOp)set_onselectstart },
11856
  { prototypes::id::Window },
11857
  { PrototypeTraits<prototypes::id::Window>::Depth },
11858
  JSJitInfo::Setter,
11859
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11860
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
11861
  false,  /* isInfallible. False in setters. */
11862
  false,  /* isMovable.  Not relevant for setters. */
11863
  false, /* isEliminatable.  Not relevant for setters. */
11864
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11865
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11866
  false,  /* isTypedMethod.  Only relevant for methods. */
11867
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11868
};
11869
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11870
static_assert(0 < 5, "There is no slot for us");
11871
11872
MOZ_CAN_RUN_SCRIPT static bool
11873
get_ontoggle(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
11874
0
{
11875
0
  AUTO_PROFILER_LABEL_FAST("get Window.ontoggle", DOM, cx);
11876
0
11877
0
  RefPtr<EventHandlerNonNull> result(self->GetOntoggle());
11878
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11879
0
  if (result) {
11880
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
11881
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11882
0
      return false;
11883
0
    }
11884
0
    return true;
11885
0
  } else {
11886
0
    args.rval().setNull();
11887
0
    return true;
11888
0
  }
11889
0
}
11890
11891
MOZ_CAN_RUN_SCRIPT static bool
11892
set_ontoggle(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
11893
0
{
11894
0
  AUTO_PROFILER_LABEL_FAST("set Window.ontoggle", DOM, cx);
11895
0
11896
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11897
0
  if (args[0].isObject()) {
11898
0
    { // scope for tempRoot and tempGlobalRoot if needed
11899
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
11900
0
    }
11901
0
  } else {
11902
0
    arg0 = nullptr;
11903
0
  }
11904
0
  self->SetOntoggle(Constify(arg0));
11905
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11906
0
11907
0
  return true;
11908
0
}
11909
11910
static const JSJitInfo ontoggle_getterinfo = {
11911
  { (JSJitGetterOp)get_ontoggle },
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 ontoggle_setterinfo = {
11928
  { (JSJitGetterOp)set_ontoggle },
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
MOZ_CAN_RUN_SCRIPT static bool
11946
get_onpointercancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
11947
0
{
11948
0
  AUTO_PROFILER_LABEL_FAST("get Window.onpointercancel", DOM, cx);
11949
0
11950
0
  RefPtr<EventHandlerNonNull> result(self->GetOnpointercancel());
11951
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11952
0
  if (result) {
11953
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
11954
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11955
0
      return false;
11956
0
    }
11957
0
    return true;
11958
0
  } else {
11959
0
    args.rval().setNull();
11960
0
    return true;
11961
0
  }
11962
0
}
11963
11964
MOZ_CAN_RUN_SCRIPT static bool
11965
set_onpointercancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
11966
0
{
11967
0
  AUTO_PROFILER_LABEL_FAST("set Window.onpointercancel", DOM, cx);
11968
0
11969
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11970
0
  if (args[0].isObject()) {
11971
0
    { // scope for tempRoot and tempGlobalRoot if needed
11972
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
11973
0
    }
11974
0
  } else {
11975
0
    arg0 = nullptr;
11976
0
  }
11977
0
  self->SetOnpointercancel(Constify(arg0));
11978
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
11979
0
11980
0
  return true;
11981
0
}
11982
11983
static const JSJitInfo onpointercancel_getterinfo = {
11984
  { (JSJitGetterOp)get_onpointercancel },
11985
  { prototypes::id::Window },
11986
  { PrototypeTraits<prototypes::id::Window>::Depth },
11987
  JSJitInfo::Getter,
11988
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
11989
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
11990
  false,  /* isInfallible. False in setters. */
11991
  false,  /* isMovable.  Not relevant for setters. */
11992
  false, /* isEliminatable.  Not relevant for setters. */
11993
  false, /* isAlwaysInSlot.  Only relevant for getters. */
11994
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
11995
  false,  /* isTypedMethod.  Only relevant for methods. */
11996
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
11997
};
11998
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11999
static_assert(0 < 5, "There is no slot for us");
12000
static const JSJitInfo onpointercancel_setterinfo = {
12001
  { (JSJitGetterOp)set_onpointercancel },
12002
  { prototypes::id::Window },
12003
  { PrototypeTraits<prototypes::id::Window>::Depth },
12004
  JSJitInfo::Setter,
12005
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12006
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
12007
  false,  /* isInfallible. False in setters. */
12008
  false,  /* isMovable.  Not relevant for setters. */
12009
  false, /* isEliminatable.  Not relevant for setters. */
12010
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12011
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12012
  false,  /* isTypedMethod.  Only relevant for methods. */
12013
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12014
};
12015
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12016
static_assert(0 < 5, "There is no slot for us");
12017
12018
MOZ_CAN_RUN_SCRIPT static bool
12019
get_onpointerdown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
12020
0
{
12021
0
  AUTO_PROFILER_LABEL_FAST("get Window.onpointerdown", DOM, cx);
12022
0
12023
0
  RefPtr<EventHandlerNonNull> result(self->GetOnpointerdown());
12024
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12025
0
  if (result) {
12026
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
12027
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12028
0
      return false;
12029
0
    }
12030
0
    return true;
12031
0
  } else {
12032
0
    args.rval().setNull();
12033
0
    return true;
12034
0
  }
12035
0
}
12036
12037
MOZ_CAN_RUN_SCRIPT static bool
12038
set_onpointerdown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
12039
0
{
12040
0
  AUTO_PROFILER_LABEL_FAST("set Window.onpointerdown", DOM, cx);
12041
0
12042
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12043
0
  if (args[0].isObject()) {
12044
0
    { // scope for tempRoot and tempGlobalRoot if needed
12045
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
12046
0
    }
12047
0
  } else {
12048
0
    arg0 = nullptr;
12049
0
  }
12050
0
  self->SetOnpointerdown(Constify(arg0));
12051
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12052
0
12053
0
  return true;
12054
0
}
12055
12056
static const JSJitInfo onpointerdown_getterinfo = {
12057
  { (JSJitGetterOp)get_onpointerdown },
12058
  { prototypes::id::Window },
12059
  { PrototypeTraits<prototypes::id::Window>::Depth },
12060
  JSJitInfo::Getter,
12061
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12062
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
12063
  false,  /* isInfallible. False in setters. */
12064
  false,  /* isMovable.  Not relevant for setters. */
12065
  false, /* isEliminatable.  Not relevant for setters. */
12066
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12067
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12068
  false,  /* isTypedMethod.  Only relevant for methods. */
12069
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12070
};
12071
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12072
static_assert(0 < 5, "There is no slot for us");
12073
static const JSJitInfo onpointerdown_setterinfo = {
12074
  { (JSJitGetterOp)set_onpointerdown },
12075
  { prototypes::id::Window },
12076
  { PrototypeTraits<prototypes::id::Window>::Depth },
12077
  JSJitInfo::Setter,
12078
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12079
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
12080
  false,  /* isInfallible. False in setters. */
12081
  false,  /* isMovable.  Not relevant for setters. */
12082
  false, /* isEliminatable.  Not relevant for setters. */
12083
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12084
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12085
  false,  /* isTypedMethod.  Only relevant for methods. */
12086
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12087
};
12088
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12089
static_assert(0 < 5, "There is no slot for us");
12090
12091
MOZ_CAN_RUN_SCRIPT static bool
12092
get_onpointerup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
12093
0
{
12094
0
  AUTO_PROFILER_LABEL_FAST("get Window.onpointerup", DOM, cx);
12095
0
12096
0
  RefPtr<EventHandlerNonNull> result(self->GetOnpointerup());
12097
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12098
0
  if (result) {
12099
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
12100
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12101
0
      return false;
12102
0
    }
12103
0
    return true;
12104
0
  } else {
12105
0
    args.rval().setNull();
12106
0
    return true;
12107
0
  }
12108
0
}
12109
12110
MOZ_CAN_RUN_SCRIPT static bool
12111
set_onpointerup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
12112
0
{
12113
0
  AUTO_PROFILER_LABEL_FAST("set Window.onpointerup", DOM, cx);
12114
0
12115
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12116
0
  if (args[0].isObject()) {
12117
0
    { // scope for tempRoot and tempGlobalRoot if needed
12118
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
12119
0
    }
12120
0
  } else {
12121
0
    arg0 = nullptr;
12122
0
  }
12123
0
  self->SetOnpointerup(Constify(arg0));
12124
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12125
0
12126
0
  return true;
12127
0
}
12128
12129
static const JSJitInfo onpointerup_getterinfo = {
12130
  { (JSJitGetterOp)get_onpointerup },
12131
  { prototypes::id::Window },
12132
  { PrototypeTraits<prototypes::id::Window>::Depth },
12133
  JSJitInfo::Getter,
12134
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12135
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
12136
  false,  /* isInfallible. False in setters. */
12137
  false,  /* isMovable.  Not relevant for setters. */
12138
  false, /* isEliminatable.  Not relevant for setters. */
12139
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12140
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12141
  false,  /* isTypedMethod.  Only relevant for methods. */
12142
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12143
};
12144
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12145
static_assert(0 < 5, "There is no slot for us");
12146
static const JSJitInfo onpointerup_setterinfo = {
12147
  { (JSJitGetterOp)set_onpointerup },
12148
  { prototypes::id::Window },
12149
  { PrototypeTraits<prototypes::id::Window>::Depth },
12150
  JSJitInfo::Setter,
12151
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12152
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
12153
  false,  /* isInfallible. False in setters. */
12154
  false,  /* isMovable.  Not relevant for setters. */
12155
  false, /* isEliminatable.  Not relevant for setters. */
12156
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12157
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12158
  false,  /* isTypedMethod.  Only relevant for methods. */
12159
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12160
};
12161
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12162
static_assert(0 < 5, "There is no slot for us");
12163
12164
MOZ_CAN_RUN_SCRIPT static bool
12165
get_onpointermove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
12166
0
{
12167
0
  AUTO_PROFILER_LABEL_FAST("get Window.onpointermove", DOM, cx);
12168
0
12169
0
  RefPtr<EventHandlerNonNull> result(self->GetOnpointermove());
12170
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12171
0
  if (result) {
12172
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
12173
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12174
0
      return false;
12175
0
    }
12176
0
    return true;
12177
0
  } else {
12178
0
    args.rval().setNull();
12179
0
    return true;
12180
0
  }
12181
0
}
12182
12183
MOZ_CAN_RUN_SCRIPT static bool
12184
set_onpointermove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
12185
0
{
12186
0
  AUTO_PROFILER_LABEL_FAST("set Window.onpointermove", DOM, cx);
12187
0
12188
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12189
0
  if (args[0].isObject()) {
12190
0
    { // scope for tempRoot and tempGlobalRoot if needed
12191
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
12192
0
    }
12193
0
  } else {
12194
0
    arg0 = nullptr;
12195
0
  }
12196
0
  self->SetOnpointermove(Constify(arg0));
12197
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12198
0
12199
0
  return true;
12200
0
}
12201
12202
static const JSJitInfo onpointermove_getterinfo = {
12203
  { (JSJitGetterOp)get_onpointermove },
12204
  { prototypes::id::Window },
12205
  { PrototypeTraits<prototypes::id::Window>::Depth },
12206
  JSJitInfo::Getter,
12207
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12208
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
12209
  false,  /* isInfallible. False in setters. */
12210
  false,  /* isMovable.  Not relevant for setters. */
12211
  false, /* isEliminatable.  Not relevant for setters. */
12212
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12213
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12214
  false,  /* isTypedMethod.  Only relevant for methods. */
12215
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12216
};
12217
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12218
static_assert(0 < 5, "There is no slot for us");
12219
static const JSJitInfo onpointermove_setterinfo = {
12220
  { (JSJitGetterOp)set_onpointermove },
12221
  { prototypes::id::Window },
12222
  { PrototypeTraits<prototypes::id::Window>::Depth },
12223
  JSJitInfo::Setter,
12224
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12225
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
12226
  false,  /* isInfallible. False in setters. */
12227
  false,  /* isMovable.  Not relevant for setters. */
12228
  false, /* isEliminatable.  Not relevant for setters. */
12229
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12230
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12231
  false,  /* isTypedMethod.  Only relevant for methods. */
12232
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12233
};
12234
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12235
static_assert(0 < 5, "There is no slot for us");
12236
12237
MOZ_CAN_RUN_SCRIPT static bool
12238
get_onpointerout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
12239
0
{
12240
0
  AUTO_PROFILER_LABEL_FAST("get Window.onpointerout", DOM, cx);
12241
0
12242
0
  RefPtr<EventHandlerNonNull> result(self->GetOnpointerout());
12243
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12244
0
  if (result) {
12245
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
12246
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12247
0
      return false;
12248
0
    }
12249
0
    return true;
12250
0
  } else {
12251
0
    args.rval().setNull();
12252
0
    return true;
12253
0
  }
12254
0
}
12255
12256
MOZ_CAN_RUN_SCRIPT static bool
12257
set_onpointerout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
12258
0
{
12259
0
  AUTO_PROFILER_LABEL_FAST("set Window.onpointerout", DOM, cx);
12260
0
12261
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12262
0
  if (args[0].isObject()) {
12263
0
    { // scope for tempRoot and tempGlobalRoot if needed
12264
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
12265
0
    }
12266
0
  } else {
12267
0
    arg0 = nullptr;
12268
0
  }
12269
0
  self->SetOnpointerout(Constify(arg0));
12270
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12271
0
12272
0
  return true;
12273
0
}
12274
12275
static const JSJitInfo onpointerout_getterinfo = {
12276
  { (JSJitGetterOp)get_onpointerout },
12277
  { prototypes::id::Window },
12278
  { PrototypeTraits<prototypes::id::Window>::Depth },
12279
  JSJitInfo::Getter,
12280
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12281
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
12282
  false,  /* isInfallible. False in setters. */
12283
  false,  /* isMovable.  Not relevant for setters. */
12284
  false, /* isEliminatable.  Not relevant for setters. */
12285
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12286
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12287
  false,  /* isTypedMethod.  Only relevant for methods. */
12288
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12289
};
12290
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12291
static_assert(0 < 5, "There is no slot for us");
12292
static const JSJitInfo onpointerout_setterinfo = {
12293
  { (JSJitGetterOp)set_onpointerout },
12294
  { prototypes::id::Window },
12295
  { PrototypeTraits<prototypes::id::Window>::Depth },
12296
  JSJitInfo::Setter,
12297
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12298
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
12299
  false,  /* isInfallible. False in setters. */
12300
  false,  /* isMovable.  Not relevant for setters. */
12301
  false, /* isEliminatable.  Not relevant for setters. */
12302
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12303
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12304
  false,  /* isTypedMethod.  Only relevant for methods. */
12305
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12306
};
12307
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12308
static_assert(0 < 5, "There is no slot for us");
12309
12310
MOZ_CAN_RUN_SCRIPT static bool
12311
get_onpointerover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
12312
0
{
12313
0
  AUTO_PROFILER_LABEL_FAST("get Window.onpointerover", DOM, cx);
12314
0
12315
0
  RefPtr<EventHandlerNonNull> result(self->GetOnpointerover());
12316
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12317
0
  if (result) {
12318
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
12319
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12320
0
      return false;
12321
0
    }
12322
0
    return true;
12323
0
  } else {
12324
0
    args.rval().setNull();
12325
0
    return true;
12326
0
  }
12327
0
}
12328
12329
MOZ_CAN_RUN_SCRIPT static bool
12330
set_onpointerover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
12331
0
{
12332
0
  AUTO_PROFILER_LABEL_FAST("set Window.onpointerover", DOM, cx);
12333
0
12334
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12335
0
  if (args[0].isObject()) {
12336
0
    { // scope for tempRoot and tempGlobalRoot if needed
12337
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
12338
0
    }
12339
0
  } else {
12340
0
    arg0 = nullptr;
12341
0
  }
12342
0
  self->SetOnpointerover(Constify(arg0));
12343
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12344
0
12345
0
  return true;
12346
0
}
12347
12348
static const JSJitInfo onpointerover_getterinfo = {
12349
  { (JSJitGetterOp)get_onpointerover },
12350
  { prototypes::id::Window },
12351
  { PrototypeTraits<prototypes::id::Window>::Depth },
12352
  JSJitInfo::Getter,
12353
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12354
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
12355
  false,  /* isInfallible. False in setters. */
12356
  false,  /* isMovable.  Not relevant for setters. */
12357
  false, /* isEliminatable.  Not relevant for setters. */
12358
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12359
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12360
  false,  /* isTypedMethod.  Only relevant for methods. */
12361
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12362
};
12363
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12364
static_assert(0 < 5, "There is no slot for us");
12365
static const JSJitInfo onpointerover_setterinfo = {
12366
  { (JSJitGetterOp)set_onpointerover },
12367
  { prototypes::id::Window },
12368
  { PrototypeTraits<prototypes::id::Window>::Depth },
12369
  JSJitInfo::Setter,
12370
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12371
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
12372
  false,  /* isInfallible. False in setters. */
12373
  false,  /* isMovable.  Not relevant for setters. */
12374
  false, /* isEliminatable.  Not relevant for setters. */
12375
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12376
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12377
  false,  /* isTypedMethod.  Only relevant for methods. */
12378
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12379
};
12380
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12381
static_assert(0 < 5, "There is no slot for us");
12382
12383
MOZ_CAN_RUN_SCRIPT static bool
12384
get_onpointerenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
12385
0
{
12386
0
  AUTO_PROFILER_LABEL_FAST("get Window.onpointerenter", DOM, cx);
12387
0
12388
0
  RefPtr<EventHandlerNonNull> result(self->GetOnpointerenter());
12389
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12390
0
  if (result) {
12391
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
12392
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12393
0
      return false;
12394
0
    }
12395
0
    return true;
12396
0
  } else {
12397
0
    args.rval().setNull();
12398
0
    return true;
12399
0
  }
12400
0
}
12401
12402
MOZ_CAN_RUN_SCRIPT static bool
12403
set_onpointerenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
12404
0
{
12405
0
  AUTO_PROFILER_LABEL_FAST("set Window.onpointerenter", DOM, cx);
12406
0
12407
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12408
0
  if (args[0].isObject()) {
12409
0
    { // scope for tempRoot and tempGlobalRoot if needed
12410
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
12411
0
    }
12412
0
  } else {
12413
0
    arg0 = nullptr;
12414
0
  }
12415
0
  self->SetOnpointerenter(Constify(arg0));
12416
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12417
0
12418
0
  return true;
12419
0
}
12420
12421
static const JSJitInfo onpointerenter_getterinfo = {
12422
  { (JSJitGetterOp)get_onpointerenter },
12423
  { prototypes::id::Window },
12424
  { PrototypeTraits<prototypes::id::Window>::Depth },
12425
  JSJitInfo::Getter,
12426
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12427
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
12428
  false,  /* isInfallible. False in setters. */
12429
  false,  /* isMovable.  Not relevant for setters. */
12430
  false, /* isEliminatable.  Not relevant for setters. */
12431
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12432
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12433
  false,  /* isTypedMethod.  Only relevant for methods. */
12434
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12435
};
12436
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12437
static_assert(0 < 5, "There is no slot for us");
12438
static const JSJitInfo onpointerenter_setterinfo = {
12439
  { (JSJitGetterOp)set_onpointerenter },
12440
  { prototypes::id::Window },
12441
  { PrototypeTraits<prototypes::id::Window>::Depth },
12442
  JSJitInfo::Setter,
12443
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12444
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
12445
  false,  /* isInfallible. False in setters. */
12446
  false,  /* isMovable.  Not relevant for setters. */
12447
  false, /* isEliminatable.  Not relevant for setters. */
12448
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12449
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12450
  false,  /* isTypedMethod.  Only relevant for methods. */
12451
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12452
};
12453
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12454
static_assert(0 < 5, "There is no slot for us");
12455
12456
MOZ_CAN_RUN_SCRIPT static bool
12457
get_onpointerleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
12458
0
{
12459
0
  AUTO_PROFILER_LABEL_FAST("get Window.onpointerleave", DOM, cx);
12460
0
12461
0
  RefPtr<EventHandlerNonNull> result(self->GetOnpointerleave());
12462
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12463
0
  if (result) {
12464
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
12465
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12466
0
      return false;
12467
0
    }
12468
0
    return true;
12469
0
  } else {
12470
0
    args.rval().setNull();
12471
0
    return true;
12472
0
  }
12473
0
}
12474
12475
MOZ_CAN_RUN_SCRIPT static bool
12476
set_onpointerleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
12477
0
{
12478
0
  AUTO_PROFILER_LABEL_FAST("set Window.onpointerleave", DOM, cx);
12479
0
12480
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12481
0
  if (args[0].isObject()) {
12482
0
    { // scope for tempRoot and tempGlobalRoot if needed
12483
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
12484
0
    }
12485
0
  } else {
12486
0
    arg0 = nullptr;
12487
0
  }
12488
0
  self->SetOnpointerleave(Constify(arg0));
12489
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12490
0
12491
0
  return true;
12492
0
}
12493
12494
static const JSJitInfo onpointerleave_getterinfo = {
12495
  { (JSJitGetterOp)get_onpointerleave },
12496
  { prototypes::id::Window },
12497
  { PrototypeTraits<prototypes::id::Window>::Depth },
12498
  JSJitInfo::Getter,
12499
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12500
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
12501
  false,  /* isInfallible. False in setters. */
12502
  false,  /* isMovable.  Not relevant for setters. */
12503
  false, /* isEliminatable.  Not relevant for setters. */
12504
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12505
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12506
  false,  /* isTypedMethod.  Only relevant for methods. */
12507
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12508
};
12509
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12510
static_assert(0 < 5, "There is no slot for us");
12511
static const JSJitInfo onpointerleave_setterinfo = {
12512
  { (JSJitGetterOp)set_onpointerleave },
12513
  { prototypes::id::Window },
12514
  { PrototypeTraits<prototypes::id::Window>::Depth },
12515
  JSJitInfo::Setter,
12516
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12517
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
12518
  false,  /* isInfallible. False in setters. */
12519
  false,  /* isMovable.  Not relevant for setters. */
12520
  false, /* isEliminatable.  Not relevant for setters. */
12521
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12522
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12523
  false,  /* isTypedMethod.  Only relevant for methods. */
12524
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12525
};
12526
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12527
static_assert(0 < 5, "There is no slot for us");
12528
12529
MOZ_CAN_RUN_SCRIPT static bool
12530
get_ongotpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
12531
0
{
12532
0
  AUTO_PROFILER_LABEL_FAST("get Window.ongotpointercapture", DOM, cx);
12533
0
12534
0
  RefPtr<EventHandlerNonNull> result(self->GetOngotpointercapture());
12535
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12536
0
  if (result) {
12537
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
12538
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12539
0
      return false;
12540
0
    }
12541
0
    return true;
12542
0
  } else {
12543
0
    args.rval().setNull();
12544
0
    return true;
12545
0
  }
12546
0
}
12547
12548
MOZ_CAN_RUN_SCRIPT static bool
12549
set_ongotpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
12550
0
{
12551
0
  AUTO_PROFILER_LABEL_FAST("set Window.ongotpointercapture", DOM, cx);
12552
0
12553
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12554
0
  if (args[0].isObject()) {
12555
0
    { // scope for tempRoot and tempGlobalRoot if needed
12556
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
12557
0
    }
12558
0
  } else {
12559
0
    arg0 = nullptr;
12560
0
  }
12561
0
  self->SetOngotpointercapture(Constify(arg0));
12562
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12563
0
12564
0
  return true;
12565
0
}
12566
12567
static const JSJitInfo ongotpointercapture_getterinfo = {
12568
  { (JSJitGetterOp)get_ongotpointercapture },
12569
  { prototypes::id::Window },
12570
  { PrototypeTraits<prototypes::id::Window>::Depth },
12571
  JSJitInfo::Getter,
12572
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12573
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
12574
  false,  /* isInfallible. False in setters. */
12575
  false,  /* isMovable.  Not relevant for setters. */
12576
  false, /* isEliminatable.  Not relevant for setters. */
12577
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12578
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12579
  false,  /* isTypedMethod.  Only relevant for methods. */
12580
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12581
};
12582
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12583
static_assert(0 < 5, "There is no slot for us");
12584
static const JSJitInfo ongotpointercapture_setterinfo = {
12585
  { (JSJitGetterOp)set_ongotpointercapture },
12586
  { prototypes::id::Window },
12587
  { PrototypeTraits<prototypes::id::Window>::Depth },
12588
  JSJitInfo::Setter,
12589
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12590
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
12591
  false,  /* isInfallible. False in setters. */
12592
  false,  /* isMovable.  Not relevant for setters. */
12593
  false, /* isEliminatable.  Not relevant for setters. */
12594
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12595
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12596
  false,  /* isTypedMethod.  Only relevant for methods. */
12597
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12598
};
12599
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12600
static_assert(0 < 5, "There is no slot for us");
12601
12602
MOZ_CAN_RUN_SCRIPT static bool
12603
get_onlostpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
12604
0
{
12605
0
  AUTO_PROFILER_LABEL_FAST("get Window.onlostpointercapture", DOM, cx);
12606
0
12607
0
  RefPtr<EventHandlerNonNull> result(self->GetOnlostpointercapture());
12608
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12609
0
  if (result) {
12610
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
12611
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12612
0
      return false;
12613
0
    }
12614
0
    return true;
12615
0
  } else {
12616
0
    args.rval().setNull();
12617
0
    return true;
12618
0
  }
12619
0
}
12620
12621
MOZ_CAN_RUN_SCRIPT static bool
12622
set_onlostpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
12623
0
{
12624
0
  AUTO_PROFILER_LABEL_FAST("set Window.onlostpointercapture", DOM, cx);
12625
0
12626
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12627
0
  if (args[0].isObject()) {
12628
0
    { // scope for tempRoot and tempGlobalRoot if needed
12629
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
12630
0
    }
12631
0
  } else {
12632
0
    arg0 = nullptr;
12633
0
  }
12634
0
  self->SetOnlostpointercapture(Constify(arg0));
12635
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12636
0
12637
0
  return true;
12638
0
}
12639
12640
static const JSJitInfo onlostpointercapture_getterinfo = {
12641
  { (JSJitGetterOp)get_onlostpointercapture },
12642
  { prototypes::id::Window },
12643
  { PrototypeTraits<prototypes::id::Window>::Depth },
12644
  JSJitInfo::Getter,
12645
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12646
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
12647
  false,  /* isInfallible. False in setters. */
12648
  false,  /* isMovable.  Not relevant for setters. */
12649
  false, /* isEliminatable.  Not relevant for setters. */
12650
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12651
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12652
  false,  /* isTypedMethod.  Only relevant for methods. */
12653
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12654
};
12655
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12656
static_assert(0 < 5, "There is no slot for us");
12657
static const JSJitInfo onlostpointercapture_setterinfo = {
12658
  { (JSJitGetterOp)set_onlostpointercapture },
12659
  { prototypes::id::Window },
12660
  { PrototypeTraits<prototypes::id::Window>::Depth },
12661
  JSJitInfo::Setter,
12662
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12663
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
12664
  false,  /* isInfallible. False in setters. */
12665
  false,  /* isMovable.  Not relevant for setters. */
12666
  false, /* isEliminatable.  Not relevant for setters. */
12667
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12668
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12669
  false,  /* isTypedMethod.  Only relevant for methods. */
12670
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12671
};
12672
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12673
static_assert(0 < 5, "There is no slot for us");
12674
12675
MOZ_CAN_RUN_SCRIPT static bool
12676
get_onmozfullscreenchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
12677
0
{
12678
0
  AUTO_PROFILER_LABEL_FAST("get Window.onmozfullscreenchange", DOM, cx);
12679
0
12680
0
  RefPtr<EventHandlerNonNull> result(self->GetOnmozfullscreenchange());
12681
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12682
0
  if (result) {
12683
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
12684
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12685
0
      return false;
12686
0
    }
12687
0
    return true;
12688
0
  } else {
12689
0
    args.rval().setNull();
12690
0
    return true;
12691
0
  }
12692
0
}
12693
12694
MOZ_CAN_RUN_SCRIPT static bool
12695
set_onmozfullscreenchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
12696
0
{
12697
0
  AUTO_PROFILER_LABEL_FAST("set Window.onmozfullscreenchange", DOM, cx);
12698
0
12699
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12700
0
  if (args[0].isObject()) {
12701
0
    { // scope for tempRoot and tempGlobalRoot if needed
12702
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
12703
0
    }
12704
0
  } else {
12705
0
    arg0 = nullptr;
12706
0
  }
12707
0
  self->SetOnmozfullscreenchange(Constify(arg0));
12708
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12709
0
12710
0
  return true;
12711
0
}
12712
12713
static const JSJitInfo onmozfullscreenchange_getterinfo = {
12714
  { (JSJitGetterOp)get_onmozfullscreenchange },
12715
  { prototypes::id::Window },
12716
  { PrototypeTraits<prototypes::id::Window>::Depth },
12717
  JSJitInfo::Getter,
12718
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12719
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
12720
  false,  /* isInfallible. False in setters. */
12721
  false,  /* isMovable.  Not relevant for setters. */
12722
  false, /* isEliminatable.  Not relevant for setters. */
12723
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12724
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12725
  false,  /* isTypedMethod.  Only relevant for methods. */
12726
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12727
};
12728
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12729
static_assert(0 < 5, "There is no slot for us");
12730
static const JSJitInfo onmozfullscreenchange_setterinfo = {
12731
  { (JSJitGetterOp)set_onmozfullscreenchange },
12732
  { prototypes::id::Window },
12733
  { PrototypeTraits<prototypes::id::Window>::Depth },
12734
  JSJitInfo::Setter,
12735
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12736
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
12737
  false,  /* isInfallible. False in setters. */
12738
  false,  /* isMovable.  Not relevant for setters. */
12739
  false, /* isEliminatable.  Not relevant for setters. */
12740
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12741
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12742
  false,  /* isTypedMethod.  Only relevant for methods. */
12743
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12744
};
12745
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12746
static_assert(0 < 5, "There is no slot for us");
12747
12748
MOZ_CAN_RUN_SCRIPT static bool
12749
get_onmozfullscreenerror(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
12750
0
{
12751
0
  AUTO_PROFILER_LABEL_FAST("get Window.onmozfullscreenerror", DOM, cx);
12752
0
12753
0
  RefPtr<EventHandlerNonNull> result(self->GetOnmozfullscreenerror());
12754
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12755
0
  if (result) {
12756
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
12757
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12758
0
      return false;
12759
0
    }
12760
0
    return true;
12761
0
  } else {
12762
0
    args.rval().setNull();
12763
0
    return true;
12764
0
  }
12765
0
}
12766
12767
MOZ_CAN_RUN_SCRIPT static bool
12768
set_onmozfullscreenerror(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
12769
0
{
12770
0
  AUTO_PROFILER_LABEL_FAST("set Window.onmozfullscreenerror", DOM, cx);
12771
0
12772
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12773
0
  if (args[0].isObject()) {
12774
0
    { // scope for tempRoot and tempGlobalRoot if needed
12775
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
12776
0
    }
12777
0
  } else {
12778
0
    arg0 = nullptr;
12779
0
  }
12780
0
  self->SetOnmozfullscreenerror(Constify(arg0));
12781
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12782
0
12783
0
  return true;
12784
0
}
12785
12786
static const JSJitInfo onmozfullscreenerror_getterinfo = {
12787
  { (JSJitGetterOp)get_onmozfullscreenerror },
12788
  { prototypes::id::Window },
12789
  { PrototypeTraits<prototypes::id::Window>::Depth },
12790
  JSJitInfo::Getter,
12791
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12792
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
12793
  false,  /* isInfallible. False in setters. */
12794
  false,  /* isMovable.  Not relevant for setters. */
12795
  false, /* isEliminatable.  Not relevant for setters. */
12796
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12797
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12798
  false,  /* isTypedMethod.  Only relevant for methods. */
12799
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12800
};
12801
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12802
static_assert(0 < 5, "There is no slot for us");
12803
static const JSJitInfo onmozfullscreenerror_setterinfo = {
12804
  { (JSJitGetterOp)set_onmozfullscreenerror },
12805
  { prototypes::id::Window },
12806
  { PrototypeTraits<prototypes::id::Window>::Depth },
12807
  JSJitInfo::Setter,
12808
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12809
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
12810
  false,  /* isInfallible. False in setters. */
12811
  false,  /* isMovable.  Not relevant for setters. */
12812
  false, /* isEliminatable.  Not relevant for setters. */
12813
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12814
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12815
  false,  /* isTypedMethod.  Only relevant for methods. */
12816
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12817
};
12818
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12819
static_assert(0 < 5, "There is no slot for us");
12820
12821
MOZ_CAN_RUN_SCRIPT static bool
12822
get_onanimationcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
12823
0
{
12824
0
  AUTO_PROFILER_LABEL_FAST("get Window.onanimationcancel", DOM, cx);
12825
0
12826
0
  RefPtr<EventHandlerNonNull> result(self->GetOnanimationcancel());
12827
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12828
0
  if (result) {
12829
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
12830
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12831
0
      return false;
12832
0
    }
12833
0
    return true;
12834
0
  } else {
12835
0
    args.rval().setNull();
12836
0
    return true;
12837
0
  }
12838
0
}
12839
12840
MOZ_CAN_RUN_SCRIPT static bool
12841
set_onanimationcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
12842
0
{
12843
0
  AUTO_PROFILER_LABEL_FAST("set Window.onanimationcancel", DOM, cx);
12844
0
12845
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12846
0
  if (args[0].isObject()) {
12847
0
    { // scope for tempRoot and tempGlobalRoot if needed
12848
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
12849
0
    }
12850
0
  } else {
12851
0
    arg0 = nullptr;
12852
0
  }
12853
0
  self->SetOnanimationcancel(Constify(arg0));
12854
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12855
0
12856
0
  return true;
12857
0
}
12858
12859
static const JSJitInfo onanimationcancel_getterinfo = {
12860
  { (JSJitGetterOp)get_onanimationcancel },
12861
  { prototypes::id::Window },
12862
  { PrototypeTraits<prototypes::id::Window>::Depth },
12863
  JSJitInfo::Getter,
12864
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12865
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
12866
  false,  /* isInfallible. False in setters. */
12867
  false,  /* isMovable.  Not relevant for setters. */
12868
  false, /* isEliminatable.  Not relevant for setters. */
12869
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12870
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12871
  false,  /* isTypedMethod.  Only relevant for methods. */
12872
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12873
};
12874
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12875
static_assert(0 < 5, "There is no slot for us");
12876
static const JSJitInfo onanimationcancel_setterinfo = {
12877
  { (JSJitGetterOp)set_onanimationcancel },
12878
  { prototypes::id::Window },
12879
  { PrototypeTraits<prototypes::id::Window>::Depth },
12880
  JSJitInfo::Setter,
12881
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12882
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
12883
  false,  /* isInfallible. False in setters. */
12884
  false,  /* isMovable.  Not relevant for setters. */
12885
  false, /* isEliminatable.  Not relevant for setters. */
12886
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12887
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12888
  false,  /* isTypedMethod.  Only relevant for methods. */
12889
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12890
};
12891
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12892
static_assert(0 < 5, "There is no slot for us");
12893
12894
MOZ_CAN_RUN_SCRIPT static bool
12895
get_onanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
12896
0
{
12897
0
  AUTO_PROFILER_LABEL_FAST("get Window.onanimationend", DOM, cx);
12898
0
12899
0
  RefPtr<EventHandlerNonNull> result(self->GetOnanimationend());
12900
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12901
0
  if (result) {
12902
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
12903
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12904
0
      return false;
12905
0
    }
12906
0
    return true;
12907
0
  } else {
12908
0
    args.rval().setNull();
12909
0
    return true;
12910
0
  }
12911
0
}
12912
12913
MOZ_CAN_RUN_SCRIPT static bool
12914
set_onanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
12915
0
{
12916
0
  AUTO_PROFILER_LABEL_FAST("set Window.onanimationend", DOM, cx);
12917
0
12918
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12919
0
  if (args[0].isObject()) {
12920
0
    { // scope for tempRoot and tempGlobalRoot if needed
12921
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
12922
0
    }
12923
0
  } else {
12924
0
    arg0 = nullptr;
12925
0
  }
12926
0
  self->SetOnanimationend(Constify(arg0));
12927
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12928
0
12929
0
  return true;
12930
0
}
12931
12932
static const JSJitInfo onanimationend_getterinfo = {
12933
  { (JSJitGetterOp)get_onanimationend },
12934
  { prototypes::id::Window },
12935
  { PrototypeTraits<prototypes::id::Window>::Depth },
12936
  JSJitInfo::Getter,
12937
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12938
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
12939
  false,  /* isInfallible. False in setters. */
12940
  false,  /* isMovable.  Not relevant for setters. */
12941
  false, /* isEliminatable.  Not relevant for setters. */
12942
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12943
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12944
  false,  /* isTypedMethod.  Only relevant for methods. */
12945
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12946
};
12947
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12948
static_assert(0 < 5, "There is no slot for us");
12949
static const JSJitInfo onanimationend_setterinfo = {
12950
  { (JSJitGetterOp)set_onanimationend },
12951
  { prototypes::id::Window },
12952
  { PrototypeTraits<prototypes::id::Window>::Depth },
12953
  JSJitInfo::Setter,
12954
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
12955
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
12956
  false,  /* isInfallible. False in setters. */
12957
  false,  /* isMovable.  Not relevant for setters. */
12958
  false, /* isEliminatable.  Not relevant for setters. */
12959
  false, /* isAlwaysInSlot.  Only relevant for getters. */
12960
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
12961
  false,  /* isTypedMethod.  Only relevant for methods. */
12962
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
12963
};
12964
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12965
static_assert(0 < 5, "There is no slot for us");
12966
12967
MOZ_CAN_RUN_SCRIPT static bool
12968
get_onanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
12969
0
{
12970
0
  AUTO_PROFILER_LABEL_FAST("get Window.onanimationiteration", DOM, cx);
12971
0
12972
0
  RefPtr<EventHandlerNonNull> result(self->GetOnanimationiteration());
12973
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
12974
0
  if (result) {
12975
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
12976
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12977
0
      return false;
12978
0
    }
12979
0
    return true;
12980
0
  } else {
12981
0
    args.rval().setNull();
12982
0
    return true;
12983
0
  }
12984
0
}
12985
12986
MOZ_CAN_RUN_SCRIPT static bool
12987
set_onanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
12988
0
{
12989
0
  AUTO_PROFILER_LABEL_FAST("set Window.onanimationiteration", DOM, cx);
12990
0
12991
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12992
0
  if (args[0].isObject()) {
12993
0
    { // scope for tempRoot and tempGlobalRoot if needed
12994
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
12995
0
    }
12996
0
  } else {
12997
0
    arg0 = nullptr;
12998
0
  }
12999
0
  self->SetOnanimationiteration(Constify(arg0));
13000
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13001
0
13002
0
  return true;
13003
0
}
13004
13005
static const JSJitInfo onanimationiteration_getterinfo = {
13006
  { (JSJitGetterOp)get_onanimationiteration },
13007
  { prototypes::id::Window },
13008
  { PrototypeTraits<prototypes::id::Window>::Depth },
13009
  JSJitInfo::Getter,
13010
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13011
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
13012
  false,  /* isInfallible. False in setters. */
13013
  false,  /* isMovable.  Not relevant for setters. */
13014
  false, /* isEliminatable.  Not relevant for setters. */
13015
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13016
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13017
  false,  /* isTypedMethod.  Only relevant for methods. */
13018
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13019
};
13020
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13021
static_assert(0 < 5, "There is no slot for us");
13022
static const JSJitInfo onanimationiteration_setterinfo = {
13023
  { (JSJitGetterOp)set_onanimationiteration },
13024
  { prototypes::id::Window },
13025
  { PrototypeTraits<prototypes::id::Window>::Depth },
13026
  JSJitInfo::Setter,
13027
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13028
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
13029
  false,  /* isInfallible. False in setters. */
13030
  false,  /* isMovable.  Not relevant for setters. */
13031
  false, /* isEliminatable.  Not relevant for setters. */
13032
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13033
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13034
  false,  /* isTypedMethod.  Only relevant for methods. */
13035
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13036
};
13037
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13038
static_assert(0 < 5, "There is no slot for us");
13039
13040
MOZ_CAN_RUN_SCRIPT static bool
13041
get_onanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13042
0
{
13043
0
  AUTO_PROFILER_LABEL_FAST("get Window.onanimationstart", DOM, cx);
13044
0
13045
0
  RefPtr<EventHandlerNonNull> result(self->GetOnanimationstart());
13046
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13047
0
  if (result) {
13048
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
13049
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13050
0
      return false;
13051
0
    }
13052
0
    return true;
13053
0
  } else {
13054
0
    args.rval().setNull();
13055
0
    return true;
13056
0
  }
13057
0
}
13058
13059
MOZ_CAN_RUN_SCRIPT static bool
13060
set_onanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
13061
0
{
13062
0
  AUTO_PROFILER_LABEL_FAST("set Window.onanimationstart", DOM, cx);
13063
0
13064
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13065
0
  if (args[0].isObject()) {
13066
0
    { // scope for tempRoot and tempGlobalRoot if needed
13067
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
13068
0
    }
13069
0
  } else {
13070
0
    arg0 = nullptr;
13071
0
  }
13072
0
  self->SetOnanimationstart(Constify(arg0));
13073
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13074
0
13075
0
  return true;
13076
0
}
13077
13078
static const JSJitInfo onanimationstart_getterinfo = {
13079
  { (JSJitGetterOp)get_onanimationstart },
13080
  { prototypes::id::Window },
13081
  { PrototypeTraits<prototypes::id::Window>::Depth },
13082
  JSJitInfo::Getter,
13083
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13084
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
13085
  false,  /* isInfallible. False in setters. */
13086
  false,  /* isMovable.  Not relevant for setters. */
13087
  false, /* isEliminatable.  Not relevant for setters. */
13088
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13089
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13090
  false,  /* isTypedMethod.  Only relevant for methods. */
13091
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13092
};
13093
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13094
static_assert(0 < 5, "There is no slot for us");
13095
static const JSJitInfo onanimationstart_setterinfo = {
13096
  { (JSJitGetterOp)set_onanimationstart },
13097
  { prototypes::id::Window },
13098
  { PrototypeTraits<prototypes::id::Window>::Depth },
13099
  JSJitInfo::Setter,
13100
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13101
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
13102
  false,  /* isInfallible. False in setters. */
13103
  false,  /* isMovable.  Not relevant for setters. */
13104
  false, /* isEliminatable.  Not relevant for setters. */
13105
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13106
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13107
  false,  /* isTypedMethod.  Only relevant for methods. */
13108
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13109
};
13110
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13111
static_assert(0 < 5, "There is no slot for us");
13112
13113
MOZ_CAN_RUN_SCRIPT static bool
13114
get_ontransitioncancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13115
0
{
13116
0
  AUTO_PROFILER_LABEL_FAST("get Window.ontransitioncancel", DOM, cx);
13117
0
13118
0
  RefPtr<EventHandlerNonNull> result(self->GetOntransitioncancel());
13119
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13120
0
  if (result) {
13121
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
13122
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13123
0
      return false;
13124
0
    }
13125
0
    return true;
13126
0
  } else {
13127
0
    args.rval().setNull();
13128
0
    return true;
13129
0
  }
13130
0
}
13131
13132
MOZ_CAN_RUN_SCRIPT static bool
13133
set_ontransitioncancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
13134
0
{
13135
0
  AUTO_PROFILER_LABEL_FAST("set Window.ontransitioncancel", DOM, cx);
13136
0
13137
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13138
0
  if (args[0].isObject()) {
13139
0
    { // scope for tempRoot and tempGlobalRoot if needed
13140
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
13141
0
    }
13142
0
  } else {
13143
0
    arg0 = nullptr;
13144
0
  }
13145
0
  self->SetOntransitioncancel(Constify(arg0));
13146
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13147
0
13148
0
  return true;
13149
0
}
13150
13151
static const JSJitInfo ontransitioncancel_getterinfo = {
13152
  { (JSJitGetterOp)get_ontransitioncancel },
13153
  { prototypes::id::Window },
13154
  { PrototypeTraits<prototypes::id::Window>::Depth },
13155
  JSJitInfo::Getter,
13156
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13157
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
13158
  false,  /* isInfallible. False in setters. */
13159
  false,  /* isMovable.  Not relevant for setters. */
13160
  false, /* isEliminatable.  Not relevant for setters. */
13161
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13162
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13163
  false,  /* isTypedMethod.  Only relevant for methods. */
13164
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13165
};
13166
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13167
static_assert(0 < 5, "There is no slot for us");
13168
static const JSJitInfo ontransitioncancel_setterinfo = {
13169
  { (JSJitGetterOp)set_ontransitioncancel },
13170
  { prototypes::id::Window },
13171
  { PrototypeTraits<prototypes::id::Window>::Depth },
13172
  JSJitInfo::Setter,
13173
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13174
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
13175
  false,  /* isInfallible. False in setters. */
13176
  false,  /* isMovable.  Not relevant for setters. */
13177
  false, /* isEliminatable.  Not relevant for setters. */
13178
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13179
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13180
  false,  /* isTypedMethod.  Only relevant for methods. */
13181
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13182
};
13183
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13184
static_assert(0 < 5, "There is no slot for us");
13185
13186
MOZ_CAN_RUN_SCRIPT static bool
13187
get_ontransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13188
0
{
13189
0
  AUTO_PROFILER_LABEL_FAST("get Window.ontransitionend", DOM, cx);
13190
0
13191
0
  RefPtr<EventHandlerNonNull> result(self->GetOntransitionend());
13192
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13193
0
  if (result) {
13194
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
13195
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13196
0
      return false;
13197
0
    }
13198
0
    return true;
13199
0
  } else {
13200
0
    args.rval().setNull();
13201
0
    return true;
13202
0
  }
13203
0
}
13204
13205
MOZ_CAN_RUN_SCRIPT static bool
13206
set_ontransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
13207
0
{
13208
0
  AUTO_PROFILER_LABEL_FAST("set Window.ontransitionend", DOM, cx);
13209
0
13210
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13211
0
  if (args[0].isObject()) {
13212
0
    { // scope for tempRoot and tempGlobalRoot if needed
13213
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
13214
0
    }
13215
0
  } else {
13216
0
    arg0 = nullptr;
13217
0
  }
13218
0
  self->SetOntransitionend(Constify(arg0));
13219
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13220
0
13221
0
  return true;
13222
0
}
13223
13224
static const JSJitInfo ontransitionend_getterinfo = {
13225
  { (JSJitGetterOp)get_ontransitionend },
13226
  { prototypes::id::Window },
13227
  { PrototypeTraits<prototypes::id::Window>::Depth },
13228
  JSJitInfo::Getter,
13229
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13230
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
13231
  false,  /* isInfallible. False in setters. */
13232
  false,  /* isMovable.  Not relevant for setters. */
13233
  false, /* isEliminatable.  Not relevant for setters. */
13234
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13235
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13236
  false,  /* isTypedMethod.  Only relevant for methods. */
13237
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13238
};
13239
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13240
static_assert(0 < 5, "There is no slot for us");
13241
static const JSJitInfo ontransitionend_setterinfo = {
13242
  { (JSJitGetterOp)set_ontransitionend },
13243
  { prototypes::id::Window },
13244
  { PrototypeTraits<prototypes::id::Window>::Depth },
13245
  JSJitInfo::Setter,
13246
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13247
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
13248
  false,  /* isInfallible. False in setters. */
13249
  false,  /* isMovable.  Not relevant for setters. */
13250
  false, /* isEliminatable.  Not relevant for setters. */
13251
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13252
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13253
  false,  /* isTypedMethod.  Only relevant for methods. */
13254
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13255
};
13256
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13257
static_assert(0 < 5, "There is no slot for us");
13258
13259
MOZ_CAN_RUN_SCRIPT static bool
13260
get_ontransitionrun(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13261
0
{
13262
0
  AUTO_PROFILER_LABEL_FAST("get Window.ontransitionrun", DOM, cx);
13263
0
13264
0
  RefPtr<EventHandlerNonNull> result(self->GetOntransitionrun());
13265
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13266
0
  if (result) {
13267
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
13268
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13269
0
      return false;
13270
0
    }
13271
0
    return true;
13272
0
  } else {
13273
0
    args.rval().setNull();
13274
0
    return true;
13275
0
  }
13276
0
}
13277
13278
MOZ_CAN_RUN_SCRIPT static bool
13279
set_ontransitionrun(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
13280
0
{
13281
0
  AUTO_PROFILER_LABEL_FAST("set Window.ontransitionrun", DOM, cx);
13282
0
13283
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13284
0
  if (args[0].isObject()) {
13285
0
    { // scope for tempRoot and tempGlobalRoot if needed
13286
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
13287
0
    }
13288
0
  } else {
13289
0
    arg0 = nullptr;
13290
0
  }
13291
0
  self->SetOntransitionrun(Constify(arg0));
13292
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13293
0
13294
0
  return true;
13295
0
}
13296
13297
static const JSJitInfo ontransitionrun_getterinfo = {
13298
  { (JSJitGetterOp)get_ontransitionrun },
13299
  { prototypes::id::Window },
13300
  { PrototypeTraits<prototypes::id::Window>::Depth },
13301
  JSJitInfo::Getter,
13302
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13303
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
13304
  false,  /* isInfallible. False in setters. */
13305
  false,  /* isMovable.  Not relevant for setters. */
13306
  false, /* isEliminatable.  Not relevant for setters. */
13307
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13308
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13309
  false,  /* isTypedMethod.  Only relevant for methods. */
13310
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13311
};
13312
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13313
static_assert(0 < 5, "There is no slot for us");
13314
static const JSJitInfo ontransitionrun_setterinfo = {
13315
  { (JSJitGetterOp)set_ontransitionrun },
13316
  { prototypes::id::Window },
13317
  { PrototypeTraits<prototypes::id::Window>::Depth },
13318
  JSJitInfo::Setter,
13319
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13320
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
13321
  false,  /* isInfallible. False in setters. */
13322
  false,  /* isMovable.  Not relevant for setters. */
13323
  false, /* isEliminatable.  Not relevant for setters. */
13324
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13325
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13326
  false,  /* isTypedMethod.  Only relevant for methods. */
13327
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13328
};
13329
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13330
static_assert(0 < 5, "There is no slot for us");
13331
13332
MOZ_CAN_RUN_SCRIPT static bool
13333
get_ontransitionstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13334
0
{
13335
0
  AUTO_PROFILER_LABEL_FAST("get Window.ontransitionstart", DOM, cx);
13336
0
13337
0
  RefPtr<EventHandlerNonNull> result(self->GetOntransitionstart());
13338
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13339
0
  if (result) {
13340
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
13341
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13342
0
      return false;
13343
0
    }
13344
0
    return true;
13345
0
  } else {
13346
0
    args.rval().setNull();
13347
0
    return true;
13348
0
  }
13349
0
}
13350
13351
MOZ_CAN_RUN_SCRIPT static bool
13352
set_ontransitionstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
13353
0
{
13354
0
  AUTO_PROFILER_LABEL_FAST("set Window.ontransitionstart", DOM, cx);
13355
0
13356
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13357
0
  if (args[0].isObject()) {
13358
0
    { // scope for tempRoot and tempGlobalRoot if needed
13359
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
13360
0
    }
13361
0
  } else {
13362
0
    arg0 = nullptr;
13363
0
  }
13364
0
  self->SetOntransitionstart(Constify(arg0));
13365
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13366
0
13367
0
  return true;
13368
0
}
13369
13370
static const JSJitInfo ontransitionstart_getterinfo = {
13371
  { (JSJitGetterOp)get_ontransitionstart },
13372
  { prototypes::id::Window },
13373
  { PrototypeTraits<prototypes::id::Window>::Depth },
13374
  JSJitInfo::Getter,
13375
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13376
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
13377
  false,  /* isInfallible. False in setters. */
13378
  false,  /* isMovable.  Not relevant for setters. */
13379
  false, /* isEliminatable.  Not relevant for setters. */
13380
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13381
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13382
  false,  /* isTypedMethod.  Only relevant for methods. */
13383
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13384
};
13385
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13386
static_assert(0 < 5, "There is no slot for us");
13387
static const JSJitInfo ontransitionstart_setterinfo = {
13388
  { (JSJitGetterOp)set_ontransitionstart },
13389
  { prototypes::id::Window },
13390
  { PrototypeTraits<prototypes::id::Window>::Depth },
13391
  JSJitInfo::Setter,
13392
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13393
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
13394
  false,  /* isInfallible. False in setters. */
13395
  false,  /* isMovable.  Not relevant for setters. */
13396
  false, /* isEliminatable.  Not relevant for setters. */
13397
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13398
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13399
  false,  /* isTypedMethod.  Only relevant for methods. */
13400
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13401
};
13402
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13403
static_assert(0 < 5, "There is no slot for us");
13404
13405
MOZ_CAN_RUN_SCRIPT static bool
13406
get_onwebkitanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13407
0
{
13408
0
  AUTO_PROFILER_LABEL_FAST("get Window.onwebkitanimationend", DOM, cx);
13409
0
13410
0
  RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationend());
13411
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13412
0
  if (result) {
13413
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
13414
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13415
0
      return false;
13416
0
    }
13417
0
    return true;
13418
0
  } else {
13419
0
    args.rval().setNull();
13420
0
    return true;
13421
0
  }
13422
0
}
13423
13424
MOZ_CAN_RUN_SCRIPT static bool
13425
set_onwebkitanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
13426
0
{
13427
0
  AUTO_PROFILER_LABEL_FAST("set Window.onwebkitanimationend", DOM, cx);
13428
0
13429
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13430
0
  if (args[0].isObject()) {
13431
0
    { // scope for tempRoot and tempGlobalRoot if needed
13432
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
13433
0
    }
13434
0
  } else {
13435
0
    arg0 = nullptr;
13436
0
  }
13437
0
  self->SetOnwebkitanimationend(Constify(arg0));
13438
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13439
0
13440
0
  return true;
13441
0
}
13442
13443
static const JSJitInfo onwebkitanimationend_getterinfo = {
13444
  { (JSJitGetterOp)get_onwebkitanimationend },
13445
  { prototypes::id::Window },
13446
  { PrototypeTraits<prototypes::id::Window>::Depth },
13447
  JSJitInfo::Getter,
13448
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13449
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
13450
  false,  /* isInfallible. False in setters. */
13451
  false,  /* isMovable.  Not relevant for setters. */
13452
  false, /* isEliminatable.  Not relevant for setters. */
13453
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13454
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13455
  false,  /* isTypedMethod.  Only relevant for methods. */
13456
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13457
};
13458
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13459
static_assert(0 < 5, "There is no slot for us");
13460
static const JSJitInfo onwebkitanimationend_setterinfo = {
13461
  { (JSJitGetterOp)set_onwebkitanimationend },
13462
  { prototypes::id::Window },
13463
  { PrototypeTraits<prototypes::id::Window>::Depth },
13464
  JSJitInfo::Setter,
13465
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13466
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
13467
  false,  /* isInfallible. False in setters. */
13468
  false,  /* isMovable.  Not relevant for setters. */
13469
  false, /* isEliminatable.  Not relevant for setters. */
13470
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13471
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13472
  false,  /* isTypedMethod.  Only relevant for methods. */
13473
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13474
};
13475
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13476
static_assert(0 < 5, "There is no slot for us");
13477
13478
MOZ_CAN_RUN_SCRIPT static bool
13479
get_onwebkitanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13480
0
{
13481
0
  AUTO_PROFILER_LABEL_FAST("get Window.onwebkitanimationiteration", DOM, cx);
13482
0
13483
0
  RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationiteration());
13484
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13485
0
  if (result) {
13486
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
13487
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13488
0
      return false;
13489
0
    }
13490
0
    return true;
13491
0
  } else {
13492
0
    args.rval().setNull();
13493
0
    return true;
13494
0
  }
13495
0
}
13496
13497
MOZ_CAN_RUN_SCRIPT static bool
13498
set_onwebkitanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
13499
0
{
13500
0
  AUTO_PROFILER_LABEL_FAST("set Window.onwebkitanimationiteration", DOM, cx);
13501
0
13502
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13503
0
  if (args[0].isObject()) {
13504
0
    { // scope for tempRoot and tempGlobalRoot if needed
13505
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
13506
0
    }
13507
0
  } else {
13508
0
    arg0 = nullptr;
13509
0
  }
13510
0
  self->SetOnwebkitanimationiteration(Constify(arg0));
13511
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13512
0
13513
0
  return true;
13514
0
}
13515
13516
static const JSJitInfo onwebkitanimationiteration_getterinfo = {
13517
  { (JSJitGetterOp)get_onwebkitanimationiteration },
13518
  { prototypes::id::Window },
13519
  { PrototypeTraits<prototypes::id::Window>::Depth },
13520
  JSJitInfo::Getter,
13521
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13522
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
13523
  false,  /* isInfallible. False in setters. */
13524
  false,  /* isMovable.  Not relevant for setters. */
13525
  false, /* isEliminatable.  Not relevant for setters. */
13526
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13527
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13528
  false,  /* isTypedMethod.  Only relevant for methods. */
13529
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13530
};
13531
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13532
static_assert(0 < 5, "There is no slot for us");
13533
static const JSJitInfo onwebkitanimationiteration_setterinfo = {
13534
  { (JSJitGetterOp)set_onwebkitanimationiteration },
13535
  { prototypes::id::Window },
13536
  { PrototypeTraits<prototypes::id::Window>::Depth },
13537
  JSJitInfo::Setter,
13538
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13539
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
13540
  false,  /* isInfallible. False in setters. */
13541
  false,  /* isMovable.  Not relevant for setters. */
13542
  false, /* isEliminatable.  Not relevant for setters. */
13543
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13544
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13545
  false,  /* isTypedMethod.  Only relevant for methods. */
13546
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13547
};
13548
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13549
static_assert(0 < 5, "There is no slot for us");
13550
13551
MOZ_CAN_RUN_SCRIPT static bool
13552
get_onwebkitanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13553
0
{
13554
0
  AUTO_PROFILER_LABEL_FAST("get Window.onwebkitanimationstart", DOM, cx);
13555
0
13556
0
  RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationstart());
13557
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13558
0
  if (result) {
13559
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
13560
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13561
0
      return false;
13562
0
    }
13563
0
    return true;
13564
0
  } else {
13565
0
    args.rval().setNull();
13566
0
    return true;
13567
0
  }
13568
0
}
13569
13570
MOZ_CAN_RUN_SCRIPT static bool
13571
set_onwebkitanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
13572
0
{
13573
0
  AUTO_PROFILER_LABEL_FAST("set Window.onwebkitanimationstart", DOM, cx);
13574
0
13575
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13576
0
  if (args[0].isObject()) {
13577
0
    { // scope for tempRoot and tempGlobalRoot if needed
13578
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
13579
0
    }
13580
0
  } else {
13581
0
    arg0 = nullptr;
13582
0
  }
13583
0
  self->SetOnwebkitanimationstart(Constify(arg0));
13584
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13585
0
13586
0
  return true;
13587
0
}
13588
13589
static const JSJitInfo onwebkitanimationstart_getterinfo = {
13590
  { (JSJitGetterOp)get_onwebkitanimationstart },
13591
  { prototypes::id::Window },
13592
  { PrototypeTraits<prototypes::id::Window>::Depth },
13593
  JSJitInfo::Getter,
13594
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13595
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
13596
  false,  /* isInfallible. False in setters. */
13597
  false,  /* isMovable.  Not relevant for setters. */
13598
  false, /* isEliminatable.  Not relevant for setters. */
13599
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13600
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13601
  false,  /* isTypedMethod.  Only relevant for methods. */
13602
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13603
};
13604
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13605
static_assert(0 < 5, "There is no slot for us");
13606
static const JSJitInfo onwebkitanimationstart_setterinfo = {
13607
  { (JSJitGetterOp)set_onwebkitanimationstart },
13608
  { prototypes::id::Window },
13609
  { PrototypeTraits<prototypes::id::Window>::Depth },
13610
  JSJitInfo::Setter,
13611
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13612
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
13613
  false,  /* isInfallible. False in setters. */
13614
  false,  /* isMovable.  Not relevant for setters. */
13615
  false, /* isEliminatable.  Not relevant for setters. */
13616
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13617
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13618
  false,  /* isTypedMethod.  Only relevant for methods. */
13619
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13620
};
13621
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13622
static_assert(0 < 5, "There is no slot for us");
13623
13624
MOZ_CAN_RUN_SCRIPT static bool
13625
get_onwebkittransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13626
0
{
13627
0
  AUTO_PROFILER_LABEL_FAST("get Window.onwebkittransitionend", DOM, cx);
13628
0
13629
0
  RefPtr<EventHandlerNonNull> result(self->GetOnwebkittransitionend());
13630
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13631
0
  if (result) {
13632
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
13633
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13634
0
      return false;
13635
0
    }
13636
0
    return true;
13637
0
  } else {
13638
0
    args.rval().setNull();
13639
0
    return true;
13640
0
  }
13641
0
}
13642
13643
MOZ_CAN_RUN_SCRIPT static bool
13644
set_onwebkittransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
13645
0
{
13646
0
  AUTO_PROFILER_LABEL_FAST("set Window.onwebkittransitionend", DOM, cx);
13647
0
13648
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13649
0
  if (args[0].isObject()) {
13650
0
    { // scope for tempRoot and tempGlobalRoot if needed
13651
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
13652
0
    }
13653
0
  } else {
13654
0
    arg0 = nullptr;
13655
0
  }
13656
0
  self->SetOnwebkittransitionend(Constify(arg0));
13657
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13658
0
13659
0
  return true;
13660
0
}
13661
13662
static const JSJitInfo onwebkittransitionend_getterinfo = {
13663
  { (JSJitGetterOp)get_onwebkittransitionend },
13664
  { prototypes::id::Window },
13665
  { PrototypeTraits<prototypes::id::Window>::Depth },
13666
  JSJitInfo::Getter,
13667
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13668
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
13669
  false,  /* isInfallible. False in setters. */
13670
  false,  /* isMovable.  Not relevant for setters. */
13671
  false, /* isEliminatable.  Not relevant for setters. */
13672
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13673
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13674
  false,  /* isTypedMethod.  Only relevant for methods. */
13675
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13676
};
13677
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13678
static_assert(0 < 5, "There is no slot for us");
13679
static const JSJitInfo onwebkittransitionend_setterinfo = {
13680
  { (JSJitGetterOp)set_onwebkittransitionend },
13681
  { prototypes::id::Window },
13682
  { PrototypeTraits<prototypes::id::Window>::Depth },
13683
  JSJitInfo::Setter,
13684
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13685
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
13686
  false,  /* isInfallible. False in setters. */
13687
  false,  /* isMovable.  Not relevant for setters. */
13688
  false, /* isEliminatable.  Not relevant for setters. */
13689
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13690
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13691
  false,  /* isTypedMethod.  Only relevant for methods. */
13692
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13693
};
13694
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13695
static_assert(0 < 5, "There is no slot for us");
13696
13697
MOZ_CAN_RUN_SCRIPT static bool
13698
get_u2f(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13699
0
{
13700
0
  AUTO_PROFILER_LABEL_FAST("get Window.u2f", DOM, cx);
13701
0
13702
0
  FastErrorResult rv;
13703
0
  auto result(StrongOrRawPtr<mozilla::dom::U2F>(self->GetU2f(rv)));
13704
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
13705
0
    return false;
13706
0
  }
13707
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13708
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
13709
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
13710
0
    return false;
13711
0
  }
13712
0
  return true;
13713
0
}
13714
13715
static const JSJitInfo u2f_getterinfo = {
13716
  { (JSJitGetterOp)get_u2f },
13717
  { prototypes::id::Window },
13718
  { PrototypeTraits<prototypes::id::Window>::Depth },
13719
  JSJitInfo::Getter,
13720
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13721
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
13722
  false,  /* isInfallible. False in setters. */
13723
  false,  /* isMovable.  Not relevant for setters. */
13724
  false, /* isEliminatable.  Not relevant for setters. */
13725
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13726
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13727
  false,  /* isTypedMethod.  Only relevant for methods. */
13728
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13729
};
13730
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13731
static_assert(0 < 5, "There is no slot for us");
13732
13733
MOZ_CAN_RUN_SCRIPT static bool
13734
get_onerror(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13735
0
{
13736
0
  AUTO_PROFILER_LABEL_FAST("get Window.onerror", DOM, cx);
13737
0
13738
0
  RefPtr<OnErrorEventHandlerNonNull> result(self->GetOnerror());
13739
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13740
0
  if (result) {
13741
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
13742
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13743
0
      return false;
13744
0
    }
13745
0
    return true;
13746
0
  } else {
13747
0
    args.rval().setNull();
13748
0
    return true;
13749
0
  }
13750
0
}
13751
13752
MOZ_CAN_RUN_SCRIPT static bool
13753
set_onerror(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
13754
0
{
13755
0
  AUTO_PROFILER_LABEL_FAST("set Window.onerror", DOM, cx);
13756
0
13757
0
  RootedCallback<RefPtr<binding_detail::FastOnErrorEventHandlerNonNull>> arg0(cx);
13758
0
  if (args[0].isObject()) {
13759
0
    { // scope for tempRoot and tempGlobalRoot if needed
13760
0
      arg0 = new binding_detail::FastOnErrorEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
13761
0
    }
13762
0
  } else {
13763
0
    arg0 = nullptr;
13764
0
  }
13765
0
  self->SetOnerror(Constify(arg0));
13766
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13767
0
13768
0
  return true;
13769
0
}
13770
13771
static const JSJitInfo onerror_getterinfo = {
13772
  { (JSJitGetterOp)get_onerror },
13773
  { prototypes::id::Window },
13774
  { PrototypeTraits<prototypes::id::Window>::Depth },
13775
  JSJitInfo::Getter,
13776
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13777
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
13778
  false,  /* isInfallible. False in setters. */
13779
  false,  /* isMovable.  Not relevant for setters. */
13780
  false, /* isEliminatable.  Not relevant for setters. */
13781
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13782
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13783
  false,  /* isTypedMethod.  Only relevant for methods. */
13784
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13785
};
13786
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13787
static_assert(0 < 5, "There is no slot for us");
13788
static const JSJitInfo onerror_setterinfo = {
13789
  { (JSJitGetterOp)set_onerror },
13790
  { prototypes::id::Window },
13791
  { PrototypeTraits<prototypes::id::Window>::Depth },
13792
  JSJitInfo::Setter,
13793
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13794
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
13795
  false,  /* isInfallible. False in setters. */
13796
  false,  /* isMovable.  Not relevant for setters. */
13797
  false, /* isEliminatable.  Not relevant for setters. */
13798
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13799
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13800
  false,  /* isTypedMethod.  Only relevant for methods. */
13801
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13802
};
13803
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13804
static_assert(0 < 5, "There is no slot for us");
13805
13806
MOZ_CAN_RUN_SCRIPT static bool
13807
get_speechSynthesis(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13808
0
{
13809
0
  AUTO_PROFILER_LABEL_FAST("get Window.speechSynthesis", DOM, cx);
13810
0
13811
0
  FastErrorResult rv;
13812
0
  auto result(StrongOrRawPtr<mozilla::dom::SpeechSynthesis>(self->GetSpeechSynthesis(rv)));
13813
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
13814
0
    return false;
13815
0
  }
13816
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13817
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
13818
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
13819
0
    return false;
13820
0
  }
13821
0
  return true;
13822
0
}
13823
13824
static const JSJitInfo speechSynthesis_getterinfo = {
13825
  { (JSJitGetterOp)get_speechSynthesis },
13826
  { prototypes::id::Window },
13827
  { PrototypeTraits<prototypes::id::Window>::Depth },
13828
  JSJitInfo::Getter,
13829
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13830
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
13831
  false,  /* isInfallible. False in setters. */
13832
  false,  /* isMovable.  Not relevant for setters. */
13833
  false, /* isEliminatable.  Not relevant for setters. */
13834
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13835
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13836
  false,  /* isTypedMethod.  Only relevant for methods. */
13837
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13838
};
13839
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13840
static_assert(0 < 5, "There is no slot for us");
13841
13842
MOZ_CAN_RUN_SCRIPT static bool
13843
get_ontouchstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13844
0
{
13845
0
  AUTO_PROFILER_LABEL_FAST("get Window.ontouchstart", DOM, cx);
13846
0
13847
0
  RefPtr<EventHandlerNonNull> result(self->GetOntouchstart());
13848
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13849
0
  if (result) {
13850
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
13851
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13852
0
      return false;
13853
0
    }
13854
0
    return true;
13855
0
  } else {
13856
0
    args.rval().setNull();
13857
0
    return true;
13858
0
  }
13859
0
}
13860
13861
MOZ_CAN_RUN_SCRIPT static bool
13862
set_ontouchstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
13863
0
{
13864
0
  AUTO_PROFILER_LABEL_FAST("set Window.ontouchstart", DOM, cx);
13865
0
13866
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13867
0
  if (args[0].isObject()) {
13868
0
    { // scope for tempRoot and tempGlobalRoot if needed
13869
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
13870
0
    }
13871
0
  } else {
13872
0
    arg0 = nullptr;
13873
0
  }
13874
0
  self->SetOntouchstart(Constify(arg0));
13875
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13876
0
13877
0
  return true;
13878
0
}
13879
13880
static const JSJitInfo ontouchstart_getterinfo = {
13881
  { (JSJitGetterOp)get_ontouchstart },
13882
  { prototypes::id::Window },
13883
  { PrototypeTraits<prototypes::id::Window>::Depth },
13884
  JSJitInfo::Getter,
13885
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13886
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
13887
  false,  /* isInfallible. False in setters. */
13888
  false,  /* isMovable.  Not relevant for setters. */
13889
  false, /* isEliminatable.  Not relevant for setters. */
13890
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13891
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13892
  false,  /* isTypedMethod.  Only relevant for methods. */
13893
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13894
};
13895
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13896
static_assert(0 < 5, "There is no slot for us");
13897
static const JSJitInfo ontouchstart_setterinfo = {
13898
  { (JSJitGetterOp)set_ontouchstart },
13899
  { prototypes::id::Window },
13900
  { PrototypeTraits<prototypes::id::Window>::Depth },
13901
  JSJitInfo::Setter,
13902
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13903
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
13904
  false,  /* isInfallible. False in setters. */
13905
  false,  /* isMovable.  Not relevant for setters. */
13906
  false, /* isEliminatable.  Not relevant for setters. */
13907
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13908
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13909
  false,  /* isTypedMethod.  Only relevant for methods. */
13910
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13911
};
13912
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13913
static_assert(0 < 5, "There is no slot for us");
13914
13915
MOZ_CAN_RUN_SCRIPT static bool
13916
get_ontouchend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13917
0
{
13918
0
  AUTO_PROFILER_LABEL_FAST("get Window.ontouchend", DOM, cx);
13919
0
13920
0
  RefPtr<EventHandlerNonNull> result(self->GetOntouchend());
13921
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13922
0
  if (result) {
13923
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
13924
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13925
0
      return false;
13926
0
    }
13927
0
    return true;
13928
0
  } else {
13929
0
    args.rval().setNull();
13930
0
    return true;
13931
0
  }
13932
0
}
13933
13934
MOZ_CAN_RUN_SCRIPT static bool
13935
set_ontouchend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
13936
0
{
13937
0
  AUTO_PROFILER_LABEL_FAST("set Window.ontouchend", DOM, cx);
13938
0
13939
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13940
0
  if (args[0].isObject()) {
13941
0
    { // scope for tempRoot and tempGlobalRoot if needed
13942
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
13943
0
    }
13944
0
  } else {
13945
0
    arg0 = nullptr;
13946
0
  }
13947
0
  self->SetOntouchend(Constify(arg0));
13948
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13949
0
13950
0
  return true;
13951
0
}
13952
13953
static const JSJitInfo ontouchend_getterinfo = {
13954
  { (JSJitGetterOp)get_ontouchend },
13955
  { prototypes::id::Window },
13956
  { PrototypeTraits<prototypes::id::Window>::Depth },
13957
  JSJitInfo::Getter,
13958
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13959
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
13960
  false,  /* isInfallible. False in setters. */
13961
  false,  /* isMovable.  Not relevant for setters. */
13962
  false, /* isEliminatable.  Not relevant for setters. */
13963
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13964
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13965
  false,  /* isTypedMethod.  Only relevant for methods. */
13966
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13967
};
13968
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13969
static_assert(0 < 5, "There is no slot for us");
13970
static const JSJitInfo ontouchend_setterinfo = {
13971
  { (JSJitGetterOp)set_ontouchend },
13972
  { prototypes::id::Window },
13973
  { PrototypeTraits<prototypes::id::Window>::Depth },
13974
  JSJitInfo::Setter,
13975
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
13976
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
13977
  false,  /* isInfallible. False in setters. */
13978
  false,  /* isMovable.  Not relevant for setters. */
13979
  false, /* isEliminatable.  Not relevant for setters. */
13980
  false, /* isAlwaysInSlot.  Only relevant for getters. */
13981
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
13982
  false,  /* isTypedMethod.  Only relevant for methods. */
13983
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
13984
};
13985
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13986
static_assert(0 < 5, "There is no slot for us");
13987
13988
MOZ_CAN_RUN_SCRIPT static bool
13989
get_ontouchmove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
13990
0
{
13991
0
  AUTO_PROFILER_LABEL_FAST("get Window.ontouchmove", DOM, cx);
13992
0
13993
0
  RefPtr<EventHandlerNonNull> result(self->GetOntouchmove());
13994
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
13995
0
  if (result) {
13996
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
13997
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13998
0
      return false;
13999
0
    }
14000
0
    return true;
14001
0
  } else {
14002
0
    args.rval().setNull();
14003
0
    return true;
14004
0
  }
14005
0
}
14006
14007
MOZ_CAN_RUN_SCRIPT static bool
14008
set_ontouchmove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
14009
0
{
14010
0
  AUTO_PROFILER_LABEL_FAST("set Window.ontouchmove", DOM, cx);
14011
0
14012
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14013
0
  if (args[0].isObject()) {
14014
0
    { // scope for tempRoot and tempGlobalRoot if needed
14015
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
14016
0
    }
14017
0
  } else {
14018
0
    arg0 = nullptr;
14019
0
  }
14020
0
  self->SetOntouchmove(Constify(arg0));
14021
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14022
0
14023
0
  return true;
14024
0
}
14025
14026
static const JSJitInfo ontouchmove_getterinfo = {
14027
  { (JSJitGetterOp)get_ontouchmove },
14028
  { prototypes::id::Window },
14029
  { PrototypeTraits<prototypes::id::Window>::Depth },
14030
  JSJitInfo::Getter,
14031
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14032
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
14033
  false,  /* isInfallible. False in setters. */
14034
  false,  /* isMovable.  Not relevant for setters. */
14035
  false, /* isEliminatable.  Not relevant for setters. */
14036
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14037
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14038
  false,  /* isTypedMethod.  Only relevant for methods. */
14039
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14040
};
14041
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14042
static_assert(0 < 5, "There is no slot for us");
14043
static const JSJitInfo ontouchmove_setterinfo = {
14044
  { (JSJitGetterOp)set_ontouchmove },
14045
  { prototypes::id::Window },
14046
  { PrototypeTraits<prototypes::id::Window>::Depth },
14047
  JSJitInfo::Setter,
14048
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14049
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
14050
  false,  /* isInfallible. False in setters. */
14051
  false,  /* isMovable.  Not relevant for setters. */
14052
  false, /* isEliminatable.  Not relevant for setters. */
14053
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14054
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14055
  false,  /* isTypedMethod.  Only relevant for methods. */
14056
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14057
};
14058
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14059
static_assert(0 < 5, "There is no slot for us");
14060
14061
MOZ_CAN_RUN_SCRIPT static bool
14062
get_ontouchcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
14063
0
{
14064
0
  AUTO_PROFILER_LABEL_FAST("get Window.ontouchcancel", DOM, cx);
14065
0
14066
0
  RefPtr<EventHandlerNonNull> result(self->GetOntouchcancel());
14067
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14068
0
  if (result) {
14069
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
14070
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14071
0
      return false;
14072
0
    }
14073
0
    return true;
14074
0
  } else {
14075
0
    args.rval().setNull();
14076
0
    return true;
14077
0
  }
14078
0
}
14079
14080
MOZ_CAN_RUN_SCRIPT static bool
14081
set_ontouchcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
14082
0
{
14083
0
  AUTO_PROFILER_LABEL_FAST("set Window.ontouchcancel", DOM, cx);
14084
0
14085
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14086
0
  if (args[0].isObject()) {
14087
0
    { // scope for tempRoot and tempGlobalRoot if needed
14088
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
14089
0
    }
14090
0
  } else {
14091
0
    arg0 = nullptr;
14092
0
  }
14093
0
  self->SetOntouchcancel(Constify(arg0));
14094
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14095
0
14096
0
  return true;
14097
0
}
14098
14099
static const JSJitInfo ontouchcancel_getterinfo = {
14100
  { (JSJitGetterOp)get_ontouchcancel },
14101
  { prototypes::id::Window },
14102
  { PrototypeTraits<prototypes::id::Window>::Depth },
14103
  JSJitInfo::Getter,
14104
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14105
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
14106
  false,  /* isInfallible. False in setters. */
14107
  false,  /* isMovable.  Not relevant for setters. */
14108
  false, /* isEliminatable.  Not relevant for setters. */
14109
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14110
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14111
  false,  /* isTypedMethod.  Only relevant for methods. */
14112
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14113
};
14114
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14115
static_assert(0 < 5, "There is no slot for us");
14116
static const JSJitInfo ontouchcancel_setterinfo = {
14117
  { (JSJitGetterOp)set_ontouchcancel },
14118
  { prototypes::id::Window },
14119
  { PrototypeTraits<prototypes::id::Window>::Depth },
14120
  JSJitInfo::Setter,
14121
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14122
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
14123
  false,  /* isInfallible. False in setters. */
14124
  false,  /* isMovable.  Not relevant for setters. */
14125
  false, /* isEliminatable.  Not relevant for setters. */
14126
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14127
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14128
  false,  /* isTypedMethod.  Only relevant for methods. */
14129
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14130
};
14131
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14132
static_assert(0 < 5, "There is no slot for us");
14133
14134
MOZ_CAN_RUN_SCRIPT static bool
14135
get_webgpu(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
14136
0
{
14137
0
  AUTO_PROFILER_LABEL_FAST("get Window.webgpu", DOM, cx);
14138
0
14139
0
  auto result(StrongOrRawPtr<mozilla::webgpu::Instance>(self->Webgpu()));
14140
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14141
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
14142
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
14143
0
    return false;
14144
0
  }
14145
0
  return true;
14146
0
}
14147
14148
MOZ_CAN_RUN_SCRIPT static bool
14149
set_webgpu(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
14150
0
{
14151
0
  AUTO_PROFILER_LABEL_FAST("set Window.webgpu", DOM, cx);
14152
0
14153
0
  return JS_DefineProperty(cx, obj, "webgpu", args[0], JSPROP_ENUMERATE);
14154
0
}
14155
14156
static const JSJitInfo webgpu_getterinfo = {
14157
  { (JSJitGetterOp)get_webgpu },
14158
  { prototypes::id::Window },
14159
  { PrototypeTraits<prototypes::id::Window>::Depth },
14160
  JSJitInfo::Getter,
14161
  JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
14162
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
14163
  false,  /* isInfallible. False in setters. */
14164
  true,  /* isMovable.  Not relevant for setters. */
14165
  true, /* isEliminatable.  Not relevant for setters. */
14166
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14167
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14168
  false,  /* isTypedMethod.  Only relevant for methods. */
14169
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14170
};
14171
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14172
static_assert(0 < 5, "There is no slot for us");
14173
static const JSJitInfo webgpu_setterinfo = {
14174
  { (JSJitGetterOp)set_webgpu },
14175
  { prototypes::id::Window },
14176
  { PrototypeTraits<prototypes::id::Window>::Depth },
14177
  JSJitInfo::Setter,
14178
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14179
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
14180
  false,  /* isInfallible. False in setters. */
14181
  false,  /* isMovable.  Not relevant for setters. */
14182
  false, /* isEliminatable.  Not relevant for setters. */
14183
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14184
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14185
  false,  /* isTypedMethod.  Only relevant for methods. */
14186
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14187
};
14188
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14189
static_assert(0 < 5, "There is no slot for us");
14190
14191
MOZ_CAN_RUN_SCRIPT static bool
14192
get_onafterprint(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
14193
0
{
14194
0
  AUTO_PROFILER_LABEL_FAST("get Window.onafterprint", DOM, cx);
14195
0
14196
0
  RefPtr<EventHandlerNonNull> result(self->GetOnafterprint());
14197
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14198
0
  if (result) {
14199
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
14200
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14201
0
      return false;
14202
0
    }
14203
0
    return true;
14204
0
  } else {
14205
0
    args.rval().setNull();
14206
0
    return true;
14207
0
  }
14208
0
}
14209
14210
MOZ_CAN_RUN_SCRIPT static bool
14211
set_onafterprint(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
14212
0
{
14213
0
  AUTO_PROFILER_LABEL_FAST("set Window.onafterprint", DOM, cx);
14214
0
14215
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14216
0
  if (args[0].isObject()) {
14217
0
    { // scope for tempRoot and tempGlobalRoot if needed
14218
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
14219
0
    }
14220
0
  } else {
14221
0
    arg0 = nullptr;
14222
0
  }
14223
0
  self->SetOnafterprint(Constify(arg0));
14224
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14225
0
14226
0
  return true;
14227
0
}
14228
14229
static const JSJitInfo onafterprint_getterinfo = {
14230
  { (JSJitGetterOp)get_onafterprint },
14231
  { prototypes::id::Window },
14232
  { PrototypeTraits<prototypes::id::Window>::Depth },
14233
  JSJitInfo::Getter,
14234
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14235
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
14236
  false,  /* isInfallible. False in setters. */
14237
  false,  /* isMovable.  Not relevant for setters. */
14238
  false, /* isEliminatable.  Not relevant for setters. */
14239
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14240
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14241
  false,  /* isTypedMethod.  Only relevant for methods. */
14242
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14243
};
14244
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14245
static_assert(0 < 5, "There is no slot for us");
14246
static const JSJitInfo onafterprint_setterinfo = {
14247
  { (JSJitGetterOp)set_onafterprint },
14248
  { prototypes::id::Window },
14249
  { PrototypeTraits<prototypes::id::Window>::Depth },
14250
  JSJitInfo::Setter,
14251
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14252
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
14253
  false,  /* isInfallible. False in setters. */
14254
  false,  /* isMovable.  Not relevant for setters. */
14255
  false, /* isEliminatable.  Not relevant for setters. */
14256
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14257
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14258
  false,  /* isTypedMethod.  Only relevant for methods. */
14259
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14260
};
14261
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14262
static_assert(0 < 5, "There is no slot for us");
14263
14264
MOZ_CAN_RUN_SCRIPT static bool
14265
get_onbeforeprint(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
14266
0
{
14267
0
  AUTO_PROFILER_LABEL_FAST("get Window.onbeforeprint", DOM, cx);
14268
0
14269
0
  RefPtr<EventHandlerNonNull> result(self->GetOnbeforeprint());
14270
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14271
0
  if (result) {
14272
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
14273
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14274
0
      return false;
14275
0
    }
14276
0
    return true;
14277
0
  } else {
14278
0
    args.rval().setNull();
14279
0
    return true;
14280
0
  }
14281
0
}
14282
14283
MOZ_CAN_RUN_SCRIPT static bool
14284
set_onbeforeprint(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
14285
0
{
14286
0
  AUTO_PROFILER_LABEL_FAST("set Window.onbeforeprint", DOM, cx);
14287
0
14288
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14289
0
  if (args[0].isObject()) {
14290
0
    { // scope for tempRoot and tempGlobalRoot if needed
14291
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
14292
0
    }
14293
0
  } else {
14294
0
    arg0 = nullptr;
14295
0
  }
14296
0
  self->SetOnbeforeprint(Constify(arg0));
14297
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14298
0
14299
0
  return true;
14300
0
}
14301
14302
static const JSJitInfo onbeforeprint_getterinfo = {
14303
  { (JSJitGetterOp)get_onbeforeprint },
14304
  { prototypes::id::Window },
14305
  { PrototypeTraits<prototypes::id::Window>::Depth },
14306
  JSJitInfo::Getter,
14307
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14308
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
14309
  false,  /* isInfallible. False in setters. */
14310
  false,  /* isMovable.  Not relevant for setters. */
14311
  false, /* isEliminatable.  Not relevant for setters. */
14312
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14313
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14314
  false,  /* isTypedMethod.  Only relevant for methods. */
14315
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14316
};
14317
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14318
static_assert(0 < 5, "There is no slot for us");
14319
static const JSJitInfo onbeforeprint_setterinfo = {
14320
  { (JSJitGetterOp)set_onbeforeprint },
14321
  { prototypes::id::Window },
14322
  { PrototypeTraits<prototypes::id::Window>::Depth },
14323
  JSJitInfo::Setter,
14324
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14325
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
14326
  false,  /* isInfallible. False in setters. */
14327
  false,  /* isMovable.  Not relevant for setters. */
14328
  false, /* isEliminatable.  Not relevant for setters. */
14329
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14330
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14331
  false,  /* isTypedMethod.  Only relevant for methods. */
14332
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14333
};
14334
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14335
static_assert(0 < 5, "There is no slot for us");
14336
14337
MOZ_CAN_RUN_SCRIPT static bool
14338
get_onbeforeunload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
14339
0
{
14340
0
  AUTO_PROFILER_LABEL_FAST("get Window.onbeforeunload", DOM, cx);
14341
0
14342
0
  RefPtr<OnBeforeUnloadEventHandlerNonNull> result(self->GetOnbeforeunload());
14343
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14344
0
  if (result) {
14345
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
14346
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14347
0
      return false;
14348
0
    }
14349
0
    return true;
14350
0
  } else {
14351
0
    args.rval().setNull();
14352
0
    return true;
14353
0
  }
14354
0
}
14355
14356
MOZ_CAN_RUN_SCRIPT static bool
14357
set_onbeforeunload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
14358
0
{
14359
0
  AUTO_PROFILER_LABEL_FAST("set Window.onbeforeunload", DOM, cx);
14360
0
14361
0
  RootedCallback<RefPtr<binding_detail::FastOnBeforeUnloadEventHandlerNonNull>> arg0(cx);
14362
0
  if (args[0].isObject()) {
14363
0
    { // scope for tempRoot and tempGlobalRoot if needed
14364
0
      arg0 = new binding_detail::FastOnBeforeUnloadEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
14365
0
    }
14366
0
  } else {
14367
0
    arg0 = nullptr;
14368
0
  }
14369
0
  self->SetOnbeforeunload(Constify(arg0));
14370
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14371
0
14372
0
  return true;
14373
0
}
14374
14375
static const JSJitInfo onbeforeunload_getterinfo = {
14376
  { (JSJitGetterOp)get_onbeforeunload },
14377
  { prototypes::id::Window },
14378
  { PrototypeTraits<prototypes::id::Window>::Depth },
14379
  JSJitInfo::Getter,
14380
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14381
  JSVAL_TYPE_UNKNOWN,  /* 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
static const JSJitInfo onbeforeunload_setterinfo = {
14393
  { (JSJitGetterOp)set_onbeforeunload },
14394
  { prototypes::id::Window },
14395
  { PrototypeTraits<prototypes::id::Window>::Depth },
14396
  JSJitInfo::Setter,
14397
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14398
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
14399
  false,  /* isInfallible. False in setters. */
14400
  false,  /* isMovable.  Not relevant for setters. */
14401
  false, /* isEliminatable.  Not relevant for setters. */
14402
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14403
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14404
  false,  /* isTypedMethod.  Only relevant for methods. */
14405
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14406
};
14407
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14408
static_assert(0 < 5, "There is no slot for us");
14409
14410
MOZ_CAN_RUN_SCRIPT static bool
14411
get_onhashchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
14412
0
{
14413
0
  AUTO_PROFILER_LABEL_FAST("get Window.onhashchange", DOM, cx);
14414
0
14415
0
  RefPtr<EventHandlerNonNull> result(self->GetOnhashchange());
14416
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14417
0
  if (result) {
14418
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
14419
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14420
0
      return false;
14421
0
    }
14422
0
    return true;
14423
0
  } else {
14424
0
    args.rval().setNull();
14425
0
    return true;
14426
0
  }
14427
0
}
14428
14429
MOZ_CAN_RUN_SCRIPT static bool
14430
set_onhashchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
14431
0
{
14432
0
  AUTO_PROFILER_LABEL_FAST("set Window.onhashchange", DOM, cx);
14433
0
14434
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14435
0
  if (args[0].isObject()) {
14436
0
    { // scope for tempRoot and tempGlobalRoot if needed
14437
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
14438
0
    }
14439
0
  } else {
14440
0
    arg0 = nullptr;
14441
0
  }
14442
0
  self->SetOnhashchange(Constify(arg0));
14443
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14444
0
14445
0
  return true;
14446
0
}
14447
14448
static const JSJitInfo onhashchange_getterinfo = {
14449
  { (JSJitGetterOp)get_onhashchange },
14450
  { prototypes::id::Window },
14451
  { PrototypeTraits<prototypes::id::Window>::Depth },
14452
  JSJitInfo::Getter,
14453
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14454
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
14455
  false,  /* isInfallible. False in setters. */
14456
  false,  /* isMovable.  Not relevant for setters. */
14457
  false, /* isEliminatable.  Not relevant for setters. */
14458
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14459
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14460
  false,  /* isTypedMethod.  Only relevant for methods. */
14461
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14462
};
14463
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14464
static_assert(0 < 5, "There is no slot for us");
14465
static const JSJitInfo onhashchange_setterinfo = {
14466
  { (JSJitGetterOp)set_onhashchange },
14467
  { prototypes::id::Window },
14468
  { PrototypeTraits<prototypes::id::Window>::Depth },
14469
  JSJitInfo::Setter,
14470
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14471
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
14472
  false,  /* isInfallible. False in setters. */
14473
  false,  /* isMovable.  Not relevant for setters. */
14474
  false, /* isEliminatable.  Not relevant for setters. */
14475
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14476
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14477
  false,  /* isTypedMethod.  Only relevant for methods. */
14478
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14479
};
14480
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14481
static_assert(0 < 5, "There is no slot for us");
14482
14483
MOZ_CAN_RUN_SCRIPT static bool
14484
get_onlanguagechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
14485
0
{
14486
0
  AUTO_PROFILER_LABEL_FAST("get Window.onlanguagechange", DOM, cx);
14487
0
14488
0
  RefPtr<EventHandlerNonNull> result(self->GetOnlanguagechange());
14489
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14490
0
  if (result) {
14491
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
14492
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14493
0
      return false;
14494
0
    }
14495
0
    return true;
14496
0
  } else {
14497
0
    args.rval().setNull();
14498
0
    return true;
14499
0
  }
14500
0
}
14501
14502
MOZ_CAN_RUN_SCRIPT static bool
14503
set_onlanguagechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
14504
0
{
14505
0
  AUTO_PROFILER_LABEL_FAST("set Window.onlanguagechange", DOM, cx);
14506
0
14507
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14508
0
  if (args[0].isObject()) {
14509
0
    { // scope for tempRoot and tempGlobalRoot if needed
14510
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
14511
0
    }
14512
0
  } else {
14513
0
    arg0 = nullptr;
14514
0
  }
14515
0
  self->SetOnlanguagechange(Constify(arg0));
14516
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14517
0
14518
0
  return true;
14519
0
}
14520
14521
static const JSJitInfo onlanguagechange_getterinfo = {
14522
  { (JSJitGetterOp)get_onlanguagechange },
14523
  { prototypes::id::Window },
14524
  { PrototypeTraits<prototypes::id::Window>::Depth },
14525
  JSJitInfo::Getter,
14526
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14527
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
14528
  false,  /* isInfallible. False in setters. */
14529
  false,  /* isMovable.  Not relevant for setters. */
14530
  false, /* isEliminatable.  Not relevant for setters. */
14531
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14532
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14533
  false,  /* isTypedMethod.  Only relevant for methods. */
14534
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14535
};
14536
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14537
static_assert(0 < 5, "There is no slot for us");
14538
static const JSJitInfo onlanguagechange_setterinfo = {
14539
  { (JSJitGetterOp)set_onlanguagechange },
14540
  { prototypes::id::Window },
14541
  { PrototypeTraits<prototypes::id::Window>::Depth },
14542
  JSJitInfo::Setter,
14543
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14544
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
14545
  false,  /* isInfallible. False in setters. */
14546
  false,  /* isMovable.  Not relevant for setters. */
14547
  false, /* isEliminatable.  Not relevant for setters. */
14548
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14549
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14550
  false,  /* isTypedMethod.  Only relevant for methods. */
14551
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14552
};
14553
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14554
static_assert(0 < 5, "There is no slot for us");
14555
14556
MOZ_CAN_RUN_SCRIPT static bool
14557
get_onmessage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
14558
0
{
14559
0
  AUTO_PROFILER_LABEL_FAST("get Window.onmessage", DOM, cx);
14560
0
14561
0
  RefPtr<EventHandlerNonNull> result(self->GetOnmessage());
14562
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14563
0
  if (result) {
14564
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
14565
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14566
0
      return false;
14567
0
    }
14568
0
    return true;
14569
0
  } else {
14570
0
    args.rval().setNull();
14571
0
    return true;
14572
0
  }
14573
0
}
14574
14575
MOZ_CAN_RUN_SCRIPT static bool
14576
set_onmessage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
14577
0
{
14578
0
  AUTO_PROFILER_LABEL_FAST("set Window.onmessage", DOM, cx);
14579
0
14580
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14581
0
  if (args[0].isObject()) {
14582
0
    { // scope for tempRoot and tempGlobalRoot if needed
14583
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
14584
0
    }
14585
0
  } else {
14586
0
    arg0 = nullptr;
14587
0
  }
14588
0
  self->SetOnmessage(Constify(arg0));
14589
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14590
0
14591
0
  return true;
14592
0
}
14593
14594
static const JSJitInfo onmessage_getterinfo = {
14595
  { (JSJitGetterOp)get_onmessage },
14596
  { prototypes::id::Window },
14597
  { PrototypeTraits<prototypes::id::Window>::Depth },
14598
  JSJitInfo::Getter,
14599
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14600
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
14601
  false,  /* isInfallible. False in setters. */
14602
  false,  /* isMovable.  Not relevant for setters. */
14603
  false, /* isEliminatable.  Not relevant for setters. */
14604
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14605
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14606
  false,  /* isTypedMethod.  Only relevant for methods. */
14607
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14608
};
14609
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14610
static_assert(0 < 5, "There is no slot for us");
14611
static const JSJitInfo onmessage_setterinfo = {
14612
  { (JSJitGetterOp)set_onmessage },
14613
  { prototypes::id::Window },
14614
  { PrototypeTraits<prototypes::id::Window>::Depth },
14615
  JSJitInfo::Setter,
14616
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14617
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
14618
  false,  /* isInfallible. False in setters. */
14619
  false,  /* isMovable.  Not relevant for setters. */
14620
  false, /* isEliminatable.  Not relevant for setters. */
14621
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14622
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14623
  false,  /* isTypedMethod.  Only relevant for methods. */
14624
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14625
};
14626
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14627
static_assert(0 < 5, "There is no slot for us");
14628
14629
MOZ_CAN_RUN_SCRIPT static bool
14630
get_onmessageerror(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
14631
0
{
14632
0
  AUTO_PROFILER_LABEL_FAST("get Window.onmessageerror", DOM, cx);
14633
0
14634
0
  RefPtr<EventHandlerNonNull> result(self->GetOnmessageerror());
14635
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14636
0
  if (result) {
14637
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
14638
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14639
0
      return false;
14640
0
    }
14641
0
    return true;
14642
0
  } else {
14643
0
    args.rval().setNull();
14644
0
    return true;
14645
0
  }
14646
0
}
14647
14648
MOZ_CAN_RUN_SCRIPT static bool
14649
set_onmessageerror(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
14650
0
{
14651
0
  AUTO_PROFILER_LABEL_FAST("set Window.onmessageerror", DOM, cx);
14652
0
14653
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14654
0
  if (args[0].isObject()) {
14655
0
    { // scope for tempRoot and tempGlobalRoot if needed
14656
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
14657
0
    }
14658
0
  } else {
14659
0
    arg0 = nullptr;
14660
0
  }
14661
0
  self->SetOnmessageerror(Constify(arg0));
14662
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14663
0
14664
0
  return true;
14665
0
}
14666
14667
static const JSJitInfo onmessageerror_getterinfo = {
14668
  { (JSJitGetterOp)get_onmessageerror },
14669
  { prototypes::id::Window },
14670
  { PrototypeTraits<prototypes::id::Window>::Depth },
14671
  JSJitInfo::Getter,
14672
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14673
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
14674
  false,  /* isInfallible. False in setters. */
14675
  false,  /* isMovable.  Not relevant for setters. */
14676
  false, /* isEliminatable.  Not relevant for setters. */
14677
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14678
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14679
  false,  /* isTypedMethod.  Only relevant for methods. */
14680
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14681
};
14682
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14683
static_assert(0 < 5, "There is no slot for us");
14684
static const JSJitInfo onmessageerror_setterinfo = {
14685
  { (JSJitGetterOp)set_onmessageerror },
14686
  { prototypes::id::Window },
14687
  { PrototypeTraits<prototypes::id::Window>::Depth },
14688
  JSJitInfo::Setter,
14689
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14690
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
14691
  false,  /* isInfallible. False in setters. */
14692
  false,  /* isMovable.  Not relevant for setters. */
14693
  false, /* isEliminatable.  Not relevant for setters. */
14694
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14695
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14696
  false,  /* isTypedMethod.  Only relevant for methods. */
14697
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14698
};
14699
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14700
static_assert(0 < 5, "There is no slot for us");
14701
14702
MOZ_CAN_RUN_SCRIPT static bool
14703
get_onoffline(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
14704
0
{
14705
0
  AUTO_PROFILER_LABEL_FAST("get Window.onoffline", DOM, cx);
14706
0
14707
0
  RefPtr<EventHandlerNonNull> result(self->GetOnoffline());
14708
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14709
0
  if (result) {
14710
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
14711
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14712
0
      return false;
14713
0
    }
14714
0
    return true;
14715
0
  } else {
14716
0
    args.rval().setNull();
14717
0
    return true;
14718
0
  }
14719
0
}
14720
14721
MOZ_CAN_RUN_SCRIPT static bool
14722
set_onoffline(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
14723
0
{
14724
0
  AUTO_PROFILER_LABEL_FAST("set Window.onoffline", DOM, cx);
14725
0
14726
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14727
0
  if (args[0].isObject()) {
14728
0
    { // scope for tempRoot and tempGlobalRoot if needed
14729
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
14730
0
    }
14731
0
  } else {
14732
0
    arg0 = nullptr;
14733
0
  }
14734
0
  self->SetOnoffline(Constify(arg0));
14735
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14736
0
14737
0
  return true;
14738
0
}
14739
14740
static const JSJitInfo onoffline_getterinfo = {
14741
  { (JSJitGetterOp)get_onoffline },
14742
  { prototypes::id::Window },
14743
  { PrototypeTraits<prototypes::id::Window>::Depth },
14744
  JSJitInfo::Getter,
14745
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14746
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
14747
  false,  /* isInfallible. False in setters. */
14748
  false,  /* isMovable.  Not relevant for setters. */
14749
  false, /* isEliminatable.  Not relevant for setters. */
14750
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14751
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14752
  false,  /* isTypedMethod.  Only relevant for methods. */
14753
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14754
};
14755
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14756
static_assert(0 < 5, "There is no slot for us");
14757
static const JSJitInfo onoffline_setterinfo = {
14758
  { (JSJitGetterOp)set_onoffline },
14759
  { prototypes::id::Window },
14760
  { PrototypeTraits<prototypes::id::Window>::Depth },
14761
  JSJitInfo::Setter,
14762
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14763
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
14764
  false,  /* isInfallible. False in setters. */
14765
  false,  /* isMovable.  Not relevant for setters. */
14766
  false, /* isEliminatable.  Not relevant for setters. */
14767
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14768
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14769
  false,  /* isTypedMethod.  Only relevant for methods. */
14770
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14771
};
14772
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14773
static_assert(0 < 5, "There is no slot for us");
14774
14775
MOZ_CAN_RUN_SCRIPT static bool
14776
get_ononline(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
14777
0
{
14778
0
  AUTO_PROFILER_LABEL_FAST("get Window.ononline", DOM, cx);
14779
0
14780
0
  RefPtr<EventHandlerNonNull> result(self->GetOnonline());
14781
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14782
0
  if (result) {
14783
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
14784
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14785
0
      return false;
14786
0
    }
14787
0
    return true;
14788
0
  } else {
14789
0
    args.rval().setNull();
14790
0
    return true;
14791
0
  }
14792
0
}
14793
14794
MOZ_CAN_RUN_SCRIPT static bool
14795
set_ononline(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
14796
0
{
14797
0
  AUTO_PROFILER_LABEL_FAST("set Window.ononline", DOM, cx);
14798
0
14799
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14800
0
  if (args[0].isObject()) {
14801
0
    { // scope for tempRoot and tempGlobalRoot if needed
14802
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
14803
0
    }
14804
0
  } else {
14805
0
    arg0 = nullptr;
14806
0
  }
14807
0
  self->SetOnonline(Constify(arg0));
14808
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14809
0
14810
0
  return true;
14811
0
}
14812
14813
static const JSJitInfo ononline_getterinfo = {
14814
  { (JSJitGetterOp)get_ononline },
14815
  { prototypes::id::Window },
14816
  { PrototypeTraits<prototypes::id::Window>::Depth },
14817
  JSJitInfo::Getter,
14818
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14819
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
14820
  false,  /* isInfallible. False in setters. */
14821
  false,  /* isMovable.  Not relevant for setters. */
14822
  false, /* isEliminatable.  Not relevant for setters. */
14823
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14824
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14825
  false,  /* isTypedMethod.  Only relevant for methods. */
14826
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14827
};
14828
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14829
static_assert(0 < 5, "There is no slot for us");
14830
static const JSJitInfo ononline_setterinfo = {
14831
  { (JSJitGetterOp)set_ononline },
14832
  { prototypes::id::Window },
14833
  { PrototypeTraits<prototypes::id::Window>::Depth },
14834
  JSJitInfo::Setter,
14835
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14836
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
14837
  false,  /* isInfallible. False in setters. */
14838
  false,  /* isMovable.  Not relevant for setters. */
14839
  false, /* isEliminatable.  Not relevant for setters. */
14840
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14841
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14842
  false,  /* isTypedMethod.  Only relevant for methods. */
14843
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14844
};
14845
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14846
static_assert(0 < 5, "There is no slot for us");
14847
14848
MOZ_CAN_RUN_SCRIPT static bool
14849
get_onpagehide(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
14850
0
{
14851
0
  AUTO_PROFILER_LABEL_FAST("get Window.onpagehide", DOM, cx);
14852
0
14853
0
  RefPtr<EventHandlerNonNull> result(self->GetOnpagehide());
14854
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14855
0
  if (result) {
14856
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
14857
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14858
0
      return false;
14859
0
    }
14860
0
    return true;
14861
0
  } else {
14862
0
    args.rval().setNull();
14863
0
    return true;
14864
0
  }
14865
0
}
14866
14867
MOZ_CAN_RUN_SCRIPT static bool
14868
set_onpagehide(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
14869
0
{
14870
0
  AUTO_PROFILER_LABEL_FAST("set Window.onpagehide", DOM, cx);
14871
0
14872
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14873
0
  if (args[0].isObject()) {
14874
0
    { // scope for tempRoot and tempGlobalRoot if needed
14875
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
14876
0
    }
14877
0
  } else {
14878
0
    arg0 = nullptr;
14879
0
  }
14880
0
  self->SetOnpagehide(Constify(arg0));
14881
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14882
0
14883
0
  return true;
14884
0
}
14885
14886
static const JSJitInfo onpagehide_getterinfo = {
14887
  { (JSJitGetterOp)get_onpagehide },
14888
  { prototypes::id::Window },
14889
  { PrototypeTraits<prototypes::id::Window>::Depth },
14890
  JSJitInfo::Getter,
14891
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14892
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
14893
  false,  /* isInfallible. False in setters. */
14894
  false,  /* isMovable.  Not relevant for setters. */
14895
  false, /* isEliminatable.  Not relevant for setters. */
14896
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14897
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14898
  false,  /* isTypedMethod.  Only relevant for methods. */
14899
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14900
};
14901
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14902
static_assert(0 < 5, "There is no slot for us");
14903
static const JSJitInfo onpagehide_setterinfo = {
14904
  { (JSJitGetterOp)set_onpagehide },
14905
  { prototypes::id::Window },
14906
  { PrototypeTraits<prototypes::id::Window>::Depth },
14907
  JSJitInfo::Setter,
14908
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14909
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
14910
  false,  /* isInfallible. False in setters. */
14911
  false,  /* isMovable.  Not relevant for setters. */
14912
  false, /* isEliminatable.  Not relevant for setters. */
14913
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14914
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14915
  false,  /* isTypedMethod.  Only relevant for methods. */
14916
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14917
};
14918
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14919
static_assert(0 < 5, "There is no slot for us");
14920
14921
MOZ_CAN_RUN_SCRIPT static bool
14922
get_onpageshow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
14923
0
{
14924
0
  AUTO_PROFILER_LABEL_FAST("get Window.onpageshow", DOM, cx);
14925
0
14926
0
  RefPtr<EventHandlerNonNull> result(self->GetOnpageshow());
14927
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14928
0
  if (result) {
14929
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
14930
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14931
0
      return false;
14932
0
    }
14933
0
    return true;
14934
0
  } else {
14935
0
    args.rval().setNull();
14936
0
    return true;
14937
0
  }
14938
0
}
14939
14940
MOZ_CAN_RUN_SCRIPT static bool
14941
set_onpageshow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
14942
0
{
14943
0
  AUTO_PROFILER_LABEL_FAST("set Window.onpageshow", DOM, cx);
14944
0
14945
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14946
0
  if (args[0].isObject()) {
14947
0
    { // scope for tempRoot and tempGlobalRoot if needed
14948
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
14949
0
    }
14950
0
  } else {
14951
0
    arg0 = nullptr;
14952
0
  }
14953
0
  self->SetOnpageshow(Constify(arg0));
14954
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
14955
0
14956
0
  return true;
14957
0
}
14958
14959
static const JSJitInfo onpageshow_getterinfo = {
14960
  { (JSJitGetterOp)get_onpageshow },
14961
  { prototypes::id::Window },
14962
  { PrototypeTraits<prototypes::id::Window>::Depth },
14963
  JSJitInfo::Getter,
14964
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14965
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
14966
  false,  /* isInfallible. False in setters. */
14967
  false,  /* isMovable.  Not relevant for setters. */
14968
  false, /* isEliminatable.  Not relevant for setters. */
14969
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14970
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14971
  false,  /* isTypedMethod.  Only relevant for methods. */
14972
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14973
};
14974
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14975
static_assert(0 < 5, "There is no slot for us");
14976
static const JSJitInfo onpageshow_setterinfo = {
14977
  { (JSJitGetterOp)set_onpageshow },
14978
  { prototypes::id::Window },
14979
  { PrototypeTraits<prototypes::id::Window>::Depth },
14980
  JSJitInfo::Setter,
14981
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
14982
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
14983
  false,  /* isInfallible. False in setters. */
14984
  false,  /* isMovable.  Not relevant for setters. */
14985
  false, /* isEliminatable.  Not relevant for setters. */
14986
  false, /* isAlwaysInSlot.  Only relevant for getters. */
14987
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
14988
  false,  /* isTypedMethod.  Only relevant for methods. */
14989
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
14990
};
14991
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14992
static_assert(0 < 5, "There is no slot for us");
14993
14994
MOZ_CAN_RUN_SCRIPT static bool
14995
get_onpopstate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
14996
0
{
14997
0
  AUTO_PROFILER_LABEL_FAST("get Window.onpopstate", DOM, cx);
14998
0
14999
0
  RefPtr<EventHandlerNonNull> result(self->GetOnpopstate());
15000
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
15001
0
  if (result) {
15002
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
15003
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
15004
0
      return false;
15005
0
    }
15006
0
    return true;
15007
0
  } else {
15008
0
    args.rval().setNull();
15009
0
    return true;
15010
0
  }
15011
0
}
15012
15013
MOZ_CAN_RUN_SCRIPT static bool
15014
set_onpopstate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
15015
0
{
15016
0
  AUTO_PROFILER_LABEL_FAST("set Window.onpopstate", DOM, cx);
15017
0
15018
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
15019
0
  if (args[0].isObject()) {
15020
0
    { // scope for tempRoot and tempGlobalRoot if needed
15021
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
15022
0
    }
15023
0
  } else {
15024
0
    arg0 = nullptr;
15025
0
  }
15026
0
  self->SetOnpopstate(Constify(arg0));
15027
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
15028
0
15029
0
  return true;
15030
0
}
15031
15032
static const JSJitInfo onpopstate_getterinfo = {
15033
  { (JSJitGetterOp)get_onpopstate },
15034
  { prototypes::id::Window },
15035
  { PrototypeTraits<prototypes::id::Window>::Depth },
15036
  JSJitInfo::Getter,
15037
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15038
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
15039
  false,  /* isInfallible. False in setters. */
15040
  false,  /* isMovable.  Not relevant for setters. */
15041
  false, /* isEliminatable.  Not relevant for setters. */
15042
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15043
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15044
  false,  /* isTypedMethod.  Only relevant for methods. */
15045
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15046
};
15047
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15048
static_assert(0 < 5, "There is no slot for us");
15049
static const JSJitInfo onpopstate_setterinfo = {
15050
  { (JSJitGetterOp)set_onpopstate },
15051
  { prototypes::id::Window },
15052
  { PrototypeTraits<prototypes::id::Window>::Depth },
15053
  JSJitInfo::Setter,
15054
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15055
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
15056
  false,  /* isInfallible. False in setters. */
15057
  false,  /* isMovable.  Not relevant for setters. */
15058
  false, /* isEliminatable.  Not relevant for setters. */
15059
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15060
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15061
  false,  /* isTypedMethod.  Only relevant for methods. */
15062
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15063
};
15064
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15065
static_assert(0 < 5, "There is no slot for us");
15066
15067
MOZ_CAN_RUN_SCRIPT static bool
15068
get_onstorage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
15069
0
{
15070
0
  AUTO_PROFILER_LABEL_FAST("get Window.onstorage", DOM, cx);
15071
0
15072
0
  RefPtr<EventHandlerNonNull> result(self->GetOnstorage());
15073
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
15074
0
  if (result) {
15075
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
15076
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
15077
0
      return false;
15078
0
    }
15079
0
    return true;
15080
0
  } else {
15081
0
    args.rval().setNull();
15082
0
    return true;
15083
0
  }
15084
0
}
15085
15086
MOZ_CAN_RUN_SCRIPT static bool
15087
set_onstorage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
15088
0
{
15089
0
  AUTO_PROFILER_LABEL_FAST("set Window.onstorage", DOM, cx);
15090
0
15091
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
15092
0
  if (args[0].isObject()) {
15093
0
    { // scope for tempRoot and tempGlobalRoot if needed
15094
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
15095
0
    }
15096
0
  } else {
15097
0
    arg0 = nullptr;
15098
0
  }
15099
0
  self->SetOnstorage(Constify(arg0));
15100
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
15101
0
15102
0
  return true;
15103
0
}
15104
15105
static const JSJitInfo onstorage_getterinfo = {
15106
  { (JSJitGetterOp)get_onstorage },
15107
  { prototypes::id::Window },
15108
  { PrototypeTraits<prototypes::id::Window>::Depth },
15109
  JSJitInfo::Getter,
15110
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15111
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
15112
  false,  /* isInfallible. False in setters. */
15113
  false,  /* isMovable.  Not relevant for setters. */
15114
  false, /* isEliminatable.  Not relevant for setters. */
15115
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15116
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15117
  false,  /* isTypedMethod.  Only relevant for methods. */
15118
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15119
};
15120
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15121
static_assert(0 < 5, "There is no slot for us");
15122
static const JSJitInfo onstorage_setterinfo = {
15123
  { (JSJitGetterOp)set_onstorage },
15124
  { prototypes::id::Window },
15125
  { PrototypeTraits<prototypes::id::Window>::Depth },
15126
  JSJitInfo::Setter,
15127
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15128
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
15129
  false,  /* isInfallible. False in setters. */
15130
  false,  /* isMovable.  Not relevant for setters. */
15131
  false, /* isEliminatable.  Not relevant for setters. */
15132
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15133
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15134
  false,  /* isTypedMethod.  Only relevant for methods. */
15135
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15136
};
15137
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15138
static_assert(0 < 5, "There is no slot for us");
15139
15140
MOZ_CAN_RUN_SCRIPT static bool
15141
get_onunload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
15142
0
{
15143
0
  AUTO_PROFILER_LABEL_FAST("get Window.onunload", DOM, cx);
15144
0
15145
0
  RefPtr<EventHandlerNonNull> result(self->GetOnunload());
15146
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
15147
0
  if (result) {
15148
0
    args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result));
15149
0
    if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
15150
0
      return false;
15151
0
    }
15152
0
    return true;
15153
0
  } else {
15154
0
    args.rval().setNull();
15155
0
    return true;
15156
0
  }
15157
0
}
15158
15159
MOZ_CAN_RUN_SCRIPT static bool
15160
set_onunload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
15161
0
{
15162
0
  AUTO_PROFILER_LABEL_FAST("set Window.onunload", DOM, cx);
15163
0
15164
0
  RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
15165
0
  if (args[0].isObject()) {
15166
0
    { // scope for tempRoot and tempGlobalRoot if needed
15167
0
      arg0 = new binding_detail::FastEventHandlerNonNull(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
15168
0
    }
15169
0
  } else {
15170
0
    arg0 = nullptr;
15171
0
  }
15172
0
  self->SetOnunload(Constify(arg0));
15173
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
15174
0
15175
0
  return true;
15176
0
}
15177
15178
static const JSJitInfo onunload_getterinfo = {
15179
  { (JSJitGetterOp)get_onunload },
15180
  { prototypes::id::Window },
15181
  { PrototypeTraits<prototypes::id::Window>::Depth },
15182
  JSJitInfo::Getter,
15183
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15184
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
15185
  false,  /* isInfallible. False in setters. */
15186
  false,  /* isMovable.  Not relevant for setters. */
15187
  false, /* isEliminatable.  Not relevant for setters. */
15188
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15189
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15190
  false,  /* isTypedMethod.  Only relevant for methods. */
15191
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15192
};
15193
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15194
static_assert(0 < 5, "There is no slot for us");
15195
static const JSJitInfo onunload_setterinfo = {
15196
  { (JSJitGetterOp)set_onunload },
15197
  { prototypes::id::Window },
15198
  { PrototypeTraits<prototypes::id::Window>::Depth },
15199
  JSJitInfo::Setter,
15200
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15201
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
15202
  false,  /* isInfallible. False in setters. */
15203
  false,  /* isMovable.  Not relevant for setters. */
15204
  false, /* isEliminatable.  Not relevant for setters. */
15205
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15206
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15207
  false,  /* isTypedMethod.  Only relevant for methods. */
15208
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15209
};
15210
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15211
static_assert(0 < 5, "There is no slot for us");
15212
15213
MOZ_CAN_RUN_SCRIPT static bool
15214
get_localStorage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
15215
0
{
15216
0
  AUTO_PROFILER_LABEL_FAST("get Window.localStorage", DOM, cx);
15217
0
15218
0
  FastErrorResult rv;
15219
0
  auto result(StrongOrRawPtr<mozilla::dom::Storage>(self->GetLocalStorage(rv)));
15220
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15221
0
    return false;
15222
0
  }
15223
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
15224
0
  if (!result) {
15225
0
    args.rval().setNull();
15226
0
    return true;
15227
0
  }
15228
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
15229
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
15230
0
    return false;
15231
0
  }
15232
0
  return true;
15233
0
}
15234
15235
static const JSJitInfo localStorage_getterinfo = {
15236
  { (JSJitGetterOp)get_localStorage },
15237
  { prototypes::id::Window },
15238
  { PrototypeTraits<prototypes::id::Window>::Depth },
15239
  JSJitInfo::Getter,
15240
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15241
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
15242
  false,  /* isInfallible. False in setters. */
15243
  false,  /* isMovable.  Not relevant for setters. */
15244
  false, /* isEliminatable.  Not relevant for setters. */
15245
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15246
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15247
  false,  /* isTypedMethod.  Only relevant for methods. */
15248
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15249
};
15250
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15251
static_assert(0 < 5, "There is no slot for us");
15252
15253
MOZ_CAN_RUN_SCRIPT static bool
15254
get_origin(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
15255
0
{
15256
0
  AUTO_PROFILER_LABEL_FAST("get Window.origin", DOM, cx);
15257
0
15258
0
  DOMString result;
15259
0
  self->GetOrigin(result);
15260
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
15261
0
  if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
15262
0
    return false;
15263
0
  }
15264
0
  return true;
15265
0
}
15266
15267
MOZ_CAN_RUN_SCRIPT static bool
15268
set_origin(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitSetterCallArgs args)
15269
0
{
15270
0
  AUTO_PROFILER_LABEL_FAST("set Window.origin", DOM, cx);
15271
0
15272
0
  return JS_DefineProperty(cx, obj, "origin", args[0], JSPROP_ENUMERATE);
15273
0
}
15274
15275
static const JSJitInfo origin_getterinfo = {
15276
  { (JSJitGetterOp)get_origin },
15277
  { prototypes::id::Window },
15278
  { PrototypeTraits<prototypes::id::Window>::Depth },
15279
  JSJitInfo::Getter,
15280
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15281
  JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
15282
  false,  /* isInfallible. False in setters. */
15283
  false,  /* isMovable.  Not relevant for setters. */
15284
  false, /* isEliminatable.  Not relevant for setters. */
15285
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15286
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15287
  false,  /* isTypedMethod.  Only relevant for methods. */
15288
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15289
};
15290
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15291
static_assert(0 < 5, "There is no slot for us");
15292
static const JSJitInfo origin_setterinfo = {
15293
  { (JSJitGetterOp)set_origin },
15294
  { prototypes::id::Window },
15295
  { PrototypeTraits<prototypes::id::Window>::Depth },
15296
  JSJitInfo::Setter,
15297
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15298
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
15299
  false,  /* isInfallible. False in setters. */
15300
  false,  /* isMovable.  Not relevant for setters. */
15301
  false, /* isEliminatable.  Not relevant for setters. */
15302
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15303
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15304
  false,  /* isTypedMethod.  Only relevant for methods. */
15305
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15306
};
15307
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15308
static_assert(0 < 5, "There is no slot for us");
15309
15310
MOZ_CAN_RUN_SCRIPT static bool
15311
btoa(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
15312
0
{
15313
0
  AUTO_PROFILER_LABEL_FAST("Window.btoa", DOM, cx);
15314
0
15315
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
15316
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.btoa");
15317
0
  }
15318
0
  binding_detail::FakeString arg0;
15319
0
  if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
15320
0
    return false;
15321
0
  }
15322
0
  FastErrorResult rv;
15323
0
  DOMString result;
15324
0
  self->Btoa(NonNullHelper(Constify(arg0)), result, rv);
15325
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15326
0
    return false;
15327
0
  }
15328
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
15329
0
  if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
15330
0
    return false;
15331
0
  }
15332
0
  return true;
15333
0
}
15334
15335
static const JSJitInfo btoa_methodinfo = {
15336
  { (JSJitGetterOp)btoa },
15337
  { prototypes::id::Window },
15338
  { PrototypeTraits<prototypes::id::Window>::Depth },
15339
  JSJitInfo::Method,
15340
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15341
  JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
15342
  false,  /* isInfallible. False in setters. */
15343
  false,  /* isMovable.  Not relevant for setters. */
15344
  false, /* isEliminatable.  Not relevant for setters. */
15345
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15346
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15347
  false,  /* isTypedMethod.  Only relevant for methods. */
15348
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15349
};
15350
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15351
static_assert(0 < 5, "There is no slot for us");
15352
15353
MOZ_CAN_RUN_SCRIPT static bool
15354
atob(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
15355
0
{
15356
0
  AUTO_PROFILER_LABEL_FAST("Window.atob", DOM, cx);
15357
0
15358
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
15359
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.atob");
15360
0
  }
15361
0
  binding_detail::FakeString arg0;
15362
0
  if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
15363
0
    return false;
15364
0
  }
15365
0
  FastErrorResult rv;
15366
0
  DOMString result;
15367
0
  self->Atob(NonNullHelper(Constify(arg0)), result, rv);
15368
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15369
0
    return false;
15370
0
  }
15371
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
15372
0
  if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
15373
0
    return false;
15374
0
  }
15375
0
  return true;
15376
0
}
15377
15378
static const JSJitInfo atob_methodinfo = {
15379
  { (JSJitGetterOp)atob },
15380
  { prototypes::id::Window },
15381
  { PrototypeTraits<prototypes::id::Window>::Depth },
15382
  JSJitInfo::Method,
15383
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15384
  JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
15385
  false,  /* isInfallible. False in setters. */
15386
  false,  /* isMovable.  Not relevant for setters. */
15387
  false, /* isEliminatable.  Not relevant for setters. */
15388
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15389
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15390
  false,  /* isTypedMethod.  Only relevant for methods. */
15391
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15392
};
15393
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15394
static_assert(0 < 5, "There is no slot for us");
15395
15396
MOZ_CAN_RUN_SCRIPT static bool
15397
setTimeout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
15398
0
{
15399
0
  AUTO_PROFILER_LABEL_FAST("Window.setTimeout", DOM, cx);
15400
0
15401
0
  unsigned argcount = std::min(args.length(), 3u);
15402
0
  switch (argcount) {
15403
0
    case 1: {
15404
0
      MOZ_FALLTHROUGH;
15405
0
    }
15406
0
    case 2: {
15407
0
      MOZ_FALLTHROUGH;
15408
0
    }
15409
0
    case 3: {
15410
0
      if (args[0].isObject()) {
15411
0
        do {
15412
0
          RootedCallback<OwningNonNull<binding_detail::FastFunction>> arg0(cx);
15413
0
          if (JS::IsCallable(&args[0].toObject())) {
15414
0
          { // scope for tempRoot and tempGlobalRoot if needed
15415
0
            arg0 = new binding_detail::FastFunction(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
15416
0
          }
15417
0
          } else {
15418
0
            break;
15419
0
          }
15420
0
          int32_t arg1;
15421
0
          if (args.hasDefined(1)) {
15422
0
            if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
15423
0
              return false;
15424
0
            }
15425
0
          } else {
15426
0
            arg1 = 0;
15427
0
          }
15428
0
          AutoSequence<JS::Value> arg2;
15429
0
          SequenceRooter<JS::Value> arg2_holder(cx, &arg2);
15430
0
          if (args.length() > 2) {
15431
0
            if (!arg2.SetCapacity(args.length() - 2, mozilla::fallible)) {
15432
0
              JS_ReportOutOfMemory(cx);
15433
0
              return false;
15434
0
            }
15435
0
            for (uint32_t variadicArg = 2; variadicArg < args.length(); ++variadicArg) {
15436
0
              JS::Value& slot = *arg2.AppendElement(mozilla::fallible);
15437
0
              slot = args[variadicArg];
15438
0
            }
15439
0
          }
15440
0
          FastErrorResult rv;
15441
0
          int32_t result(self->SetTimeout(cx, NonNullHelper(arg0), arg1, Constify(arg2), rv));
15442
0
          if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15443
0
            return false;
15444
0
          }
15445
0
          MOZ_ASSERT(!JS_IsExceptionPending(cx));
15446
0
          args.rval().setInt32(int32_t(result));
15447
0
          return true;
15448
0
        } while (false);
15449
0
      }
15450
0
      binding_detail::FakeString arg0;
15451
0
      if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
15452
0
        return false;
15453
0
      }
15454
0
      int32_t arg1;
15455
0
      if (args.hasDefined(1)) {
15456
0
        if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
15457
0
          return false;
15458
0
        }
15459
0
      } else {
15460
0
        arg1 = 0;
15461
0
      }
15462
0
      AutoSequence<JS::Value> arg2;
15463
0
      SequenceRooter<JS::Value> arg2_holder(cx, &arg2);
15464
0
      if (args.length() > 2) {
15465
0
        if (!arg2.SetCapacity(args.length() - 2, mozilla::fallible)) {
15466
0
          JS_ReportOutOfMemory(cx);
15467
0
          return false;
15468
0
        }
15469
0
        for (uint32_t variadicArg = 2; variadicArg < args.length(); ++variadicArg) {
15470
0
          JS::Value& slot = *arg2.AppendElement(mozilla::fallible);
15471
0
          slot = args[variadicArg];
15472
0
        }
15473
0
      }
15474
0
      FastErrorResult rv;
15475
0
      int32_t result(self->SetTimeout(cx, NonNullHelper(Constify(arg0)), arg1, Constify(arg2), rv));
15476
0
      if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15477
0
        return false;
15478
0
      }
15479
0
      MOZ_ASSERT(!JS_IsExceptionPending(cx));
15480
0
      args.rval().setInt32(int32_t(result));
15481
0
      return true;
15482
0
      break;
15483
0
    }
15484
0
    default: {
15485
0
      return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.setTimeout");
15486
0
      break;
15487
0
    }
15488
0
  }
15489
0
  MOZ_CRASH("We have an always-returning default case");
15490
0
  return false;
15491
0
}
15492
15493
static const JSJitInfo setTimeout_methodinfo = {
15494
  { (JSJitGetterOp)setTimeout },
15495
  { prototypes::id::Window },
15496
  { PrototypeTraits<prototypes::id::Window>::Depth },
15497
  JSJitInfo::Method,
15498
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15499
  JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
15500
  false,  /* isInfallible. False in setters. */
15501
  false,  /* isMovable.  Not relevant for setters. */
15502
  false, /* isEliminatable.  Not relevant for setters. */
15503
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15504
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15505
  false,  /* isTypedMethod.  Only relevant for methods. */
15506
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15507
};
15508
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15509
static_assert(0 < 5, "There is no slot for us");
15510
15511
MOZ_CAN_RUN_SCRIPT static bool
15512
clearTimeout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
15513
0
{
15514
0
  AUTO_PROFILER_LABEL_FAST("Window.clearTimeout", DOM, cx);
15515
0
15516
0
  int32_t arg0;
15517
0
  if (args.hasDefined(0)) {
15518
0
    if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
15519
0
      return false;
15520
0
    }
15521
0
  } else {
15522
0
    arg0 = 0;
15523
0
  }
15524
0
  self->ClearTimeout(arg0);
15525
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
15526
0
  args.rval().setUndefined();
15527
0
  return true;
15528
0
}
15529
15530
static const JSJitInfo clearTimeout_methodinfo = {
15531
  { (JSJitGetterOp)clearTimeout },
15532
  { prototypes::id::Window },
15533
  { PrototypeTraits<prototypes::id::Window>::Depth },
15534
  JSJitInfo::Method,
15535
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15536
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
15537
  false,  /* isInfallible. False in setters. */
15538
  false,  /* isMovable.  Not relevant for setters. */
15539
  false, /* isEliminatable.  Not relevant for setters. */
15540
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15541
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15542
  false,  /* isTypedMethod.  Only relevant for methods. */
15543
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15544
};
15545
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15546
static_assert(0 < 5, "There is no slot for us");
15547
15548
MOZ_CAN_RUN_SCRIPT static bool
15549
setInterval(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
15550
0
{
15551
0
  AUTO_PROFILER_LABEL_FAST("Window.setInterval", DOM, cx);
15552
0
15553
0
  unsigned argcount = std::min(args.length(), 3u);
15554
0
  switch (argcount) {
15555
0
    case 1: {
15556
0
      MOZ_FALLTHROUGH;
15557
0
    }
15558
0
    case 2: {
15559
0
      MOZ_FALLTHROUGH;
15560
0
    }
15561
0
    case 3: {
15562
0
      if (args[0].isObject()) {
15563
0
        do {
15564
0
          RootedCallback<OwningNonNull<binding_detail::FastFunction>> arg0(cx);
15565
0
          if (JS::IsCallable(&args[0].toObject())) {
15566
0
          { // scope for tempRoot and tempGlobalRoot if needed
15567
0
            arg0 = new binding_detail::FastFunction(&args[0].toObject(), JS::CurrentGlobalOrNull(cx));
15568
0
          }
15569
0
          } else {
15570
0
            break;
15571
0
          }
15572
0
          int32_t arg1;
15573
0
          if (args.hasDefined(1)) {
15574
0
            if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
15575
0
              return false;
15576
0
            }
15577
0
          } else {
15578
0
            arg1 = 0;
15579
0
          }
15580
0
          AutoSequence<JS::Value> arg2;
15581
0
          SequenceRooter<JS::Value> arg2_holder(cx, &arg2);
15582
0
          if (args.length() > 2) {
15583
0
            if (!arg2.SetCapacity(args.length() - 2, mozilla::fallible)) {
15584
0
              JS_ReportOutOfMemory(cx);
15585
0
              return false;
15586
0
            }
15587
0
            for (uint32_t variadicArg = 2; variadicArg < args.length(); ++variadicArg) {
15588
0
              JS::Value& slot = *arg2.AppendElement(mozilla::fallible);
15589
0
              slot = args[variadicArg];
15590
0
            }
15591
0
          }
15592
0
          FastErrorResult rv;
15593
0
          int32_t result(self->SetInterval(cx, NonNullHelper(arg0), arg1, Constify(arg2), rv));
15594
0
          if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15595
0
            return false;
15596
0
          }
15597
0
          MOZ_ASSERT(!JS_IsExceptionPending(cx));
15598
0
          args.rval().setInt32(int32_t(result));
15599
0
          return true;
15600
0
        } while (false);
15601
0
      }
15602
0
      binding_detail::FakeString arg0;
15603
0
      if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
15604
0
        return false;
15605
0
      }
15606
0
      int32_t arg1;
15607
0
      if (args.hasDefined(1)) {
15608
0
        if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
15609
0
          return false;
15610
0
        }
15611
0
      } else {
15612
0
        arg1 = 0;
15613
0
      }
15614
0
      AutoSequence<JS::Value> arg2;
15615
0
      SequenceRooter<JS::Value> arg2_holder(cx, &arg2);
15616
0
      if (args.length() > 2) {
15617
0
        if (!arg2.SetCapacity(args.length() - 2, mozilla::fallible)) {
15618
0
          JS_ReportOutOfMemory(cx);
15619
0
          return false;
15620
0
        }
15621
0
        for (uint32_t variadicArg = 2; variadicArg < args.length(); ++variadicArg) {
15622
0
          JS::Value& slot = *arg2.AppendElement(mozilla::fallible);
15623
0
          slot = args[variadicArg];
15624
0
        }
15625
0
      }
15626
0
      FastErrorResult rv;
15627
0
      int32_t result(self->SetInterval(cx, NonNullHelper(Constify(arg0)), arg1, Constify(arg2), rv));
15628
0
      if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15629
0
        return false;
15630
0
      }
15631
0
      MOZ_ASSERT(!JS_IsExceptionPending(cx));
15632
0
      args.rval().setInt32(int32_t(result));
15633
0
      return true;
15634
0
      break;
15635
0
    }
15636
0
    default: {
15637
0
      return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.setInterval");
15638
0
      break;
15639
0
    }
15640
0
  }
15641
0
  MOZ_CRASH("We have an always-returning default case");
15642
0
  return false;
15643
0
}
15644
15645
static const JSJitInfo setInterval_methodinfo = {
15646
  { (JSJitGetterOp)setInterval },
15647
  { prototypes::id::Window },
15648
  { PrototypeTraits<prototypes::id::Window>::Depth },
15649
  JSJitInfo::Method,
15650
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15651
  JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
15652
  false,  /* isInfallible. False in setters. */
15653
  false,  /* isMovable.  Not relevant for setters. */
15654
  false, /* isEliminatable.  Not relevant for setters. */
15655
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15656
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15657
  false,  /* isTypedMethod.  Only relevant for methods. */
15658
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15659
};
15660
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15661
static_assert(0 < 5, "There is no slot for us");
15662
15663
MOZ_CAN_RUN_SCRIPT static bool
15664
clearInterval(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
15665
0
{
15666
0
  AUTO_PROFILER_LABEL_FAST("Window.clearInterval", DOM, cx);
15667
0
15668
0
  int32_t arg0;
15669
0
  if (args.hasDefined(0)) {
15670
0
    if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
15671
0
      return false;
15672
0
    }
15673
0
  } else {
15674
0
    arg0 = 0;
15675
0
  }
15676
0
  self->ClearInterval(arg0);
15677
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
15678
0
  args.rval().setUndefined();
15679
0
  return true;
15680
0
}
15681
15682
static const JSJitInfo clearInterval_methodinfo = {
15683
  { (JSJitGetterOp)clearInterval },
15684
  { prototypes::id::Window },
15685
  { PrototypeTraits<prototypes::id::Window>::Depth },
15686
  JSJitInfo::Method,
15687
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15688
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
15689
  false,  /* isInfallible. False in setters. */
15690
  false,  /* isMovable.  Not relevant for setters. */
15691
  false, /* isEliminatable.  Not relevant for setters. */
15692
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15693
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15694
  false,  /* isTypedMethod.  Only relevant for methods. */
15695
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15696
};
15697
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15698
static_assert(0 < 5, "There is no slot for us");
15699
15700
MOZ_CAN_RUN_SCRIPT static bool
15701
createImageBitmap(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
15702
0
{
15703
0
  AUTO_PROFILER_LABEL_FAST("Window.createImageBitmap", DOM, cx);
15704
0
15705
0
  unsigned argcount = std::min(args.length(), 5u);
15706
0
  switch (argcount) {
15707
0
    case 1: {
15708
0
      HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer arg0;
15709
0
      HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBufferArgument arg0_holder(arg0);
15710
0
      {
15711
0
        bool done = false, failed = false, tryNext;
15712
0
        if (args[0].isObject()) {
15713
0
          done = (failed = !arg0_holder.TrySetToHTMLImageElement(cx, args[0], tryNext, false)) || !tryNext ||
15714
0
                 (failed = !arg0_holder.TrySetToHTMLVideoElement(cx, args[0], tryNext, false)) || !tryNext ||
15715
0
                 (failed = !arg0_holder.TrySetToHTMLCanvasElement(cx, args[0], tryNext, false)) || !tryNext ||
15716
0
                 (failed = !arg0_holder.TrySetToBlob(cx, args[0], tryNext, false)) || !tryNext ||
15717
0
                 (failed = !arg0_holder.TrySetToImageData(cx, args[0], tryNext, false)) || !tryNext ||
15718
0
                 (failed = !arg0_holder.TrySetToCanvasRenderingContext2D(cx, args[0], tryNext, false)) || !tryNext ||
15719
0
                 (failed = !arg0_holder.TrySetToImageBitmap(cx, args[0], tryNext, false)) || !tryNext ||
15720
0
                 (failed = !arg0_holder.TrySetToArrayBufferView(cx, args[0], tryNext, false)) || !tryNext ||
15721
0
                 (failed = !arg0_holder.TrySetToArrayBuffer(cx, args[0], tryNext, false)) || !tryNext;
15722
0
15723
0
        }
15724
0
        if (failed) {
15725
0
          return false;
15726
0
        }
15727
0
        if (!done) {
15728
0
          ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 1 of Window.createImageBitmap", "HTMLImageElement, HTMLVideoElement, HTMLCanvasElement, Blob, ImageData, CanvasRenderingContext2D, ImageBitmap, ArrayBufferView, ArrayBuffer");
15729
0
          return false;
15730
0
        }
15731
0
      }
15732
0
      FastErrorResult rv;
15733
0
      auto result(StrongOrRawPtr<Promise>(self->CreateImageBitmap(cx, Constify(arg0), rv)));
15734
0
      if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15735
0
        return false;
15736
0
      }
15737
0
      MOZ_ASSERT(!JS_IsExceptionPending(cx));
15738
0
      if (!ToJSValue(cx, result, args.rval())) {
15739
0
        return false;
15740
0
      }
15741
0
      return true;
15742
0
      break;
15743
0
    }
15744
0
    case 5: {
15745
0
      HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer arg0;
15746
0
      HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBufferArgument arg0_holder(arg0);
15747
0
      {
15748
0
        bool done = false, failed = false, tryNext;
15749
0
        if (args[0].isObject()) {
15750
0
          done = (failed = !arg0_holder.TrySetToHTMLImageElement(cx, args[0], tryNext, false)) || !tryNext ||
15751
0
                 (failed = !arg0_holder.TrySetToHTMLVideoElement(cx, args[0], tryNext, false)) || !tryNext ||
15752
0
                 (failed = !arg0_holder.TrySetToHTMLCanvasElement(cx, args[0], tryNext, false)) || !tryNext ||
15753
0
                 (failed = !arg0_holder.TrySetToBlob(cx, args[0], tryNext, false)) || !tryNext ||
15754
0
                 (failed = !arg0_holder.TrySetToImageData(cx, args[0], tryNext, false)) || !tryNext ||
15755
0
                 (failed = !arg0_holder.TrySetToCanvasRenderingContext2D(cx, args[0], tryNext, false)) || !tryNext ||
15756
0
                 (failed = !arg0_holder.TrySetToImageBitmap(cx, args[0], tryNext, false)) || !tryNext ||
15757
0
                 (failed = !arg0_holder.TrySetToArrayBufferView(cx, args[0], tryNext, false)) || !tryNext ||
15758
0
                 (failed = !arg0_holder.TrySetToArrayBuffer(cx, args[0], tryNext, false)) || !tryNext;
15759
0
15760
0
        }
15761
0
        if (failed) {
15762
0
          return false;
15763
0
        }
15764
0
        if (!done) {
15765
0
          ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 1 of Window.createImageBitmap", "HTMLImageElement, HTMLVideoElement, HTMLCanvasElement, Blob, ImageData, CanvasRenderingContext2D, ImageBitmap, ArrayBufferView, ArrayBuffer");
15766
0
          return false;
15767
0
        }
15768
0
      }
15769
0
      int32_t arg1;
15770
0
      if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
15771
0
        return false;
15772
0
      }
15773
0
      int32_t arg2;
15774
0
      if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
15775
0
        return false;
15776
0
      }
15777
0
      if (args[3].isNumber()) {
15778
0
        int32_t arg3;
15779
0
        if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
15780
0
          return false;
15781
0
        }
15782
0
        int32_t arg4;
15783
0
        if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
15784
0
          return false;
15785
0
        }
15786
0
        FastErrorResult rv;
15787
0
        auto result(StrongOrRawPtr<Promise>(self->CreateImageBitmap(cx, Constify(arg0), arg1, arg2, arg3, arg4, rv)));
15788
0
        if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15789
0
          return false;
15790
0
        }
15791
0
        MOZ_ASSERT(!JS_IsExceptionPending(cx));
15792
0
        if (!ToJSValue(cx, result, args.rval())) {
15793
0
          return false;
15794
0
        }
15795
0
        return true;
15796
0
      }
15797
0
      ImageBitmapFormat arg3;
15798
0
      {
15799
0
        int index;
15800
0
        if (!FindEnumStringIndex<true>(cx, args[3], ImageBitmapFormatValues::strings, "ImageBitmapFormat", "Argument 4 of Window.createImageBitmap", &index)) {
15801
0
          return false;
15802
0
        }
15803
0
        MOZ_ASSERT(index >= 0);
15804
0
        arg3 = static_cast<ImageBitmapFormat>(index);
15805
0
      }
15806
0
      binding_detail::AutoSequence<ChannelPixelLayout> arg4;
15807
0
      if (args[4].isObject()) {
15808
0
        JS::ForOfIterator iter(cx);
15809
0
        if (!iter.init(args[4], JS::ForOfIterator::AllowNonIterable)) {
15810
0
          return false;
15811
0
        }
15812
0
        if (!iter.valueIsIterable()) {
15813
0
          ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 5 of Window.createImageBitmap");
15814
0
          return false;
15815
0
        }
15816
0
        binding_detail::AutoSequence<ChannelPixelLayout> &arr = arg4;
15817
0
        JS::Rooted<JS::Value> temp(cx);
15818
0
        while (true) {
15819
0
          bool done;
15820
0
          if (!iter.next(&temp, &done)) {
15821
0
            return false;
15822
0
          }
15823
0
          if (done) {
15824
0
            break;
15825
0
          }
15826
0
          ChannelPixelLayout* slotPtr = arr.AppendElement(mozilla::fallible);
15827
0
          if (!slotPtr) {
15828
0
            JS_ReportOutOfMemory(cx);
15829
0
            return false;
15830
0
          }
15831
0
          ChannelPixelLayout& slot = *slotPtr;
15832
0
          if (!slot.Init(cx, temp,  "Element of argument 5 of Window.createImageBitmap", false)) {
15833
0
            return false;
15834
0
          }
15835
0
        }
15836
0
      } else {
15837
0
        ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 5 of Window.createImageBitmap");
15838
0
        return false;
15839
0
      }
15840
0
      FastErrorResult rv;
15841
0
      auto result(StrongOrRawPtr<Promise>(self->CreateImageBitmap(cx, Constify(arg0), arg1, arg2, arg3, Constify(arg4), rv)));
15842
0
      if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15843
0
        return false;
15844
0
      }
15845
0
      MOZ_ASSERT(!JS_IsExceptionPending(cx));
15846
0
      if (!ToJSValue(cx, result, args.rval())) {
15847
0
        return false;
15848
0
      }
15849
0
      return true;
15850
0
      break;
15851
0
    }
15852
0
    default: {
15853
0
      return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.createImageBitmap");
15854
0
      break;
15855
0
    }
15856
0
  }
15857
0
  MOZ_CRASH("We have an always-returning default case");
15858
0
  return false;
15859
0
}
15860
15861
MOZ_CAN_RUN_SCRIPT static bool
15862
createImageBitmap_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
15863
0
{
15864
0
  bool ok = createImageBitmap(cx, obj, self, args);
15865
0
  if (ok) {
15866
0
    return true;
15867
0
  }
15868
0
  return ConvertExceptionToPromise(cx, args.rval());
15869
0
}
15870
15871
static const JSJitInfo createImageBitmap_methodinfo = {
15872
  { (JSJitGetterOp)createImageBitmap_promiseWrapper },
15873
  { prototypes::id::Window },
15874
  { PrototypeTraits<prototypes::id::Window>::Depth },
15875
  JSJitInfo::Method,
15876
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15877
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
15878
  false,  /* isInfallible. False in setters. */
15879
  false,  /* isMovable.  Not relevant for setters. */
15880
  false, /* isEliminatable.  Not relevant for setters. */
15881
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15882
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15883
  false,  /* isTypedMethod.  Only relevant for methods. */
15884
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15885
};
15886
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15887
static_assert(0 < 5, "There is no slot for us");
15888
15889
MOZ_CAN_RUN_SCRIPT static bool
15890
fetch(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
15891
0
{
15892
0
  AUTO_PROFILER_LABEL_FAST("Window.fetch", DOM, cx);
15893
0
15894
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
15895
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.fetch");
15896
0
  }
15897
0
  RequestOrUSVString arg0;
15898
0
  RequestOrUSVStringArgument arg0_holder(arg0);
15899
0
  {
15900
0
    bool done = false, failed = false, tryNext;
15901
0
    if (args[0].isObject()) {
15902
0
      done = (failed = !arg0_holder.TrySetToRequest(cx, args[0], tryNext, false)) || !tryNext;
15903
0
15904
0
    }
15905
0
    if (!done) {
15906
0
      do {
15907
0
        done = (failed = !arg0_holder.TrySetToUSVString(cx, args[0], tryNext)) || !tryNext;
15908
0
        break;
15909
0
      } while (false);
15910
0
    }
15911
0
    if (failed) {
15912
0
      return false;
15913
0
    }
15914
0
    if (!done) {
15915
0
      ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 1 of Window.fetch", "Request");
15916
0
      return false;
15917
0
    }
15918
0
  }
15919
0
  RootedDictionary<binding_detail::FastRequestInit> arg1(cx);
15920
0
  if (!arg1.Init(cx, (args.hasDefined(1)) ? args[1] : JS::NullHandleValue,  "Argument 2 of Window.fetch", false)) {
15921
0
    return false;
15922
0
  }
15923
0
  FastErrorResult rv;
15924
0
  auto result(StrongOrRawPtr<Promise>(self->Fetch(Constify(arg0), Constify(arg1), nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv)));
15925
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15926
0
    return false;
15927
0
  }
15928
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
15929
0
  static_assert(!IsPointer<decltype(result)>::value,
15930
0
                "NewObject implies that we need to keep the object alive with a strong reference.");
15931
0
  if (!ToJSValue(cx, result, args.rval())) {
15932
0
    return false;
15933
0
  }
15934
0
  return true;
15935
0
}
15936
15937
MOZ_CAN_RUN_SCRIPT static bool
15938
fetch_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, const JSJitMethodCallArgs& args)
15939
0
{
15940
0
  bool ok = fetch(cx, obj, self, args);
15941
0
  if (ok) {
15942
0
    return true;
15943
0
  }
15944
0
  return ConvertExceptionToPromise(cx, args.rval());
15945
0
}
15946
15947
static const JSJitInfo fetch_methodinfo = {
15948
  { (JSJitGetterOp)fetch_promiseWrapper },
15949
  { prototypes::id::Window },
15950
  { PrototypeTraits<prototypes::id::Window>::Depth },
15951
  JSJitInfo::Method,
15952
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15953
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
15954
  false,  /* isInfallible. False in setters. */
15955
  false,  /* isMovable.  Not relevant for setters. */
15956
  false, /* isEliminatable.  Not relevant for setters. */
15957
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15958
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15959
  false,  /* isTypedMethod.  Only relevant for methods. */
15960
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15961
};
15962
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15963
static_assert(0 < 5, "There is no slot for us");
15964
15965
MOZ_CAN_RUN_SCRIPT static bool
15966
get_isSecureContext(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
15967
0
{
15968
0
  AUTO_PROFILER_LABEL_FAST("get Window.isSecureContext", DOM, cx);
15969
0
15970
0
  bool result(self->IsSecureContext());
15971
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
15972
0
  args.rval().setBoolean(result);
15973
0
  return true;
15974
0
}
15975
15976
static const JSJitInfo isSecureContext_getterinfo = {
15977
  { (JSJitGetterOp)get_isSecureContext },
15978
  { prototypes::id::Window },
15979
  { PrototypeTraits<prototypes::id::Window>::Depth },
15980
  JSJitInfo::Getter,
15981
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
15982
  JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
15983
  true,  /* isInfallible. False in setters. */
15984
  false,  /* isMovable.  Not relevant for setters. */
15985
  false, /* isEliminatable.  Not relevant for setters. */
15986
  false, /* isAlwaysInSlot.  Only relevant for getters. */
15987
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
15988
  false,  /* isTypedMethod.  Only relevant for methods. */
15989
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
15990
};
15991
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15992
static_assert(0 < 5, "There is no slot for us");
15993
15994
MOZ_CAN_RUN_SCRIPT static bool
15995
get_indexedDB(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
15996
0
{
15997
0
  AUTO_PROFILER_LABEL_FAST("get Window.indexedDB", DOM, cx);
15998
0
15999
0
  FastErrorResult rv;
16000
0
  auto result(StrongOrRawPtr<mozilla::dom::IDBFactory>(self->GetIndexedDB(rv)));
16001
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
16002
0
    return false;
16003
0
  }
16004
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
16005
0
  if (!result) {
16006
0
    args.rval().setNull();
16007
0
    return true;
16008
0
  }
16009
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
16010
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
16011
0
    return false;
16012
0
  }
16013
0
  return true;
16014
0
}
16015
16016
static const JSJitInfo indexedDB_getterinfo = {
16017
  { (JSJitGetterOp)get_indexedDB },
16018
  { prototypes::id::Window },
16019
  { PrototypeTraits<prototypes::id::Window>::Depth },
16020
  JSJitInfo::Getter,
16021
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
16022
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
16023
  false,  /* isInfallible. False in setters. */
16024
  false,  /* isMovable.  Not relevant for setters. */
16025
  false, /* isEliminatable.  Not relevant for setters. */
16026
  false, /* isAlwaysInSlot.  Only relevant for getters. */
16027
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
16028
  false,  /* isTypedMethod.  Only relevant for methods. */
16029
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
16030
};
16031
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
16032
static_assert(0 < 5, "There is no slot for us");
16033
16034
MOZ_CAN_RUN_SCRIPT static bool
16035
get_caches(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
16036
0
{
16037
0
  AUTO_PROFILER_LABEL_FAST("get Window.caches", DOM, cx);
16038
0
16039
0
  FastErrorResult rv;
16040
0
  auto result(StrongOrRawPtr<mozilla::dom::cache::CacheStorage>(self->GetCaches(rv)));
16041
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
16042
0
    return false;
16043
0
  }
16044
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
16045
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
16046
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
16047
0
    return false;
16048
0
  }
16049
0
  return true;
16050
0
}
16051
16052
static const JSJitInfo caches_getterinfo = {
16053
  { (JSJitGetterOp)get_caches },
16054
  { prototypes::id::Window },
16055
  { PrototypeTraits<prototypes::id::Window>::Depth },
16056
  JSJitInfo::Getter,
16057
  JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
16058
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
16059
  false,  /* isInfallible. False in setters. */
16060
  false,  /* isMovable.  Not relevant for setters. */
16061
  false, /* isEliminatable.  Not relevant for setters. */
16062
  false, /* isAlwaysInSlot.  Only relevant for getters. */
16063
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
16064
  false,  /* isTypedMethod.  Only relevant for methods. */
16065
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
16066
};
16067
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
16068
static_assert(0 < 5, "There is no slot for us");
16069
16070
MOZ_CAN_RUN_SCRIPT static bool
16071
get_sessionStorage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindowInner* self, JSJitGetterCallArgs args)
16072
0
{
16073
0
  AUTO_PROFILER_LABEL_FAST("get Window.sessionStorage", DOM, cx);
16074
0
16075
0
  FastErrorResult rv;
16076
0
  auto result(StrongOrRawPtr<mozilla::dom::Storage>(self->GetSessionStorage(rv)));
16077
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
16078
0
    return false;
16079
0
  }
16080
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
16081
0
  if (!result) {
16082
0
    args.rval().setNull();
16083
0
    return true;
16084
0
  }
16085
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
16086
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
16087
0
    return false;
16088
0
  }
16089
0
  return true;
16090
0
}
16091
16092
static const JSJitInfo sessionStorage_getterinfo = {
16093
  { (JSJitGetterOp)get_sessionStorage },
16094
  { prototypes::id::Window },
16095
  { PrototypeTraits<prototypes::id::Window>::Depth },
16096
  JSJitInfo::Getter,
16097
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
16098
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
16099
  false,  /* isInfallible. False in setters. */
16100
  false,  /* isMovable.  Not relevant for setters. */
16101
  false, /* isEliminatable.  Not relevant for setters. */
16102
  false, /* isAlwaysInSlot.  Only relevant for getters. */
16103
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
16104
  false,  /* isTypedMethod.  Only relevant for methods. */
16105
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
16106
};
16107
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
16108
static_assert(0 < 5, "There is no slot for us");
16109
16110
static void
16111
_finalize(js::FreeOp* fop, JSObject* obj)
16112
0
{
16113
0
  nsGlobalWindowInner* self = UnwrapPossiblyNotInitializedDOMObject<nsGlobalWindowInner>(obj);
16114
0
  if (self) {
16115
0
    ClearWrapper(self, self, obj);
16116
0
    mozilla::dom::FinalizeGlobal(CastToJSFreeOp(fop), obj);
16117
0
    AddForDeferredFinalization<nsGlobalWindowInner>(self);
16118
0
  }
16119
0
}
16120
16121
static size_t
16122
_objectMoved(JSObject* obj, JSObject* old)
16123
0
{
16124
0
  nsGlobalWindowInner* self = UnwrapPossiblyNotInitializedDOMObject<nsGlobalWindowInner>(obj);
16125
0
  if (self) {
16126
0
    UpdateWrapper(self, self, obj, old);
16127
0
  }
16128
0
16129
0
  return 0;
16130
0
}
16131
16132
// We deliberately use brace-elision to make Visual Studio produce better initalization code.
16133
#if defined(__clang__)
16134
#pragma clang diagnostic push
16135
#pragma clang diagnostic ignored "-Wmissing-braces"
16136
#endif
16137
static const JSFunctionSpec sMethods_specs[] = {
16138
  JS_FNSPEC("close", (GenericMethod<CrossOriginThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&close_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16139
  JS_FNSPEC("stop", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&stop_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16140
  JS_FNSPEC("focus", (GenericMethod<CrossOriginThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&focus_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16141
  JS_FNSPEC("blur", (GenericMethod<CrossOriginThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&blur_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16142
  JS_FNSPEC("open", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&open_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16143
  JS_FNSPEC("alert", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&alert_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16144
  JS_FNSPEC("confirm", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&confirm_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16145
  JS_FNSPEC("prompt", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&prompt_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16146
  JS_FS_END,
16147
  JS_FNSPEC("print", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&print_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16148
  JS_FS_END,
16149
  JS_FNSPEC("postMessage", (GenericMethod<CrossOriginThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&postMessage_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
16150
  JS_FNSPEC("captureEvents", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&captureEvents_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16151
  JS_FNSPEC("releaseEvents", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&releaseEvents_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16152
  JS_FNSPEC("getSelection", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&getSelection_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16153
  JS_FNSPEC("getComputedStyle", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&getComputedStyle_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16154
  JS_FNSPEC("matchMedia", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&matchMedia_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16155
  JS_FNSPEC("moveTo", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&moveTo_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
16156
  JS_FNSPEC("moveBy", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&moveBy_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
16157
  JS_FNSPEC("resizeTo", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&resizeTo_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
16158
  JS_FNSPEC("resizeBy", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&resizeBy_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
16159
  JS_FNSPEC("scroll", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&scroll_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16160
  JS_FNSPEC("scrollTo", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&scrollTo_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16161
  JS_FNSPEC("scrollBy", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&scrollBy_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16162
  JS_FNSPEC("requestAnimationFrame", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&requestAnimationFrame_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16163
  JS_FNSPEC("cancelAnimationFrame", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&cancelAnimationFrame_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16164
  JS_FNSPEC("getDefaultComputedStyle", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&getDefaultComputedStyle_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16165
  JS_FNSPEC("scrollByLines", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&scrollByLines_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16166
  JS_FNSPEC("scrollByPages", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&scrollByPages_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16167
  JS_FNSPEC("sizeToContent", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&sizeToContent_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16168
  JS_FNSPEC("updateCommands", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&updateCommands_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16169
  JS_FNSPEC("find", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&find_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16170
  JS_FNSPEC("dump", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&dump_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16171
  JS_FNSPEC("setResizable", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&setResizable_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16172
  JS_FS_END,
16173
  JS_FNSPEC("getAttention", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&getAttention_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16174
  JS_FNSPEC("getAttentionWithCycleCount", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&getAttentionWithCycleCount_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16175
  JS_FNSPEC("setCursor", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&setCursor_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16176
  JS_FNSPEC("maximize", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&maximize_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16177
  JS_FNSPEC("minimize", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&minimize_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16178
  JS_FNSPEC("restore", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&restore_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16179
  JS_FNSPEC("notifyDefaultButtonLoaded", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&notifyDefaultButtonLoaded_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16180
  JS_FNSPEC("getGroupMessageManager", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&getGroupMessageManager_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16181
  JS_FNSPEC("beginWindowMove", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&beginWindowMove_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16182
  JS_FNSPEC("promiseDocumentFlushed", (GenericMethod<MaybeGlobalThisPolicy, ConvertExceptionsToPromises>), reinterpret_cast<const JSJitInfo*>(&promiseDocumentFlushed_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16183
  JS_FS_END,
16184
  JS_FNSPEC("requestIdleCallback", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&requestIdleCallback_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16185
  JS_FNSPEC("cancelIdleCallback", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&cancelIdleCallback_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16186
  JS_FS_END,
16187
  JS_FNSPEC("getRegionalPrefsLocales", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&getRegionalPrefsLocales_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16188
  JS_FS_END,
16189
  JS_FNSPEC("btoa", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&btoa_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16190
  JS_FNSPEC("atob", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&atob_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16191
  JS_FNSPEC("setTimeout", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&setTimeout_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16192
  JS_FNSPEC("clearTimeout", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&clearTimeout_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16193
  JS_FNSPEC("setInterval", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&setInterval_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16194
  JS_FNSPEC("clearInterval", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&clearInterval_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16195
  JS_FNSPEC("createImageBitmap", (GenericMethod<MaybeGlobalThisPolicy, ConvertExceptionsToPromises>), reinterpret_cast<const JSJitInfo*>(&createImageBitmap_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16196
  JS_FNSPEC("fetch", (GenericMethod<MaybeGlobalThisPolicy, ConvertExceptionsToPromises>), reinterpret_cast<const JSJitInfo*>(&fetch_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16197
  JS_FS_END
16198
};
16199
#if defined(__clang__)
16200
#pragma clang diagnostic pop
16201
#endif
16202
16203
// Can't be const because the pref-enabled boolean needs to be writable
16204
static PrefableDisablers sMethods_disablers9 = {
16205
  true, false, 0, &nsGlobalWindowInner::IsWindowPrintEnabled
16206
};
16207
16208
// Can't be const because the pref-enabled boolean needs to be writable
16209
static PrefableDisablers sMethods_disablers35 = {
16210
  true, false, 0, &nsGlobalWindowInner::IsPrivilegedChromeWindow
16211
};
16212
16213
// Can't be const because the pref-enabled boolean needs to be writable
16214
static PrefableDisablers sMethods_disablers46 = {
16215
  true, false, 0, &nsGlobalWindowInner::IsRequestIdleCallbackEnabled
16216
};
16217
16218
// Can't be const because the pref-enabled boolean needs to be writable
16219
static PrefableDisablers sMethods_disablers49 = {
16220
  true, false, 0, &IsChromeOrXBL
16221
};
16222
16223
static const Prefable<const JSFunctionSpec> sMethods[] = {
16224
  { nullptr, &sMethods_specs[0] },
16225
  { &sMethods_disablers9, &sMethods_specs[9] },
16226
  { nullptr, &sMethods_specs[11] },
16227
  { &sMethods_disablers35, &sMethods_specs[35] },
16228
  { &sMethods_disablers46, &sMethods_specs[46] },
16229
  { &sMethods_disablers49, &sMethods_specs[49] },
16230
  { nullptr, &sMethods_specs[51] },
16231
  { nullptr, nullptr }
16232
};
16233
16234
static_assert(7 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
16235
    "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
16236
static_assert(23 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
16237
    "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
16238
16239
// We deliberately use brace-elision to make Visual Studio produce better initalization code.
16240
#if defined(__clang__)
16241
#pragma clang diagnostic push
16242
#pragma clang diagnostic ignored "-Wmissing-braces"
16243
#endif
16244
static const JSFunctionSpec sChromeMethods_specs[] = {
16245
  JS_FNSPEC("mozScrollSnap", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&mozScrollSnap_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16246
  JS_FNSPEC("openDialog", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&openDialog_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16247
  JS_FNSPEC("getInterface", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&getInterface_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16248
  JS_FNSPEC("shouldReportForServiceWorkerScope", (GenericMethod<MaybeGlobalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&shouldReportForServiceWorkerScope_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16249
  JS_FNSPEC("QueryInterface", QueryInterface, nullptr, 1, 0, nullptr),
16250
  JS_FS_END
16251
};
16252
#if defined(__clang__)
16253
#pragma clang diagnostic pop
16254
#endif
16255
16256
16257
static const Prefable<const JSFunctionSpec> sChromeMethods[] = {
16258
  { nullptr, &sChromeMethods_specs[0] },
16259
  { nullptr, nullptr }
16260
};
16261
16262
static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
16263
    "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
16264
static_assert(5 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
16265
    "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
16266
16267
// We deliberately use brace-elision to make Visual Studio produce better initalization code.
16268
#if defined(__clang__)
16269
#pragma clang diagnostic push
16270
#pragma clang diagnostic ignored "-Wmissing-braces"
16271
#endif
16272
static const JSPropertySpec sAttributes_specs[] = {
16273
  { "self", JSPROP_ENUMERATE, GenericGetter<CrossOriginThisPolicy, ThrowExceptions>, &self_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &self_setterinfo },
16274
  { "name", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &name_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &name_setterinfo },
16275
  { "history", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &history_getterinfo, nullptr, nullptr },
16276
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16277
  { "customElements", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &customElements_getterinfo, nullptr, nullptr },
16278
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16279
  { "locationbar", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &locationbar_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &locationbar_setterinfo },
16280
  { "menubar", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &menubar_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &menubar_setterinfo },
16281
  { "personalbar", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &personalbar_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &personalbar_setterinfo },
16282
  { "scrollbars", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &scrollbars_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &scrollbars_setterinfo },
16283
  { "statusbar", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &statusbar_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &statusbar_setterinfo },
16284
  { "toolbar", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &toolbar_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &toolbar_setterinfo },
16285
  { "status", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &status_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &status_setterinfo },
16286
  { "closed", JSPROP_ENUMERATE, GenericGetter<CrossOriginThisPolicy, ThrowExceptions>, &closed_getterinfo, nullptr, nullptr },
16287
  { "event", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &event_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &event_setterinfo },
16288
  { "frames", JSPROP_ENUMERATE, GenericGetter<CrossOriginThisPolicy, ThrowExceptions>, &frames_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &frames_setterinfo },
16289
  { "length", JSPROP_ENUMERATE, GenericGetter<CrossOriginThisPolicy, ThrowExceptions>, &length_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &length_setterinfo },
16290
  { "opener", JSPROP_ENUMERATE, GenericGetter<CrossOriginThisPolicy, ThrowExceptions>, &opener_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &opener_setterinfo },
16291
  { "parent", JSPROP_ENUMERATE, GenericGetter<CrossOriginThisPolicy, ThrowExceptions>, &parent_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &parent_setterinfo },
16292
  { "frameElement", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &frameElement_getterinfo, nullptr, nullptr },
16293
  { "navigator", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &navigator_getterinfo, nullptr, nullptr },
16294
  { "external", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &external_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &external_setterinfo },
16295
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16296
  { "applicationCache", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &applicationCache_getterinfo, nullptr, nullptr },
16297
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16298
  { "onappinstalled", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onappinstalled_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onappinstalled_setterinfo },
16299
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16300
  { "screen", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &screen_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &screen_setterinfo },
16301
  { "innerWidth", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &innerWidth_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &innerWidth_setterinfo },
16302
  { "innerHeight", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &innerHeight_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &innerHeight_setterinfo },
16303
  { "scrollX", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &scrollX_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &scrollX_setterinfo },
16304
  { "pageXOffset", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &pageXOffset_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &pageXOffset_setterinfo },
16305
  { "scrollY", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &scrollY_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &scrollY_setterinfo },
16306
  { "pageYOffset", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &pageYOffset_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &pageYOffset_setterinfo },
16307
  { "screenX", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &screenX_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &screenX_setterinfo },
16308
  { "screenY", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &screenY_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &screenY_setterinfo },
16309
  { "outerWidth", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &outerWidth_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &outerWidth_setterinfo },
16310
  { "outerHeight", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &outerHeight_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &outerHeight_setterinfo },
16311
  { "performance", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &performance_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &performance_setterinfo },
16312
  { "mozInnerScreenX", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &mozInnerScreenX_getterinfo, nullptr, nullptr },
16313
  { "mozInnerScreenY", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &mozInnerScreenY_getterinfo, nullptr, nullptr },
16314
  { "devicePixelRatio", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &devicePixelRatio_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &devicePixelRatio_setterinfo },
16315
  { "scrollMaxX", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &scrollMaxX_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &scrollMaxX_setterinfo },
16316
  { "scrollMaxY", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &scrollMaxY_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &scrollMaxY_setterinfo },
16317
  { "fullScreen", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &fullScreen_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &fullScreen_setterinfo },
16318
  { "mozPaintCount", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &mozPaintCount_getterinfo, nullptr, nullptr },
16319
  { "ondevicemotion", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ondevicemotion_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ondevicemotion_setterinfo },
16320
  { "ondeviceorientation", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ondeviceorientation_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ondeviceorientation_setterinfo },
16321
  { "onabsolutedeviceorientation", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onabsolutedeviceorientation_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onabsolutedeviceorientation_setterinfo },
16322
  { "ondeviceproximity", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ondeviceproximity_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ondeviceproximity_setterinfo },
16323
  { "onuserproximity", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onuserproximity_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onuserproximity_setterinfo },
16324
  { "ondevicelight", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ondevicelight_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ondevicelight_setterinfo },
16325
  { "InstallTrigger", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &InstallTrigger_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &InstallTrigger_setterinfo },
16326
  { "sidebar", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &sidebar_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &sidebar_setterinfo },
16327
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16328
  { "windowState", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &windowState_getterinfo, nullptr, nullptr },
16329
  { "isFullyOccluded", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &isFullyOccluded_getterinfo, nullptr, nullptr },
16330
  { "browserDOMWindow", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &browserDOMWindow_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &browserDOMWindow_setterinfo },
16331
  { "messageManager", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &messageManager_getterinfo, nullptr, nullptr },
16332
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16333
  { "isChromeWindow", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &isChromeWindow_getterinfo, nullptr, nullptr },
16334
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16335
  { "onvrdisplayconnect", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onvrdisplayconnect_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onvrdisplayconnect_setterinfo },
16336
  { "onvrdisplaydisconnect", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onvrdisplaydisconnect_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onvrdisplaydisconnect_setterinfo },
16337
  { "onvrdisplayactivate", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onvrdisplayactivate_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onvrdisplayactivate_setterinfo },
16338
  { "onvrdisplaydeactivate", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onvrdisplaydeactivate_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onvrdisplaydeactivate_setterinfo },
16339
  { "onvrdisplaypresentchange", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onvrdisplaypresentchange_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onvrdisplaypresentchange_setterinfo },
16340
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16341
  { "paintWorklet", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &paintWorklet_getterinfo, nullptr, nullptr },
16342
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16343
  { "intlUtils", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &intlUtils_getterinfo, nullptr, nullptr },
16344
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16345
  { "visualViewport", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &visualViewport_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &visualViewport_setterinfo },
16346
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16347
  { "crypto", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &crypto_getterinfo, nullptr, nullptr },
16348
  { "onabort", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onabort_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onabort_setterinfo },
16349
  { "onblur", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onblur_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onblur_setterinfo },
16350
  { "onfocus", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onfocus_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onfocus_setterinfo },
16351
  { "onauxclick", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onauxclick_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onauxclick_setterinfo },
16352
  { "oncanplay", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &oncanplay_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &oncanplay_setterinfo },
16353
  { "oncanplaythrough", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &oncanplaythrough_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &oncanplaythrough_setterinfo },
16354
  { "onchange", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onchange_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onchange_setterinfo },
16355
  { "onclick", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onclick_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onclick_setterinfo },
16356
  { "onclose", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onclose_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onclose_setterinfo },
16357
  { "oncontextmenu", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &oncontextmenu_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &oncontextmenu_setterinfo },
16358
  { "ondblclick", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ondblclick_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ondblclick_setterinfo },
16359
  { "ondrag", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ondrag_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ondrag_setterinfo },
16360
  { "ondragend", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ondragend_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ondragend_setterinfo },
16361
  { "ondragenter", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ondragenter_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ondragenter_setterinfo },
16362
  { "ondragexit", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ondragexit_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ondragexit_setterinfo },
16363
  { "ondragleave", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ondragleave_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ondragleave_setterinfo },
16364
  { "ondragover", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ondragover_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ondragover_setterinfo },
16365
  { "ondragstart", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ondragstart_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ondragstart_setterinfo },
16366
  { "ondrop", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ondrop_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ondrop_setterinfo },
16367
  { "ondurationchange", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ondurationchange_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ondurationchange_setterinfo },
16368
  { "onemptied", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onemptied_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onemptied_setterinfo },
16369
  { "onended", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onended_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onended_setterinfo },
16370
  { "oninput", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &oninput_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &oninput_setterinfo },
16371
  { "oninvalid", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &oninvalid_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &oninvalid_setterinfo },
16372
  { "onkeydown", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onkeydown_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onkeydown_setterinfo },
16373
  { "onkeypress", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onkeypress_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onkeypress_setterinfo },
16374
  { "onkeyup", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onkeyup_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onkeyup_setterinfo },
16375
  { "onload", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onload_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onload_setterinfo },
16376
  { "onloadeddata", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onloadeddata_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onloadeddata_setterinfo },
16377
  { "onloadedmetadata", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onloadedmetadata_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onloadedmetadata_setterinfo },
16378
  { "onloadend", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onloadend_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onloadend_setterinfo },
16379
  { "onloadstart", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onloadstart_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onloadstart_setterinfo },
16380
  { "onmousedown", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onmousedown_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onmousedown_setterinfo },
16381
  { "onmouseenter", JSPROP_ENUMERATE, GenericGetter<LenientThisPolicy, ThrowExceptions>, &onmouseenter_getterinfo, GenericSetter<LenientThisPolicy>, &onmouseenter_setterinfo },
16382
  { "onmouseleave", JSPROP_ENUMERATE, GenericGetter<LenientThisPolicy, ThrowExceptions>, &onmouseleave_getterinfo, GenericSetter<LenientThisPolicy>, &onmouseleave_setterinfo },
16383
  { "onmousemove", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onmousemove_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onmousemove_setterinfo },
16384
  { "onmouseout", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onmouseout_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onmouseout_setterinfo },
16385
  { "onmouseover", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onmouseover_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onmouseover_setterinfo },
16386
  { "onmouseup", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onmouseup_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onmouseup_setterinfo },
16387
  { "onwheel", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onwheel_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onwheel_setterinfo },
16388
  { "onpause", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onpause_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onpause_setterinfo },
16389
  { "onplay", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onplay_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onplay_setterinfo },
16390
  { "onplaying", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onplaying_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onplaying_setterinfo },
16391
  { "onprogress", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onprogress_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onprogress_setterinfo },
16392
  { "onratechange", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onratechange_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onratechange_setterinfo },
16393
  { "onreset", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onreset_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onreset_setterinfo },
16394
  { "onresize", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onresize_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onresize_setterinfo },
16395
  { "onscroll", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onscroll_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onscroll_setterinfo },
16396
  { "onseeked", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onseeked_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onseeked_setterinfo },
16397
  { "onseeking", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onseeking_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onseeking_setterinfo },
16398
  { "onselect", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onselect_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onselect_setterinfo },
16399
  { "onshow", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onshow_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onshow_setterinfo },
16400
  { "onstalled", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onstalled_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onstalled_setterinfo },
16401
  { "onsubmit", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onsubmit_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onsubmit_setterinfo },
16402
  { "onsuspend", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onsuspend_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onsuspend_setterinfo },
16403
  { "ontimeupdate", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ontimeupdate_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ontimeupdate_setterinfo },
16404
  { "onvolumechange", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onvolumechange_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onvolumechange_setterinfo },
16405
  { "onwaiting", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onwaiting_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onwaiting_setterinfo },
16406
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16407
  { "onselectstart", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onselectstart_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onselectstart_setterinfo },
16408
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16409
  { "ontoggle", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ontoggle_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ontoggle_setterinfo },
16410
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16411
  { "onpointercancel", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onpointercancel_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onpointercancel_setterinfo },
16412
  { "onpointerdown", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onpointerdown_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onpointerdown_setterinfo },
16413
  { "onpointerup", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onpointerup_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onpointerup_setterinfo },
16414
  { "onpointermove", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onpointermove_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onpointermove_setterinfo },
16415
  { "onpointerout", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onpointerout_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onpointerout_setterinfo },
16416
  { "onpointerover", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onpointerover_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onpointerover_setterinfo },
16417
  { "onpointerenter", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onpointerenter_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onpointerenter_setterinfo },
16418
  { "onpointerleave", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onpointerleave_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onpointerleave_setterinfo },
16419
  { "ongotpointercapture", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ongotpointercapture_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ongotpointercapture_setterinfo },
16420
  { "onlostpointercapture", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onlostpointercapture_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onlostpointercapture_setterinfo },
16421
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16422
  { "onmozfullscreenchange", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onmozfullscreenchange_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onmozfullscreenchange_setterinfo },
16423
  { "onmozfullscreenerror", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onmozfullscreenerror_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onmozfullscreenerror_setterinfo },
16424
  { "onanimationcancel", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onanimationcancel_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onanimationcancel_setterinfo },
16425
  { "onanimationend", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onanimationend_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onanimationend_setterinfo },
16426
  { "onanimationiteration", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onanimationiteration_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onanimationiteration_setterinfo },
16427
  { "onanimationstart", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onanimationstart_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onanimationstart_setterinfo },
16428
  { "ontransitioncancel", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ontransitioncancel_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ontransitioncancel_setterinfo },
16429
  { "ontransitionend", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ontransitionend_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ontransitionend_setterinfo },
16430
  { "ontransitionrun", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ontransitionrun_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ontransitionrun_setterinfo },
16431
  { "ontransitionstart", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ontransitionstart_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ontransitionstart_setterinfo },
16432
  { "onwebkitanimationend", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onwebkitanimationend_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onwebkitanimationend_setterinfo },
16433
  { "onwebkitanimationiteration", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onwebkitanimationiteration_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onwebkitanimationiteration_setterinfo },
16434
  { "onwebkitanimationstart", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onwebkitanimationstart_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onwebkitanimationstart_setterinfo },
16435
  { "onwebkittransitionend", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onwebkittransitionend_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onwebkittransitionend_setterinfo },
16436
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16437
  { "u2f", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &u2f_getterinfo, nullptr, nullptr },
16438
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16439
  { "onerror", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onerror_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onerror_setterinfo },
16440
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16441
  { "speechSynthesis", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &speechSynthesis_getterinfo, nullptr, nullptr },
16442
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16443
  { "ontouchstart", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ontouchstart_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ontouchstart_setterinfo },
16444
  { "ontouchend", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ontouchend_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ontouchend_setterinfo },
16445
  { "ontouchmove", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ontouchmove_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ontouchmove_setterinfo },
16446
  { "ontouchcancel", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ontouchcancel_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ontouchcancel_setterinfo },
16447
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16448
  { "webgpu", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &webgpu_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &webgpu_setterinfo },
16449
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16450
  { "onafterprint", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onafterprint_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onafterprint_setterinfo },
16451
  { "onbeforeprint", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onbeforeprint_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onbeforeprint_setterinfo },
16452
  { "onbeforeunload", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onbeforeunload_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onbeforeunload_setterinfo },
16453
  { "onhashchange", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onhashchange_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onhashchange_setterinfo },
16454
  { "onlanguagechange", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onlanguagechange_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onlanguagechange_setterinfo },
16455
  { "onmessage", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onmessage_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onmessage_setterinfo },
16456
  { "onmessageerror", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onmessageerror_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onmessageerror_setterinfo },
16457
  { "onoffline", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onoffline_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onoffline_setterinfo },
16458
  { "ononline", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &ononline_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &ononline_setterinfo },
16459
  { "onpagehide", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onpagehide_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onpagehide_setterinfo },
16460
  { "onpageshow", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onpageshow_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onpageshow_setterinfo },
16461
  { "onpopstate", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onpopstate_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onpopstate_setterinfo },
16462
  { "onstorage", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onstorage_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onstorage_setterinfo },
16463
  { "onunload", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &onunload_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &onunload_setterinfo },
16464
  { "localStorage", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &localStorage_getterinfo, nullptr, nullptr },
16465
  { "origin", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &origin_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &origin_setterinfo },
16466
  { "isSecureContext", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &isSecureContext_getterinfo, nullptr, nullptr },
16467
  { "indexedDB", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &indexedDB_getterinfo, nullptr, nullptr },
16468
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16469
  { "caches", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &caches_getterinfo, nullptr, nullptr },
16470
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16471
  { "sessionStorage", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &sessionStorage_getterinfo, nullptr, nullptr },
16472
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
16473
};
16474
#if defined(__clang__)
16475
#pragma clang diagnostic pop
16476
#endif
16477
16478
// Can't be const because the pref-enabled boolean needs to be writable
16479
static PrefableDisablers sAttributes_disablers4 = {
16480
  true, false, 0, &CustomElementRegistry::IsCustomElementEnabled
16481
};
16482
16483
// Can't be const because the pref-enabled boolean needs to be writable
16484
static PrefableDisablers sAttributes_disablers23 = {
16485
  true, false, 0, &nsGlobalWindowInner::OfflineCacheAllowedForContext
16486
};
16487
16488
// Can't be const because the pref-enabled boolean needs to be writable
16489
static PrefableDisablers sAttributes_disablers25 = {
16490
  true, false, 0, nullptr
16491
};
16492
16493
// Can't be const because the pref-enabled boolean needs to be writable
16494
static PrefableDisablers sAttributes_disablers55 = {
16495
  true, false, 0, &nsGlobalWindowInner::IsPrivilegedChromeWindow
16496
};
16497
16498
// Can't be const because the pref-enabled boolean needs to be writable
16499
static PrefableDisablers sAttributes_disablers60 = {
16500
  true, false, 0, &IsChromeOrXBL
16501
};
16502
16503
// Can't be const because the pref-enabled boolean needs to be writable
16504
static PrefableDisablers sAttributes_disablers62 = {
16505
  true, false, 0, nullptr
16506
};
16507
16508
// Can't be const because the pref-enabled boolean needs to be writable
16509
static PrefableDisablers sAttributes_disablers68 = {
16510
  true, false, 0, nullptr
16511
};
16512
16513
// Can't be const because the pref-enabled boolean needs to be writable
16514
static PrefableDisablers sAttributes_disablers70 = {
16515
  true, false, 0, &IsChromeOrXBL
16516
};
16517
16518
// Can't be const because the pref-enabled boolean needs to be writable
16519
static PrefableDisablers sAttributes_disablers72 = {
16520
  true, false, 0, nullptr
16521
};
16522
16523
// Can't be const because the pref-enabled boolean needs to be writable
16524
static PrefableDisablers sAttributes_disablers134 = {
16525
  true, false, 0, nullptr
16526
};
16527
16528
// Can't be const because the pref-enabled boolean needs to be writable
16529
static PrefableDisablers sAttributes_disablers138 = {
16530
  true, false, 0, nullptr
16531
};
16532
16533
// Can't be const because the pref-enabled boolean needs to be writable
16534
static PrefableDisablers sAttributes_disablers164 = {
16535
  true, true, 0, nullptr
16536
};
16537
16538
// Can't be const because the pref-enabled boolean needs to be writable
16539
static PrefableDisablers sAttributes_disablers168 = {
16540
  true, false, 0, nullptr
16541
};
16542
16543
// Can't be const because the pref-enabled boolean needs to be writable
16544
static PrefableDisablers sAttributes_disablers170 = {
16545
  true, false, 0, &nsGenericHTMLElement::TouchEventsEnabled
16546
};
16547
16548
// Can't be const because the pref-enabled boolean needs to be writable
16549
static PrefableDisablers sAttributes_disablers175 = {
16550
  true, false, 0, nullptr
16551
};
16552
16553
// Can't be const because the pref-enabled boolean needs to be writable
16554
static PrefableDisablers sAttributes_disablers196 = {
16555
  true, false, 0, &mozilla::dom::DOMPrefs::dom_caches_enabled
16556
};
16557
16558
static const Prefable<const JSPropertySpec> sAttributes[] = {
16559
  { nullptr, &sAttributes_specs[0] },
16560
  { &sAttributes_disablers4, &sAttributes_specs[4] },
16561
  { nullptr, &sAttributes_specs[6] },
16562
  { &sAttributes_disablers23, &sAttributes_specs[23] },
16563
  { &sAttributes_disablers25, &sAttributes_specs[25] },
16564
  { nullptr, &sAttributes_specs[27] },
16565
  { &sAttributes_disablers55, &sAttributes_specs[55] },
16566
  { &sAttributes_disablers60, &sAttributes_specs[60] },
16567
  { &sAttributes_disablers62, &sAttributes_specs[62] },
16568
  { &sAttributes_disablers68, &sAttributes_specs[68] },
16569
  { &sAttributes_disablers70, &sAttributes_specs[70] },
16570
  { &sAttributes_disablers72, &sAttributes_specs[72] },
16571
  { nullptr, &sAttributes_specs[74] },
16572
  { &sAttributes_disablers134, &sAttributes_specs[134] },
16573
  { nullptr, &sAttributes_specs[136] },
16574
  { &sAttributes_disablers138, &sAttributes_specs[138] },
16575
  { nullptr, &sAttributes_specs[149] },
16576
  { &sAttributes_disablers164, &sAttributes_specs[164] },
16577
  { nullptr, &sAttributes_specs[166] },
16578
  { &sAttributes_disablers168, &sAttributes_specs[168] },
16579
  { &sAttributes_disablers170, &sAttributes_specs[170] },
16580
  { &sAttributes_disablers175, &sAttributes_specs[175] },
16581
  { nullptr, &sAttributes_specs[177] },
16582
  { &sAttributes_disablers196, &sAttributes_specs[196] },
16583
  { nullptr, &sAttributes_specs[198] },
16584
  { nullptr, nullptr }
16585
};
16586
16587
static_assert(25 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
16588
    "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
16589
static_assert(59 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
16590
    "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
16591
16592
// We deliberately use brace-elision to make Visual Studio produce better initalization code.
16593
#if defined(__clang__)
16594
#pragma clang diagnostic push
16595
#pragma clang diagnostic ignored "-Wmissing-braces"
16596
#endif
16597
static const JSPropertySpec sChromeAttributes_specs[] = {
16598
  { "controllers", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &controllers_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &controllers_setterinfo },
16599
  { "realFrameElement", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &realFrameElement_getterinfo, nullptr, nullptr },
16600
  { "docShell", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &docShell_getterinfo, nullptr, nullptr },
16601
  { "scrollMinX", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &scrollMinX_getterinfo, nullptr, nullptr },
16602
  { "scrollMinY", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &scrollMinY_getterinfo, nullptr, nullptr },
16603
  { "content", 0, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &content_getterinfo, GenericSetter<MaybeGlobalThisPolicy>, &content_setterinfo },
16604
  { "windowRoot", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &windowRoot_getterinfo, nullptr, nullptr },
16605
  { "windowUtils", JSPROP_ENUMERATE, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &windowUtils_getterinfo, nullptr, nullptr },
16606
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
16607
};
16608
#if defined(__clang__)
16609
#pragma clang diagnostic pop
16610
#endif
16611
16612
16613
static const Prefable<const JSPropertySpec> sChromeAttributes[] = {
16614
  { nullptr, &sChromeAttributes_specs[0] },
16615
  { nullptr, nullptr }
16616
};
16617
16618
static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
16619
    "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
16620
static_assert(8 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
16621
    "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
16622
16623
// We deliberately use brace-elision to make Visual Studio produce better initalization code.
16624
#if defined(__clang__)
16625
#pragma clang diagnostic push
16626
#pragma clang diagnostic ignored "-Wmissing-braces"
16627
#endif
16628
static const JSPropertySpec sUnforgeableAttributes_specs[] = {
16629
  { "window", JSPROP_ENUMERATE | JSPROP_PERMANENT, GenericGetter<CrossOriginThisPolicy, ThrowExceptions>, &window_getterinfo, nullptr, nullptr },
16630
  { "document", JSPROP_ENUMERATE | JSPROP_PERMANENT, GenericGetter<MaybeGlobalThisPolicy, ThrowExceptions>, &document_getterinfo, nullptr, nullptr },
16631
  { "location", JSPROP_ENUMERATE | JSPROP_PERMANENT, GenericGetter<CrossOriginThisPolicy, ThrowExceptions>, &location_getterinfo, GenericSetter<CrossOriginThisPolicy>, &location_setterinfo },
16632
  { "top", JSPROP_ENUMERATE | JSPROP_PERMANENT, GenericGetter<CrossOriginThisPolicy, ThrowExceptions>, &top_getterinfo, nullptr, nullptr },
16633
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
16634
};
16635
#if defined(__clang__)
16636
#pragma clang diagnostic pop
16637
#endif
16638
16639
16640
static const Prefable<const JSPropertySpec> sUnforgeableAttributes[] = {
16641
  { nullptr, &sUnforgeableAttributes_specs[0] },
16642
  { nullptr, nullptr }
16643
};
16644
16645
static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
16646
    "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
16647
static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
16648
    "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
16649
16650
// We deliberately use brace-elision to make Visual Studio produce better initalization code.
16651
#if defined(__clang__)
16652
#pragma clang diagnostic push
16653
#pragma clang diagnostic ignored "-Wmissing-braces"
16654
#endif
16655
static const ConstantSpec sConstants_specs[] = {
16656
  { "STATE_MAXIMIZED", JS::Int32Value(1) },
16657
  { "STATE_MINIMIZED", JS::Int32Value(2) },
16658
  { "STATE_NORMAL", JS::Int32Value(3) },
16659
  { "STATE_FULLSCREEN", JS::Int32Value(4) },
16660
  { 0, JS::UndefinedValue() }
16661
};
16662
#if defined(__clang__)
16663
#pragma clang diagnostic pop
16664
#endif
16665
16666
// Can't be const because the pref-enabled boolean needs to be writable
16667
static PrefableDisablers sConstants_disablers0 = {
16668
  true, false, 0, &nsGlobalWindowInner::IsPrivilegedChromeWindow
16669
};
16670
16671
static const Prefable<const ConstantSpec> sConstants[] = {
16672
  { &sConstants_disablers0, &sConstants_specs[0] },
16673
  { nullptr, nullptr }
16674
};
16675
16676
static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
16677
    "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
16678
static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
16679
    "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
16680
16681
16682
static uint16_t sNativeProperties_sortedPropertyIndices[236];
16683
static PropertyInfo sNativeProperties_propertyInfos[236];
16684
16685
static const NativePropertiesN<4> sNativeProperties = {
16686
  false, 0,
16687
  false, 0,
16688
  true,  0 /* sMethods */,
16689
  true,  1 /* sAttributes */,
16690
  false, 0,
16691
  true,  2 /* sUnforgeableAttributes */,
16692
  true,  3 /* sConstants */,
16693
  -1,
16694
  236,
16695
  sNativeProperties_sortedPropertyIndices,
16696
  {
16697
    { sMethods, &sNativeProperties_propertyInfos[0] },
16698
    { sAttributes, &sNativeProperties_propertyInfos[53] },
16699
    { sUnforgeableAttributes, &sNativeProperties_propertyInfos[228] },
16700
    { sConstants, &sNativeProperties_propertyInfos[232] }
16701
  }
16702
};
16703
static_assert(236 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
16704
    "We have a property info count that is oversized");
16705
16706
static uint16_t sChromeOnlyNativeProperties_sortedPropertyIndices[13];
16707
static PropertyInfo sChromeOnlyNativeProperties_propertyInfos[13];
16708
16709
static const NativePropertiesN<2> sChromeOnlyNativeProperties = {
16710
  false, 0,
16711
  false, 0,
16712
  true,  0 /* sChromeMethods */,
16713
  true,  1 /* sChromeAttributes */,
16714
  false, 0,
16715
  false, 0,
16716
  false, 0,
16717
  -1,
16718
  13,
16719
  sChromeOnlyNativeProperties_sortedPropertyIndices,
16720
  {
16721
    { sChromeMethods, &sChromeOnlyNativeProperties_propertyInfos[0] },
16722
    { sChromeAttributes, &sChromeOnlyNativeProperties_propertyInfos[5] }
16723
  }
16724
};
16725
static_assert(13 < 1ull << CHAR_BIT * sizeof(sChromeOnlyNativeProperties.propertyInfoCount),
16726
    "We have a property info count that is oversized");
16727
16728
static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
16729
  {
16730
    "Function",
16731
    JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
16732
    &sBoringInterfaceObjectClassClassOps,
16733
    JS_NULL_CLASS_SPEC,
16734
    JS_NULL_CLASS_EXT,
16735
    &sInterfaceObjectClassObjectOps
16736
  },
16737
  eInterface,
16738
  true,
16739
  prototypes::id::Window,
16740
  PrototypeTraits<prototypes::id::Window>::Depth,
16741
  sNativePropertyHooks,
16742
  "function Window() {\n    [native code]\n}",
16743
  EventTarget_Binding::GetConstructorObject
16744
};
16745
16746
static bool
16747
_resolve(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, bool* resolvedp)
16748
0
{
16749
0
  if (!ResolveGlobal(cx, obj, id, resolvedp)) {
16750
0
    return false;
16751
0
  }
16752
0
  if (*resolvedp) {
16753
0
    return true;
16754
0
  }
16755
0
16756
0
  nsGlobalWindowInner* self = UnwrapPossiblyNotInitializedDOMObject<nsGlobalWindowInner>(obj);
16757
0
  JS::Rooted<JS::PropertyDescriptor> desc(cx);
16758
0
  if (!self->DoResolve(cx, obj, id, &desc)) {
16759
0
    return false;
16760
0
  }
16761
0
  if (!desc.object()) {
16762
0
    return true;
16763
0
  }
16764
0
  // If desc.value() is undefined, then the DoResolve call
16765
0
  // has already defined it on the object.  Don't try to also
16766
0
  // define it.
16767
0
  if (!desc.value().isUndefined()) {
16768
0
    desc.attributesRef() |= JSPROP_RESOLVING;
16769
0
    if (!JS_DefinePropertyById(cx, obj, id, desc)) {
16770
0
      return false;
16771
0
    }
16772
0
  }
16773
0
  *resolvedp = true;
16774
0
  return true;
16775
0
}
16776
16777
static bool
16778
_mayResolve(const JSAtomState& names, jsid id, JSObject* maybeObj)
16779
0
{
16780
0
  if (MayResolveGlobal(names, id, maybeObj)) {
16781
0
    return true;
16782
0
  }
16783
0
16784
0
  return nsGlobalWindowInner::MayResolve(id);
16785
0
}
16786
16787
static bool
16788
_newEnumerate(JSContext* cx, JS::Handle<JSObject*> obj, JS::AutoIdVector& properties, bool enumerableOnly)
16789
0
{
16790
0
  if (!EnumerateGlobal(cx, obj, properties, enumerableOnly)) {
16791
0
    return false;
16792
0
  }
16793
0
16794
0
  nsGlobalWindowInner* self;
16795
0
  JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
16796
0
  {
16797
0
    nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindowInner>(&rootSelf, self);
16798
0
    if (NS_FAILED(rv)) {
16799
0
      return ThrowErrorMessage(cx, MSG_THIS_DOES_NOT_IMPLEMENT_INTERFACE, "Value", "Window");
16800
0
    }
16801
0
  }
16802
0
  FastErrorResult rv;
16803
0
  self->GetOwnPropertyNames(cx, properties, enumerableOnly, rv);
16804
0
  if (rv.MaybeSetPendingException(cx)) {
16805
0
    return false;
16806
0
  }
16807
0
  return true;
16808
0
}
16809
16810
static JSObject*
16811
GetNamedPropertiesObject(JSContext* aCx)
16812
0
{
16813
0
  /* Make sure our global is sane.  Hopefully we can remove this sometime */
16814
0
  JSObject* global = JS::CurrentGlobalOrNull(aCx);
16815
0
  if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
16816
0
    return nullptr;
16817
0
  }
16818
0
16819
0
  /* Check to see whether the named properties object has already been created */
16820
0
  ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
16821
0
16822
0
  JS::Heap<JSObject*>& namedPropertiesObject = protoAndIfaceCache.EntrySlotOrCreate(namedpropertiesobjects::id::Window);
16823
0
  if (!namedPropertiesObject) {
16824
0
    JS::Rooted<JSObject*> parentProto(aCx, EventTarget_Binding::GetProtoObjectHandle(aCx));
16825
0
    if (!parentProto) {
16826
0
      return nullptr;
16827
0
    }
16828
0
    namedPropertiesObject = nsGlobalWindowInner::CreateNamedPropertiesObject(aCx, parentProto);
16829
0
    DebugOnly<const DOMIfaceAndProtoJSClass*> clasp =
16830
0
      DOMIfaceAndProtoJSClass::FromJSClass(js::GetObjectClass(namedPropertiesObject));
16831
0
    MOZ_ASSERT(clasp->mType == eNamedPropertiesObject,
16832
0
               "Expected nsGlobalWindowInner::CreateNamedPropertiesObject to return a named properties object");
16833
0
    MOZ_ASSERT(clasp->mNativeHooks,
16834
0
               "The named properties object for nsGlobalWindowInner should have NativePropertyHooks.");
16835
0
    MOZ_ASSERT(!clasp->mNativeHooks->mResolveOwnProperty,
16836
0
               "Shouldn't resolve the properties of the named properties object for nsGlobalWindowInner for Xrays.");
16837
0
    MOZ_ASSERT(!clasp->mNativeHooks->mEnumerateOwnProperties,
16838
0
               "Shouldn't enumerate the properties of the named properties object for nsGlobalWindowInner for Xrays.");
16839
0
  }
16840
0
  return namedPropertiesObject.get();
16841
0
}
16842
16843
static const DOMIfaceAndProtoJSClass sPrototypeClass = {
16844
  {
16845
    "WindowPrototype",
16846
    JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
16847
    JS_NULL_CLASS_OPS,
16848
    JS_NULL_CLASS_SPEC,
16849
    JS_NULL_CLASS_EXT,
16850
    JS_NULL_OBJECT_OPS
16851
  },
16852
  eGlobalInterfacePrototype,
16853
  false,
16854
  prototypes::id::Window,
16855
  PrototypeTraits<prototypes::id::Window>::Depth,
16856
  sNativePropertyHooks,
16857
  "[object WindowPrototype]",
16858
  GetNamedPropertiesObject
16859
};
16860
16861
static const js::ClassOps sClassOps = {
16862
  nullptr, /* addProperty */
16863
  nullptr,               /* delProperty */
16864
  nullptr,               /* enumerate */
16865
  _newEnumerate, /* newEnumerate */
16866
  _resolve, /* resolve */
16867
  _mayResolve, /* mayResolve */
16868
  _finalize, /* finalize */
16869
  nullptr, /* call */
16870
  nullptr,               /* hasInstance */
16871
  nullptr,               /* construct */
16872
  JS_GlobalObjectTraceHook, /* trace */
16873
};
16874
16875
static const js::ClassExtension sClassExtension = {
16876
  nullptr, /* weakmapKeyDelegateOp */
16877
  _objectMoved /* objectMovedOp */
16878
};
16879
16880
static const DOMJSClass sClass = {
16881
  { "Window",
16882
    JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_DOM_GLOBAL | JSCLASS_GLOBAL_FLAGS_WITH_SLOTS(DOM_GLOBAL_SLOTS),
16883
    &sClassOps,
16884
    JS_NULL_CLASS_SPEC,
16885
    &sClassExtension,
16886
    JS_NULL_OBJECT_OPS
16887
  },
16888
  { 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 },
16889
  IsBaseOf<nsISupports, nsGlobalWindowInner >::value,
16890
  sNativePropertyHooks,
16891
  FindAssociatedGlobalForNative<nsGlobalWindowInner>::Get,
16892
  GetProtoObjectHandle,
16893
  GetCCParticipant<nsGlobalWindowInner>::Get()
16894
};
16895
static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
16896
              "Must have the right minimal number of reserved slots.");
16897
static_assert(JSCLASS_GLOBAL_APPLICATION_SLOTS >= 5,
16898
              "Must have enough reserved slots.");
16899
16900
const JSClass*
16901
GetJSClass()
16902
0
{
16903
0
  return sClass.ToJSClass();
16904
0
}
16905
16906
static bool
16907
UpdateMemberSlots(JSContext* aCx, JS::Handle<JSObject*> aWrapper, nsGlobalWindowInner* aObject)
16908
0
{
16909
0
  JS::Rooted<JS::Value> temp(aCx);
16910
0
  JSJitGetterCallArgs args(&temp);
16911
0
16912
0
  static_assert((DOM_INSTANCE_RESERVED_SLOTS + 2) < js::shadow::Object::MAX_FIXED_SLOTS,
16913
0
                "Not enough fixed slots to fit 'Window.document.  Ion's visitGetDOMMemberV/visitGetDOMMemberT assume StoreInSlot things are all in fixed slots.");
16914
0
  if (!get_document(aCx, aWrapper, aObject, args)) {
16915
0
    return false;
16916
0
  }
16917
0
  // Getter handled setting our reserved slots
16918
0
16919
0
  static_assert((DOM_INSTANCE_RESERVED_SLOTS + 3) < js::shadow::Object::MAX_FIXED_SLOTS,
16920
0
                "Not enough fixed slots to fit 'Window.performance.  Ion's visitGetDOMMemberV/visitGetDOMMemberT assume StoreInSlot things are all in fixed slots.");
16921
0
  if (!get_performance(aCx, aWrapper, aObject, args)) {
16922
0
    return false;
16923
0
  }
16924
0
  // Getter handled setting our reserved slots
16925
0
16926
0
  return true;
16927
0
}
16928
16929
bool
16930
Wrap(JSContext* aCx, nsGlobalWindowInner* aObject, nsWrapperCache* aCache, JS::RealmOptions& aOptions, JSPrincipals* aPrincipal, bool aInitStandardClasses, JS::MutableHandle<JSObject*> aReflector)
16931
0
{
16932
0
  MOZ_ASSERT(static_cast<nsGlobalWindowInner*>(aObject) ==
16933
0
             reinterpret_cast<nsGlobalWindowInner*>(aObject),
16934
0
             "Multiple inheritance for nsGlobalWindowInner is broken.");
16935
0
  MOZ_ASSERT(static_cast<mozilla::dom::EventTarget*>(aObject) ==
16936
0
             reinterpret_cast<mozilla::dom::EventTarget*>(aObject),
16937
0
             "Multiple inheritance for mozilla::dom::EventTarget is broken.");
16938
0
  MOZ_ASSERT(ToSupportsIsCorrect(aObject));
16939
0
  MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
16940
0
             "nsISupports must be on our primary inheritance chain");
16941
0
16942
0
  if (!CreateGlobal<nsGlobalWindowInner, GetProtoObjectHandle>(aCx,
16943
0
                                   aObject,
16944
0
                                   aCache,
16945
0
                                   sClass.ToJSClass(),
16946
0
                                   aOptions,
16947
0
                                   aPrincipal,
16948
0
                                   aInitStandardClasses,
16949
0
                                   aReflector)) {
16950
0
    aCache->ReleaseWrapper(aObject);
16951
0
    aCache->ClearWrapper();
16952
0
    return false;
16953
0
  }
16954
0
16955
0
  // aReflector is a new global, so has a new realm.  Enter it
16956
0
  // before doing anything with it.
16957
0
  JSAutoRealm ar(aCx, aReflector);
16958
0
16959
0
  if (!DefineProperties(aCx, aReflector, sNativeProperties.Upcast(), nsContentUtils::ThreadsafeIsSystemCaller(aCx) ? sChromeOnlyNativeProperties.Upcast() : nullptr)) {
16960
0
    aCache->ReleaseWrapper(aObject);
16961
0
    aCache->ClearWrapper();
16962
0
    return false;
16963
0
  }
16964
0
16965
0
  if (!DefineUnforgeableAttributes(aCx, aReflector, sUnforgeableAttributes)) {
16966
0
    aCache->ReleaseWrapper(aObject);
16967
0
    aCache->ClearWrapper();
16968
0
    return false;
16969
0
  }
16970
0
16971
0
  if (!UpdateMemberSlots(aCx, aReflector, aObject)) {
16972
0
    aCache->ReleaseWrapper(aObject);
16973
0
    aCache->ClearWrapper();
16974
0
    return false;
16975
0
  }
16976
0
16977
0
  return true;
16978
0
}
16979
16980
static bool
16981
ResolveOwnPropertyViaResolve(JSContext* cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::MutableHandle<JS::PropertyDescriptor> desc)
16982
0
{
16983
0
  nsGlobalWindowInner* self;
16984
0
  JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
16985
0
  {
16986
0
    nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindowInner>(&rootSelf, self);
16987
0
    if (NS_FAILED(rv)) {
16988
0
      return ThrowErrorMessage(cx, MSG_THIS_DOES_NOT_IMPLEMENT_INTERFACE, "Value", "Window");
16989
0
    }
16990
0
  }
16991
0
  {
16992
0
    // Since we're dealing with an Xray, do the resolve on the
16993
0
    // underlying object first.  That gives it a chance to
16994
0
    // define properties on the actual object as needed, and
16995
0
    // then use the fact that it created the objects as a flag
16996
0
    // to avoid re-resolving the properties if someone deletes
16997
0
    // them.
16998
0
    JSAutoRealm ar(cx, obj);
16999
0
    JS_MarkCrossZoneId(cx, id);
17000
0
    JS::Rooted<JS::PropertyDescriptor> objDesc(cx);
17001
0
    if (!self->DoResolve(cx, obj, id, &objDesc)) {
17002
0
      return false;
17003
0
    }
17004
0
    // If desc.value() is undefined, then the DoResolve call
17005
0
    // has already defined the property on the object.  Don't
17006
0
    // try to also define it.
17007
0
    if (objDesc.object() &&
17008
0
        !objDesc.value().isUndefined() &&
17009
0
        !JS_DefinePropertyById(cx, obj, id, objDesc)) {
17010
0
      return false;
17011
0
    }
17012
0
  }
17013
0
  return self->DoResolve(cx, wrapper, id, desc);
17014
0
}
17015
17016
static bool
17017
EnumerateOwnPropertiesViaGetOwnPropertyNames(JSContext* cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> obj, JS::AutoIdVector& props)
17018
0
{
17019
0
  nsGlobalWindowInner* self;
17020
0
  JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
17021
0
  {
17022
0
    nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindowInner>(&rootSelf, self);
17023
0
    if (NS_FAILED(rv)) {
17024
0
      return ThrowErrorMessage(cx, MSG_THIS_DOES_NOT_IMPLEMENT_INTERFACE, "Value", "Window");
17025
0
    }
17026
0
  }
17027
0
  FastErrorResult rv;
17028
0
  // This wants all own props, not just enumerable ones.
17029
0
  self->GetOwnPropertyNames(cx, props, false, rv);
17030
0
  if (rv.MaybeSetPendingException(cx)) {
17031
0
    return false;
17032
0
  }
17033
0
  return true;
17034
0
}
17035
17036
// This may allocate too many slots, because we only really need
17037
// slots for our non-interface-typed members that we cache.  But
17038
// allocating slots only for those would make the slot index
17039
// computations much more complicated, so let's do this the simple
17040
// way for now.
17041
DEFINE_XRAY_EXPANDO_CLASS(static, sXrayExpandoObjectClass, 4);
17042
17043
const NativePropertyHooks sNativePropertyHooks[] = { {
17044
  ResolveOwnPropertyViaResolve,
17045
  EnumerateOwnPropertiesViaGetOwnPropertyNames,
17046
  nullptr,
17047
  { sNativeProperties.Upcast(), sChromeOnlyNativeProperties.Upcast() },
17048
  prototypes::id::Window,
17049
  constructors::id::Window,
17050
  EventTarget_Binding::sNativePropertyHooks,
17051
  &sXrayExpandoObjectClass
17052
} };
17053
17054
bool
17055
ClearCachedDocumentValue(JSContext* aCx, nsGlobalWindowInner* aObject)
17056
0
{
17057
0
  JS::Rooted<JSObject*> obj(aCx);
17058
0
  obj = aObject->GetWrapper();
17059
0
  if (!obj) {
17060
0
    return true;
17061
0
  }
17062
0
  JS::Rooted<JS::Value> oldValue(aCx, js::GetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 2)));
17063
0
  js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 2), JS::UndefinedValue());
17064
0
  xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 2));
17065
0
  JS::Rooted<JS::Value> temp(aCx);
17066
0
  JSJitGetterCallArgs args(&temp);
17067
0
  JSAutoRealm ar(aCx, obj);
17068
0
  if (!get_document(aCx, obj, aObject, args)) {
17069
0
    js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 2), oldValue);
17070
0
    return false;
17071
0
  }
17072
0
  return true;
17073
0
}
17074
17075
bool
17076
ClearCachedPerformanceValue(JSContext* aCx, nsGlobalWindowInner* aObject)
17077
0
{
17078
0
  JS::Rooted<JSObject*> obj(aCx);
17079
0
  obj = aObject->GetWrapper();
17080
0
  if (!obj) {
17081
0
    return true;
17082
0
  }
17083
0
  JS::Rooted<JS::Value> oldValue(aCx, js::GetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 3)));
17084
0
  js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 3), JS::UndefinedValue());
17085
0
  xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 3));
17086
0
  JS::Rooted<JS::Value> temp(aCx);
17087
0
  JSJitGetterCallArgs args(&temp);
17088
0
  JSAutoRealm ar(aCx, obj);
17089
0
  if (!get_performance(aCx, obj, aObject, args)) {
17090
0
    js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 3), oldValue);
17091
0
    return false;
17092
0
  }
17093
0
  return true;
17094
0
}
17095
17096
void
17097
CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
17098
0
{
17099
0
  JS::Rooted<JSObject*> parentProto(aCx, GetNamedPropertiesObject(aCx));
17100
0
  if (!parentProto) {
17101
0
    return;
17102
0
  }
17103
0
17104
0
  JS::Handle<JSObject*> constructorProto(EventTarget_Binding::GetConstructorObjectHandle(aCx));
17105
0
  if (!constructorProto) {
17106
0
    return;
17107
0
  }
17108
0
17109
0
  static bool sIdsInited = false;
17110
0
  if (!sIdsInited && NS_IsMainThread()) {
17111
0
    if (!InitIds(aCx, sNativeProperties.Upcast())) {
17112
0
      return;
17113
0
    }
17114
0
    if (!InitIds(aCx, sChromeOnlyNativeProperties.Upcast())) {
17115
0
      return;
17116
0
    }
17117
0
    sIdsInited = true;
17118
0
  }
17119
0
17120
0
  static bool sPrefCachesInited = false;
17121
0
  if (!sPrefCachesInited && NS_IsMainThread()) {
17122
0
    sPrefCachesInited = true;
17123
0
    Preferences::AddBoolVarCache(&sAttributes[3].disablers->enabled, "browser.cache.offline.enable");
17124
0
    Preferences::AddBoolVarCache(&sAttributes[4].disablers->enabled, "dom.manifest.onappinstalled");
17125
0
    Preferences::AddBoolVarCache(&sAttributes[8].disablers->enabled, "dom.vr.enabled");
17126
0
    Preferences::AddBoolVarCache(&sAttributes[9].disablers->enabled, "dom.paintWorklet.enabled");
17127
0
    Preferences::AddBoolVarCache(&sAttributes[11].disablers->enabled, "dom.visualviewport.enabled");
17128
0
    Preferences::AddBoolVarCache(&sAttributes[13].disablers->enabled, "dom.select_events.enabled");
17129
0
    Preferences::AddBoolVarCache(&sAttributes[15].disablers->enabled, "dom.w3c_pointer_events.enabled");
17130
0
    Preferences::AddBoolVarCache(&sAttributes[17].disablers->enabled, "security.webauth.u2f");
17131
0
    Preferences::AddBoolVarCache(&sAttributes[19].disablers->enabled, "media.webspeech.synth.enabled");
17132
0
    Preferences::AddBoolVarCache(&sAttributes[21].disablers->enabled, "dom.webgpu.enable");
17133
0
  }
17134
0
17135
0
  JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::Window);
17136
0
  JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::Window);
17137
0
  dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
17138
0
                              &sPrototypeClass.mBase, protoCache,
17139
0
                              nullptr,
17140
0
                              constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
17141
0
                              interfaceCache,
17142
0
                              sNativeProperties.Upcast(),
17143
0
                              sChromeOnlyNativeProperties.Upcast(),
17144
0
                              "Window", aDefineOnGlobal,
17145
0
                              nullptr,
17146
0
                              true);
17147
0
17148
0
  if (*&aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::Window)) {
17149
0
    bool succeeded;
17150
0
    JS::Handle<JSObject*> prot = GetProtoObjectHandle(aCx);
17151
0
    if (!JS_SetImmutablePrototype(aCx, prot, &succeeded)) {
17152
0
      *protoCache = nullptr;
17153
0
      if (interfaceCache) {
17154
0
        *interfaceCache = nullptr;
17155
0
      }
17156
0
      return;
17157
0
    }
17158
0
17159
0
    MOZ_ASSERT(succeeded,
17160
0
               "making a fresh prototype object's [[Prototype]] "
17161
0
               "immutable can internally fail, but it should "
17162
0
               "never be unsuccessful");
17163
0
  }
17164
0
}
17165
17166
JSObject*
17167
GetConstructorObject(JSContext* aCx)
17168
0
{
17169
0
  return GetConstructorObjectHandle(aCx);
17170
0
}
17171
17172
} // namespace Window_Binding
17173
17174
17175
17176
} // namespace dom
17177
} // namespace mozilla