Line data Source code
1 : /* THIS FILE IS AUTOGENERATED FROM Window.webidl BY Codegen.py - DO NOT EDIT */
2 :
3 : #include "AtomList.h"
4 : #include "Crypto.h"
5 : #include "CustomElementRegistry.h"
6 : #include "EventHandlerBinding.h"
7 : #include "EventTargetBinding.h"
8 : #include "ExternalBinding.h"
9 : #include "FunctionBinding.h"
10 : #include "ImageBitmapBinding.h"
11 : #include "MozSelfSupportBinding.h"
12 : #include "Navigator.h"
13 : #include "RequestBinding.h"
14 : #include "WindowBinding.h"
15 : #include "WrapperFactory.h"
16 : #include "XrayWrapper.h"
17 : #include "jsapi.h"
18 : #include "mozilla/FloatingPoint.h"
19 : #include "mozilla/OwningNonNull.h"
20 : #include "mozilla/Preferences.h"
21 : #include "mozilla/UseCounter.h"
22 : #include "mozilla/dom/BarProps.h"
23 : #include "mozilla/dom/BindingUtils.h"
24 : #include "mozilla/dom/CustomElementRegistry.h"
25 : #include "mozilla/dom/DOMJSClass.h"
26 : #include "mozilla/dom/Element.h"
27 : #include "mozilla/dom/Event.h"
28 : #include "mozilla/dom/IDBFactory.h"
29 : #include "mozilla/dom/IdleDeadline.h"
30 : #include "mozilla/dom/IntlUtils.h"
31 : #include "mozilla/dom/Location.h"
32 : #include "mozilla/dom/MediaQueryList.h"
33 : #include "mozilla/dom/NonRefcountedDOMObject.h"
34 : #include "mozilla/dom/Nullable.h"
35 : #include "mozilla/dom/Performance.h"
36 : #include "mozilla/dom/PrimitiveConversions.h"
37 : #include "mozilla/dom/Promise.h"
38 : #include "mozilla/dom/ScriptSettings.h"
39 : #include "mozilla/dom/Selection.h"
40 : #include "mozilla/dom/SimpleGlobalObject.h"
41 : #include "mozilla/dom/SpeechSynthesis.h"
42 : #include "mozilla/dom/Storage.h"
43 : #include "mozilla/dom/ToJSValue.h"
44 : #include "mozilla/dom/U2F.h"
45 : #include "mozilla/dom/UnionConversions.h"
46 : #include "mozilla/dom/Worklet.h"
47 : #include "mozilla/dom/XrayExpandoClass.h"
48 : #include "mozilla/dom/cache/CacheStorage.h"
49 : #include "nsContentUtils.h"
50 : #include "nsGenericHTMLElement.h"
51 : #include "nsGlobalWindow.h"
52 : #include "nsHistory.h"
53 : #include "nsIBrowserDOMWindow.h"
54 : #include "nsICSSDeclaration.h"
55 : #include "nsIControllers.h"
56 : #include "nsIDOMOfflineResourceList.h"
57 : #include "nsIDocument.h"
58 : #include "nsIMessageManager.h"
59 : #include "nsISupports.h"
60 : #include "nsJSUtils.h"
61 : #include "nsPIDOMWindow.h"
62 : #include "nsScreen.h"
63 : #include "nsWindowRoot.h"
64 : #include "xpcjsid.h"
65 :
66 : namespace mozilla {
67 : namespace dom {
68 :
69 : namespace ScrollBehaviorValues {
70 : extern const EnumEntry strings[4] = {
71 : {"auto", 4},
72 : {"instant", 7},
73 : {"smooth", 6},
74 : { nullptr, 0 }
75 : };
76 : } // namespace ScrollBehaviorValues
77 :
78 : bool
79 0 : ToJSValue(JSContext* aCx, ScrollBehavior aArgument, JS::MutableHandle<JS::Value> aValue)
80 : {
81 0 : MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(ScrollBehaviorValues::strings));
82 : JSString* resultStr =
83 0 : JS_NewStringCopyN(aCx, ScrollBehaviorValues::strings[uint32_t(aArgument)].value,
84 0 : ScrollBehaviorValues::strings[uint32_t(aArgument)].length);
85 0 : if (!resultStr) {
86 0 : return false;
87 : }
88 0 : aValue.setString(resultStr);
89 0 : return true;
90 : }
91 :
92 :
93 : void
94 0 : ImplCycleCollectionTraverse(nsCycleCollectionTraversalCallback& aCallback, OwningExternalOrWindowProxy& aUnion, const char* aName, uint32_t aFlags)
95 : {
96 0 : if (aUnion.IsExternal()) {
97 0 : ImplCycleCollectionTraverse(aCallback, aUnion.GetAsExternal(), "mExternal", aFlags);
98 0 : } else if (aUnion.IsWindowProxy()) {
99 0 : ImplCycleCollectionTraverse(aCallback, aUnion.GetAsWindowProxy(), "mWindowProxy", aFlags);
100 : }
101 0 : }
102 :
103 :
104 : void
105 0 : ImplCycleCollectionUnlink(OwningExternalOrWindowProxy& aUnion)
106 : {
107 0 : aUnion.Uninit();
108 0 : }
109 :
110 :
111 : bool
112 0 : ExternalOrWindowProxy::ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const
113 : {
114 0 : switch (mType) {
115 : case eUninitialized: {
116 0 : return false;
117 : break;
118 : }
119 : case eExternal: {
120 0 : if (!GetOrCreateDOMReflector(cx, mValue.mExternal.Value(), rval)) {
121 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
122 0 : return false;
123 : }
124 0 : return true;
125 : break;
126 : }
127 : case eWindowProxy: {
128 0 : if (!WrapObject(cx, mValue.mWindowProxy.Value(), rval)) {
129 0 : return false;
130 : }
131 0 : return true;
132 : break;
133 : }
134 : default: {
135 0 : return false;
136 : break;
137 : }
138 : }
139 :
140 : return false;
141 : }
142 :
143 :
144 : OwningNonNull<mozilla::dom::External>&
145 0 : OwningExternalOrWindowProxy::RawSetAsExternal()
146 : {
147 0 : if (mType == eExternal) {
148 0 : return mValue.mExternal.Value();
149 : }
150 0 : MOZ_ASSERT(mType == eUninitialized);
151 0 : mType = eExternal;
152 0 : return mValue.mExternal.SetValue();
153 : }
154 :
155 : OwningNonNull<mozilla::dom::External>&
156 0 : OwningExternalOrWindowProxy::SetAsExternal()
157 : {
158 0 : if (mType == eExternal) {
159 0 : return mValue.mExternal.Value();
160 : }
161 0 : Uninit();
162 0 : mType = eExternal;
163 0 : return mValue.mExternal.SetValue();
164 : }
165 :
166 : bool
167 0 : OwningExternalOrWindowProxy::TrySetToExternal(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl)
168 : {
169 0 : tryNext = false;
170 : { // scope for memberSlot
171 0 : OwningNonNull<mozilla::dom::External>& memberSlot = RawSetAsExternal();
172 : static_assert(IsRefcounted<mozilla::dom::External>::value, "We can only store refcounted classes.");{
173 0 : nsresult rv = UnwrapObject<prototypes::id::External, mozilla::dom::External>(value, memberSlot);
174 0 : if (NS_FAILED(rv)) {
175 0 : DestroyExternal();
176 0 : tryNext = true;
177 0 : return true;
178 : }
179 : }
180 : }
181 0 : return true;
182 : }
183 :
184 : void
185 0 : OwningExternalOrWindowProxy::DestroyExternal()
186 : {
187 0 : MOZ_ASSERT(IsExternal(), "Wrong type!");
188 0 : mValue.mExternal.Destroy();
189 0 : mType = eUninitialized;
190 0 : }
191 :
192 :
193 :
194 :
195 : RefPtr<nsPIDOMWindowOuter>&
196 0 : OwningExternalOrWindowProxy::RawSetAsWindowProxy()
197 : {
198 0 : if (mType == eWindowProxy) {
199 0 : return mValue.mWindowProxy.Value();
200 : }
201 0 : MOZ_ASSERT(mType == eUninitialized);
202 0 : mType = eWindowProxy;
203 0 : return mValue.mWindowProxy.SetValue();
204 : }
205 :
206 : RefPtr<nsPIDOMWindowOuter>&
207 0 : OwningExternalOrWindowProxy::SetAsWindowProxy()
208 : {
209 0 : if (mType == eWindowProxy) {
210 0 : return mValue.mWindowProxy.Value();
211 : }
212 0 : Uninit();
213 0 : mType = eWindowProxy;
214 0 : return mValue.mWindowProxy.SetValue();
215 : }
216 :
217 : bool
218 0 : OwningExternalOrWindowProxy::TrySetToWindowProxy(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl)
219 : {
220 0 : tryNext = false;
221 : { // scope for memberSlot
222 0 : RefPtr<nsPIDOMWindowOuter>& memberSlot = RawSetAsWindowProxy();
223 0 : static_assert(IsRefcounted<nsPIDOMWindowOuter>::value, "We can only store refcounted classes.");RefPtr<nsPIDOMWindowOuter> mWindowProxyHolder;
224 0 : JS::Rooted<JSObject*> source(cx, &value.toObject());
225 0 : if (NS_FAILED(UnwrapArg<nsPIDOMWindowOuter>(cx, source, getter_AddRefs(mWindowProxyHolder)))) {
226 0 : DestroyWindowProxy();
227 0 : tryNext = true;
228 0 : return true;
229 : }
230 0 : MOZ_ASSERT(mWindowProxyHolder);
231 0 : memberSlot = mWindowProxyHolder;
232 : }
233 0 : return true;
234 : }
235 :
236 : void
237 0 : OwningExternalOrWindowProxy::DestroyWindowProxy()
238 : {
239 0 : MOZ_ASSERT(IsWindowProxy(), "Wrong type!");
240 0 : mValue.mWindowProxy.Destroy();
241 0 : mType = eUninitialized;
242 0 : }
243 :
244 :
245 :
246 :
247 : void
248 0 : OwningExternalOrWindowProxy::Uninit()
249 : {
250 0 : switch (mType) {
251 : case eUninitialized: {
252 0 : break;
253 : }
254 : case eExternal: {
255 0 : DestroyExternal();
256 0 : break;
257 : }
258 : case eWindowProxy: {
259 0 : DestroyWindowProxy();
260 0 : break;
261 : }
262 : }
263 0 : }
264 :
265 : bool
266 0 : OwningExternalOrWindowProxy::ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const
267 : {
268 0 : switch (mType) {
269 : case eUninitialized: {
270 0 : return false;
271 : break;
272 : }
273 : case eExternal: {
274 0 : if (!GetOrCreateDOMReflector(cx, mValue.mExternal.Value(), rval)) {
275 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
276 0 : return false;
277 : }
278 0 : return true;
279 : break;
280 : }
281 : case eWindowProxy: {
282 0 : if (!WrapObject(cx, mValue.mWindowProxy.Value(), rval)) {
283 0 : return false;
284 : }
285 0 : return true;
286 : break;
287 : }
288 : default: {
289 0 : return false;
290 : break;
291 : }
292 : }
293 :
294 : return false;
295 : }
296 :
297 : void
298 0 : OwningExternalOrWindowProxy::TraceUnion(JSTracer* trc)
299 : {
300 0 : }
301 :
302 : OwningExternalOrWindowProxy&
303 0 : OwningExternalOrWindowProxy::operator=(const OwningExternalOrWindowProxy& aOther)
304 : {
305 0 : switch (aOther.mType) {
306 : case eUninitialized: {
307 0 : MOZ_ASSERT(mType == eUninitialized,
308 : "We need to destroy ourselves?");
309 0 : break;
310 : }
311 : case eExternal: {
312 0 : SetAsExternal() = aOther.GetAsExternal();
313 0 : break;
314 : }
315 : case eWindowProxy: {
316 0 : SetAsWindowProxy() = aOther.GetAsWindowProxy();
317 0 : break;
318 : }
319 : }
320 0 : return *this;
321 : }
322 :
323 :
324 :
325 0 : IdleRequestOptions::IdleRequestOptions()
326 : {
327 : // Safe to pass a null context if we pass a null value
328 0 : Init(nullptr, JS::NullHandleValue);
329 0 : }
330 :
331 :
332 :
333 : bool
334 1 : IdleRequestOptions::InitIds(JSContext* cx, IdleRequestOptionsAtoms* atomsCache)
335 : {
336 1 : MOZ_ASSERT(!*reinterpret_cast<jsid**>(atomsCache));
337 :
338 : // Initialize these in reverse order so that any failure leaves the first one
339 : // uninitialized.
340 1 : if (!atomsCache->timeout_id.init(cx, "timeout")) {
341 0 : return false;
342 : }
343 1 : return true;
344 : }
345 :
346 : bool
347 3 : IdleRequestOptions::Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription, bool passedToJSImpl)
348 : {
349 : // Passing a null JSContext is OK only if we're initing from null,
350 : // Since in that case we will not have to do any property gets
351 : // Also evaluate isNullOrUndefined in order to avoid false-positive
352 : // checkers by static analysis tools
353 3 : MOZ_ASSERT_IF(!cx, val.isNull() && val.isNullOrUndefined());
354 3 : IdleRequestOptionsAtoms* atomsCache = nullptr;
355 3 : if (cx) {
356 3 : atomsCache = GetAtomCache<IdleRequestOptionsAtoms>(cx);
357 3 : if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
358 0 : return false;
359 : }
360 : }
361 :
362 3 : if (!IsConvertibleToDictionary(val)) {
363 0 : return ThrowErrorMessage(cx, MSG_NOT_DICTIONARY, sourceDescription);
364 : }
365 :
366 3 : bool isNull = val.isNullOrUndefined();
367 : // We only need these if !isNull, in which case we have |cx|.
368 6 : Maybe<JS::Rooted<JSObject *> > object;
369 6 : Maybe<JS::Rooted<JS::Value> > temp;
370 3 : if (!isNull) {
371 2 : MOZ_ASSERT(cx);
372 2 : object.emplace(cx, &val.toObject());
373 2 : temp.emplace(cx);
374 : }
375 3 : if (!isNull) {
376 2 : if (!JS_GetPropertyById(cx, *object, atomsCache->timeout_id, temp.ptr())) {
377 0 : return false;
378 : }
379 : }
380 3 : if (!isNull && !temp->isUndefined()) {
381 2 : mTimeout.Construct();
382 2 : if (!ValueToPrimitive<uint32_t, eDefault>(cx, temp.ref(), &(mTimeout.Value()))) {
383 0 : return false;
384 : }
385 2 : mIsAnyMemberPresent = true;
386 : }
387 3 : return true;
388 : }
389 :
390 : bool
391 0 : IdleRequestOptions::Init(const nsAString& aJSON)
392 : {
393 0 : AutoJSAPI jsapi;
394 0 : JSObject* cleanGlobal = SimpleGlobalObject::Create(SimpleGlobalObject::GlobalType::BindingDetail);
395 0 : if (!cleanGlobal) {
396 0 : return false;
397 : }
398 0 : if (!jsapi.Init(cleanGlobal)) {
399 0 : return false;
400 : }
401 0 : JSContext* cx = jsapi.cx();
402 0 : JS::Rooted<JS::Value> json(cx);
403 0 : bool ok = ParseJSON(cx, aJSON, &json);
404 0 : NS_ENSURE_TRUE(ok, false);
405 0 : return Init(cx, json);
406 : }
407 :
408 : bool
409 0 : IdleRequestOptions::ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const
410 : {
411 0 : IdleRequestOptionsAtoms* atomsCache = GetAtomCache<IdleRequestOptionsAtoms>(cx);
412 0 : if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
413 0 : return false;
414 : }
415 :
416 0 : JS::Rooted<JSObject*> obj(cx, JS_NewPlainObject(cx));
417 0 : if (!obj) {
418 0 : return false;
419 : }
420 0 : rval.set(JS::ObjectValue(*obj));
421 :
422 0 : if (mTimeout.WasPassed()) {
423 : do {
424 : // block for our 'break' successCode and scope for 'temp' and 'currentValue'
425 0 : JS::Rooted<JS::Value> temp(cx);
426 0 : uint32_t const & currentValue = mTimeout.InternalValue();
427 0 : temp.setNumber(currentValue);
428 0 : if (!JS_DefinePropertyById(cx, obj, atomsCache->timeout_id, temp, JSPROP_ENUMERATE)) {
429 0 : return false;
430 : }
431 0 : break;
432 : } while(0);
433 : }
434 :
435 0 : return true;
436 : }
437 :
438 : bool
439 0 : IdleRequestOptions::ToJSON(nsAString& aJSON) const
440 : {
441 0 : AutoJSAPI jsapi;
442 0 : jsapi.Init();
443 0 : JSContext *cx = jsapi.cx();
444 : // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here
445 : // because we'll only be creating objects, in ways that have no
446 : // side-effects, followed by a call to JS::ToJSONMaybeSafely,
447 : // which likewise guarantees no side-effects for the sorts of
448 : // things we will pass it.
449 0 : JSAutoCompartment ac(cx, binding_detail::UnprivilegedJunkScopeOrWorkerGlobal());
450 0 : JS::Rooted<JS::Value> val(cx);
451 0 : if (!ToObjectInternal(cx, &val)) {
452 0 : return false;
453 : }
454 0 : JS::Rooted<JSObject*> obj(cx, &val.toObject());
455 0 : return StringifyToJSON(cx, obj, aJSON);
456 : }
457 :
458 : void
459 0 : IdleRequestOptions::TraceDictionary(JSTracer* trc)
460 : {
461 0 : }
462 :
463 : IdleRequestOptions&
464 0 : IdleRequestOptions::operator=(const IdleRequestOptions& aOther)
465 : {
466 0 : mTimeout.Reset();
467 0 : if (aOther.mTimeout.WasPassed()) {
468 0 : mTimeout.Construct(aOther.mTimeout.Value());
469 : }
470 0 : return *this;
471 : }
472 :
473 : namespace binding_detail {
474 : } // namespace binding_detail
475 :
476 :
477 :
478 0 : ScrollOptions::ScrollOptions()
479 : {
480 : // Safe to pass a null context if we pass a null value
481 0 : Init(nullptr, JS::NullHandleValue);
482 0 : }
483 :
484 :
485 :
486 : bool
487 0 : ScrollOptions::InitIds(JSContext* cx, ScrollOptionsAtoms* atomsCache)
488 : {
489 0 : MOZ_ASSERT(!*reinterpret_cast<jsid**>(atomsCache));
490 :
491 : // Initialize these in reverse order so that any failure leaves the first one
492 : // uninitialized.
493 0 : if (!atomsCache->behavior_id.init(cx, "behavior")) {
494 0 : return false;
495 : }
496 0 : return true;
497 : }
498 :
499 : bool
500 0 : ScrollOptions::Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription, bool passedToJSImpl)
501 : {
502 : // Passing a null JSContext is OK only if we're initing from null,
503 : // Since in that case we will not have to do any property gets
504 : // Also evaluate isNullOrUndefined in order to avoid false-positive
505 : // checkers by static analysis tools
506 0 : MOZ_ASSERT_IF(!cx, val.isNull() && val.isNullOrUndefined());
507 0 : ScrollOptionsAtoms* atomsCache = nullptr;
508 0 : if (cx) {
509 0 : atomsCache = GetAtomCache<ScrollOptionsAtoms>(cx);
510 0 : if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
511 0 : return false;
512 : }
513 : }
514 :
515 0 : if (!IsConvertibleToDictionary(val)) {
516 0 : return ThrowErrorMessage(cx, MSG_NOT_DICTIONARY, sourceDescription);
517 : }
518 :
519 0 : bool isNull = val.isNullOrUndefined();
520 : // We only need these if !isNull, in which case we have |cx|.
521 0 : Maybe<JS::Rooted<JSObject *> > object;
522 0 : Maybe<JS::Rooted<JS::Value> > temp;
523 0 : if (!isNull) {
524 0 : MOZ_ASSERT(cx);
525 0 : object.emplace(cx, &val.toObject());
526 0 : temp.emplace(cx);
527 : }
528 0 : if (!isNull) {
529 0 : if (!JS_GetPropertyById(cx, *object, atomsCache->behavior_id, temp.ptr())) {
530 0 : return false;
531 : }
532 : }
533 0 : if (!isNull && !temp->isUndefined()) {
534 : {
535 : int index;
536 0 : if (!FindEnumStringIndex<true>(cx, temp.ref(), ScrollBehaviorValues::strings, "ScrollBehavior", "'behavior' member of ScrollOptions", &index)) {
537 0 : return false;
538 : }
539 0 : MOZ_ASSERT(index >= 0);
540 0 : mBehavior = static_cast<ScrollBehavior>(index);
541 : }
542 : } else {
543 0 : mBehavior = ScrollBehavior::Auto;
544 : }
545 0 : mIsAnyMemberPresent = true;
546 0 : return true;
547 : }
548 :
549 : bool
550 0 : ScrollOptions::Init(const nsAString& aJSON)
551 : {
552 0 : AutoJSAPI jsapi;
553 0 : JSObject* cleanGlobal = SimpleGlobalObject::Create(SimpleGlobalObject::GlobalType::BindingDetail);
554 0 : if (!cleanGlobal) {
555 0 : return false;
556 : }
557 0 : if (!jsapi.Init(cleanGlobal)) {
558 0 : return false;
559 : }
560 0 : JSContext* cx = jsapi.cx();
561 0 : JS::Rooted<JS::Value> json(cx);
562 0 : bool ok = ParseJSON(cx, aJSON, &json);
563 0 : NS_ENSURE_TRUE(ok, false);
564 0 : return Init(cx, json);
565 : }
566 :
567 : bool
568 0 : ScrollOptions::ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const
569 : {
570 0 : ScrollOptionsAtoms* atomsCache = GetAtomCache<ScrollOptionsAtoms>(cx);
571 0 : if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
572 0 : return false;
573 : }
574 :
575 0 : JS::Rooted<JSObject*> obj(cx, JS_NewPlainObject(cx));
576 0 : if (!obj) {
577 0 : return false;
578 : }
579 0 : rval.set(JS::ObjectValue(*obj));
580 :
581 : do {
582 : // block for our 'break' successCode and scope for 'temp' and 'currentValue'
583 0 : JS::Rooted<JS::Value> temp(cx);
584 0 : ScrollBehavior const & currentValue = mBehavior;
585 0 : if (!ToJSValue(cx, currentValue, &temp)) {
586 0 : return false;
587 : }
588 0 : if (!JS_DefinePropertyById(cx, obj, atomsCache->behavior_id, temp, JSPROP_ENUMERATE)) {
589 0 : return false;
590 : }
591 0 : break;
592 : } while(0);
593 :
594 0 : return true;
595 : }
596 :
597 : bool
598 0 : ScrollOptions::ToJSON(nsAString& aJSON) const
599 : {
600 0 : AutoJSAPI jsapi;
601 0 : jsapi.Init();
602 0 : JSContext *cx = jsapi.cx();
603 : // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here
604 : // because we'll only be creating objects, in ways that have no
605 : // side-effects, followed by a call to JS::ToJSONMaybeSafely,
606 : // which likewise guarantees no side-effects for the sorts of
607 : // things we will pass it.
608 0 : JSAutoCompartment ac(cx, binding_detail::UnprivilegedJunkScopeOrWorkerGlobal());
609 0 : JS::Rooted<JS::Value> val(cx);
610 0 : if (!ToObjectInternal(cx, &val)) {
611 0 : return false;
612 : }
613 0 : JS::Rooted<JSObject*> obj(cx, &val.toObject());
614 0 : return StringifyToJSON(cx, obj, aJSON);
615 : }
616 :
617 : void
618 0 : ScrollOptions::TraceDictionary(JSTracer* trc)
619 : {
620 0 : }
621 :
622 : ScrollOptions&
623 0 : ScrollOptions::operator=(const ScrollOptions& aOther)
624 : {
625 0 : mBehavior = aOther.mBehavior;
626 0 : return *this;
627 : }
628 :
629 : namespace binding_detail {
630 : } // namespace binding_detail
631 :
632 :
633 :
634 0 : ScrollToOptions::ScrollToOptions()
635 0 : : ScrollOptions(FastDictionaryInitializer())
636 : {
637 : // Safe to pass a null context if we pass a null value
638 0 : Init(nullptr, JS::NullHandleValue);
639 0 : }
640 :
641 :
642 :
643 : bool
644 0 : ScrollToOptions::InitIds(JSContext* cx, ScrollToOptionsAtoms* atomsCache)
645 : {
646 0 : MOZ_ASSERT(!*reinterpret_cast<jsid**>(atomsCache));
647 :
648 : // Initialize these in reverse order so that any failure leaves the first one
649 : // uninitialized.
650 0 : if (!atomsCache->top_id.init(cx, "top") ||
651 0 : !atomsCache->left_id.init(cx, "left")) {
652 0 : return false;
653 : }
654 0 : return true;
655 : }
656 :
657 : bool
658 0 : ScrollToOptions::Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription, bool passedToJSImpl)
659 : {
660 : // Passing a null JSContext is OK only if we're initing from null,
661 : // Since in that case we will not have to do any property gets
662 : // Also evaluate isNullOrUndefined in order to avoid false-positive
663 : // checkers by static analysis tools
664 0 : MOZ_ASSERT_IF(!cx, val.isNull() && val.isNullOrUndefined());
665 0 : ScrollToOptionsAtoms* atomsCache = nullptr;
666 0 : if (cx) {
667 0 : atomsCache = GetAtomCache<ScrollToOptionsAtoms>(cx);
668 0 : if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
669 0 : return false;
670 : }
671 : }
672 :
673 : // Per spec, we init the parent's members first
674 0 : if (!ScrollOptions::Init(cx, val)) {
675 0 : return false;
676 : }
677 :
678 0 : bool isNull = val.isNullOrUndefined();
679 : // We only need these if !isNull, in which case we have |cx|.
680 0 : Maybe<JS::Rooted<JSObject *> > object;
681 0 : Maybe<JS::Rooted<JS::Value> > temp;
682 0 : if (!isNull) {
683 0 : MOZ_ASSERT(cx);
684 0 : object.emplace(cx, &val.toObject());
685 0 : temp.emplace(cx);
686 : }
687 0 : if (!isNull) {
688 0 : if (!JS_GetPropertyById(cx, *object, atomsCache->left_id, temp.ptr())) {
689 0 : return false;
690 : }
691 : }
692 0 : if (!isNull && !temp->isUndefined()) {
693 0 : mLeft.Construct();
694 0 : if (!ValueToPrimitive<double, eDefault>(cx, temp.ref(), &(mLeft.Value()))) {
695 0 : return false;
696 : }
697 0 : mIsAnyMemberPresent = true;
698 : }
699 :
700 0 : if (!isNull) {
701 0 : if (!JS_GetPropertyById(cx, *object, atomsCache->top_id, temp.ptr())) {
702 0 : return false;
703 : }
704 : }
705 0 : if (!isNull && !temp->isUndefined()) {
706 0 : mTop.Construct();
707 0 : if (!ValueToPrimitive<double, eDefault>(cx, temp.ref(), &(mTop.Value()))) {
708 0 : return false;
709 : }
710 0 : mIsAnyMemberPresent = true;
711 : }
712 0 : return true;
713 : }
714 :
715 : bool
716 0 : ScrollToOptions::ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const
717 : {
718 0 : ScrollToOptionsAtoms* atomsCache = GetAtomCache<ScrollToOptionsAtoms>(cx);
719 0 : if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
720 0 : return false;
721 : }
722 :
723 : // Per spec, we define the parent's members first
724 0 : if (!ScrollOptions::ToObjectInternal(cx, rval)) {
725 0 : return false;
726 : }
727 0 : JS::Rooted<JSObject*> obj(cx, &rval.toObject());
728 :
729 0 : if (mLeft.WasPassed()) {
730 : do {
731 : // block for our 'break' successCode and scope for 'temp' and 'currentValue'
732 0 : JS::Rooted<JS::Value> temp(cx);
733 0 : double const & currentValue = mLeft.InternalValue();
734 0 : temp.set(JS_NumberValue(double(currentValue)));
735 0 : if (!JS_DefinePropertyById(cx, obj, atomsCache->left_id, temp, JSPROP_ENUMERATE)) {
736 0 : return false;
737 : }
738 0 : break;
739 : } while(0);
740 : }
741 :
742 0 : if (mTop.WasPassed()) {
743 : do {
744 : // block for our 'break' successCode and scope for 'temp' and 'currentValue'
745 0 : JS::Rooted<JS::Value> temp(cx);
746 0 : double const & currentValue = mTop.InternalValue();
747 0 : temp.set(JS_NumberValue(double(currentValue)));
748 0 : if (!JS_DefinePropertyById(cx, obj, atomsCache->top_id, temp, JSPROP_ENUMERATE)) {
749 0 : return false;
750 : }
751 0 : break;
752 : } while(0);
753 : }
754 :
755 0 : return true;
756 : }
757 :
758 : void
759 0 : ScrollToOptions::TraceDictionary(JSTracer* trc)
760 : {
761 0 : ScrollOptions::TraceDictionary(trc);
762 0 : }
763 :
764 : ScrollToOptions&
765 0 : ScrollToOptions::operator=(const ScrollToOptions& aOther)
766 : {
767 0 : ScrollOptions::operator=(aOther);
768 0 : mLeft.Reset();
769 0 : if (aOther.mLeft.WasPassed()) {
770 0 : mLeft.Construct(aOther.mLeft.Value());
771 : }
772 0 : mTop.Reset();
773 0 : if (aOther.mTop.WasPassed()) {
774 0 : mTop.Construct(aOther.mTop.Value());
775 : }
776 0 : return *this;
777 : }
778 :
779 : namespace binding_detail {
780 : } // namespace binding_detail
781 :
782 :
783 : void
784 4 : FrameRequestCallback::Call(JSContext* cx, JS::Handle<JS::Value> aThisVal, double time, ErrorResult& aRv)
785 : {
786 8 : JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
787 8 : JS::AutoValueVector argv(cx);
788 4 : if (!argv.resize(1)) {
789 0 : aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
790 0 : return;
791 : }
792 4 : unsigned argc = 1;
793 :
794 : do {
795 4 : argv[0].set(JS_NumberValue(double(time)));
796 4 : break;
797 : } while (0);
798 :
799 8 : JS::Rooted<JS::Value> callable(cx, JS::ObjectValue(*mCallback));
800 12 : if (!JS::Call(cx, aThisVal, callable,
801 8 : JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
802 0 : aRv.NoteJSContextException(cx);
803 0 : return;
804 : }
805 : }
806 :
807 :
808 :
809 : void
810 1 : IdleRequestCallback::Call(JSContext* cx, JS::Handle<JS::Value> aThisVal, IdleDeadline& deadline, ErrorResult& aRv)
811 : {
812 2 : JS::Rooted<JS::Value> rval(cx, JS::UndefinedValue());
813 2 : JS::AutoValueVector argv(cx);
814 1 : if (!argv.resize(1)) {
815 0 : aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
816 0 : return;
817 : }
818 1 : unsigned argc = 1;
819 :
820 : do {
821 1 : if (!GetOrCreateDOMReflector(cx, deadline, argv[0])) {
822 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
823 0 : aRv.Throw(NS_ERROR_UNEXPECTED);
824 0 : return;
825 : }
826 1 : break;
827 : } while (0);
828 :
829 2 : JS::Rooted<JS::Value> callable(cx, JS::ObjectValue(*mCallback));
830 3 : if (!JS::Call(cx, aThisVal, callable,
831 2 : JS::HandleValueArray::subarray(argv, 0, argc), &rval)) {
832 0 : aRv.NoteJSContextException(cx);
833 0 : return;
834 : }
835 : }
836 :
837 :
838 :
839 : namespace binding_detail {
840 : } // namespace binding_detail
841 :
842 :
843 : namespace binding_detail {
844 : } // namespace binding_detail
845 :
846 :
847 : namespace ChromeWindowBinding {
848 :
849 : static bool
850 0 : _hasInstance(JSContext* cx, unsigned argc, JS::Value* vp)
851 : {
852 0 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
853 0 : if (!args.get(0).isObject()) {
854 0 : args.rval().setBoolean(false);
855 0 : return true;
856 : }
857 :
858 0 : JS::Rooted<JSObject*> instance(cx, &args[0].toObject());
859 :
860 0 : const DOMJSClass* domClass = GetDOMClass(js::UncheckedUnwrap(instance, /* stopAtWindowProxy = */ false));
861 0 : if (!domClass) {
862 : // Not a DOM object, so certainly not an instance of this interface
863 0 : args.rval().setBoolean(false);
864 0 : return true;
865 : }
866 :
867 0 : if (domClass->mInterfaceChain[PrototypeTraits<prototypes::id::Window>::Depth] == prototypes::id::Window) {
868 0 : args.rval().setBoolean(UnwrapDOMObject<nsGlobalWindow>(js::UncheckedUnwrap(instance, /* stopAtWindowProxy = */ false))->IsChromeWindow());
869 0 : return true;
870 : }
871 0 : args.rval().setBoolean(false);
872 0 : return true;
873 : }
874 :
875 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
876 : #if defined(__clang__)
877 : #pragma clang diagnostic push
878 : #pragma clang diagnostic ignored "-Wmissing-braces"
879 : #endif
880 : static const JSFunctionSpec sStaticMethods_specs[] = {
881 : JS_SYM_FNSPEC(hasInstance, _hasInstance, nullptr, 1, JSPROP_READONLY | JSPROP_PERMANENT, nullptr),
882 : JS_FS_END
883 : };
884 : #if defined(__clang__)
885 : #pragma clang diagnostic pop
886 : #endif
887 :
888 :
889 : // Can't be const because the pref-enabled boolean needs to be writable
890 : static Prefable<const JSFunctionSpec> sStaticMethods[] = {
891 : { nullptr, &sStaticMethods_specs[0] },
892 : { nullptr, nullptr }
893 : };
894 :
895 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
896 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
897 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
898 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
899 :
900 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
901 : #if defined(__clang__)
902 : #pragma clang diagnostic push
903 : #pragma clang diagnostic ignored "-Wmissing-braces"
904 : #endif
905 : static const ConstantSpec sConstants_specs[] = {
906 : { "STATE_MAXIMIZED", JS::Int32Value(1) },
907 : { "STATE_MINIMIZED", JS::Int32Value(2) },
908 : { "STATE_NORMAL", JS::Int32Value(3) },
909 : { "STATE_FULLSCREEN", JS::Int32Value(4) },
910 : { 0, JS::UndefinedValue() }
911 : };
912 : #if defined(__clang__)
913 : #pragma clang diagnostic pop
914 : #endif
915 :
916 : static PrefableDisablers sConstants_disablers0 = {
917 : true, false, 0, &nsGlobalWindow::IsPrivilegedChromeWindow
918 : };
919 :
920 : // Can't be const because the pref-enabled boolean needs to be writable
921 : static Prefable<const ConstantSpec> sConstants[] = {
922 : { &sConstants_disablers0, &sConstants_specs[0] },
923 : { nullptr, nullptr }
924 : };
925 :
926 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
927 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
928 : static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
929 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
930 :
931 :
932 : static uint16_t sNativeProperties_sortedPropertyIndices[5];
933 : static PropertyInfo sNativeProperties_propertyInfos[5];
934 :
935 : static const NativePropertiesN<2> sNativeProperties = {
936 : true, 0 /* sStaticMethods */,
937 : false, 0,
938 : false, 0,
939 : false, 0,
940 : false, 0,
941 : false, 0,
942 : true, 1 /* sConstants */,
943 : -1,
944 : 5,
945 : sNativeProperties_sortedPropertyIndices,
946 : {
947 : { sStaticMethods, &sNativeProperties_propertyInfos[0] },
948 : { sConstants, &sNativeProperties_propertyInfos[1] }
949 : }
950 : };
951 : static_assert(5 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
952 : "We have a property info count that is oversized");
953 :
954 : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
955 : {
956 : "Function",
957 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
958 : &sBoringInterfaceObjectClassClassOps,
959 : JS_NULL_CLASS_SPEC,
960 : JS_NULL_CLASS_EXT,
961 : &sInterfaceObjectClassObjectOps
962 : },
963 : eInterface,
964 : false,
965 : prototypes::id::_ID_Count,
966 : 0,
967 : sNativePropertyHooks,
968 : "function ChromeWindow() {\n [native code]\n}",
969 : JS::GetRealmFunctionPrototype
970 : };
971 :
972 : bool
973 0 : ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
974 : {
975 0 : return IsChromeOrXBL(aCx, aObj);
976 : }
977 :
978 : JSObject*
979 0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
980 : {
981 0 : return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
982 : }
983 :
984 : const NativePropertyHooks sNativePropertyHooks[] = { {
985 : nullptr,
986 : nullptr,
987 : nullptr,
988 : { sNativeProperties.Upcast(), nullptr },
989 : prototypes::id::_ID_Count,
990 : constructors::id::ChromeWindow,
991 : nullptr,
992 : &DefaultXrayExpandoObjectClass
993 : } };
994 :
995 : void
996 0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
997 : {
998 0 : JS::Rooted<JSObject*> constructorProto(aCx, JS::GetRealmFunctionPrototype(aCx));
999 0 : if (!constructorProto) {
1000 0 : return;
1001 : }
1002 :
1003 : static bool sIdsInited = false;
1004 0 : if (!sIdsInited && NS_IsMainThread()) {
1005 0 : if (!InitIds(aCx, sNativeProperties.Upcast())) {
1006 0 : return;
1007 : }
1008 0 : sIdsInited = true;
1009 : }
1010 :
1011 0 : JS::Heap<JSObject*>* protoCache = nullptr;
1012 0 : JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::ChromeWindow);
1013 0 : dom::CreateInterfaceObjects(aCx, aGlobal, nullptr,
1014 : nullptr, protoCache,
1015 : constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
1016 : interfaceCache,
1017 : sNativeProperties.Upcast(),
1018 : nullptr,
1019 : "ChromeWindow", aDefineOnGlobal,
1020 : nullptr,
1021 0 : false);
1022 : }
1023 :
1024 : JS::Handle<JSObject*>
1025 0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
1026 : {
1027 : /* Get the interface object for this class. This will create the object as
1028 : needed. */
1029 :
1030 : /* Make sure our global is sane. Hopefully we can remove this sometime */
1031 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
1032 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
1033 0 : return nullptr;
1034 : }
1035 :
1036 : /* Check to see whether the interface objects are already installed */
1037 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
1038 0 : if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::ChromeWindow)) {
1039 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
1040 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
1041 : }
1042 :
1043 : /*
1044 : * The object might _still_ be null, but that's OK.
1045 : *
1046 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
1047 : * traced by TraceProtoAndIfaceCache() and its contents are never
1048 : * changed after they have been set.
1049 : *
1050 : * Calling address() avoids the read read barrier that does gray
1051 : * unmarking, but it's not possible for the object to be gray here.
1052 : */
1053 :
1054 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::ChromeWindow);
1055 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
1056 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
1057 : }
1058 :
1059 : JSObject*
1060 0 : GetConstructorObject(JSContext* aCx)
1061 : {
1062 0 : return GetConstructorObjectHandle(aCx);
1063 : }
1064 :
1065 : } // namespace ChromeWindowBinding
1066 :
1067 :
1068 :
1069 : namespace WindowBinding {
1070 :
1071 : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<EventTargetBinding::NativeType>::value,
1072 : "Can't inherit from an interface with a different ownership model.");
1073 :
1074 : static bool
1075 157 : get_window(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1076 : {
1077 : // Have to either root across the getter call or reget after.
1078 314 : JS::Rooted<JSObject*> slotStorage(cx, js::UncheckedUnwrap(obj, /* stopAtWindowProxy = */ false));
1079 157 : MOZ_ASSERT(IsDOMObject(slotStorage));
1080 157 : const size_t slotIndex = (DOM_INSTANCE_RESERVED_SLOTS + 0);
1081 157 : MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
1082 : {
1083 : // Scope for cachedVal
1084 157 : JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
1085 157 : if (!cachedVal.isUndefined()) {
1086 150 : args.rval().set(cachedVal);
1087 : // The cached value is in the compartment of slotStorage,
1088 : // so wrap into the caller compartment as needed.
1089 150 : return MaybeWrapValue(cx, args.rval());
1090 : }
1091 : }
1092 :
1093 7 : auto result(StrongOrRawPtr<nsGlobalWindow>(self->Window()));
1094 7 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1095 : {
1096 14 : JS::Rooted<JSObject*> conversionScope(cx, slotStorage);
1097 14 : JSAutoCompartment ac(cx, conversionScope);
1098 : do { // block we break out of when done wrapping
1099 7 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1100 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1101 0 : return false;
1102 : }
1103 7 : break;
1104 : } while (0);
1105 : }
1106 : { // And now store things in the compartment of our slotStorage.
1107 14 : JSAutoCompartment ac(cx, slotStorage);
1108 : // Make a copy so that we don't do unnecessary wrapping on args.rval().
1109 14 : JS::Rooted<JS::Value> storedVal(cx, args.rval());
1110 7 : if (!MaybeWrapValue(cx, &storedVal)) {
1111 0 : return false;
1112 : }
1113 7 : js::SetReservedSlot(slotStorage, slotIndex, storedVal);
1114 : }
1115 : // And now make sure args.rval() is in the caller compartment
1116 7 : return MaybeWrapValue(cx, args.rval());
1117 : }
1118 :
1119 : static const JSJitInfo window_getterinfo = {
1120 : { (JSJitGetterOp)get_window },
1121 : { prototypes::id::Window },
1122 : { PrototypeTraits<prototypes::id::Window>::Depth },
1123 : JSJitInfo::Getter,
1124 : JSJitInfo::AliasNone, /* aliasSet. Not relevant for setters. */
1125 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1126 : false, /* isInfallible. False in setters. */
1127 : true, /* isMovable. Not relevant for setters. */
1128 : true, /* isEliminatable. Not relevant for setters. */
1129 : true, /* isAlwaysInSlot. Only relevant for getters. */
1130 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1131 : false, /* isTypedMethod. Only relevant for methods. */
1132 : (DOM_INSTANCE_RESERVED_SLOTS + 0) /* Reserved slot index, if we're stored in a slot, else 0. */
1133 : };
1134 : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 0) <= JSJitInfo::maxSlotIndex, "We won't fit");
1135 : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 0) < 5, "There is no slot for us");
1136 :
1137 : static bool
1138 7 : get_self(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1139 : {
1140 : // Have to either root across the getter call or reget after.
1141 14 : JS::Rooted<JSObject*> slotStorage(cx, js::UncheckedUnwrap(obj, /* stopAtWindowProxy = */ false));
1142 7 : MOZ_ASSERT(IsDOMObject(slotStorage));
1143 7 : const size_t slotIndex = (DOM_INSTANCE_RESERVED_SLOTS + 1);
1144 7 : MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
1145 : {
1146 : // Scope for cachedVal
1147 7 : JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
1148 7 : if (!cachedVal.isUndefined()) {
1149 0 : args.rval().set(cachedVal);
1150 : // The cached value is in the compartment of slotStorage,
1151 : // so wrap into the caller compartment as needed.
1152 0 : return MaybeWrapValue(cx, args.rval());
1153 : }
1154 : }
1155 :
1156 7 : auto result(StrongOrRawPtr<nsGlobalWindow>(self->Self()));
1157 7 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1158 : {
1159 14 : JS::Rooted<JSObject*> conversionScope(cx, slotStorage);
1160 14 : JSAutoCompartment ac(cx, conversionScope);
1161 : do { // block we break out of when done wrapping
1162 7 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1163 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1164 0 : return false;
1165 : }
1166 7 : break;
1167 : } while (0);
1168 : }
1169 : { // And now store things in the compartment of our slotStorage.
1170 14 : JSAutoCompartment ac(cx, slotStorage);
1171 : // Make a copy so that we don't do unnecessary wrapping on args.rval().
1172 14 : JS::Rooted<JS::Value> storedVal(cx, args.rval());
1173 7 : if (!MaybeWrapValue(cx, &storedVal)) {
1174 0 : return false;
1175 : }
1176 7 : js::SetReservedSlot(slotStorage, slotIndex, storedVal);
1177 : }
1178 : // And now make sure args.rval() is in the caller compartment
1179 7 : return MaybeWrapValue(cx, args.rval());
1180 : }
1181 :
1182 : static bool
1183 0 : set_self(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
1184 : {
1185 0 : return JS_DefineProperty(cx, obj, "self", args[0], JSPROP_ENUMERATE);
1186 : }
1187 :
1188 : static const JSJitInfo self_getterinfo = {
1189 : { (JSJitGetterOp)get_self },
1190 : { prototypes::id::Window },
1191 : { PrototypeTraits<prototypes::id::Window>::Depth },
1192 : JSJitInfo::Getter,
1193 : JSJitInfo::AliasNone, /* aliasSet. Not relevant for setters. */
1194 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1195 : false, /* isInfallible. False in setters. */
1196 : true, /* isMovable. Not relevant for setters. */
1197 : true, /* isEliminatable. Not relevant for setters. */
1198 : true, /* isAlwaysInSlot. Only relevant for getters. */
1199 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1200 : false, /* isTypedMethod. Only relevant for methods. */
1201 : (DOM_INSTANCE_RESERVED_SLOTS + 1) /* Reserved slot index, if we're stored in a slot, else 0. */
1202 : };
1203 : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 1) <= JSJitInfo::maxSlotIndex, "We won't fit");
1204 : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 1) < 5, "There is no slot for us");
1205 : static const JSJitInfo self_setterinfo = {
1206 : { (JSJitGetterOp)set_self },
1207 : { prototypes::id::Window },
1208 : { PrototypeTraits<prototypes::id::Window>::Depth },
1209 : JSJitInfo::Setter,
1210 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1211 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1212 : false, /* isInfallible. False in setters. */
1213 : false, /* isMovable. Not relevant for setters. */
1214 : false, /* isEliminatable. Not relevant for setters. */
1215 : false, /* isAlwaysInSlot. Only relevant for getters. */
1216 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1217 : false, /* isTypedMethod. Only relevant for methods. */
1218 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1219 : };
1220 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1221 : static_assert(0 < 5, "There is no slot for us");
1222 :
1223 : static bool
1224 329 : get_document(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1225 : {
1226 : // Have to either root across the getter call or reget after.
1227 658 : JS::Rooted<JSObject*> slotStorage(cx, js::UncheckedUnwrap(obj, /* stopAtWindowProxy = */ false));
1228 329 : MOZ_ASSERT(IsDOMObject(slotStorage));
1229 329 : const size_t slotIndex = (DOM_INSTANCE_RESERVED_SLOTS + 2);
1230 329 : MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
1231 : {
1232 : // Scope for cachedVal
1233 329 : JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
1234 329 : if (!cachedVal.isUndefined()) {
1235 314 : args.rval().set(cachedVal);
1236 : // The cached value is in the compartment of slotStorage,
1237 : // so wrap into the caller compartment as needed.
1238 314 : return MaybeWrapValue(cx, args.rval());
1239 : }
1240 : }
1241 :
1242 15 : auto result(StrongOrRawPtr<nsIDocument>(self->GetDocument()));
1243 15 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1244 : {
1245 30 : JS::Rooted<JSObject*> conversionScope(cx, slotStorage);
1246 30 : JSAutoCompartment ac(cx, conversionScope);
1247 : do { // block we break out of when done wrapping
1248 15 : if (!result) {
1249 7 : args.rval().setNull();
1250 7 : break;
1251 : }
1252 8 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1253 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1254 0 : return false;
1255 : }
1256 8 : break;
1257 : } while (0);
1258 : }
1259 : { // And now store things in the compartment of our slotStorage.
1260 30 : JSAutoCompartment ac(cx, slotStorage);
1261 : // Make a copy so that we don't do unnecessary wrapping on args.rval().
1262 30 : JS::Rooted<JS::Value> storedVal(cx, args.rval());
1263 15 : if (!MaybeWrapValue(cx, &storedVal)) {
1264 0 : return false;
1265 : }
1266 15 : js::SetReservedSlot(slotStorage, slotIndex, storedVal);
1267 : }
1268 : // And now make sure args.rval() is in the caller compartment
1269 15 : return MaybeWrapValue(cx, args.rval());
1270 : }
1271 :
1272 : static const JSJitInfo document_getterinfo = {
1273 : { (JSJitGetterOp)get_document },
1274 : { prototypes::id::Window },
1275 : { PrototypeTraits<prototypes::id::Window>::Depth },
1276 : JSJitInfo::Getter,
1277 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
1278 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
1279 : false, /* isInfallible. False in setters. */
1280 : true, /* isMovable. Not relevant for setters. */
1281 : true, /* isEliminatable. Not relevant for setters. */
1282 : true, /* isAlwaysInSlot. Only relevant for getters. */
1283 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1284 : false, /* isTypedMethod. Only relevant for methods. */
1285 : (DOM_INSTANCE_RESERVED_SLOTS + 2) /* Reserved slot index, if we're stored in a slot, else 0. */
1286 : };
1287 : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 2) <= JSJitInfo::maxSlotIndex, "We won't fit");
1288 : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 2) < 5, "There is no slot for us");
1289 :
1290 : static bool
1291 0 : get_name(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1292 : {
1293 0 : binding_detail::FastErrorResult rv;
1294 0 : DOMString result;
1295 0 : self->GetName(result, rv);
1296 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1297 0 : return false;
1298 : }
1299 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1300 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1301 0 : return false;
1302 : }
1303 0 : return true;
1304 : }
1305 :
1306 : static bool
1307 0 : set_name(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
1308 : {
1309 0 : binding_detail::FakeString arg0;
1310 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
1311 0 : return false;
1312 : }
1313 0 : binding_detail::FastErrorResult rv;
1314 0 : self->SetName(NonNullHelper(Constify(arg0)), rv);
1315 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1316 0 : return false;
1317 : }
1318 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1319 :
1320 0 : return true;
1321 : }
1322 :
1323 : static const JSJitInfo name_getterinfo = {
1324 : { (JSJitGetterOp)get_name },
1325 : { prototypes::id::Window },
1326 : { PrototypeTraits<prototypes::id::Window>::Depth },
1327 : JSJitInfo::Getter,
1328 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1329 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1330 : false, /* isInfallible. False in setters. */
1331 : false, /* isMovable. Not relevant for setters. */
1332 : false, /* isEliminatable. Not relevant for setters. */
1333 : false, /* isAlwaysInSlot. Only relevant for getters. */
1334 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1335 : false, /* isTypedMethod. Only relevant for methods. */
1336 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1337 : };
1338 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1339 : static_assert(0 < 5, "There is no slot for us");
1340 : static const JSJitInfo name_setterinfo = {
1341 : { (JSJitGetterOp)set_name },
1342 : { prototypes::id::Window },
1343 : { PrototypeTraits<prototypes::id::Window>::Depth },
1344 : JSJitInfo::Setter,
1345 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1346 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1347 : false, /* isInfallible. False in setters. */
1348 : false, /* isMovable. Not relevant for setters. */
1349 : false, /* isEliminatable. Not relevant for setters. */
1350 : false, /* isAlwaysInSlot. Only relevant for getters. */
1351 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1352 : false, /* isTypedMethod. Only relevant for methods. */
1353 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1354 : };
1355 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1356 : static_assert(0 < 5, "There is no slot for us");
1357 :
1358 : static bool
1359 7 : get_location(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1360 : {
1361 7 : auto result(StrongOrRawPtr<mozilla::dom::Location>(self->GetLocation()));
1362 7 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1363 7 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1364 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1365 0 : return false;
1366 : }
1367 7 : return true;
1368 : }
1369 :
1370 : static bool
1371 0 : set_location(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
1372 : {
1373 0 : JS::Rooted<JS::Value> v(cx);
1374 0 : if (!JS_GetProperty(cx, obj, "location", &v)) {
1375 0 : return false;
1376 : }
1377 :
1378 0 : if (!v.isObject()) {
1379 0 : return ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Window.location");
1380 : }
1381 :
1382 0 : JS::Rooted<JSObject*> targetObj(cx, &v.toObject());
1383 0 : return JS_SetProperty(cx, targetObj, "href", args[0]);
1384 : }
1385 :
1386 : static const JSJitInfo location_getterinfo = {
1387 : { (JSJitGetterOp)get_location },
1388 : { prototypes::id::Window },
1389 : { PrototypeTraits<prototypes::id::Window>::Depth },
1390 : JSJitInfo::Getter,
1391 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1392 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1393 : false, /* isInfallible. False in setters. */
1394 : false, /* isMovable. Not relevant for setters. */
1395 : false, /* isEliminatable. Not relevant for setters. */
1396 : false, /* isAlwaysInSlot. Only relevant for getters. */
1397 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1398 : false, /* isTypedMethod. Only relevant for methods. */
1399 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1400 : };
1401 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1402 : static_assert(0 < 5, "There is no slot for us");
1403 : static const JSJitInfo location_setterinfo = {
1404 : { (JSJitGetterOp)set_location },
1405 : { prototypes::id::Window },
1406 : { PrototypeTraits<prototypes::id::Window>::Depth },
1407 : JSJitInfo::Setter,
1408 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1409 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1410 : false, /* isInfallible. False in setters. */
1411 : false, /* isMovable. Not relevant for setters. */
1412 : false, /* isEliminatable. Not relevant for setters. */
1413 : false, /* isAlwaysInSlot. Only relevant for getters. */
1414 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1415 : false, /* isTypedMethod. Only relevant for methods. */
1416 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1417 : };
1418 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1419 : static_assert(0 < 5, "There is no slot for us");
1420 :
1421 : static bool
1422 0 : get_history(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1423 : {
1424 0 : binding_detail::FastErrorResult rv;
1425 0 : auto result(StrongOrRawPtr<nsHistory>(self->GetHistory(rv)));
1426 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1427 0 : return false;
1428 : }
1429 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1430 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1431 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1432 0 : return false;
1433 : }
1434 0 : return true;
1435 : }
1436 :
1437 : static const JSJitInfo history_getterinfo = {
1438 : { (JSJitGetterOp)get_history },
1439 : { prototypes::id::Window },
1440 : { PrototypeTraits<prototypes::id::Window>::Depth },
1441 : JSJitInfo::Getter,
1442 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1443 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1444 : false, /* isInfallible. False in setters. */
1445 : false, /* isMovable. Not relevant for setters. */
1446 : false, /* isEliminatable. Not relevant for setters. */
1447 : false, /* isAlwaysInSlot. Only relevant for getters. */
1448 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1449 : false, /* isTypedMethod. Only relevant for methods. */
1450 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1451 : };
1452 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1453 : static_assert(0 < 5, "There is no slot for us");
1454 :
1455 : static bool
1456 0 : get_customElements(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1457 : {
1458 0 : auto result(StrongOrRawPtr<mozilla::dom::CustomElementRegistry>(self->CustomElements()));
1459 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1460 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1461 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1462 0 : return false;
1463 : }
1464 0 : return true;
1465 : }
1466 :
1467 : static const JSJitInfo customElements_getterinfo = {
1468 : { (JSJitGetterOp)get_customElements },
1469 : { prototypes::id::Window },
1470 : { PrototypeTraits<prototypes::id::Window>::Depth },
1471 : JSJitInfo::Getter,
1472 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1473 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1474 : false, /* isInfallible. False in setters. */
1475 : false, /* isMovable. Not relevant for setters. */
1476 : false, /* isEliminatable. Not relevant for setters. */
1477 : false, /* isAlwaysInSlot. Only relevant for getters. */
1478 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1479 : false, /* isTypedMethod. Only relevant for methods. */
1480 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1481 : };
1482 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1483 : static_assert(0 < 5, "There is no slot for us");
1484 :
1485 : static bool
1486 0 : get_locationbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1487 : {
1488 0 : binding_detail::FastErrorResult rv;
1489 0 : auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetLocationbar(rv)));
1490 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1491 0 : return false;
1492 : }
1493 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1494 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1495 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1496 0 : return false;
1497 : }
1498 0 : return true;
1499 : }
1500 :
1501 : static bool
1502 0 : set_locationbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
1503 : {
1504 0 : return JS_DefineProperty(cx, obj, "locationbar", args[0], JSPROP_ENUMERATE);
1505 : }
1506 :
1507 : static const JSJitInfo locationbar_getterinfo = {
1508 : { (JSJitGetterOp)get_locationbar },
1509 : { prototypes::id::Window },
1510 : { PrototypeTraits<prototypes::id::Window>::Depth },
1511 : JSJitInfo::Getter,
1512 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1513 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1514 : false, /* isInfallible. False in setters. */
1515 : false, /* isMovable. Not relevant for setters. */
1516 : false, /* isEliminatable. Not relevant for setters. */
1517 : false, /* isAlwaysInSlot. Only relevant for getters. */
1518 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1519 : false, /* isTypedMethod. Only relevant for methods. */
1520 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1521 : };
1522 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1523 : static_assert(0 < 5, "There is no slot for us");
1524 : static const JSJitInfo locationbar_setterinfo = {
1525 : { (JSJitGetterOp)set_locationbar },
1526 : { prototypes::id::Window },
1527 : { PrototypeTraits<prototypes::id::Window>::Depth },
1528 : JSJitInfo::Setter,
1529 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1530 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1531 : false, /* isInfallible. False in setters. */
1532 : false, /* isMovable. Not relevant for setters. */
1533 : false, /* isEliminatable. Not relevant for setters. */
1534 : false, /* isAlwaysInSlot. Only relevant for getters. */
1535 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1536 : false, /* isTypedMethod. Only relevant for methods. */
1537 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1538 : };
1539 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1540 : static_assert(0 < 5, "There is no slot for us");
1541 :
1542 : static bool
1543 0 : get_menubar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1544 : {
1545 0 : binding_detail::FastErrorResult rv;
1546 0 : auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetMenubar(rv)));
1547 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1548 0 : return false;
1549 : }
1550 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1551 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1552 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1553 0 : return false;
1554 : }
1555 0 : return true;
1556 : }
1557 :
1558 : static bool
1559 0 : set_menubar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
1560 : {
1561 0 : return JS_DefineProperty(cx, obj, "menubar", args[0], JSPROP_ENUMERATE);
1562 : }
1563 :
1564 : static const JSJitInfo menubar_getterinfo = {
1565 : { (JSJitGetterOp)get_menubar },
1566 : { prototypes::id::Window },
1567 : { PrototypeTraits<prototypes::id::Window>::Depth },
1568 : JSJitInfo::Getter,
1569 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1570 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1571 : false, /* isInfallible. False in setters. */
1572 : false, /* isMovable. Not relevant for setters. */
1573 : false, /* isEliminatable. Not relevant for setters. */
1574 : false, /* isAlwaysInSlot. Only relevant for getters. */
1575 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1576 : false, /* isTypedMethod. Only relevant for methods. */
1577 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1578 : };
1579 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1580 : static_assert(0 < 5, "There is no slot for us");
1581 : static const JSJitInfo menubar_setterinfo = {
1582 : { (JSJitGetterOp)set_menubar },
1583 : { prototypes::id::Window },
1584 : { PrototypeTraits<prototypes::id::Window>::Depth },
1585 : JSJitInfo::Setter,
1586 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1587 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1588 : false, /* isInfallible. False in setters. */
1589 : false, /* isMovable. Not relevant for setters. */
1590 : false, /* isEliminatable. Not relevant for setters. */
1591 : false, /* isAlwaysInSlot. Only relevant for getters. */
1592 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1593 : false, /* isTypedMethod. Only relevant for methods. */
1594 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1595 : };
1596 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1597 : static_assert(0 < 5, "There is no slot for us");
1598 :
1599 : static bool
1600 0 : get_personalbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1601 : {
1602 0 : binding_detail::FastErrorResult rv;
1603 0 : auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetPersonalbar(rv)));
1604 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1605 0 : return false;
1606 : }
1607 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1608 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1609 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1610 0 : return false;
1611 : }
1612 0 : return true;
1613 : }
1614 :
1615 : static bool
1616 0 : set_personalbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
1617 : {
1618 0 : return JS_DefineProperty(cx, obj, "personalbar", args[0], JSPROP_ENUMERATE);
1619 : }
1620 :
1621 : static const JSJitInfo personalbar_getterinfo = {
1622 : { (JSJitGetterOp)get_personalbar },
1623 : { prototypes::id::Window },
1624 : { PrototypeTraits<prototypes::id::Window>::Depth },
1625 : JSJitInfo::Getter,
1626 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1627 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1628 : false, /* isInfallible. False in setters. */
1629 : false, /* isMovable. Not relevant for setters. */
1630 : false, /* isEliminatable. Not relevant for setters. */
1631 : false, /* isAlwaysInSlot. Only relevant for getters. */
1632 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1633 : false, /* isTypedMethod. Only relevant for methods. */
1634 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1635 : };
1636 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1637 : static_assert(0 < 5, "There is no slot for us");
1638 : static const JSJitInfo personalbar_setterinfo = {
1639 : { (JSJitGetterOp)set_personalbar },
1640 : { prototypes::id::Window },
1641 : { PrototypeTraits<prototypes::id::Window>::Depth },
1642 : JSJitInfo::Setter,
1643 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1644 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1645 : false, /* isInfallible. False in setters. */
1646 : false, /* isMovable. Not relevant for setters. */
1647 : false, /* isEliminatable. Not relevant for setters. */
1648 : false, /* isAlwaysInSlot. Only relevant for getters. */
1649 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1650 : false, /* isTypedMethod. Only relevant for methods. */
1651 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1652 : };
1653 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1654 : static_assert(0 < 5, "There is no slot for us");
1655 :
1656 : static bool
1657 0 : get_scrollbars(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1658 : {
1659 0 : binding_detail::FastErrorResult rv;
1660 0 : auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetScrollbars(rv)));
1661 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1662 0 : return false;
1663 : }
1664 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1665 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1666 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1667 0 : return false;
1668 : }
1669 0 : return true;
1670 : }
1671 :
1672 : static bool
1673 0 : set_scrollbars(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
1674 : {
1675 0 : return JS_DefineProperty(cx, obj, "scrollbars", args[0], JSPROP_ENUMERATE);
1676 : }
1677 :
1678 : static const JSJitInfo scrollbars_getterinfo = {
1679 : { (JSJitGetterOp)get_scrollbars },
1680 : { prototypes::id::Window },
1681 : { PrototypeTraits<prototypes::id::Window>::Depth },
1682 : JSJitInfo::Getter,
1683 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1684 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1685 : false, /* isInfallible. False in setters. */
1686 : false, /* isMovable. Not relevant for setters. */
1687 : false, /* isEliminatable. Not relevant for setters. */
1688 : false, /* isAlwaysInSlot. Only relevant for getters. */
1689 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1690 : false, /* isTypedMethod. Only relevant for methods. */
1691 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1692 : };
1693 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1694 : static_assert(0 < 5, "There is no slot for us");
1695 : static const JSJitInfo scrollbars_setterinfo = {
1696 : { (JSJitGetterOp)set_scrollbars },
1697 : { prototypes::id::Window },
1698 : { PrototypeTraits<prototypes::id::Window>::Depth },
1699 : JSJitInfo::Setter,
1700 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1701 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1702 : false, /* isInfallible. False in setters. */
1703 : false, /* isMovable. Not relevant for setters. */
1704 : false, /* isEliminatable. Not relevant for setters. */
1705 : false, /* isAlwaysInSlot. Only relevant for getters. */
1706 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1707 : false, /* isTypedMethod. Only relevant for methods. */
1708 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1709 : };
1710 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1711 : static_assert(0 < 5, "There is no slot for us");
1712 :
1713 : static bool
1714 0 : get_statusbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1715 : {
1716 0 : binding_detail::FastErrorResult rv;
1717 0 : auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetStatusbar(rv)));
1718 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1719 0 : return false;
1720 : }
1721 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1722 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1723 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1724 0 : return false;
1725 : }
1726 0 : return true;
1727 : }
1728 :
1729 : static bool
1730 0 : set_statusbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
1731 : {
1732 0 : return JS_DefineProperty(cx, obj, "statusbar", args[0], JSPROP_ENUMERATE);
1733 : }
1734 :
1735 : static const JSJitInfo statusbar_getterinfo = {
1736 : { (JSJitGetterOp)get_statusbar },
1737 : { prototypes::id::Window },
1738 : { PrototypeTraits<prototypes::id::Window>::Depth },
1739 : JSJitInfo::Getter,
1740 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1741 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1742 : false, /* isInfallible. False in setters. */
1743 : false, /* isMovable. Not relevant for setters. */
1744 : false, /* isEliminatable. Not relevant for setters. */
1745 : false, /* isAlwaysInSlot. Only relevant for getters. */
1746 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1747 : false, /* isTypedMethod. Only relevant for methods. */
1748 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1749 : };
1750 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1751 : static_assert(0 < 5, "There is no slot for us");
1752 : static const JSJitInfo statusbar_setterinfo = {
1753 : { (JSJitGetterOp)set_statusbar },
1754 : { prototypes::id::Window },
1755 : { PrototypeTraits<prototypes::id::Window>::Depth },
1756 : JSJitInfo::Setter,
1757 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1758 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1759 : false, /* isInfallible. False in setters. */
1760 : false, /* isMovable. Not relevant for setters. */
1761 : false, /* isEliminatable. Not relevant for setters. */
1762 : false, /* isAlwaysInSlot. Only relevant for getters. */
1763 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1764 : false, /* isTypedMethod. Only relevant for methods. */
1765 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1766 : };
1767 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1768 : static_assert(0 < 5, "There is no slot for us");
1769 :
1770 : static bool
1771 5 : get_toolbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1772 : {
1773 10 : binding_detail::FastErrorResult rv;
1774 5 : auto result(StrongOrRawPtr<mozilla::dom::BarProp>(self->GetToolbar(rv)));
1775 5 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1776 0 : return false;
1777 : }
1778 5 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1779 5 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1780 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1781 0 : return false;
1782 : }
1783 5 : return true;
1784 : }
1785 :
1786 : static bool
1787 0 : set_toolbar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
1788 : {
1789 0 : return JS_DefineProperty(cx, obj, "toolbar", args[0], JSPROP_ENUMERATE);
1790 : }
1791 :
1792 : static const JSJitInfo toolbar_getterinfo = {
1793 : { (JSJitGetterOp)get_toolbar },
1794 : { prototypes::id::Window },
1795 : { PrototypeTraits<prototypes::id::Window>::Depth },
1796 : JSJitInfo::Getter,
1797 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1798 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1799 : false, /* isInfallible. False in setters. */
1800 : false, /* isMovable. Not relevant for setters. */
1801 : false, /* isEliminatable. Not relevant for setters. */
1802 : false, /* isAlwaysInSlot. Only relevant for getters. */
1803 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1804 : false, /* isTypedMethod. Only relevant for methods. */
1805 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1806 : };
1807 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1808 : static_assert(0 < 5, "There is no slot for us");
1809 : static const JSJitInfo toolbar_setterinfo = {
1810 : { (JSJitGetterOp)set_toolbar },
1811 : { prototypes::id::Window },
1812 : { PrototypeTraits<prototypes::id::Window>::Depth },
1813 : JSJitInfo::Setter,
1814 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1815 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1816 : false, /* isInfallible. False in setters. */
1817 : false, /* isMovable. Not relevant for setters. */
1818 : false, /* isEliminatable. Not relevant for setters. */
1819 : false, /* isAlwaysInSlot. Only relevant for getters. */
1820 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1821 : false, /* isTypedMethod. Only relevant for methods. */
1822 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1823 : };
1824 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1825 : static_assert(0 < 5, "There is no slot for us");
1826 :
1827 : static bool
1828 0 : get_status(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1829 : {
1830 0 : binding_detail::FastErrorResult rv;
1831 0 : DOMString result;
1832 0 : self->GetStatus(result, rv);
1833 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1834 0 : return false;
1835 : }
1836 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1837 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1838 0 : return false;
1839 : }
1840 0 : return true;
1841 : }
1842 :
1843 : static bool
1844 0 : set_status(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
1845 : {
1846 0 : binding_detail::FakeString arg0;
1847 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
1848 0 : return false;
1849 : }
1850 0 : binding_detail::FastErrorResult rv;
1851 0 : self->SetStatus(NonNullHelper(Constify(arg0)), rv);
1852 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1853 0 : return false;
1854 : }
1855 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1856 :
1857 0 : return true;
1858 : }
1859 :
1860 : static const JSJitInfo status_getterinfo = {
1861 : { (JSJitGetterOp)get_status },
1862 : { prototypes::id::Window },
1863 : { PrototypeTraits<prototypes::id::Window>::Depth },
1864 : JSJitInfo::Getter,
1865 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1866 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1867 : false, /* isInfallible. False in setters. */
1868 : false, /* isMovable. Not relevant for setters. */
1869 : false, /* isEliminatable. Not relevant for setters. */
1870 : false, /* isAlwaysInSlot. Only relevant for getters. */
1871 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1872 : false, /* isTypedMethod. Only relevant for methods. */
1873 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1874 : };
1875 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1876 : static_assert(0 < 5, "There is no slot for us");
1877 : static const JSJitInfo status_setterinfo = {
1878 : { (JSJitGetterOp)set_status },
1879 : { prototypes::id::Window },
1880 : { PrototypeTraits<prototypes::id::Window>::Depth },
1881 : JSJitInfo::Setter,
1882 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1883 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1884 : false, /* isInfallible. False in setters. */
1885 : false, /* isMovable. Not relevant for setters. */
1886 : false, /* isEliminatable. Not relevant for setters. */
1887 : false, /* isAlwaysInSlot. Only relevant for getters. */
1888 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1889 : false, /* isTypedMethod. Only relevant for methods. */
1890 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1891 : };
1892 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1893 : static_assert(0 < 5, "There is no slot for us");
1894 :
1895 : static bool
1896 0 : close(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
1897 : {
1898 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1899 : // Return false from the JSNative in order to trigger
1900 : // an uncatchable exception.
1901 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1902 0 : return false;
1903 : }
1904 0 : binding_detail::FastErrorResult rv;
1905 0 : self->Close(rv);
1906 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1907 0 : return false;
1908 : }
1909 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1910 0 : args.rval().setUndefined();
1911 0 : return true;
1912 : }
1913 :
1914 : static const JSJitInfo close_methodinfo = {
1915 : { (JSJitGetterOp)close },
1916 : { prototypes::id::Window },
1917 : { PrototypeTraits<prototypes::id::Window>::Depth },
1918 : JSJitInfo::Method,
1919 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1920 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1921 : false, /* isInfallible. False in setters. */
1922 : false, /* isMovable. Not relevant for setters. */
1923 : false, /* isEliminatable. Not relevant for setters. */
1924 : false, /* isAlwaysInSlot. Only relevant for getters. */
1925 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1926 : false, /* isTypedMethod. Only relevant for methods. */
1927 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1928 : };
1929 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1930 : static_assert(0 < 5, "There is no slot for us");
1931 :
1932 : static bool
1933 6 : get_closed(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
1934 : {
1935 12 : binding_detail::FastErrorResult rv;
1936 6 : bool result(self->GetClosed(rv));
1937 6 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1938 0 : return false;
1939 : }
1940 6 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1941 6 : args.rval().setBoolean(result);
1942 6 : return true;
1943 : }
1944 :
1945 : static const JSJitInfo closed_getterinfo = {
1946 : { (JSJitGetterOp)get_closed },
1947 : { prototypes::id::Window },
1948 : { PrototypeTraits<prototypes::id::Window>::Depth },
1949 : JSJitInfo::Getter,
1950 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1951 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1952 : false, /* isInfallible. False in setters. */
1953 : false, /* isMovable. Not relevant for setters. */
1954 : false, /* isEliminatable. Not relevant for setters. */
1955 : false, /* isAlwaysInSlot. Only relevant for getters. */
1956 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1957 : false, /* isTypedMethod. Only relevant for methods. */
1958 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1959 : };
1960 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1961 : static_assert(0 < 5, "There is no slot for us");
1962 :
1963 : static bool
1964 0 : stop(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
1965 : {
1966 0 : binding_detail::FastErrorResult rv;
1967 0 : self->Stop(rv);
1968 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1969 0 : return false;
1970 : }
1971 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1972 0 : args.rval().setUndefined();
1973 0 : return true;
1974 : }
1975 :
1976 : static const JSJitInfo stop_methodinfo = {
1977 : { (JSJitGetterOp)stop },
1978 : { prototypes::id::Window },
1979 : { PrototypeTraits<prototypes::id::Window>::Depth },
1980 : JSJitInfo::Method,
1981 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1982 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1983 : false, /* isInfallible. False in setters. */
1984 : false, /* isMovable. Not relevant for setters. */
1985 : false, /* isEliminatable. Not relevant for setters. */
1986 : false, /* isAlwaysInSlot. Only relevant for getters. */
1987 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1988 : false, /* isTypedMethod. Only relevant for methods. */
1989 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1990 : };
1991 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1992 : static_assert(0 < 5, "There is no slot for us");
1993 :
1994 : static bool
1995 0 : focus(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
1996 : {
1997 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
1998 : // Return false from the JSNative in order to trigger
1999 : // an uncatchable exception.
2000 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2001 0 : return false;
2002 : }
2003 0 : binding_detail::FastErrorResult rv;
2004 0 : self->Focus(rv);
2005 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2006 0 : return false;
2007 : }
2008 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2009 0 : args.rval().setUndefined();
2010 0 : return true;
2011 : }
2012 :
2013 : static const JSJitInfo focus_methodinfo = {
2014 : { (JSJitGetterOp)focus },
2015 : { prototypes::id::Window },
2016 : { PrototypeTraits<prototypes::id::Window>::Depth },
2017 : JSJitInfo::Method,
2018 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2019 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2020 : false, /* isInfallible. False in setters. */
2021 : false, /* isMovable. Not relevant for setters. */
2022 : false, /* isEliminatable. Not relevant for setters. */
2023 : false, /* isAlwaysInSlot. Only relevant for getters. */
2024 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2025 : false, /* isTypedMethod. Only relevant for methods. */
2026 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2027 : };
2028 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2029 : static_assert(0 < 5, "There is no slot for us");
2030 :
2031 : static bool
2032 0 : blur(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
2033 : {
2034 0 : binding_detail::FastErrorResult rv;
2035 0 : self->Blur(rv);
2036 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2037 0 : return false;
2038 : }
2039 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2040 0 : args.rval().setUndefined();
2041 0 : return true;
2042 : }
2043 :
2044 : static const JSJitInfo blur_methodinfo = {
2045 : { (JSJitGetterOp)blur },
2046 : { prototypes::id::Window },
2047 : { PrototypeTraits<prototypes::id::Window>::Depth },
2048 : JSJitInfo::Method,
2049 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2050 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2051 : false, /* isInfallible. False in setters. */
2052 : false, /* isMovable. Not relevant for setters. */
2053 : false, /* isEliminatable. Not relevant for setters. */
2054 : false, /* isAlwaysInSlot. Only relevant for getters. */
2055 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2056 : false, /* isTypedMethod. Only relevant for methods. */
2057 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2058 : };
2059 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2060 : static_assert(0 < 5, "There is no slot for us");
2061 :
2062 : static bool
2063 8 : get_frames(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
2064 : {
2065 16 : binding_detail::FastErrorResult rv;
2066 16 : auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->GetFrames(rv)));
2067 8 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2068 0 : return false;
2069 : }
2070 8 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2071 8 : if (!WrapObject(cx, result, args.rval())) {
2072 0 : return false;
2073 : }
2074 8 : return true;
2075 : }
2076 :
2077 : static bool
2078 0 : set_frames(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
2079 : {
2080 0 : return JS_DefineProperty(cx, obj, "frames", args[0], JSPROP_ENUMERATE);
2081 : }
2082 :
2083 : static const JSJitInfo frames_getterinfo = {
2084 : { (JSJitGetterOp)get_frames },
2085 : { prototypes::id::Window },
2086 : { PrototypeTraits<prototypes::id::Window>::Depth },
2087 : JSJitInfo::Getter,
2088 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2089 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
2090 : false, /* isInfallible. False in setters. */
2091 : false, /* isMovable. Not relevant for setters. */
2092 : false, /* isEliminatable. Not relevant for setters. */
2093 : false, /* isAlwaysInSlot. Only relevant for getters. */
2094 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2095 : false, /* isTypedMethod. Only relevant for methods. */
2096 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2097 : };
2098 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2099 : static_assert(0 < 5, "There is no slot for us");
2100 : static const JSJitInfo frames_setterinfo = {
2101 : { (JSJitGetterOp)set_frames },
2102 : { prototypes::id::Window },
2103 : { PrototypeTraits<prototypes::id::Window>::Depth },
2104 : JSJitInfo::Setter,
2105 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2106 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2107 : false, /* isInfallible. False in setters. */
2108 : false, /* isMovable. Not relevant for setters. */
2109 : false, /* isEliminatable. Not relevant for setters. */
2110 : false, /* isAlwaysInSlot. Only relevant for getters. */
2111 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2112 : false, /* isTypedMethod. Only relevant for methods. */
2113 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2114 : };
2115 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2116 : static_assert(0 < 5, "There is no slot for us");
2117 :
2118 : static bool
2119 8 : get_length(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
2120 : {
2121 8 : uint32_t result(self->Length());
2122 8 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2123 8 : args.rval().setNumber(result);
2124 8 : return true;
2125 : }
2126 :
2127 : static bool
2128 0 : set_length(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
2129 : {
2130 0 : return JS_DefineProperty(cx, obj, "length", args[0], JSPROP_ENUMERATE);
2131 : }
2132 :
2133 : static const JSJitInfo length_getterinfo = {
2134 : { (JSJitGetterOp)get_length },
2135 : { prototypes::id::Window },
2136 : { PrototypeTraits<prototypes::id::Window>::Depth },
2137 : JSJitInfo::Getter,
2138 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2139 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
2140 : true, /* isInfallible. False in setters. */
2141 : false, /* isMovable. Not relevant for setters. */
2142 : false, /* isEliminatable. Not relevant for setters. */
2143 : false, /* isAlwaysInSlot. Only relevant for getters. */
2144 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2145 : false, /* isTypedMethod. Only relevant for methods. */
2146 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2147 : };
2148 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2149 : static_assert(0 < 5, "There is no slot for us");
2150 : static const JSJitInfo length_setterinfo = {
2151 : { (JSJitGetterOp)set_length },
2152 : { prototypes::id::Window },
2153 : { PrototypeTraits<prototypes::id::Window>::Depth },
2154 : JSJitInfo::Setter,
2155 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2156 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2157 : false, /* isInfallible. False in setters. */
2158 : false, /* isMovable. Not relevant for setters. */
2159 : false, /* isEliminatable. Not relevant for setters. */
2160 : false, /* isAlwaysInSlot. Only relevant for getters. */
2161 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2162 : false, /* isTypedMethod. Only relevant for methods. */
2163 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2164 : };
2165 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2166 : static_assert(0 < 5, "There is no slot for us");
2167 :
2168 : static bool
2169 12 : get_top(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
2170 : {
2171 24 : binding_detail::FastErrorResult rv;
2172 24 : auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->GetTop(rv)));
2173 12 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2174 0 : return false;
2175 : }
2176 12 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2177 12 : if (!result) {
2178 0 : args.rval().setNull();
2179 0 : return true;
2180 : }
2181 12 : if (!WrapObject(cx, result, args.rval())) {
2182 0 : return false;
2183 : }
2184 12 : return true;
2185 : }
2186 :
2187 : static const JSJitInfo top_getterinfo = {
2188 : { (JSJitGetterOp)get_top },
2189 : { prototypes::id::Window },
2190 : { PrototypeTraits<prototypes::id::Window>::Depth },
2191 : JSJitInfo::Getter,
2192 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2193 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
2194 : false, /* isInfallible. False in setters. */
2195 : false, /* isMovable. Not relevant for setters. */
2196 : false, /* isEliminatable. Not relevant for setters. */
2197 : false, /* isAlwaysInSlot. Only relevant for getters. */
2198 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2199 : false, /* isTypedMethod. Only relevant for methods. */
2200 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2201 : };
2202 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2203 : static_assert(0 < 5, "There is no slot for us");
2204 :
2205 : static bool
2206 0 : get_opener(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
2207 : {
2208 0 : binding_detail::FastErrorResult rv;
2209 0 : JS::Rooted<JS::Value> result(cx);
2210 0 : self->GetOpener(cx, &result, rv);
2211 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2212 0 : return false;
2213 : }
2214 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2215 0 : JS::ExposeValueToActiveJS(result);
2216 0 : args.rval().set(result);
2217 0 : if (!MaybeWrapValue(cx, args.rval())) {
2218 0 : return false;
2219 : }
2220 0 : return true;
2221 : }
2222 :
2223 : static bool
2224 0 : set_opener(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
2225 : {
2226 0 : JS::Rooted<JS::Value> arg0(cx);
2227 0 : arg0 = args[0];
2228 0 : binding_detail::FastErrorResult rv;
2229 0 : self->SetOpener(cx, arg0, rv);
2230 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2231 0 : return false;
2232 : }
2233 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2234 :
2235 0 : return true;
2236 : }
2237 :
2238 : static const JSJitInfo opener_getterinfo = {
2239 : { (JSJitGetterOp)get_opener },
2240 : { prototypes::id::Window },
2241 : { PrototypeTraits<prototypes::id::Window>::Depth },
2242 : JSJitInfo::Getter,
2243 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2244 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
2245 : false, /* isInfallible. False in setters. */
2246 : false, /* isMovable. Not relevant for setters. */
2247 : false, /* isEliminatable. Not relevant for setters. */
2248 : false, /* isAlwaysInSlot. Only relevant for getters. */
2249 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2250 : false, /* isTypedMethod. Only relevant for methods. */
2251 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2252 : };
2253 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2254 : static_assert(0 < 5, "There is no slot for us");
2255 : static const JSJitInfo opener_setterinfo = {
2256 : { (JSJitGetterOp)set_opener },
2257 : { prototypes::id::Window },
2258 : { PrototypeTraits<prototypes::id::Window>::Depth },
2259 : JSJitInfo::Setter,
2260 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2261 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2262 : false, /* isInfallible. False in setters. */
2263 : false, /* isMovable. Not relevant for setters. */
2264 : false, /* isEliminatable. Not relevant for setters. */
2265 : false, /* isAlwaysInSlot. Only relevant for getters. */
2266 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2267 : false, /* isTypedMethod. Only relevant for methods. */
2268 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2269 : };
2270 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2271 : static_assert(0 < 5, "There is no slot for us");
2272 :
2273 : static bool
2274 0 : get_parent(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
2275 : {
2276 0 : binding_detail::FastErrorResult rv;
2277 0 : auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->GetParent(rv)));
2278 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2279 0 : return false;
2280 : }
2281 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2282 0 : if (!result) {
2283 0 : args.rval().setNull();
2284 0 : return true;
2285 : }
2286 0 : if (!WrapObject(cx, result, args.rval())) {
2287 0 : return false;
2288 : }
2289 0 : return true;
2290 : }
2291 :
2292 : static bool
2293 0 : set_parent(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
2294 : {
2295 0 : return JS_DefineProperty(cx, obj, "parent", args[0], JSPROP_ENUMERATE);
2296 : }
2297 :
2298 : static const JSJitInfo parent_getterinfo = {
2299 : { (JSJitGetterOp)get_parent },
2300 : { prototypes::id::Window },
2301 : { PrototypeTraits<prototypes::id::Window>::Depth },
2302 : JSJitInfo::Getter,
2303 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2304 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
2305 : false, /* isInfallible. False in setters. */
2306 : false, /* isMovable. Not relevant for setters. */
2307 : false, /* isEliminatable. Not relevant for setters. */
2308 : false, /* isAlwaysInSlot. Only relevant for getters. */
2309 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2310 : false, /* isTypedMethod. Only relevant for methods. */
2311 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2312 : };
2313 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2314 : static_assert(0 < 5, "There is no slot for us");
2315 : static const JSJitInfo parent_setterinfo = {
2316 : { (JSJitGetterOp)set_parent },
2317 : { prototypes::id::Window },
2318 : { PrototypeTraits<prototypes::id::Window>::Depth },
2319 : JSJitInfo::Setter,
2320 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2321 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2322 : false, /* isInfallible. False in setters. */
2323 : false, /* isMovable. Not relevant for setters. */
2324 : false, /* isEliminatable. Not relevant for setters. */
2325 : false, /* isAlwaysInSlot. Only relevant for getters. */
2326 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2327 : false, /* isTypedMethod. Only relevant for methods. */
2328 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2329 : };
2330 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2331 : static_assert(0 < 5, "There is no slot for us");
2332 :
2333 : static bool
2334 0 : get_frameElement(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
2335 : {
2336 0 : binding_detail::FastErrorResult rv;
2337 0 : JSCompartment* compartment = js::GetContextCompartment(cx);
2338 0 : MOZ_ASSERT(compartment);
2339 0 : JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
2340 : // Initializing a nonnull is pretty darn annoying...
2341 0 : NonNull<nsIPrincipal> subjectPrincipal;
2342 0 : subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
2343 0 : auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetFrameElement(subjectPrincipal, rv)));
2344 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2345 0 : return false;
2346 : }
2347 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2348 0 : if (!result) {
2349 0 : args.rval().setNull();
2350 0 : return true;
2351 : }
2352 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
2353 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
2354 0 : return false;
2355 : }
2356 0 : return true;
2357 : }
2358 :
2359 : static const JSJitInfo frameElement_getterinfo = {
2360 : { (JSJitGetterOp)get_frameElement },
2361 : { prototypes::id::Window },
2362 : { PrototypeTraits<prototypes::id::Window>::Depth },
2363 : JSJitInfo::Getter,
2364 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2365 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
2366 : false, /* isInfallible. False in setters. */
2367 : false, /* isMovable. Not relevant for setters. */
2368 : false, /* isEliminatable. Not relevant for setters. */
2369 : false, /* isAlwaysInSlot. Only relevant for getters. */
2370 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2371 : false, /* isTypedMethod. Only relevant for methods. */
2372 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2373 : };
2374 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2375 : static_assert(0 < 5, "There is no slot for us");
2376 :
2377 : static bool
2378 0 : open(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
2379 : {
2380 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
2381 : // Return false from the JSNative in order to trigger
2382 : // an uncatchable exception.
2383 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2384 0 : return false;
2385 : }
2386 0 : binding_detail::FakeString arg0;
2387 0 : if (args.hasDefined(0)) {
2388 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2389 0 : return false;
2390 : }
2391 : } else {
2392 : static const char16_t data[] = { 0 };
2393 0 : arg0.Rebind(data, ArrayLength(data) - 1);
2394 : }
2395 0 : binding_detail::FakeString arg1;
2396 0 : if (args.hasDefined(1)) {
2397 0 : if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
2398 0 : return false;
2399 : }
2400 : } else {
2401 : static const char16_t data[] = { 0 };
2402 0 : arg1.Rebind(data, ArrayLength(data) - 1);
2403 : }
2404 0 : binding_detail::FakeString arg2;
2405 0 : if (args.hasDefined(2)) {
2406 0 : if (!ConvertJSValueToString(cx, args[2], eEmpty, eStringify, arg2)) {
2407 0 : return false;
2408 : }
2409 : } else {
2410 : static const char16_t data[] = { 0 };
2411 0 : arg2.Rebind(data, ArrayLength(data) - 1);
2412 : }
2413 0 : binding_detail::FastErrorResult rv;
2414 0 : auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->Open(NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)), NonNullHelper(Constify(arg2)), rv)));
2415 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2416 0 : return false;
2417 : }
2418 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2419 0 : if (!result) {
2420 0 : args.rval().setNull();
2421 0 : return true;
2422 : }
2423 0 : if (!WrapObject(cx, result, args.rval())) {
2424 0 : return false;
2425 : }
2426 0 : return true;
2427 : }
2428 :
2429 : static const JSJitInfo open_methodinfo = {
2430 : { (JSJitGetterOp)open },
2431 : { prototypes::id::Window },
2432 : { PrototypeTraits<prototypes::id::Window>::Depth },
2433 : JSJitInfo::Method,
2434 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2435 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
2436 : false, /* isInfallible. False in setters. */
2437 : false, /* isMovable. Not relevant for setters. */
2438 : false, /* isEliminatable. Not relevant for setters. */
2439 : false, /* isAlwaysInSlot. Only relevant for getters. */
2440 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2441 : false, /* isTypedMethod. Only relevant for methods. */
2442 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2443 : };
2444 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2445 : static_assert(0 < 5, "There is no slot for us");
2446 :
2447 : static bool
2448 0 : get_navigator(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
2449 : {
2450 0 : auto result(StrongOrRawPtr<mozilla::dom::Navigator>(self->Navigator()));
2451 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2452 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
2453 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
2454 0 : return false;
2455 : }
2456 0 : return true;
2457 : }
2458 :
2459 : static const JSJitInfo navigator_getterinfo = {
2460 : { (JSJitGetterOp)get_navigator },
2461 : { prototypes::id::Window },
2462 : { PrototypeTraits<prototypes::id::Window>::Depth },
2463 : JSJitInfo::Getter,
2464 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2465 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
2466 : false, /* isInfallible. False in setters. */
2467 : false, /* isMovable. Not relevant for setters. */
2468 : false, /* isEliminatable. Not relevant for setters. */
2469 : false, /* isAlwaysInSlot. Only relevant for getters. */
2470 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2471 : false, /* isTypedMethod. Only relevant for methods. */
2472 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2473 : };
2474 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2475 : static_assert(0 < 5, "There is no slot for us");
2476 :
2477 : static bool
2478 0 : get_external(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
2479 : {
2480 0 : binding_detail::FastErrorResult rv;
2481 0 : auto result(StrongOrRawPtr<mozilla::dom::External>(self->GetExternal(rv)));
2482 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2483 0 : return false;
2484 : }
2485 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2486 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
2487 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
2488 0 : return false;
2489 : }
2490 0 : return true;
2491 : }
2492 :
2493 : static bool
2494 0 : set_external(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
2495 : {
2496 0 : return JS_DefineProperty(cx, obj, "external", args[0], JSPROP_ENUMERATE);
2497 : }
2498 :
2499 : static const JSJitInfo external_getterinfo = {
2500 : { (JSJitGetterOp)get_external },
2501 : { prototypes::id::Window },
2502 : { PrototypeTraits<prototypes::id::Window>::Depth },
2503 : JSJitInfo::Getter,
2504 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2505 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
2506 : false, /* isInfallible. False in setters. */
2507 : false, /* isMovable. Not relevant for setters. */
2508 : false, /* isEliminatable. Not relevant for setters. */
2509 : false, /* isAlwaysInSlot. Only relevant for getters. */
2510 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2511 : false, /* isTypedMethod. Only relevant for methods. */
2512 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2513 : };
2514 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2515 : static_assert(0 < 5, "There is no slot for us");
2516 : static const JSJitInfo external_setterinfo = {
2517 : { (JSJitGetterOp)set_external },
2518 : { prototypes::id::Window },
2519 : { PrototypeTraits<prototypes::id::Window>::Depth },
2520 : JSJitInfo::Setter,
2521 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2522 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2523 : false, /* isInfallible. False in setters. */
2524 : false, /* isMovable. Not relevant for setters. */
2525 : false, /* isEliminatable. Not relevant for setters. */
2526 : false, /* isAlwaysInSlot. Only relevant for getters. */
2527 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2528 : false, /* isTypedMethod. Only relevant for methods. */
2529 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2530 : };
2531 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2532 : static_assert(0 < 5, "There is no slot for us");
2533 :
2534 : static bool
2535 0 : get_applicationCache(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
2536 : {
2537 0 : binding_detail::FastErrorResult rv;
2538 0 : auto result(StrongOrRawPtr<nsIDOMOfflineResourceList>(self->GetApplicationCache(rv)));
2539 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2540 0 : return false;
2541 : }
2542 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2543 0 : if (!WrapObject(cx, result, args.rval())) {
2544 0 : return false;
2545 : }
2546 0 : return true;
2547 : }
2548 :
2549 : static const JSJitInfo applicationCache_getterinfo = {
2550 : { (JSJitGetterOp)get_applicationCache },
2551 : { prototypes::id::Window },
2552 : { PrototypeTraits<prototypes::id::Window>::Depth },
2553 : JSJitInfo::Getter,
2554 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2555 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
2556 : false, /* isInfallible. False in setters. */
2557 : false, /* isMovable. Not relevant for setters. */
2558 : false, /* isEliminatable. Not relevant for setters. */
2559 : false, /* isAlwaysInSlot. Only relevant for getters. */
2560 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2561 : false, /* isTypedMethod. Only relevant for methods. */
2562 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2563 : };
2564 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2565 : static_assert(0 < 5, "There is no slot for us");
2566 :
2567 : static bool
2568 0 : alert(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
2569 : {
2570 0 : unsigned argcount = std::min(args.length(), 1u);
2571 0 : switch (argcount) {
2572 : case 0: {
2573 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
2574 : // Return false from the JSNative in order to trigger
2575 : // an uncatchable exception.
2576 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2577 0 : return false;
2578 : }
2579 0 : binding_detail::FastErrorResult rv;
2580 0 : JSCompartment* compartment = js::GetContextCompartment(cx);
2581 0 : MOZ_ASSERT(compartment);
2582 0 : JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
2583 : // Initializing a nonnull is pretty darn annoying...
2584 0 : NonNull<nsIPrincipal> subjectPrincipal;
2585 0 : subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
2586 0 : self->Alert(subjectPrincipal, rv);
2587 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2588 0 : return false;
2589 : }
2590 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2591 0 : args.rval().setUndefined();
2592 0 : return true;
2593 : break;
2594 : }
2595 : case 1: {
2596 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
2597 : // Return false from the JSNative in order to trigger
2598 : // an uncatchable exception.
2599 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2600 0 : return false;
2601 : }
2602 0 : binding_detail::FakeString arg0;
2603 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2604 0 : return false;
2605 : }
2606 0 : binding_detail::FastErrorResult rv;
2607 0 : JSCompartment* compartment = js::GetContextCompartment(cx);
2608 0 : MOZ_ASSERT(compartment);
2609 0 : JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
2610 : // Initializing a nonnull is pretty darn annoying...
2611 0 : NonNull<nsIPrincipal> subjectPrincipal;
2612 0 : subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
2613 0 : self->Alert(NonNullHelper(Constify(arg0)), subjectPrincipal, rv);
2614 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2615 0 : return false;
2616 : }
2617 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2618 0 : args.rval().setUndefined();
2619 0 : return true;
2620 : break;
2621 : }
2622 : default: {
2623 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.alert");
2624 : break;
2625 : }
2626 : }
2627 : MOZ_CRASH("We have an always-returning default case");
2628 : return false;
2629 : }
2630 :
2631 : static const JSJitInfo alert_methodinfo = {
2632 : { (JSJitGetterOp)alert },
2633 : { prototypes::id::Window },
2634 : { PrototypeTraits<prototypes::id::Window>::Depth },
2635 : JSJitInfo::Method,
2636 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2637 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2638 : false, /* isInfallible. False in setters. */
2639 : false, /* isMovable. Not relevant for setters. */
2640 : false, /* isEliminatable. Not relevant for setters. */
2641 : false, /* isAlwaysInSlot. Only relevant for getters. */
2642 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2643 : false, /* isTypedMethod. Only relevant for methods. */
2644 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2645 : };
2646 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2647 : static_assert(0 < 5, "There is no slot for us");
2648 :
2649 : static bool
2650 0 : confirm(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
2651 : {
2652 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
2653 : // Return false from the JSNative in order to trigger
2654 : // an uncatchable exception.
2655 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2656 0 : return false;
2657 : }
2658 0 : binding_detail::FakeString arg0;
2659 0 : if (args.hasDefined(0)) {
2660 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2661 0 : return false;
2662 : }
2663 : } else {
2664 : static const char16_t data[] = { 0 };
2665 0 : arg0.Rebind(data, ArrayLength(data) - 1);
2666 : }
2667 0 : binding_detail::FastErrorResult rv;
2668 0 : JSCompartment* compartment = js::GetContextCompartment(cx);
2669 0 : MOZ_ASSERT(compartment);
2670 0 : JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
2671 : // Initializing a nonnull is pretty darn annoying...
2672 0 : NonNull<nsIPrincipal> subjectPrincipal;
2673 0 : subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
2674 0 : bool result(self->Confirm(NonNullHelper(Constify(arg0)), subjectPrincipal, rv));
2675 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2676 0 : return false;
2677 : }
2678 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2679 0 : args.rval().setBoolean(result);
2680 0 : return true;
2681 : }
2682 :
2683 : static const JSJitInfo confirm_methodinfo = {
2684 : { (JSJitGetterOp)confirm },
2685 : { prototypes::id::Window },
2686 : { PrototypeTraits<prototypes::id::Window>::Depth },
2687 : JSJitInfo::Method,
2688 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2689 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
2690 : false, /* isInfallible. False in setters. */
2691 : false, /* isMovable. Not relevant for setters. */
2692 : false, /* isEliminatable. Not relevant for setters. */
2693 : false, /* isAlwaysInSlot. Only relevant for getters. */
2694 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2695 : false, /* isTypedMethod. Only relevant for methods. */
2696 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2697 : };
2698 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2699 : static_assert(0 < 5, "There is no slot for us");
2700 :
2701 : static bool
2702 0 : prompt(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
2703 : {
2704 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
2705 : // Return false from the JSNative in order to trigger
2706 : // an uncatchable exception.
2707 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2708 0 : return false;
2709 : }
2710 0 : binding_detail::FakeString arg0;
2711 0 : if (args.hasDefined(0)) {
2712 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2713 0 : return false;
2714 : }
2715 : } else {
2716 : static const char16_t data[] = { 0 };
2717 0 : arg0.Rebind(data, ArrayLength(data) - 1);
2718 : }
2719 0 : binding_detail::FakeString arg1;
2720 0 : if (args.hasDefined(1)) {
2721 0 : if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
2722 0 : return false;
2723 : }
2724 : } else {
2725 : static const char16_t data[] = { 0 };
2726 0 : arg1.Rebind(data, ArrayLength(data) - 1);
2727 : }
2728 0 : binding_detail::FastErrorResult rv;
2729 0 : JSCompartment* compartment = js::GetContextCompartment(cx);
2730 0 : MOZ_ASSERT(compartment);
2731 0 : JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
2732 : // Initializing a nonnull is pretty darn annoying...
2733 0 : NonNull<nsIPrincipal> subjectPrincipal;
2734 0 : subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
2735 0 : DOMString result;
2736 0 : self->Prompt(NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)), result, subjectPrincipal, rv);
2737 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2738 0 : return false;
2739 : }
2740 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2741 0 : if (!xpc::StringToJsval(cx, result, args.rval())) {
2742 0 : return false;
2743 : }
2744 0 : return true;
2745 : }
2746 :
2747 : static const JSJitInfo prompt_methodinfo = {
2748 : { (JSJitGetterOp)prompt },
2749 : { prototypes::id::Window },
2750 : { PrototypeTraits<prototypes::id::Window>::Depth },
2751 : JSJitInfo::Method,
2752 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2753 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
2754 : false, /* isInfallible. False in setters. */
2755 : false, /* isMovable. Not relevant for setters. */
2756 : false, /* isEliminatable. Not relevant for setters. */
2757 : false, /* isAlwaysInSlot. Only relevant for getters. */
2758 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2759 : false, /* isTypedMethod. Only relevant for methods. */
2760 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2761 : };
2762 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2763 : static_assert(0 < 5, "There is no slot for us");
2764 :
2765 : static bool
2766 0 : print(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
2767 : {
2768 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
2769 : // Return false from the JSNative in order to trigger
2770 : // an uncatchable exception.
2771 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2772 0 : return false;
2773 : }
2774 0 : binding_detail::FastErrorResult rv;
2775 0 : self->Print(rv);
2776 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2777 0 : return false;
2778 : }
2779 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2780 0 : args.rval().setUndefined();
2781 0 : return true;
2782 : }
2783 :
2784 : static const JSJitInfo print_methodinfo = {
2785 : { (JSJitGetterOp)print },
2786 : { prototypes::id::Window },
2787 : { PrototypeTraits<prototypes::id::Window>::Depth },
2788 : JSJitInfo::Method,
2789 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2790 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2791 : false, /* isInfallible. False in setters. */
2792 : false, /* isMovable. Not relevant for setters. */
2793 : false, /* isEliminatable. Not relevant for setters. */
2794 : false, /* isAlwaysInSlot. Only relevant for getters. */
2795 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2796 : false, /* isTypedMethod. Only relevant for methods. */
2797 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2798 : };
2799 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2800 : static_assert(0 < 5, "There is no slot for us");
2801 :
2802 : static bool
2803 0 : showModalDialog(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
2804 : {
2805 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
2806 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.showModalDialog");
2807 : }
2808 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
2809 : // Return false from the JSNative in order to trigger
2810 : // an uncatchable exception.
2811 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2812 0 : return false;
2813 : }
2814 0 : binding_detail::FakeString arg0;
2815 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
2816 0 : return false;
2817 : }
2818 0 : JS::Rooted<JS::Value> arg1(cx);
2819 0 : if (args.hasDefined(1)) {
2820 0 : arg1 = args[1];
2821 : } else {
2822 0 : arg1 = JS::UndefinedValue();
2823 : }
2824 0 : binding_detail::FakeString arg2;
2825 0 : if (args.hasDefined(2)) {
2826 0 : if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2)) {
2827 0 : return false;
2828 : }
2829 : } else {
2830 : static const char16_t data[] = { 0 };
2831 0 : arg2.Rebind(data, ArrayLength(data) - 1);
2832 : }
2833 0 : binding_detail::FastErrorResult rv;
2834 0 : JSCompartment* compartment = js::GetContextCompartment(cx);
2835 0 : MOZ_ASSERT(compartment);
2836 0 : JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
2837 : // Initializing a nonnull is pretty darn annoying...
2838 0 : NonNull<nsIPrincipal> subjectPrincipal;
2839 0 : subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
2840 0 : JS::Rooted<JS::Value> result(cx);
2841 0 : self->ShowModalDialog(cx, NonNullHelper(Constify(arg0)), arg1, NonNullHelper(Constify(arg2)), &result, subjectPrincipal, rv);
2842 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2843 0 : return false;
2844 : }
2845 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2846 0 : JS::ExposeValueToActiveJS(result);
2847 0 : args.rval().set(result);
2848 0 : if (!MaybeWrapValue(cx, args.rval())) {
2849 0 : return false;
2850 : }
2851 0 : return true;
2852 : }
2853 :
2854 : static const JSJitInfo showModalDialog_methodinfo = {
2855 : { (JSJitGetterOp)showModalDialog },
2856 : { prototypes::id::Window },
2857 : { PrototypeTraits<prototypes::id::Window>::Depth },
2858 : JSJitInfo::Method,
2859 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2860 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
2861 : false, /* isInfallible. False in setters. */
2862 : false, /* isMovable. Not relevant for setters. */
2863 : false, /* isEliminatable. Not relevant for setters. */
2864 : false, /* isAlwaysInSlot. Only relevant for getters. */
2865 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2866 : false, /* isTypedMethod. Only relevant for methods. */
2867 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2868 : };
2869 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2870 : static_assert(0 < 5, "There is no slot for us");
2871 :
2872 : static bool
2873 0 : postMessage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
2874 : {
2875 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
2876 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.postMessage");
2877 : }
2878 0 : JS::Rooted<JS::Value> arg0(cx);
2879 0 : arg0 = args[0];
2880 0 : binding_detail::FakeString arg1;
2881 0 : if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
2882 0 : return false;
2883 : }
2884 0 : binding_detail::AutoSequence<JSObject*> arg2;
2885 0 : SequenceRooter<JSObject*> arg2_holder(cx, &arg2);
2886 0 : if (args.hasDefined(2)) {
2887 0 : if (args[2].isObject()) {
2888 0 : JS::ForOfIterator iter(cx);
2889 0 : if (!iter.init(args[2], JS::ForOfIterator::AllowNonIterable)) {
2890 0 : return false;
2891 : }
2892 0 : if (!iter.valueIsIterable()) {
2893 0 : ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 3 of Window.postMessage");
2894 0 : return false;
2895 : }
2896 0 : binding_detail::AutoSequence<JSObject*> &arr = arg2;
2897 0 : JS::Rooted<JS::Value> temp(cx);
2898 : while (true) {
2899 : bool done;
2900 0 : if (!iter.next(&temp, &done)) {
2901 0 : return false;
2902 : }
2903 0 : if (done) {
2904 0 : break;
2905 : }
2906 0 : JSObject** slotPtr = arr.AppendElement(mozilla::fallible);
2907 0 : if (!slotPtr) {
2908 0 : JS_ReportOutOfMemory(cx);
2909 0 : return false;
2910 : }
2911 0 : JSObject*& slot = *slotPtr;
2912 0 : if (temp.isObject()) {
2913 0 : slot = &temp.toObject();
2914 : } else {
2915 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Element of argument 3 of Window.postMessage");
2916 0 : return false;
2917 : }
2918 0 : }
2919 : } else {
2920 0 : ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 3 of Window.postMessage");
2921 0 : return false;
2922 : }
2923 : } else {
2924 : /* Array is already empty; nothing to do */
2925 : }
2926 0 : binding_detail::FastErrorResult rv;
2927 0 : JSCompartment* compartment = js::GetContextCompartment(cx);
2928 0 : MOZ_ASSERT(compartment);
2929 0 : JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
2930 : // Initializing a nonnull is pretty darn annoying...
2931 0 : NonNull<nsIPrincipal> subjectPrincipal;
2932 0 : subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
2933 0 : self->PostMessageMoz(cx, arg0, NonNullHelper(Constify(arg1)), Constify(arg2), subjectPrincipal, rv);
2934 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2935 0 : return false;
2936 : }
2937 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2938 0 : args.rval().setUndefined();
2939 0 : return true;
2940 : }
2941 :
2942 : static const JSJitInfo postMessage_methodinfo = {
2943 : { (JSJitGetterOp)postMessage },
2944 : { prototypes::id::Window },
2945 : { PrototypeTraits<prototypes::id::Window>::Depth },
2946 : JSJitInfo::Method,
2947 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2948 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2949 : false, /* isInfallible. False in setters. */
2950 : false, /* isMovable. Not relevant for setters. */
2951 : false, /* isEliminatable. Not relevant for setters. */
2952 : false, /* isAlwaysInSlot. Only relevant for getters. */
2953 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2954 : false, /* isTypedMethod. Only relevant for methods. */
2955 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2956 : };
2957 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2958 : static_assert(0 < 5, "There is no slot for us");
2959 :
2960 : static bool
2961 0 : get_onappinstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
2962 : {
2963 0 : RefPtr<EventHandlerNonNull> result(self->GetOnappinstalled());
2964 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2965 0 : if (result) {
2966 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
2967 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
2968 0 : return false;
2969 : }
2970 0 : return true;
2971 : } else {
2972 0 : args.rval().setNull();
2973 0 : return true;
2974 : }
2975 : }
2976 :
2977 : static bool
2978 0 : set_onappinstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
2979 : {
2980 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
2981 0 : if (args[0].isObject()) {
2982 : { // scope for tempRoot
2983 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
2984 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
2985 : }
2986 : } else {
2987 0 : arg0 = nullptr;
2988 : }
2989 0 : self->SetOnappinstalled(Constify(arg0));
2990 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2991 :
2992 0 : return true;
2993 : }
2994 :
2995 : static const JSJitInfo onappinstalled_getterinfo = {
2996 : { (JSJitGetterOp)get_onappinstalled },
2997 : { prototypes::id::Window },
2998 : { PrototypeTraits<prototypes::id::Window>::Depth },
2999 : JSJitInfo::Getter,
3000 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3001 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
3002 : false, /* isInfallible. False in setters. */
3003 : false, /* isMovable. Not relevant for setters. */
3004 : false, /* isEliminatable. Not relevant for setters. */
3005 : false, /* isAlwaysInSlot. Only relevant for getters. */
3006 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3007 : false, /* isTypedMethod. Only relevant for methods. */
3008 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3009 : };
3010 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3011 : static_assert(0 < 5, "There is no slot for us");
3012 : static const JSJitInfo onappinstalled_setterinfo = {
3013 : { (JSJitGetterOp)set_onappinstalled },
3014 : { prototypes::id::Window },
3015 : { PrototypeTraits<prototypes::id::Window>::Depth },
3016 : JSJitInfo::Setter,
3017 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3018 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3019 : false, /* isInfallible. False in setters. */
3020 : false, /* isMovable. Not relevant for setters. */
3021 : false, /* isEliminatable. Not relevant for setters. */
3022 : false, /* isAlwaysInSlot. Only relevant for getters. */
3023 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3024 : false, /* isTypedMethod. Only relevant for methods. */
3025 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3026 : };
3027 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3028 : static_assert(0 < 5, "There is no slot for us");
3029 :
3030 : static bool
3031 0 : captureEvents(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
3032 : {
3033 0 : self->CaptureEvents();
3034 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3035 0 : args.rval().setUndefined();
3036 0 : return true;
3037 : }
3038 :
3039 : static const JSJitInfo captureEvents_methodinfo = {
3040 : { (JSJitGetterOp)captureEvents },
3041 : { prototypes::id::Window },
3042 : { PrototypeTraits<prototypes::id::Window>::Depth },
3043 : JSJitInfo::Method,
3044 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3045 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3046 : true, /* isInfallible. False in setters. */
3047 : false, /* isMovable. Not relevant for setters. */
3048 : false, /* isEliminatable. Not relevant for setters. */
3049 : false, /* isAlwaysInSlot. Only relevant for getters. */
3050 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3051 : false, /* isTypedMethod. Only relevant for methods. */
3052 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3053 : };
3054 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3055 : static_assert(0 < 5, "There is no slot for us");
3056 :
3057 : static bool
3058 0 : releaseEvents(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
3059 : {
3060 0 : self->ReleaseEvents();
3061 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3062 0 : args.rval().setUndefined();
3063 0 : return true;
3064 : }
3065 :
3066 : static const JSJitInfo releaseEvents_methodinfo = {
3067 : { (JSJitGetterOp)releaseEvents },
3068 : { prototypes::id::Window },
3069 : { PrototypeTraits<prototypes::id::Window>::Depth },
3070 : JSJitInfo::Method,
3071 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3072 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3073 : true, /* isInfallible. False in setters. */
3074 : false, /* isMovable. Not relevant for setters. */
3075 : false, /* isEliminatable. Not relevant for setters. */
3076 : false, /* isAlwaysInSlot. Only relevant for getters. */
3077 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3078 : false, /* isTypedMethod. Only relevant for methods. */
3079 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3080 : };
3081 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3082 : static_assert(0 < 5, "There is no slot for us");
3083 :
3084 : static bool
3085 0 : getSelection(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
3086 : {
3087 0 : binding_detail::FastErrorResult rv;
3088 0 : auto result(StrongOrRawPtr<mozilla::dom::Selection>(self->GetSelection(rv)));
3089 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3090 0 : return false;
3091 : }
3092 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3093 0 : if (!result) {
3094 0 : args.rval().setNull();
3095 0 : return true;
3096 : }
3097 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
3098 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
3099 0 : return false;
3100 : }
3101 0 : return true;
3102 : }
3103 :
3104 : static const JSJitInfo getSelection_methodinfo = {
3105 : { (JSJitGetterOp)getSelection },
3106 : { prototypes::id::Window },
3107 : { PrototypeTraits<prototypes::id::Window>::Depth },
3108 : JSJitInfo::Method,
3109 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3110 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
3111 : false, /* isInfallible. False in setters. */
3112 : false, /* isMovable. Not relevant for setters. */
3113 : false, /* isEliminatable. Not relevant for setters. */
3114 : false, /* isAlwaysInSlot. Only relevant for getters. */
3115 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3116 : false, /* isTypedMethod. Only relevant for methods. */
3117 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3118 : };
3119 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3120 : static_assert(0 < 5, "There is no slot for us");
3121 :
3122 : static bool
3123 4 : getComputedStyle(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
3124 : {
3125 4 : if (MOZ_UNLIKELY(args.length() < 1)) {
3126 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getComputedStyle");
3127 : }
3128 4 : NonNull<mozilla::dom::Element> arg0;
3129 4 : if (args[0].isObject()) {
3130 : {
3131 4 : nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[0], arg0);
3132 4 : if (NS_FAILED(rv)) {
3133 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.getComputedStyle", "Element");
3134 0 : return false;
3135 : }
3136 : }
3137 : } else {
3138 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.getComputedStyle");
3139 0 : return false;
3140 : }
3141 8 : binding_detail::FakeString arg1;
3142 4 : if (args.hasDefined(1)) {
3143 0 : if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
3144 0 : return false;
3145 : }
3146 : } else {
3147 : static const char16_t data[] = { 0 };
3148 4 : arg1.Rebind(data, ArrayLength(data) - 1);
3149 : }
3150 8 : binding_detail::FastErrorResult rv;
3151 8 : auto result(StrongOrRawPtr<nsICSSDeclaration>(self->GetComputedStyle(NonNullHelper(arg0), NonNullHelper(Constify(arg1)), rv)));
3152 4 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3153 0 : return false;
3154 : }
3155 4 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3156 : static_assert(!IsPointer<decltype(result)>::value,
3157 : "NewObject implies that we need to keep the object alive with a strong reference.");
3158 4 : if (!result) {
3159 0 : args.rval().setNull();
3160 0 : return true;
3161 : }
3162 4 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
3163 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
3164 0 : return false;
3165 : }
3166 4 : return true;
3167 : }
3168 :
3169 : static const JSJitInfo getComputedStyle_methodinfo = {
3170 : { (JSJitGetterOp)getComputedStyle },
3171 : { prototypes::id::Window },
3172 : { PrototypeTraits<prototypes::id::Window>::Depth },
3173 : JSJitInfo::Method,
3174 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3175 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
3176 : false, /* isInfallible. False in setters. */
3177 : false, /* isMovable. Not relevant for setters. */
3178 : false, /* isEliminatable. Not relevant for setters. */
3179 : false, /* isAlwaysInSlot. Only relevant for getters. */
3180 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3181 : false, /* isTypedMethod. Only relevant for methods. */
3182 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3183 : };
3184 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3185 : static_assert(0 < 5, "There is no slot for us");
3186 :
3187 : static bool
3188 3 : matchMedia(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
3189 : {
3190 3 : if (MOZ_UNLIKELY(args.length() < 1)) {
3191 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.matchMedia");
3192 : }
3193 6 : binding_detail::FakeString arg0;
3194 3 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
3195 0 : return false;
3196 : }
3197 6 : binding_detail::FastErrorResult rv;
3198 6 : auto result(StrongOrRawPtr<mozilla::dom::MediaQueryList>(self->MatchMedia(NonNullHelper(Constify(arg0)), rv)));
3199 3 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3200 0 : return false;
3201 : }
3202 3 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3203 : static_assert(!IsPointer<decltype(result)>::value,
3204 : "NewObject implies that we need to keep the object alive with a strong reference.");
3205 3 : if (!result) {
3206 0 : args.rval().setNull();
3207 0 : return true;
3208 : }
3209 3 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
3210 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
3211 0 : return false;
3212 : }
3213 3 : return true;
3214 : }
3215 :
3216 : static const JSJitInfo matchMedia_methodinfo = {
3217 : { (JSJitGetterOp)matchMedia },
3218 : { prototypes::id::Window },
3219 : { PrototypeTraits<prototypes::id::Window>::Depth },
3220 : JSJitInfo::Method,
3221 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3222 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
3223 : false, /* isInfallible. False in setters. */
3224 : false, /* isMovable. Not relevant for setters. */
3225 : false, /* isEliminatable. Not relevant for setters. */
3226 : false, /* isAlwaysInSlot. Only relevant for getters. */
3227 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3228 : false, /* isTypedMethod. Only relevant for methods. */
3229 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3230 : };
3231 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3232 : static_assert(0 < 5, "There is no slot for us");
3233 :
3234 : static bool
3235 5 : get_screen(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
3236 : {
3237 10 : binding_detail::FastErrorResult rv;
3238 5 : auto result(StrongOrRawPtr<nsScreen>(self->GetScreen(rv)));
3239 5 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3240 0 : return false;
3241 : }
3242 5 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3243 5 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
3244 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
3245 0 : return false;
3246 : }
3247 5 : return true;
3248 : }
3249 :
3250 : static bool
3251 0 : set_screen(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
3252 : {
3253 0 : return JS_DefineProperty(cx, obj, "screen", args[0], JSPROP_ENUMERATE);
3254 : }
3255 :
3256 : static const JSJitInfo screen_getterinfo = {
3257 : { (JSJitGetterOp)get_screen },
3258 : { prototypes::id::Window },
3259 : { PrototypeTraits<prototypes::id::Window>::Depth },
3260 : JSJitInfo::Getter,
3261 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3262 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
3263 : false, /* isInfallible. False in setters. */
3264 : false, /* isMovable. Not relevant for setters. */
3265 : false, /* isEliminatable. Not relevant for setters. */
3266 : false, /* isAlwaysInSlot. Only relevant for getters. */
3267 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3268 : false, /* isTypedMethod. Only relevant for methods. */
3269 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3270 : };
3271 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3272 : static_assert(0 < 5, "There is no slot for us");
3273 : static const JSJitInfo screen_setterinfo = {
3274 : { (JSJitGetterOp)set_screen },
3275 : { prototypes::id::Window },
3276 : { PrototypeTraits<prototypes::id::Window>::Depth },
3277 : JSJitInfo::Setter,
3278 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3279 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3280 : false, /* isInfallible. False in setters. */
3281 : false, /* isMovable. Not relevant for setters. */
3282 : false, /* isEliminatable. Not relevant for setters. */
3283 : false, /* isAlwaysInSlot. Only relevant for getters. */
3284 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3285 : false, /* isTypedMethod. Only relevant for methods. */
3286 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3287 : };
3288 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3289 : static_assert(0 < 5, "There is no slot for us");
3290 :
3291 : static bool
3292 0 : moveTo(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
3293 : {
3294 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
3295 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.moveTo");
3296 : }
3297 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
3298 : // Return false from the JSNative in order to trigger
3299 : // an uncatchable exception.
3300 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3301 0 : return false;
3302 : }
3303 : int32_t arg0;
3304 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
3305 0 : return false;
3306 : }
3307 : int32_t arg1;
3308 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
3309 0 : return false;
3310 : }
3311 0 : binding_detail::FastErrorResult rv;
3312 0 : self->MoveTo(arg0, arg1, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3313 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3314 0 : return false;
3315 : }
3316 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3317 0 : args.rval().setUndefined();
3318 0 : return true;
3319 : }
3320 :
3321 : static const JSJitInfo moveTo_methodinfo = {
3322 : { (JSJitGetterOp)moveTo },
3323 : { prototypes::id::Window },
3324 : { PrototypeTraits<prototypes::id::Window>::Depth },
3325 : JSJitInfo::Method,
3326 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3327 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3328 : false, /* isInfallible. False in setters. */
3329 : false, /* isMovable. Not relevant for setters. */
3330 : false, /* isEliminatable. Not relevant for setters. */
3331 : false, /* isAlwaysInSlot. Only relevant for getters. */
3332 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3333 : false, /* isTypedMethod. Only relevant for methods. */
3334 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3335 : };
3336 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3337 : static_assert(0 < 5, "There is no slot for us");
3338 :
3339 : static bool
3340 0 : moveBy(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
3341 : {
3342 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
3343 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.moveBy");
3344 : }
3345 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
3346 : // Return false from the JSNative in order to trigger
3347 : // an uncatchable exception.
3348 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3349 0 : return false;
3350 : }
3351 : int32_t arg0;
3352 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
3353 0 : return false;
3354 : }
3355 : int32_t arg1;
3356 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
3357 0 : return false;
3358 : }
3359 0 : binding_detail::FastErrorResult rv;
3360 0 : self->MoveBy(arg0, arg1, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3361 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3362 0 : return false;
3363 : }
3364 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3365 0 : args.rval().setUndefined();
3366 0 : return true;
3367 : }
3368 :
3369 : static const JSJitInfo moveBy_methodinfo = {
3370 : { (JSJitGetterOp)moveBy },
3371 : { prototypes::id::Window },
3372 : { PrototypeTraits<prototypes::id::Window>::Depth },
3373 : JSJitInfo::Method,
3374 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3375 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3376 : false, /* isInfallible. False in setters. */
3377 : false, /* isMovable. Not relevant for setters. */
3378 : false, /* isEliminatable. Not relevant for setters. */
3379 : false, /* isAlwaysInSlot. Only relevant for getters. */
3380 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3381 : false, /* isTypedMethod. Only relevant for methods. */
3382 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3383 : };
3384 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3385 : static_assert(0 < 5, "There is no slot for us");
3386 :
3387 : static bool
3388 0 : resizeTo(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
3389 : {
3390 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
3391 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.resizeTo");
3392 : }
3393 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
3394 : // Return false from the JSNative in order to trigger
3395 : // an uncatchable exception.
3396 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3397 0 : return false;
3398 : }
3399 : int32_t arg0;
3400 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
3401 0 : return false;
3402 : }
3403 : int32_t arg1;
3404 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
3405 0 : return false;
3406 : }
3407 0 : binding_detail::FastErrorResult rv;
3408 0 : self->ResizeTo(arg0, arg1, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3409 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3410 0 : return false;
3411 : }
3412 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3413 0 : args.rval().setUndefined();
3414 0 : return true;
3415 : }
3416 :
3417 : static const JSJitInfo resizeTo_methodinfo = {
3418 : { (JSJitGetterOp)resizeTo },
3419 : { prototypes::id::Window },
3420 : { PrototypeTraits<prototypes::id::Window>::Depth },
3421 : JSJitInfo::Method,
3422 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3423 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3424 : false, /* isInfallible. False in setters. */
3425 : false, /* isMovable. Not relevant for setters. */
3426 : false, /* isEliminatable. Not relevant for setters. */
3427 : false, /* isAlwaysInSlot. Only relevant for getters. */
3428 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3429 : false, /* isTypedMethod. Only relevant for methods. */
3430 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3431 : };
3432 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3433 : static_assert(0 < 5, "There is no slot for us");
3434 :
3435 : static bool
3436 0 : resizeBy(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
3437 : {
3438 0 : if (MOZ_UNLIKELY(args.length() < 2)) {
3439 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.resizeBy");
3440 : }
3441 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
3442 : // Return false from the JSNative in order to trigger
3443 : // an uncatchable exception.
3444 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3445 0 : return false;
3446 : }
3447 : int32_t arg0;
3448 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
3449 0 : return false;
3450 : }
3451 : int32_t arg1;
3452 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
3453 0 : return false;
3454 : }
3455 0 : binding_detail::FastErrorResult rv;
3456 0 : self->ResizeBy(arg0, arg1, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3457 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3458 0 : return false;
3459 : }
3460 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3461 0 : args.rval().setUndefined();
3462 0 : return true;
3463 : }
3464 :
3465 : static const JSJitInfo resizeBy_methodinfo = {
3466 : { (JSJitGetterOp)resizeBy },
3467 : { prototypes::id::Window },
3468 : { PrototypeTraits<prototypes::id::Window>::Depth },
3469 : JSJitInfo::Method,
3470 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3471 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3472 : false, /* isInfallible. False in setters. */
3473 : false, /* isMovable. Not relevant for setters. */
3474 : false, /* isEliminatable. Not relevant for setters. */
3475 : false, /* isAlwaysInSlot. Only relevant for getters. */
3476 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3477 : false, /* isTypedMethod. Only relevant for methods. */
3478 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3479 : };
3480 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3481 : static_assert(0 < 5, "There is no slot for us");
3482 :
3483 : static bool
3484 0 : get_innerWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
3485 : {
3486 0 : binding_detail::FastErrorResult rv;
3487 0 : JS::Rooted<JS::Value> result(cx);
3488 0 : self->GetInnerWidth(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3489 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3490 0 : return false;
3491 : }
3492 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3493 0 : JS::ExposeValueToActiveJS(result);
3494 0 : args.rval().set(result);
3495 0 : if (!MaybeWrapValue(cx, args.rval())) {
3496 0 : return false;
3497 : }
3498 0 : return true;
3499 : }
3500 :
3501 : static bool
3502 0 : set_innerWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
3503 : {
3504 0 : JS::Rooted<JS::Value> arg0(cx);
3505 0 : arg0 = args[0];
3506 0 : binding_detail::FastErrorResult rv;
3507 0 : self->SetInnerWidth(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3508 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3509 0 : return false;
3510 : }
3511 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3512 :
3513 0 : return true;
3514 : }
3515 :
3516 : static const JSJitInfo innerWidth_getterinfo = {
3517 : { (JSJitGetterOp)get_innerWidth },
3518 : { prototypes::id::Window },
3519 : { PrototypeTraits<prototypes::id::Window>::Depth },
3520 : JSJitInfo::Getter,
3521 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3522 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
3523 : false, /* isInfallible. False in setters. */
3524 : false, /* isMovable. Not relevant for setters. */
3525 : false, /* isEliminatable. Not relevant for setters. */
3526 : false, /* isAlwaysInSlot. Only relevant for getters. */
3527 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3528 : false, /* isTypedMethod. Only relevant for methods. */
3529 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3530 : };
3531 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3532 : static_assert(0 < 5, "There is no slot for us");
3533 : static const JSJitInfo innerWidth_setterinfo = {
3534 : { (JSJitGetterOp)set_innerWidth },
3535 : { prototypes::id::Window },
3536 : { PrototypeTraits<prototypes::id::Window>::Depth },
3537 : JSJitInfo::Setter,
3538 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3539 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3540 : false, /* isInfallible. False in setters. */
3541 : false, /* isMovable. Not relevant for setters. */
3542 : false, /* isEliminatable. Not relevant for setters. */
3543 : false, /* isAlwaysInSlot. Only relevant for getters. */
3544 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3545 : false, /* isTypedMethod. Only relevant for methods. */
3546 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3547 : };
3548 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3549 : static_assert(0 < 5, "There is no slot for us");
3550 :
3551 : static bool
3552 0 : get_innerHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
3553 : {
3554 0 : binding_detail::FastErrorResult rv;
3555 0 : JS::Rooted<JS::Value> result(cx);
3556 0 : self->GetInnerHeight(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3557 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3558 0 : return false;
3559 : }
3560 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3561 0 : JS::ExposeValueToActiveJS(result);
3562 0 : args.rval().set(result);
3563 0 : if (!MaybeWrapValue(cx, args.rval())) {
3564 0 : return false;
3565 : }
3566 0 : return true;
3567 : }
3568 :
3569 : static bool
3570 0 : set_innerHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
3571 : {
3572 0 : JS::Rooted<JS::Value> arg0(cx);
3573 0 : arg0 = args[0];
3574 0 : binding_detail::FastErrorResult rv;
3575 0 : self->SetInnerHeight(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
3576 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3577 0 : return false;
3578 : }
3579 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3580 :
3581 0 : return true;
3582 : }
3583 :
3584 : static const JSJitInfo innerHeight_getterinfo = {
3585 : { (JSJitGetterOp)get_innerHeight },
3586 : { prototypes::id::Window },
3587 : { PrototypeTraits<prototypes::id::Window>::Depth },
3588 : JSJitInfo::Getter,
3589 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3590 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
3591 : false, /* isInfallible. False in setters. */
3592 : false, /* isMovable. Not relevant for setters. */
3593 : false, /* isEliminatable. Not relevant for setters. */
3594 : false, /* isAlwaysInSlot. Only relevant for getters. */
3595 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3596 : false, /* isTypedMethod. Only relevant for methods. */
3597 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3598 : };
3599 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3600 : static_assert(0 < 5, "There is no slot for us");
3601 : static const JSJitInfo innerHeight_setterinfo = {
3602 : { (JSJitGetterOp)set_innerHeight },
3603 : { prototypes::id::Window },
3604 : { PrototypeTraits<prototypes::id::Window>::Depth },
3605 : JSJitInfo::Setter,
3606 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3607 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3608 : false, /* isInfallible. False in setters. */
3609 : false, /* isMovable. Not relevant for setters. */
3610 : false, /* isEliminatable. Not relevant for setters. */
3611 : false, /* isAlwaysInSlot. Only relevant for getters. */
3612 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3613 : false, /* isTypedMethod. Only relevant for methods. */
3614 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3615 : };
3616 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3617 : static_assert(0 < 5, "There is no slot for us");
3618 :
3619 : static bool
3620 0 : scroll(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
3621 : {
3622 0 : unsigned argcount = std::min(args.length(), 2u);
3623 0 : switch (argcount) {
3624 : case 0: {
3625 : MOZ_FALLTHROUGH;
3626 : }
3627 : case 1: {
3628 0 : binding_detail::FastScrollToOptions arg0;
3629 0 : if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue, "Argument 1 of Window.scroll", false)) {
3630 0 : return false;
3631 : }
3632 0 : self->Scroll(Constify(arg0));
3633 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3634 0 : args.rval().setUndefined();
3635 0 : return true;
3636 : break;
3637 : }
3638 : case 2: {
3639 : double arg0;
3640 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
3641 0 : return false;
3642 : }
3643 : double arg1;
3644 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
3645 0 : return false;
3646 : }
3647 0 : self->Scroll(arg0, arg1);
3648 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3649 0 : args.rval().setUndefined();
3650 0 : return true;
3651 : break;
3652 : }
3653 : default: {
3654 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scroll");
3655 : break;
3656 : }
3657 : }
3658 : MOZ_CRASH("We have an always-returning default case");
3659 : return false;
3660 : }
3661 :
3662 : static const JSJitInfo scroll_methodinfo = {
3663 : { (JSJitGetterOp)scroll },
3664 : { prototypes::id::Window },
3665 : { PrototypeTraits<prototypes::id::Window>::Depth },
3666 : JSJitInfo::Method,
3667 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3668 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3669 : false, /* isInfallible. False in setters. */
3670 : false, /* isMovable. Not relevant for setters. */
3671 : false, /* isEliminatable. Not relevant for setters. */
3672 : false, /* isAlwaysInSlot. Only relevant for getters. */
3673 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3674 : false, /* isTypedMethod. Only relevant for methods. */
3675 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3676 : };
3677 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3678 : static_assert(0 < 5, "There is no slot for us");
3679 :
3680 : static bool
3681 0 : scrollTo(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
3682 : {
3683 0 : unsigned argcount = std::min(args.length(), 2u);
3684 0 : switch (argcount) {
3685 : case 0: {
3686 : MOZ_FALLTHROUGH;
3687 : }
3688 : case 1: {
3689 0 : binding_detail::FastScrollToOptions arg0;
3690 0 : if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue, "Argument 1 of Window.scrollTo", false)) {
3691 0 : return false;
3692 : }
3693 0 : self->ScrollTo(Constify(arg0));
3694 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3695 0 : args.rval().setUndefined();
3696 0 : return true;
3697 : break;
3698 : }
3699 : case 2: {
3700 : double arg0;
3701 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
3702 0 : return false;
3703 : }
3704 : double arg1;
3705 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
3706 0 : return false;
3707 : }
3708 0 : self->ScrollTo(arg0, arg1);
3709 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3710 0 : args.rval().setUndefined();
3711 0 : return true;
3712 : break;
3713 : }
3714 : default: {
3715 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scrollTo");
3716 : break;
3717 : }
3718 : }
3719 : MOZ_CRASH("We have an always-returning default case");
3720 : return false;
3721 : }
3722 :
3723 : static const JSJitInfo scrollTo_methodinfo = {
3724 : { (JSJitGetterOp)scrollTo },
3725 : { prototypes::id::Window },
3726 : { PrototypeTraits<prototypes::id::Window>::Depth },
3727 : JSJitInfo::Method,
3728 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3729 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3730 : false, /* isInfallible. False in setters. */
3731 : false, /* isMovable. Not relevant for setters. */
3732 : false, /* isEliminatable. Not relevant for setters. */
3733 : false, /* isAlwaysInSlot. Only relevant for getters. */
3734 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3735 : false, /* isTypedMethod. Only relevant for methods. */
3736 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3737 : };
3738 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3739 : static_assert(0 < 5, "There is no slot for us");
3740 :
3741 : static bool
3742 0 : scrollBy(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
3743 : {
3744 0 : unsigned argcount = std::min(args.length(), 2u);
3745 0 : switch (argcount) {
3746 : case 0: {
3747 : MOZ_FALLTHROUGH;
3748 : }
3749 : case 1: {
3750 0 : binding_detail::FastScrollToOptions arg0;
3751 0 : if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue, "Argument 1 of Window.scrollBy", false)) {
3752 0 : return false;
3753 : }
3754 0 : self->ScrollBy(Constify(arg0));
3755 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3756 0 : args.rval().setUndefined();
3757 0 : return true;
3758 : break;
3759 : }
3760 : case 2: {
3761 : double arg0;
3762 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
3763 0 : return false;
3764 : }
3765 : double arg1;
3766 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
3767 0 : return false;
3768 : }
3769 0 : self->ScrollBy(arg0, arg1);
3770 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3771 0 : args.rval().setUndefined();
3772 0 : return true;
3773 : break;
3774 : }
3775 : default: {
3776 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scrollBy");
3777 : break;
3778 : }
3779 : }
3780 : MOZ_CRASH("We have an always-returning default case");
3781 : return false;
3782 : }
3783 :
3784 : static const JSJitInfo scrollBy_methodinfo = {
3785 : { (JSJitGetterOp)scrollBy },
3786 : { prototypes::id::Window },
3787 : { PrototypeTraits<prototypes::id::Window>::Depth },
3788 : JSJitInfo::Method,
3789 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3790 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3791 : false, /* isInfallible. False in setters. */
3792 : false, /* isMovable. Not relevant for setters. */
3793 : false, /* isEliminatable. Not relevant for setters. */
3794 : false, /* isAlwaysInSlot. Only relevant for getters. */
3795 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3796 : false, /* isTypedMethod. Only relevant for methods. */
3797 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3798 : };
3799 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3800 : static_assert(0 < 5, "There is no slot for us");
3801 :
3802 : static bool
3803 0 : mozScrollSnap(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
3804 : {
3805 0 : self->MozScrollSnap();
3806 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3807 0 : args.rval().setUndefined();
3808 0 : return true;
3809 : }
3810 :
3811 : static const JSJitInfo mozScrollSnap_methodinfo = {
3812 : { (JSJitGetterOp)mozScrollSnap },
3813 : { prototypes::id::Window },
3814 : { PrototypeTraits<prototypes::id::Window>::Depth },
3815 : JSJitInfo::Method,
3816 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3817 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3818 : true, /* isInfallible. False in setters. */
3819 : false, /* isMovable. Not relevant for setters. */
3820 : false, /* isEliminatable. Not relevant for setters. */
3821 : false, /* isAlwaysInSlot. Only relevant for getters. */
3822 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3823 : false, /* isTypedMethod. Only relevant for methods. */
3824 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3825 : };
3826 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3827 : static_assert(0 < 5, "There is no slot for us");
3828 :
3829 : static bool
3830 0 : get_scrollX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
3831 : {
3832 0 : binding_detail::FastErrorResult rv;
3833 0 : double result(self->GetScrollX(rv));
3834 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3835 0 : return false;
3836 : }
3837 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3838 0 : args.rval().set(JS_NumberValue(double(result)));
3839 0 : return true;
3840 : }
3841 :
3842 : static bool
3843 0 : set_scrollX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
3844 : {
3845 0 : return JS_DefineProperty(cx, obj, "scrollX", args[0], JSPROP_ENUMERATE);
3846 : }
3847 :
3848 : static const JSJitInfo scrollX_getterinfo = {
3849 : { (JSJitGetterOp)get_scrollX },
3850 : { prototypes::id::Window },
3851 : { PrototypeTraits<prototypes::id::Window>::Depth },
3852 : JSJitInfo::Getter,
3853 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3854 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
3855 : false, /* isInfallible. False in setters. */
3856 : false, /* isMovable. Not relevant for setters. */
3857 : false, /* isEliminatable. Not relevant for setters. */
3858 : false, /* isAlwaysInSlot. Only relevant for getters. */
3859 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3860 : false, /* isTypedMethod. Only relevant for methods. */
3861 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3862 : };
3863 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3864 : static_assert(0 < 5, "There is no slot for us");
3865 : static const JSJitInfo scrollX_setterinfo = {
3866 : { (JSJitGetterOp)set_scrollX },
3867 : { prototypes::id::Window },
3868 : { PrototypeTraits<prototypes::id::Window>::Depth },
3869 : JSJitInfo::Setter,
3870 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3871 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3872 : false, /* isInfallible. False in setters. */
3873 : false, /* isMovable. Not relevant for setters. */
3874 : false, /* isEliminatable. Not relevant for setters. */
3875 : false, /* isAlwaysInSlot. Only relevant for getters. */
3876 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3877 : false, /* isTypedMethod. Only relevant for methods. */
3878 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3879 : };
3880 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3881 : static_assert(0 < 5, "There is no slot for us");
3882 :
3883 : static bool
3884 0 : get_pageXOffset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
3885 : {
3886 0 : binding_detail::FastErrorResult rv;
3887 0 : double result(self->GetPageXOffset(rv));
3888 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3889 0 : return false;
3890 : }
3891 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3892 0 : args.rval().set(JS_NumberValue(double(result)));
3893 0 : return true;
3894 : }
3895 :
3896 : static bool
3897 0 : set_pageXOffset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
3898 : {
3899 0 : return JS_DefineProperty(cx, obj, "pageXOffset", args[0], JSPROP_ENUMERATE);
3900 : }
3901 :
3902 : static const JSJitInfo pageXOffset_getterinfo = {
3903 : { (JSJitGetterOp)get_pageXOffset },
3904 : { prototypes::id::Window },
3905 : { PrototypeTraits<prototypes::id::Window>::Depth },
3906 : JSJitInfo::Getter,
3907 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3908 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
3909 : false, /* isInfallible. False in setters. */
3910 : false, /* isMovable. Not relevant for setters. */
3911 : false, /* isEliminatable. Not relevant for setters. */
3912 : false, /* isAlwaysInSlot. Only relevant for getters. */
3913 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3914 : false, /* isTypedMethod. Only relevant for methods. */
3915 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3916 : };
3917 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3918 : static_assert(0 < 5, "There is no slot for us");
3919 : static const JSJitInfo pageXOffset_setterinfo = {
3920 : { (JSJitGetterOp)set_pageXOffset },
3921 : { prototypes::id::Window },
3922 : { PrototypeTraits<prototypes::id::Window>::Depth },
3923 : JSJitInfo::Setter,
3924 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3925 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3926 : false, /* isInfallible. False in setters. */
3927 : false, /* isMovable. Not relevant for setters. */
3928 : false, /* isEliminatable. Not relevant for setters. */
3929 : false, /* isAlwaysInSlot. Only relevant for getters. */
3930 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3931 : false, /* isTypedMethod. Only relevant for methods. */
3932 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3933 : };
3934 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3935 : static_assert(0 < 5, "There is no slot for us");
3936 :
3937 : static bool
3938 0 : get_scrollY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
3939 : {
3940 0 : binding_detail::FastErrorResult rv;
3941 0 : double result(self->GetScrollY(rv));
3942 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3943 0 : return false;
3944 : }
3945 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
3946 0 : args.rval().set(JS_NumberValue(double(result)));
3947 0 : return true;
3948 : }
3949 :
3950 : static bool
3951 0 : set_scrollY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
3952 : {
3953 0 : return JS_DefineProperty(cx, obj, "scrollY", args[0], JSPROP_ENUMERATE);
3954 : }
3955 :
3956 : static const JSJitInfo scrollY_getterinfo = {
3957 : { (JSJitGetterOp)get_scrollY },
3958 : { prototypes::id::Window },
3959 : { PrototypeTraits<prototypes::id::Window>::Depth },
3960 : JSJitInfo::Getter,
3961 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3962 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
3963 : false, /* isInfallible. False in setters. */
3964 : false, /* isMovable. Not relevant for setters. */
3965 : false, /* isEliminatable. Not relevant for setters. */
3966 : false, /* isAlwaysInSlot. Only relevant for getters. */
3967 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3968 : false, /* isTypedMethod. Only relevant for methods. */
3969 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3970 : };
3971 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3972 : static_assert(0 < 5, "There is no slot for us");
3973 : static const JSJitInfo scrollY_setterinfo = {
3974 : { (JSJitGetterOp)set_scrollY },
3975 : { prototypes::id::Window },
3976 : { PrototypeTraits<prototypes::id::Window>::Depth },
3977 : JSJitInfo::Setter,
3978 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
3979 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
3980 : false, /* isInfallible. False in setters. */
3981 : false, /* isMovable. Not relevant for setters. */
3982 : false, /* isEliminatable. Not relevant for setters. */
3983 : false, /* isAlwaysInSlot. Only relevant for getters. */
3984 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
3985 : false, /* isTypedMethod. Only relevant for methods. */
3986 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
3987 : };
3988 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3989 : static_assert(0 < 5, "There is no slot for us");
3990 :
3991 : static bool
3992 0 : get_pageYOffset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
3993 : {
3994 0 : binding_detail::FastErrorResult rv;
3995 0 : double result(self->GetPageYOffset(rv));
3996 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
3997 0 : return false;
3998 : }
3999 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4000 0 : args.rval().set(JS_NumberValue(double(result)));
4001 0 : return true;
4002 : }
4003 :
4004 : static bool
4005 0 : set_pageYOffset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
4006 : {
4007 0 : return JS_DefineProperty(cx, obj, "pageYOffset", args[0], JSPROP_ENUMERATE);
4008 : }
4009 :
4010 : static const JSJitInfo pageYOffset_getterinfo = {
4011 : { (JSJitGetterOp)get_pageYOffset },
4012 : { prototypes::id::Window },
4013 : { PrototypeTraits<prototypes::id::Window>::Depth },
4014 : JSJitInfo::Getter,
4015 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4016 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
4017 : false, /* isInfallible. False in setters. */
4018 : false, /* isMovable. Not relevant for setters. */
4019 : false, /* isEliminatable. Not relevant for setters. */
4020 : false, /* isAlwaysInSlot. Only relevant for getters. */
4021 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4022 : false, /* isTypedMethod. Only relevant for methods. */
4023 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4024 : };
4025 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4026 : static_assert(0 < 5, "There is no slot for us");
4027 : static const JSJitInfo pageYOffset_setterinfo = {
4028 : { (JSJitGetterOp)set_pageYOffset },
4029 : { prototypes::id::Window },
4030 : { PrototypeTraits<prototypes::id::Window>::Depth },
4031 : JSJitInfo::Setter,
4032 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4033 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4034 : false, /* isInfallible. False in setters. */
4035 : false, /* isMovable. Not relevant for setters. */
4036 : false, /* isEliminatable. Not relevant for setters. */
4037 : false, /* isAlwaysInSlot. Only relevant for getters. */
4038 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4039 : false, /* isTypedMethod. Only relevant for methods. */
4040 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4041 : };
4042 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4043 : static_assert(0 < 5, "There is no slot for us");
4044 :
4045 : static bool
4046 0 : get_screenX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
4047 : {
4048 0 : binding_detail::FastErrorResult rv;
4049 0 : JS::Rooted<JS::Value> result(cx);
4050 0 : self->GetScreenX(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4051 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4052 0 : return false;
4053 : }
4054 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4055 0 : JS::ExposeValueToActiveJS(result);
4056 0 : args.rval().set(result);
4057 0 : if (!MaybeWrapValue(cx, args.rval())) {
4058 0 : return false;
4059 : }
4060 0 : return true;
4061 : }
4062 :
4063 : static bool
4064 0 : set_screenX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
4065 : {
4066 0 : JS::Rooted<JS::Value> arg0(cx);
4067 0 : arg0 = args[0];
4068 0 : binding_detail::FastErrorResult rv;
4069 0 : self->SetScreenX(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4070 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4071 0 : return false;
4072 : }
4073 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4074 :
4075 0 : return true;
4076 : }
4077 :
4078 : static const JSJitInfo screenX_getterinfo = {
4079 : { (JSJitGetterOp)get_screenX },
4080 : { prototypes::id::Window },
4081 : { PrototypeTraits<prototypes::id::Window>::Depth },
4082 : JSJitInfo::Getter,
4083 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4084 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
4085 : false, /* isInfallible. False in setters. */
4086 : false, /* isMovable. Not relevant for setters. */
4087 : false, /* isEliminatable. Not relevant for setters. */
4088 : false, /* isAlwaysInSlot. Only relevant for getters. */
4089 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4090 : false, /* isTypedMethod. Only relevant for methods. */
4091 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4092 : };
4093 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4094 : static_assert(0 < 5, "There is no slot for us");
4095 : static const JSJitInfo screenX_setterinfo = {
4096 : { (JSJitGetterOp)set_screenX },
4097 : { prototypes::id::Window },
4098 : { PrototypeTraits<prototypes::id::Window>::Depth },
4099 : JSJitInfo::Setter,
4100 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4101 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4102 : false, /* isInfallible. False in setters. */
4103 : false, /* isMovable. Not relevant for setters. */
4104 : false, /* isEliminatable. Not relevant for setters. */
4105 : false, /* isAlwaysInSlot. Only relevant for getters. */
4106 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4107 : false, /* isTypedMethod. Only relevant for methods. */
4108 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4109 : };
4110 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4111 : static_assert(0 < 5, "There is no slot for us");
4112 :
4113 : static bool
4114 0 : get_screenY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
4115 : {
4116 0 : binding_detail::FastErrorResult rv;
4117 0 : JS::Rooted<JS::Value> result(cx);
4118 0 : self->GetScreenY(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4119 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4120 0 : return false;
4121 : }
4122 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4123 0 : JS::ExposeValueToActiveJS(result);
4124 0 : args.rval().set(result);
4125 0 : if (!MaybeWrapValue(cx, args.rval())) {
4126 0 : return false;
4127 : }
4128 0 : return true;
4129 : }
4130 :
4131 : static bool
4132 0 : set_screenY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
4133 : {
4134 0 : JS::Rooted<JS::Value> arg0(cx);
4135 0 : arg0 = args[0];
4136 0 : binding_detail::FastErrorResult rv;
4137 0 : self->SetScreenY(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4138 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4139 0 : return false;
4140 : }
4141 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4142 :
4143 0 : return true;
4144 : }
4145 :
4146 : static const JSJitInfo screenY_getterinfo = {
4147 : { (JSJitGetterOp)get_screenY },
4148 : { prototypes::id::Window },
4149 : { PrototypeTraits<prototypes::id::Window>::Depth },
4150 : JSJitInfo::Getter,
4151 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4152 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
4153 : false, /* isInfallible. False in setters. */
4154 : false, /* isMovable. Not relevant for setters. */
4155 : false, /* isEliminatable. Not relevant for setters. */
4156 : false, /* isAlwaysInSlot. Only relevant for getters. */
4157 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4158 : false, /* isTypedMethod. Only relevant for methods. */
4159 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4160 : };
4161 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4162 : static_assert(0 < 5, "There is no slot for us");
4163 : static const JSJitInfo screenY_setterinfo = {
4164 : { (JSJitGetterOp)set_screenY },
4165 : { prototypes::id::Window },
4166 : { PrototypeTraits<prototypes::id::Window>::Depth },
4167 : JSJitInfo::Setter,
4168 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4169 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4170 : false, /* isInfallible. False in setters. */
4171 : false, /* isMovable. Not relevant for setters. */
4172 : false, /* isEliminatable. Not relevant for setters. */
4173 : false, /* isAlwaysInSlot. Only relevant for getters. */
4174 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4175 : false, /* isTypedMethod. Only relevant for methods. */
4176 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4177 : };
4178 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4179 : static_assert(0 < 5, "There is no slot for us");
4180 :
4181 : static bool
4182 0 : get_outerWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
4183 : {
4184 0 : binding_detail::FastErrorResult rv;
4185 0 : JS::Rooted<JS::Value> result(cx);
4186 0 : self->GetOuterWidth(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4187 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4188 0 : return false;
4189 : }
4190 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4191 0 : JS::ExposeValueToActiveJS(result);
4192 0 : args.rval().set(result);
4193 0 : if (!MaybeWrapValue(cx, args.rval())) {
4194 0 : return false;
4195 : }
4196 0 : return true;
4197 : }
4198 :
4199 : static bool
4200 0 : set_outerWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
4201 : {
4202 0 : JS::Rooted<JS::Value> arg0(cx);
4203 0 : arg0 = args[0];
4204 0 : binding_detail::FastErrorResult rv;
4205 0 : self->SetOuterWidth(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4206 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4207 0 : return false;
4208 : }
4209 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4210 :
4211 0 : return true;
4212 : }
4213 :
4214 : static const JSJitInfo outerWidth_getterinfo = {
4215 : { (JSJitGetterOp)get_outerWidth },
4216 : { prototypes::id::Window },
4217 : { PrototypeTraits<prototypes::id::Window>::Depth },
4218 : JSJitInfo::Getter,
4219 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4220 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
4221 : false, /* isInfallible. False in setters. */
4222 : false, /* isMovable. Not relevant for setters. */
4223 : false, /* isEliminatable. Not relevant for setters. */
4224 : false, /* isAlwaysInSlot. Only relevant for getters. */
4225 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4226 : false, /* isTypedMethod. Only relevant for methods. */
4227 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4228 : };
4229 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4230 : static_assert(0 < 5, "There is no slot for us");
4231 : static const JSJitInfo outerWidth_setterinfo = {
4232 : { (JSJitGetterOp)set_outerWidth },
4233 : { prototypes::id::Window },
4234 : { PrototypeTraits<prototypes::id::Window>::Depth },
4235 : JSJitInfo::Setter,
4236 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4237 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4238 : false, /* isInfallible. False in setters. */
4239 : false, /* isMovable. Not relevant for setters. */
4240 : false, /* isEliminatable. Not relevant for setters. */
4241 : false, /* isAlwaysInSlot. Only relevant for getters. */
4242 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4243 : false, /* isTypedMethod. Only relevant for methods. */
4244 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4245 : };
4246 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4247 : static_assert(0 < 5, "There is no slot for us");
4248 :
4249 : static bool
4250 0 : get_outerHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
4251 : {
4252 0 : binding_detail::FastErrorResult rv;
4253 0 : JS::Rooted<JS::Value> result(cx);
4254 0 : self->GetOuterHeight(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4255 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4256 0 : return false;
4257 : }
4258 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4259 0 : JS::ExposeValueToActiveJS(result);
4260 0 : args.rval().set(result);
4261 0 : if (!MaybeWrapValue(cx, args.rval())) {
4262 0 : return false;
4263 : }
4264 0 : return true;
4265 : }
4266 :
4267 : static bool
4268 0 : set_outerHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
4269 : {
4270 0 : JS::Rooted<JS::Value> arg0(cx);
4271 0 : arg0 = args[0];
4272 0 : binding_detail::FastErrorResult rv;
4273 0 : self->SetOuterHeight(cx, arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4274 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4275 0 : return false;
4276 : }
4277 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4278 :
4279 0 : return true;
4280 : }
4281 :
4282 : static const JSJitInfo outerHeight_getterinfo = {
4283 : { (JSJitGetterOp)get_outerHeight },
4284 : { prototypes::id::Window },
4285 : { PrototypeTraits<prototypes::id::Window>::Depth },
4286 : JSJitInfo::Getter,
4287 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4288 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
4289 : false, /* isInfallible. False in setters. */
4290 : false, /* isMovable. Not relevant for setters. */
4291 : false, /* isEliminatable. Not relevant for setters. */
4292 : false, /* isAlwaysInSlot. Only relevant for getters. */
4293 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4294 : false, /* isTypedMethod. Only relevant for methods. */
4295 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4296 : };
4297 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4298 : static_assert(0 < 5, "There is no slot for us");
4299 : static const JSJitInfo outerHeight_setterinfo = {
4300 : { (JSJitGetterOp)set_outerHeight },
4301 : { prototypes::id::Window },
4302 : { PrototypeTraits<prototypes::id::Window>::Depth },
4303 : JSJitInfo::Setter,
4304 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4305 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4306 : false, /* isInfallible. False in setters. */
4307 : false, /* isMovable. Not relevant for setters. */
4308 : false, /* isEliminatable. Not relevant for setters. */
4309 : false, /* isAlwaysInSlot. Only relevant for getters. */
4310 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4311 : false, /* isTypedMethod. Only relevant for methods. */
4312 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4313 : };
4314 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4315 : static_assert(0 < 5, "There is no slot for us");
4316 :
4317 : static bool
4318 4 : requestAnimationFrame(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
4319 : {
4320 4 : if (MOZ_UNLIKELY(args.length() < 1)) {
4321 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.requestAnimationFrame");
4322 : }
4323 8 : RootedCallback<OwningNonNull<binding_detail::FastFrameRequestCallback>> arg0(cx);
4324 4 : if (args[0].isObject()) {
4325 4 : if (JS::IsCallable(&args[0].toObject())) {
4326 : { // scope for tempRoot
4327 8 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
4328 8 : arg0 = new binding_detail::FastFrameRequestCallback(tempRoot);
4329 : }
4330 : } else {
4331 0 : ThrowErrorMessage(cx, MSG_NOT_CALLABLE, "Argument 1 of Window.requestAnimationFrame");
4332 0 : return false;
4333 : }
4334 : } else {
4335 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.requestAnimationFrame");
4336 0 : return false;
4337 : }
4338 8 : binding_detail::FastErrorResult rv;
4339 4 : int32_t result(self->RequestAnimationFrame(NonNullHelper(arg0), rv));
4340 4 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4341 0 : return false;
4342 : }
4343 4 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4344 4 : args.rval().setInt32(int32_t(result));
4345 4 : return true;
4346 : }
4347 :
4348 : static const JSJitInfo requestAnimationFrame_methodinfo = {
4349 : { (JSJitGetterOp)requestAnimationFrame },
4350 : { prototypes::id::Window },
4351 : { PrototypeTraits<prototypes::id::Window>::Depth },
4352 : JSJitInfo::Method,
4353 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4354 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
4355 : false, /* isInfallible. False in setters. */
4356 : false, /* isMovable. Not relevant for setters. */
4357 : false, /* isEliminatable. Not relevant for setters. */
4358 : false, /* isAlwaysInSlot. Only relevant for getters. */
4359 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4360 : false, /* isTypedMethod. Only relevant for methods. */
4361 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4362 : };
4363 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4364 : static_assert(0 < 5, "There is no slot for us");
4365 :
4366 : static bool
4367 0 : cancelAnimationFrame(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
4368 : {
4369 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
4370 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.cancelAnimationFrame");
4371 : }
4372 : int32_t arg0;
4373 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
4374 0 : return false;
4375 : }
4376 0 : binding_detail::FastErrorResult rv;
4377 0 : self->CancelAnimationFrame(arg0, rv);
4378 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4379 0 : return false;
4380 : }
4381 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4382 0 : args.rval().setUndefined();
4383 0 : return true;
4384 : }
4385 :
4386 : static const JSJitInfo cancelAnimationFrame_methodinfo = {
4387 : { (JSJitGetterOp)cancelAnimationFrame },
4388 : { prototypes::id::Window },
4389 : { PrototypeTraits<prototypes::id::Window>::Depth },
4390 : JSJitInfo::Method,
4391 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4392 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4393 : false, /* isInfallible. False in setters. */
4394 : false, /* isMovable. Not relevant for setters. */
4395 : false, /* isEliminatable. Not relevant for setters. */
4396 : false, /* isAlwaysInSlot. Only relevant for getters. */
4397 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4398 : false, /* isTypedMethod. Only relevant for methods. */
4399 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4400 : };
4401 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4402 : static_assert(0 < 5, "There is no slot for us");
4403 :
4404 : static bool
4405 15 : get_performance(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
4406 : {
4407 : // Have to either root across the getter call or reget after.
4408 30 : JS::Rooted<JSObject*> slotStorage(cx, js::UncheckedUnwrap(obj, /* stopAtWindowProxy = */ false));
4409 15 : MOZ_ASSERT(IsDOMObject(slotStorage));
4410 15 : const size_t slotIndex = (DOM_INSTANCE_RESERVED_SLOTS + 3);
4411 15 : MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
4412 : {
4413 : // Scope for cachedVal
4414 15 : JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
4415 15 : if (!cachedVal.isUndefined()) {
4416 0 : args.rval().set(cachedVal);
4417 : // The cached value is in the compartment of slotStorage,
4418 : // so wrap into the caller compartment as needed.
4419 0 : return MaybeWrapValue(cx, args.rval());
4420 : }
4421 : }
4422 :
4423 15 : auto result(StrongOrRawPtr<mozilla::dom::Performance>(self->GetPerformance()));
4424 15 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4425 : {
4426 30 : JS::Rooted<JSObject*> conversionScope(cx, slotStorage);
4427 30 : JSAutoCompartment ac(cx, conversionScope);
4428 : do { // block we break out of when done wrapping
4429 15 : if (!result) {
4430 7 : args.rval().setNull();
4431 7 : break;
4432 : }
4433 8 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
4434 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
4435 0 : return false;
4436 : }
4437 8 : break;
4438 : } while (0);
4439 : }
4440 : { // And now store things in the compartment of our slotStorage.
4441 30 : JSAutoCompartment ac(cx, slotStorage);
4442 : // Make a copy so that we don't do unnecessary wrapping on args.rval().
4443 30 : JS::Rooted<JS::Value> storedVal(cx, args.rval());
4444 15 : if (!MaybeWrapValue(cx, &storedVal)) {
4445 0 : return false;
4446 : }
4447 15 : js::SetReservedSlot(slotStorage, slotIndex, storedVal);
4448 : }
4449 : // And now make sure args.rval() is in the caller compartment
4450 15 : return MaybeWrapValue(cx, args.rval());
4451 : }
4452 :
4453 : static bool
4454 0 : set_performance(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
4455 : {
4456 0 : return JS_DefineProperty(cx, obj, "performance", args[0], JSPROP_ENUMERATE);
4457 : }
4458 :
4459 : static const JSJitInfo performance_getterinfo = {
4460 : { (JSJitGetterOp)get_performance },
4461 : { prototypes::id::Window },
4462 : { PrototypeTraits<prototypes::id::Window>::Depth },
4463 : JSJitInfo::Getter,
4464 : JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */
4465 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
4466 : false, /* isInfallible. False in setters. */
4467 : true, /* isMovable. Not relevant for setters. */
4468 : true, /* isEliminatable. Not relevant for setters. */
4469 : true, /* isAlwaysInSlot. Only relevant for getters. */
4470 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4471 : false, /* isTypedMethod. Only relevant for methods. */
4472 : (DOM_INSTANCE_RESERVED_SLOTS + 3) /* Reserved slot index, if we're stored in a slot, else 0. */
4473 : };
4474 : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 3) <= JSJitInfo::maxSlotIndex, "We won't fit");
4475 : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 3) < 5, "There is no slot for us");
4476 : static const JSJitInfo performance_setterinfo = {
4477 : { (JSJitGetterOp)set_performance },
4478 : { prototypes::id::Window },
4479 : { PrototypeTraits<prototypes::id::Window>::Depth },
4480 : JSJitInfo::Setter,
4481 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4482 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4483 : false, /* isInfallible. False in setters. */
4484 : false, /* isMovable. Not relevant for setters. */
4485 : false, /* isEliminatable. Not relevant for setters. */
4486 : false, /* isAlwaysInSlot. Only relevant for getters. */
4487 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4488 : false, /* isTypedMethod. Only relevant for methods. */
4489 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4490 : };
4491 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4492 : static_assert(0 < 5, "There is no slot for us");
4493 :
4494 : static bool
4495 0 : getDefaultComputedStyle(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
4496 : {
4497 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
4498 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getDefaultComputedStyle");
4499 : }
4500 0 : NonNull<mozilla::dom::Element> arg0;
4501 0 : if (args[0].isObject()) {
4502 : {
4503 0 : nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[0], arg0);
4504 0 : if (NS_FAILED(rv)) {
4505 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.getDefaultComputedStyle", "Element");
4506 0 : return false;
4507 : }
4508 : }
4509 : } else {
4510 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.getDefaultComputedStyle");
4511 0 : return false;
4512 : }
4513 0 : binding_detail::FakeString arg1;
4514 0 : if (args.hasDefined(1)) {
4515 0 : if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
4516 0 : return false;
4517 : }
4518 : } else {
4519 : static const char16_t data[] = { 0 };
4520 0 : arg1.Rebind(data, ArrayLength(data) - 1);
4521 : }
4522 0 : binding_detail::FastErrorResult rv;
4523 0 : auto result(StrongOrRawPtr<nsICSSDeclaration>(self->GetDefaultComputedStyle(NonNullHelper(arg0), NonNullHelper(Constify(arg1)), rv)));
4524 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4525 0 : return false;
4526 : }
4527 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4528 : static_assert(!IsPointer<decltype(result)>::value,
4529 : "NewObject implies that we need to keep the object alive with a strong reference.");
4530 0 : if (!result) {
4531 0 : args.rval().setNull();
4532 0 : return true;
4533 : }
4534 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
4535 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
4536 0 : return false;
4537 : }
4538 0 : return true;
4539 : }
4540 :
4541 : static const JSJitInfo getDefaultComputedStyle_methodinfo = {
4542 : { (JSJitGetterOp)getDefaultComputedStyle },
4543 : { prototypes::id::Window },
4544 : { PrototypeTraits<prototypes::id::Window>::Depth },
4545 : JSJitInfo::Method,
4546 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4547 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
4548 : false, /* isInfallible. False in setters. */
4549 : false, /* isMovable. Not relevant for setters. */
4550 : false, /* isEliminatable. Not relevant for setters. */
4551 : false, /* isAlwaysInSlot. Only relevant for getters. */
4552 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4553 : false, /* isTypedMethod. Only relevant for methods. */
4554 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4555 : };
4556 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4557 : static_assert(0 < 5, "There is no slot for us");
4558 :
4559 : static bool
4560 0 : scrollByLines(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
4561 : {
4562 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
4563 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scrollByLines");
4564 : }
4565 : int32_t arg0;
4566 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
4567 0 : return false;
4568 : }
4569 0 : binding_detail::FastScrollOptions arg1;
4570 0 : if (!arg1.Init(cx, (args.hasDefined(1)) ? args[1] : JS::NullHandleValue, "Argument 2 of Window.scrollByLines", false)) {
4571 0 : return false;
4572 : }
4573 0 : self->ScrollByLines(arg0, Constify(arg1));
4574 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4575 0 : args.rval().setUndefined();
4576 0 : return true;
4577 : }
4578 :
4579 : static const JSJitInfo scrollByLines_methodinfo = {
4580 : { (JSJitGetterOp)scrollByLines },
4581 : { prototypes::id::Window },
4582 : { PrototypeTraits<prototypes::id::Window>::Depth },
4583 : JSJitInfo::Method,
4584 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4585 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4586 : false, /* isInfallible. False in setters. */
4587 : false, /* isMovable. Not relevant for setters. */
4588 : false, /* isEliminatable. Not relevant for setters. */
4589 : false, /* isAlwaysInSlot. Only relevant for getters. */
4590 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4591 : false, /* isTypedMethod. Only relevant for methods. */
4592 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4593 : };
4594 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4595 : static_assert(0 < 5, "There is no slot for us");
4596 :
4597 : static bool
4598 0 : scrollByPages(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
4599 : {
4600 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
4601 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.scrollByPages");
4602 : }
4603 : int32_t arg0;
4604 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
4605 0 : return false;
4606 : }
4607 0 : binding_detail::FastScrollOptions arg1;
4608 0 : if (!arg1.Init(cx, (args.hasDefined(1)) ? args[1] : JS::NullHandleValue, "Argument 2 of Window.scrollByPages", false)) {
4609 0 : return false;
4610 : }
4611 0 : self->ScrollByPages(arg0, Constify(arg1));
4612 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4613 0 : args.rval().setUndefined();
4614 0 : return true;
4615 : }
4616 :
4617 : static const JSJitInfo scrollByPages_methodinfo = {
4618 : { (JSJitGetterOp)scrollByPages },
4619 : { prototypes::id::Window },
4620 : { PrototypeTraits<prototypes::id::Window>::Depth },
4621 : JSJitInfo::Method,
4622 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4623 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4624 : false, /* isInfallible. False in setters. */
4625 : false, /* isMovable. Not relevant for setters. */
4626 : false, /* isEliminatable. Not relevant for setters. */
4627 : false, /* isAlwaysInSlot. Only relevant for getters. */
4628 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4629 : false, /* isTypedMethod. Only relevant for methods. */
4630 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4631 : };
4632 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4633 : static_assert(0 < 5, "There is no slot for us");
4634 :
4635 : static bool
4636 0 : sizeToContent(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
4637 : {
4638 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
4639 : // Return false from the JSNative in order to trigger
4640 : // an uncatchable exception.
4641 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4642 0 : return false;
4643 : }
4644 0 : binding_detail::FastErrorResult rv;
4645 0 : self->SizeToContent(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
4646 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4647 0 : return false;
4648 : }
4649 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4650 0 : args.rval().setUndefined();
4651 0 : return true;
4652 : }
4653 :
4654 : static const JSJitInfo sizeToContent_methodinfo = {
4655 : { (JSJitGetterOp)sizeToContent },
4656 : { prototypes::id::Window },
4657 : { PrototypeTraits<prototypes::id::Window>::Depth },
4658 : JSJitInfo::Method,
4659 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4660 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4661 : false, /* isInfallible. False in setters. */
4662 : false, /* isMovable. Not relevant for setters. */
4663 : false, /* isEliminatable. Not relevant for setters. */
4664 : false, /* isAlwaysInSlot. Only relevant for getters. */
4665 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4666 : false, /* isTypedMethod. Only relevant for methods. */
4667 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4668 : };
4669 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4670 : static_assert(0 < 5, "There is no slot for us");
4671 :
4672 : static bool
4673 0 : get_controllers(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
4674 : {
4675 0 : binding_detail::FastErrorResult rv;
4676 0 : auto result(StrongOrRawPtr<nsIControllers>(self->GetControllers(rv)));
4677 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4678 0 : return false;
4679 : }
4680 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4681 0 : if (!WrapObject(cx, result, &NS_GET_IID(nsIControllers), args.rval())) {
4682 0 : return false;
4683 : }
4684 0 : return true;
4685 : }
4686 :
4687 : static bool
4688 0 : set_controllers(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
4689 : {
4690 0 : return JS_DefineProperty(cx, obj, "controllers", args[0], JSPROP_ENUMERATE);
4691 : }
4692 :
4693 : static const JSJitInfo controllers_getterinfo = {
4694 : { (JSJitGetterOp)get_controllers },
4695 : { prototypes::id::Window },
4696 : { PrototypeTraits<prototypes::id::Window>::Depth },
4697 : JSJitInfo::Getter,
4698 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4699 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
4700 : false, /* isInfallible. False in setters. */
4701 : false, /* isMovable. Not relevant for setters. */
4702 : false, /* isEliminatable. Not relevant for setters. */
4703 : false, /* isAlwaysInSlot. Only relevant for getters. */
4704 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4705 : false, /* isTypedMethod. Only relevant for methods. */
4706 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4707 : };
4708 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4709 : static_assert(0 < 5, "There is no slot for us");
4710 : static const JSJitInfo controllers_setterinfo = {
4711 : { (JSJitGetterOp)set_controllers },
4712 : { prototypes::id::Window },
4713 : { PrototypeTraits<prototypes::id::Window>::Depth },
4714 : JSJitInfo::Setter,
4715 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4716 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4717 : false, /* isInfallible. False in setters. */
4718 : false, /* isMovable. Not relevant for setters. */
4719 : false, /* isEliminatable. Not relevant for setters. */
4720 : false, /* isAlwaysInSlot. Only relevant for getters. */
4721 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4722 : false, /* isTypedMethod. Only relevant for methods. */
4723 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4724 : };
4725 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4726 : static_assert(0 < 5, "There is no slot for us");
4727 :
4728 : static bool
4729 0 : get_realFrameElement(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
4730 : {
4731 0 : binding_detail::FastErrorResult rv;
4732 0 : auto result(StrongOrRawPtr<mozilla::dom::Element>(self->GetRealFrameElement(rv)));
4733 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4734 0 : return false;
4735 : }
4736 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4737 0 : if (!result) {
4738 0 : args.rval().setNull();
4739 0 : return true;
4740 : }
4741 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
4742 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
4743 0 : return false;
4744 : }
4745 0 : return true;
4746 : }
4747 :
4748 : static const JSJitInfo realFrameElement_getterinfo = {
4749 : { (JSJitGetterOp)get_realFrameElement },
4750 : { prototypes::id::Window },
4751 : { PrototypeTraits<prototypes::id::Window>::Depth },
4752 : JSJitInfo::Getter,
4753 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4754 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
4755 : false, /* isInfallible. False in setters. */
4756 : false, /* isMovable. Not relevant for setters. */
4757 : false, /* isEliminatable. Not relevant for setters. */
4758 : false, /* isAlwaysInSlot. Only relevant for getters. */
4759 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4760 : false, /* isTypedMethod. Only relevant for methods. */
4761 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4762 : };
4763 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4764 : static_assert(0 < 5, "There is no slot for us");
4765 :
4766 : static bool
4767 4 : get_mozInnerScreenX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
4768 : {
4769 8 : binding_detail::FastErrorResult rv;
4770 4 : float result(self->GetMozInnerScreenX(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv));
4771 4 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4772 0 : return false;
4773 : }
4774 4 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4775 4 : args.rval().set(JS_NumberValue(double(result)));
4776 4 : return true;
4777 : }
4778 :
4779 : static const JSJitInfo mozInnerScreenX_getterinfo = {
4780 : { (JSJitGetterOp)get_mozInnerScreenX },
4781 : { prototypes::id::Window },
4782 : { PrototypeTraits<prototypes::id::Window>::Depth },
4783 : JSJitInfo::Getter,
4784 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4785 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
4786 : false, /* isInfallible. False in setters. */
4787 : false, /* isMovable. Not relevant for setters. */
4788 : false, /* isEliminatable. Not relevant for setters. */
4789 : false, /* isAlwaysInSlot. Only relevant for getters. */
4790 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4791 : false, /* isTypedMethod. Only relevant for methods. */
4792 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4793 : };
4794 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4795 : static_assert(0 < 5, "There is no slot for us");
4796 :
4797 : static bool
4798 4 : get_mozInnerScreenY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
4799 : {
4800 8 : binding_detail::FastErrorResult rv;
4801 4 : float result(self->GetMozInnerScreenY(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv));
4802 4 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4803 0 : return false;
4804 : }
4805 4 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4806 4 : args.rval().set(JS_NumberValue(double(result)));
4807 4 : return true;
4808 : }
4809 :
4810 : static const JSJitInfo mozInnerScreenY_getterinfo = {
4811 : { (JSJitGetterOp)get_mozInnerScreenY },
4812 : { prototypes::id::Window },
4813 : { PrototypeTraits<prototypes::id::Window>::Depth },
4814 : JSJitInfo::Getter,
4815 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4816 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
4817 : false, /* isInfallible. False in setters. */
4818 : false, /* isMovable. Not relevant for setters. */
4819 : false, /* isEliminatable. Not relevant for setters. */
4820 : false, /* isAlwaysInSlot. Only relevant for getters. */
4821 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4822 : false, /* isTypedMethod. Only relevant for methods. */
4823 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4824 : };
4825 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4826 : static_assert(0 < 5, "There is no slot for us");
4827 :
4828 : static bool
4829 1 : get_devicePixelRatio(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
4830 : {
4831 2 : binding_detail::FastErrorResult rv;
4832 1 : float result(self->GetDevicePixelRatio(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv));
4833 1 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4834 0 : return false;
4835 : }
4836 1 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4837 1 : args.rval().set(JS_NumberValue(double(result)));
4838 1 : return true;
4839 : }
4840 :
4841 : static bool
4842 0 : set_devicePixelRatio(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
4843 : {
4844 0 : return JS_DefineProperty(cx, obj, "devicePixelRatio", args[0], JSPROP_ENUMERATE);
4845 : }
4846 :
4847 : static const JSJitInfo devicePixelRatio_getterinfo = {
4848 : { (JSJitGetterOp)get_devicePixelRatio },
4849 : { prototypes::id::Window },
4850 : { PrototypeTraits<prototypes::id::Window>::Depth },
4851 : JSJitInfo::Getter,
4852 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4853 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
4854 : false, /* isInfallible. False in setters. */
4855 : false, /* isMovable. Not relevant for setters. */
4856 : false, /* isEliminatable. Not relevant for setters. */
4857 : false, /* isAlwaysInSlot. Only relevant for getters. */
4858 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4859 : false, /* isTypedMethod. Only relevant for methods. */
4860 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4861 : };
4862 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4863 : static_assert(0 < 5, "There is no slot for us");
4864 : static const JSJitInfo devicePixelRatio_setterinfo = {
4865 : { (JSJitGetterOp)set_devicePixelRatio },
4866 : { prototypes::id::Window },
4867 : { PrototypeTraits<prototypes::id::Window>::Depth },
4868 : JSJitInfo::Setter,
4869 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4870 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4871 : false, /* isInfallible. False in setters. */
4872 : false, /* isMovable. Not relevant for setters. */
4873 : false, /* isEliminatable. Not relevant for setters. */
4874 : false, /* isAlwaysInSlot. Only relevant for getters. */
4875 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4876 : false, /* isTypedMethod. Only relevant for methods. */
4877 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4878 : };
4879 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4880 : static_assert(0 < 5, "There is no slot for us");
4881 :
4882 : static bool
4883 0 : get_scrollMinX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
4884 : {
4885 0 : binding_detail::FastErrorResult rv;
4886 0 : int32_t result(self->GetScrollMinX(rv));
4887 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4888 0 : return false;
4889 : }
4890 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4891 0 : args.rval().setInt32(int32_t(result));
4892 0 : return true;
4893 : }
4894 :
4895 : static const JSJitInfo scrollMinX_getterinfo = {
4896 : { (JSJitGetterOp)get_scrollMinX },
4897 : { prototypes::id::Window },
4898 : { PrototypeTraits<prototypes::id::Window>::Depth },
4899 : JSJitInfo::Getter,
4900 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4901 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
4902 : false, /* isInfallible. False in setters. */
4903 : false, /* isMovable. Not relevant for setters. */
4904 : false, /* isEliminatable. Not relevant for setters. */
4905 : false, /* isAlwaysInSlot. Only relevant for getters. */
4906 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4907 : false, /* isTypedMethod. Only relevant for methods. */
4908 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4909 : };
4910 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4911 : static_assert(0 < 5, "There is no slot for us");
4912 :
4913 : static bool
4914 0 : get_scrollMinY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
4915 : {
4916 0 : binding_detail::FastErrorResult rv;
4917 0 : int32_t result(self->GetScrollMinY(rv));
4918 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4919 0 : return false;
4920 : }
4921 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4922 0 : args.rval().setInt32(int32_t(result));
4923 0 : return true;
4924 : }
4925 :
4926 : static const JSJitInfo scrollMinY_getterinfo = {
4927 : { (JSJitGetterOp)get_scrollMinY },
4928 : { prototypes::id::Window },
4929 : { PrototypeTraits<prototypes::id::Window>::Depth },
4930 : JSJitInfo::Getter,
4931 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4932 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
4933 : false, /* isInfallible. False in setters. */
4934 : false, /* isMovable. Not relevant for setters. */
4935 : false, /* isEliminatable. Not relevant for setters. */
4936 : false, /* isAlwaysInSlot. Only relevant for getters. */
4937 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4938 : false, /* isTypedMethod. Only relevant for methods. */
4939 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4940 : };
4941 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4942 : static_assert(0 < 5, "There is no slot for us");
4943 :
4944 : static bool
4945 0 : get_scrollMaxX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
4946 : {
4947 0 : binding_detail::FastErrorResult rv;
4948 0 : int32_t result(self->GetScrollMaxX(rv));
4949 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
4950 0 : return false;
4951 : }
4952 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
4953 0 : args.rval().setInt32(int32_t(result));
4954 0 : return true;
4955 : }
4956 :
4957 : static bool
4958 0 : set_scrollMaxX(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
4959 : {
4960 0 : return JS_DefineProperty(cx, obj, "scrollMaxX", args[0], JSPROP_ENUMERATE);
4961 : }
4962 :
4963 : static const JSJitInfo scrollMaxX_getterinfo = {
4964 : { (JSJitGetterOp)get_scrollMaxX },
4965 : { prototypes::id::Window },
4966 : { PrototypeTraits<prototypes::id::Window>::Depth },
4967 : JSJitInfo::Getter,
4968 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4969 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
4970 : false, /* isInfallible. False in setters. */
4971 : false, /* isMovable. Not relevant for setters. */
4972 : false, /* isEliminatable. Not relevant for setters. */
4973 : false, /* isAlwaysInSlot. Only relevant for getters. */
4974 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4975 : false, /* isTypedMethod. Only relevant for methods. */
4976 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4977 : };
4978 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4979 : static_assert(0 < 5, "There is no slot for us");
4980 : static const JSJitInfo scrollMaxX_setterinfo = {
4981 : { (JSJitGetterOp)set_scrollMaxX },
4982 : { prototypes::id::Window },
4983 : { PrototypeTraits<prototypes::id::Window>::Depth },
4984 : JSJitInfo::Setter,
4985 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
4986 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
4987 : false, /* isInfallible. False in setters. */
4988 : false, /* isMovable. Not relevant for setters. */
4989 : false, /* isEliminatable. Not relevant for setters. */
4990 : false, /* isAlwaysInSlot. Only relevant for getters. */
4991 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
4992 : false, /* isTypedMethod. Only relevant for methods. */
4993 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
4994 : };
4995 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
4996 : static_assert(0 < 5, "There is no slot for us");
4997 :
4998 : static bool
4999 0 : get_scrollMaxY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
5000 : {
5001 0 : binding_detail::FastErrorResult rv;
5002 0 : int32_t result(self->GetScrollMaxY(rv));
5003 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5004 0 : return false;
5005 : }
5006 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5007 0 : args.rval().setInt32(int32_t(result));
5008 0 : return true;
5009 : }
5010 :
5011 : static bool
5012 0 : set_scrollMaxY(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
5013 : {
5014 0 : return JS_DefineProperty(cx, obj, "scrollMaxY", args[0], JSPROP_ENUMERATE);
5015 : }
5016 :
5017 : static const JSJitInfo scrollMaxY_getterinfo = {
5018 : { (JSJitGetterOp)get_scrollMaxY },
5019 : { prototypes::id::Window },
5020 : { PrototypeTraits<prototypes::id::Window>::Depth },
5021 : JSJitInfo::Getter,
5022 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5023 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
5024 : false, /* isInfallible. False in setters. */
5025 : false, /* isMovable. Not relevant for setters. */
5026 : false, /* isEliminatable. Not relevant for setters. */
5027 : false, /* isAlwaysInSlot. Only relevant for getters. */
5028 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5029 : false, /* isTypedMethod. Only relevant for methods. */
5030 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5031 : };
5032 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5033 : static_assert(0 < 5, "There is no slot for us");
5034 : static const JSJitInfo scrollMaxY_setterinfo = {
5035 : { (JSJitGetterOp)set_scrollMaxY },
5036 : { prototypes::id::Window },
5037 : { PrototypeTraits<prototypes::id::Window>::Depth },
5038 : JSJitInfo::Setter,
5039 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5040 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5041 : false, /* isInfallible. False in setters. */
5042 : false, /* isMovable. Not relevant for setters. */
5043 : false, /* isEliminatable. Not relevant for setters. */
5044 : false, /* isAlwaysInSlot. Only relevant for getters. */
5045 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5046 : false, /* isTypedMethod. Only relevant for methods. */
5047 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5048 : };
5049 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5050 : static_assert(0 < 5, "There is no slot for us");
5051 :
5052 : static bool
5053 1 : get_fullScreen(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
5054 : {
5055 1 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
5056 : // Return false from the JSNative in order to trigger
5057 : // an uncatchable exception.
5058 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5059 0 : return false;
5060 : }
5061 2 : binding_detail::FastErrorResult rv;
5062 1 : bool result(self->GetFullScreen(rv));
5063 1 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5064 0 : return false;
5065 : }
5066 1 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5067 1 : args.rval().setBoolean(result);
5068 1 : return true;
5069 : }
5070 :
5071 : static bool
5072 0 : set_fullScreen(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
5073 : {
5074 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
5075 : // Return false from the JSNative in order to trigger
5076 : // an uncatchable exception.
5077 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5078 0 : return false;
5079 : }
5080 : bool arg0;
5081 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
5082 0 : return false;
5083 : }
5084 0 : binding_detail::FastErrorResult rv;
5085 0 : self->SetFullScreen(arg0, rv);
5086 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5087 0 : return false;
5088 : }
5089 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5090 :
5091 0 : return true;
5092 : }
5093 :
5094 : static const JSJitInfo fullScreen_getterinfo = {
5095 : { (JSJitGetterOp)get_fullScreen },
5096 : { prototypes::id::Window },
5097 : { PrototypeTraits<prototypes::id::Window>::Depth },
5098 : JSJitInfo::Getter,
5099 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5100 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
5101 : false, /* isInfallible. False in setters. */
5102 : false, /* isMovable. Not relevant for setters. */
5103 : false, /* isEliminatable. Not relevant for setters. */
5104 : false, /* isAlwaysInSlot. Only relevant for getters. */
5105 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5106 : false, /* isTypedMethod. Only relevant for methods. */
5107 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5108 : };
5109 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5110 : static_assert(0 < 5, "There is no slot for us");
5111 : static const JSJitInfo fullScreen_setterinfo = {
5112 : { (JSJitGetterOp)set_fullScreen },
5113 : { prototypes::id::Window },
5114 : { PrototypeTraits<prototypes::id::Window>::Depth },
5115 : JSJitInfo::Setter,
5116 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5117 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5118 : false, /* isInfallible. False in setters. */
5119 : false, /* isMovable. Not relevant for setters. */
5120 : false, /* isEliminatable. Not relevant for setters. */
5121 : false, /* isAlwaysInSlot. Only relevant for getters. */
5122 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5123 : false, /* isTypedMethod. Only relevant for methods. */
5124 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5125 : };
5126 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5127 : static_assert(0 < 5, "There is no slot for us");
5128 :
5129 : static bool
5130 0 : back(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
5131 : {
5132 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
5133 : // Return false from the JSNative in order to trigger
5134 : // an uncatchable exception.
5135 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5136 0 : return false;
5137 : }
5138 0 : binding_detail::FastErrorResult rv;
5139 0 : self->Back(rv);
5140 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5141 0 : return false;
5142 : }
5143 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5144 0 : args.rval().setUndefined();
5145 0 : return true;
5146 : }
5147 :
5148 : static const JSJitInfo back_methodinfo = {
5149 : { (JSJitGetterOp)back },
5150 : { prototypes::id::Window },
5151 : { PrototypeTraits<prototypes::id::Window>::Depth },
5152 : JSJitInfo::Method,
5153 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5154 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5155 : false, /* isInfallible. False in setters. */
5156 : false, /* isMovable. Not relevant for setters. */
5157 : false, /* isEliminatable. Not relevant for setters. */
5158 : false, /* isAlwaysInSlot. Only relevant for getters. */
5159 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5160 : false, /* isTypedMethod. Only relevant for methods. */
5161 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5162 : };
5163 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5164 : static_assert(0 < 5, "There is no slot for us");
5165 :
5166 : static bool
5167 0 : forward(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
5168 : {
5169 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
5170 : // Return false from the JSNative in order to trigger
5171 : // an uncatchable exception.
5172 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5173 0 : return false;
5174 : }
5175 0 : binding_detail::FastErrorResult rv;
5176 0 : self->Forward(rv);
5177 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5178 0 : return false;
5179 : }
5180 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5181 0 : args.rval().setUndefined();
5182 0 : return true;
5183 : }
5184 :
5185 : static const JSJitInfo forward_methodinfo = {
5186 : { (JSJitGetterOp)forward },
5187 : { prototypes::id::Window },
5188 : { PrototypeTraits<prototypes::id::Window>::Depth },
5189 : JSJitInfo::Method,
5190 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5191 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5192 : false, /* isInfallible. False in setters. */
5193 : false, /* isMovable. Not relevant for setters. */
5194 : false, /* isEliminatable. Not relevant for setters. */
5195 : false, /* isAlwaysInSlot. Only relevant for getters. */
5196 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5197 : false, /* isTypedMethod. Only relevant for methods. */
5198 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5199 : };
5200 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5201 : static_assert(0 < 5, "There is no slot for us");
5202 :
5203 : static bool
5204 0 : home(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
5205 : {
5206 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
5207 : // Return false from the JSNative in order to trigger
5208 : // an uncatchable exception.
5209 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5210 0 : return false;
5211 : }
5212 0 : binding_detail::FastErrorResult rv;
5213 0 : JSCompartment* compartment = js::GetContextCompartment(cx);
5214 0 : MOZ_ASSERT(compartment);
5215 0 : JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
5216 : // Initializing a nonnull is pretty darn annoying...
5217 0 : NonNull<nsIPrincipal> subjectPrincipal;
5218 0 : subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
5219 0 : self->Home(subjectPrincipal, rv);
5220 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5221 0 : return false;
5222 : }
5223 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5224 0 : args.rval().setUndefined();
5225 0 : return true;
5226 : }
5227 :
5228 : static const JSJitInfo home_methodinfo = {
5229 : { (JSJitGetterOp)home },
5230 : { prototypes::id::Window },
5231 : { PrototypeTraits<prototypes::id::Window>::Depth },
5232 : JSJitInfo::Method,
5233 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5234 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5235 : false, /* isInfallible. False in setters. */
5236 : false, /* isMovable. Not relevant for setters. */
5237 : false, /* isEliminatable. Not relevant for setters. */
5238 : false, /* isAlwaysInSlot. Only relevant for getters. */
5239 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5240 : false, /* isTypedMethod. Only relevant for methods. */
5241 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5242 : };
5243 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5244 : static_assert(0 < 5, "There is no slot for us");
5245 :
5246 : static bool
5247 2 : updateCommands(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
5248 : {
5249 2 : if (MOZ_UNLIKELY(args.length() < 1)) {
5250 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.updateCommands");
5251 : }
5252 4 : binding_detail::FakeString arg0;
5253 2 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
5254 0 : return false;
5255 : }
5256 : mozilla::dom::Selection* arg1;
5257 2 : if (args.hasDefined(1)) {
5258 0 : if (args[1].isObject()) {
5259 : {
5260 0 : nsresult rv = UnwrapObject<prototypes::id::Selection, mozilla::dom::Selection>(args[1], arg1);
5261 0 : if (NS_FAILED(rv)) {
5262 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of Window.updateCommands", "Selection");
5263 0 : return false;
5264 : }
5265 : }
5266 0 : } else if (args[1].isNullOrUndefined()) {
5267 0 : arg1 = nullptr;
5268 : } else {
5269 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of Window.updateCommands");
5270 0 : return false;
5271 : }
5272 : } else {
5273 2 : arg1 = nullptr;
5274 : }
5275 : int16_t arg2;
5276 2 : if (args.hasDefined(2)) {
5277 0 : if (!ValueToPrimitive<int16_t, eDefault>(cx, args[2], &arg2)) {
5278 0 : return false;
5279 : }
5280 : } else {
5281 2 : arg2 = 0;
5282 : }
5283 2 : self->UpdateCommands(NonNullHelper(Constify(arg0)), Constify(arg1), arg2);
5284 2 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5285 2 : args.rval().setUndefined();
5286 2 : return true;
5287 : }
5288 :
5289 : static const JSJitInfo updateCommands_methodinfo = {
5290 : { (JSJitGetterOp)updateCommands },
5291 : { prototypes::id::Window },
5292 : { PrototypeTraits<prototypes::id::Window>::Depth },
5293 : JSJitInfo::Method,
5294 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5295 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5296 : false, /* isInfallible. False in setters. */
5297 : false, /* isMovable. Not relevant for setters. */
5298 : false, /* isEliminatable. Not relevant for setters. */
5299 : false, /* isAlwaysInSlot. Only relevant for getters. */
5300 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5301 : false, /* isTypedMethod. Only relevant for methods. */
5302 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5303 : };
5304 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5305 : static_assert(0 < 5, "There is no slot for us");
5306 :
5307 : static bool
5308 0 : find(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
5309 : {
5310 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
5311 : // Return false from the JSNative in order to trigger
5312 : // an uncatchable exception.
5313 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5314 0 : return false;
5315 : }
5316 0 : binding_detail::FakeString arg0;
5317 0 : if (args.hasDefined(0)) {
5318 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
5319 0 : return false;
5320 : }
5321 : } else {
5322 : static const char16_t data[] = { 0 };
5323 0 : arg0.Rebind(data, ArrayLength(data) - 1);
5324 : }
5325 : bool arg1;
5326 0 : if (args.hasDefined(1)) {
5327 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
5328 0 : return false;
5329 : }
5330 : } else {
5331 0 : arg1 = false;
5332 : }
5333 : bool arg2;
5334 0 : if (args.hasDefined(2)) {
5335 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[2], &arg2)) {
5336 0 : return false;
5337 : }
5338 : } else {
5339 0 : arg2 = false;
5340 : }
5341 : bool arg3;
5342 0 : if (args.hasDefined(3)) {
5343 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[3], &arg3)) {
5344 0 : return false;
5345 : }
5346 : } else {
5347 0 : arg3 = false;
5348 : }
5349 : bool arg4;
5350 0 : if (args.hasDefined(4)) {
5351 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[4], &arg4)) {
5352 0 : return false;
5353 : }
5354 : } else {
5355 0 : arg4 = false;
5356 : }
5357 : bool arg5;
5358 0 : if (args.hasDefined(5)) {
5359 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[5], &arg5)) {
5360 0 : return false;
5361 : }
5362 : } else {
5363 0 : arg5 = false;
5364 : }
5365 : bool arg6;
5366 0 : if (args.hasDefined(6)) {
5367 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[6], &arg6)) {
5368 0 : return false;
5369 : }
5370 : } else {
5371 0 : arg6 = false;
5372 : }
5373 0 : binding_detail::FastErrorResult rv;
5374 0 : bool result(self->Find(NonNullHelper(Constify(arg0)), arg1, arg2, arg3, arg4, arg5, arg6, rv));
5375 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5376 0 : return false;
5377 : }
5378 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5379 0 : args.rval().setBoolean(result);
5380 0 : return true;
5381 : }
5382 :
5383 : static const JSJitInfo find_methodinfo = {
5384 : { (JSJitGetterOp)find },
5385 : { prototypes::id::Window },
5386 : { PrototypeTraits<prototypes::id::Window>::Depth },
5387 : JSJitInfo::Method,
5388 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5389 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
5390 : false, /* isInfallible. False in setters. */
5391 : false, /* isMovable. Not relevant for setters. */
5392 : false, /* isEliminatable. Not relevant for setters. */
5393 : false, /* isAlwaysInSlot. Only relevant for getters. */
5394 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5395 : false, /* isTypedMethod. Only relevant for methods. */
5396 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5397 : };
5398 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5399 : static_assert(0 < 5, "There is no slot for us");
5400 :
5401 : static bool
5402 0 : get_mozPaintCount(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
5403 : {
5404 0 : binding_detail::FastErrorResult rv;
5405 0 : uint64_t result(self->GetMozPaintCount(rv));
5406 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5407 0 : return false;
5408 : }
5409 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5410 0 : args.rval().set(JS_NumberValue(double(result)));
5411 0 : return true;
5412 : }
5413 :
5414 : static const JSJitInfo mozPaintCount_getterinfo = {
5415 : { (JSJitGetterOp)get_mozPaintCount },
5416 : { prototypes::id::Window },
5417 : { PrototypeTraits<prototypes::id::Window>::Depth },
5418 : JSJitInfo::Getter,
5419 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5420 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
5421 : false, /* isInfallible. False in setters. */
5422 : false, /* isMovable. Not relevant for setters. */
5423 : false, /* isEliminatable. Not relevant for setters. */
5424 : false, /* isAlwaysInSlot. Only relevant for getters. */
5425 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5426 : false, /* isTypedMethod. Only relevant for methods. */
5427 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5428 : };
5429 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5430 : static_assert(0 < 5, "There is no slot for us");
5431 :
5432 : static bool
5433 0 : get_MozSelfSupport(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
5434 : {
5435 0 : binding_detail::FastErrorResult rv;
5436 0 : auto result(StrongOrRawPtr<mozilla::dom::MozSelfSupport>(self->GetMozSelfSupport(rv)));
5437 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
5438 0 : return false;
5439 : }
5440 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5441 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
5442 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
5443 0 : return false;
5444 : }
5445 0 : return true;
5446 : }
5447 :
5448 : static const JSJitInfo MozSelfSupport_getterinfo = {
5449 : { (JSJitGetterOp)get_MozSelfSupport },
5450 : { prototypes::id::Window },
5451 : { PrototypeTraits<prototypes::id::Window>::Depth },
5452 : JSJitInfo::Getter,
5453 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5454 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
5455 : false, /* isInfallible. False in setters. */
5456 : false, /* isMovable. Not relevant for setters. */
5457 : false, /* isEliminatable. Not relevant for setters. */
5458 : false, /* isAlwaysInSlot. Only relevant for getters. */
5459 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5460 : false, /* isTypedMethod. Only relevant for methods. */
5461 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5462 : };
5463 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5464 : static_assert(0 < 5, "There is no slot for us");
5465 :
5466 : static bool
5467 0 : get_ondevicemotion(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
5468 : {
5469 0 : RefPtr<EventHandlerNonNull> result(self->GetOndevicemotion());
5470 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5471 0 : if (result) {
5472 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
5473 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
5474 0 : return false;
5475 : }
5476 0 : return true;
5477 : } else {
5478 0 : args.rval().setNull();
5479 0 : return true;
5480 : }
5481 : }
5482 :
5483 : static bool
5484 0 : set_ondevicemotion(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
5485 : {
5486 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
5487 0 : if (args[0].isObject()) {
5488 : { // scope for tempRoot
5489 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
5490 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
5491 : }
5492 : } else {
5493 0 : arg0 = nullptr;
5494 : }
5495 0 : self->SetOndevicemotion(Constify(arg0));
5496 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5497 :
5498 0 : return true;
5499 : }
5500 :
5501 : static const JSJitInfo ondevicemotion_getterinfo = {
5502 : { (JSJitGetterOp)get_ondevicemotion },
5503 : { prototypes::id::Window },
5504 : { PrototypeTraits<prototypes::id::Window>::Depth },
5505 : JSJitInfo::Getter,
5506 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5507 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
5508 : false, /* isInfallible. False in setters. */
5509 : false, /* isMovable. Not relevant for setters. */
5510 : false, /* isEliminatable. Not relevant for setters. */
5511 : false, /* isAlwaysInSlot. Only relevant for getters. */
5512 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5513 : false, /* isTypedMethod. Only relevant for methods. */
5514 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5515 : };
5516 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5517 : static_assert(0 < 5, "There is no slot for us");
5518 : static const JSJitInfo ondevicemotion_setterinfo = {
5519 : { (JSJitGetterOp)set_ondevicemotion },
5520 : { prototypes::id::Window },
5521 : { PrototypeTraits<prototypes::id::Window>::Depth },
5522 : JSJitInfo::Setter,
5523 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5524 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5525 : false, /* isInfallible. False in setters. */
5526 : false, /* isMovable. Not relevant for setters. */
5527 : false, /* isEliminatable. Not relevant for setters. */
5528 : false, /* isAlwaysInSlot. Only relevant for getters. */
5529 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5530 : false, /* isTypedMethod. Only relevant for methods. */
5531 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5532 : };
5533 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5534 : static_assert(0 < 5, "There is no slot for us");
5535 :
5536 : static bool
5537 0 : get_ondeviceorientation(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
5538 : {
5539 0 : RefPtr<EventHandlerNonNull> result(self->GetOndeviceorientation());
5540 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5541 0 : if (result) {
5542 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
5543 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
5544 0 : return false;
5545 : }
5546 0 : return true;
5547 : } else {
5548 0 : args.rval().setNull();
5549 0 : return true;
5550 : }
5551 : }
5552 :
5553 : static bool
5554 0 : set_ondeviceorientation(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
5555 : {
5556 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
5557 0 : if (args[0].isObject()) {
5558 : { // scope for tempRoot
5559 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
5560 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
5561 : }
5562 : } else {
5563 0 : arg0 = nullptr;
5564 : }
5565 0 : self->SetOndeviceorientation(Constify(arg0));
5566 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5567 :
5568 0 : return true;
5569 : }
5570 :
5571 : static const JSJitInfo ondeviceorientation_getterinfo = {
5572 : { (JSJitGetterOp)get_ondeviceorientation },
5573 : { prototypes::id::Window },
5574 : { PrototypeTraits<prototypes::id::Window>::Depth },
5575 : JSJitInfo::Getter,
5576 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5577 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
5578 : false, /* isInfallible. False in setters. */
5579 : false, /* isMovable. Not relevant for setters. */
5580 : false, /* isEliminatable. Not relevant for setters. */
5581 : false, /* isAlwaysInSlot. Only relevant for getters. */
5582 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5583 : false, /* isTypedMethod. Only relevant for methods. */
5584 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5585 : };
5586 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5587 : static_assert(0 < 5, "There is no slot for us");
5588 : static const JSJitInfo ondeviceorientation_setterinfo = {
5589 : { (JSJitGetterOp)set_ondeviceorientation },
5590 : { prototypes::id::Window },
5591 : { PrototypeTraits<prototypes::id::Window>::Depth },
5592 : JSJitInfo::Setter,
5593 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5594 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5595 : false, /* isInfallible. False in setters. */
5596 : false, /* isMovable. Not relevant for setters. */
5597 : false, /* isEliminatable. Not relevant for setters. */
5598 : false, /* isAlwaysInSlot. Only relevant for getters. */
5599 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5600 : false, /* isTypedMethod. Only relevant for methods. */
5601 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5602 : };
5603 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5604 : static_assert(0 < 5, "There is no slot for us");
5605 :
5606 : static bool
5607 0 : get_onabsolutedeviceorientation(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
5608 : {
5609 0 : RefPtr<EventHandlerNonNull> result(self->GetOnabsolutedeviceorientation());
5610 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5611 0 : if (result) {
5612 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
5613 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
5614 0 : return false;
5615 : }
5616 0 : return true;
5617 : } else {
5618 0 : args.rval().setNull();
5619 0 : return true;
5620 : }
5621 : }
5622 :
5623 : static bool
5624 0 : set_onabsolutedeviceorientation(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
5625 : {
5626 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
5627 0 : if (args[0].isObject()) {
5628 : { // scope for tempRoot
5629 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
5630 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
5631 : }
5632 : } else {
5633 0 : arg0 = nullptr;
5634 : }
5635 0 : self->SetOnabsolutedeviceorientation(Constify(arg0));
5636 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5637 :
5638 0 : return true;
5639 : }
5640 :
5641 : static const JSJitInfo onabsolutedeviceorientation_getterinfo = {
5642 : { (JSJitGetterOp)get_onabsolutedeviceorientation },
5643 : { prototypes::id::Window },
5644 : { PrototypeTraits<prototypes::id::Window>::Depth },
5645 : JSJitInfo::Getter,
5646 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5647 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
5648 : false, /* isInfallible. False in setters. */
5649 : false, /* isMovable. Not relevant for setters. */
5650 : false, /* isEliminatable. Not relevant for setters. */
5651 : false, /* isAlwaysInSlot. Only relevant for getters. */
5652 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5653 : false, /* isTypedMethod. Only relevant for methods. */
5654 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5655 : };
5656 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5657 : static_assert(0 < 5, "There is no slot for us");
5658 : static const JSJitInfo onabsolutedeviceorientation_setterinfo = {
5659 : { (JSJitGetterOp)set_onabsolutedeviceorientation },
5660 : { prototypes::id::Window },
5661 : { PrototypeTraits<prototypes::id::Window>::Depth },
5662 : JSJitInfo::Setter,
5663 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5664 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5665 : false, /* isInfallible. False in setters. */
5666 : false, /* isMovable. Not relevant for setters. */
5667 : false, /* isEliminatable. Not relevant for setters. */
5668 : false, /* isAlwaysInSlot. Only relevant for getters. */
5669 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5670 : false, /* isTypedMethod. Only relevant for methods. */
5671 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5672 : };
5673 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5674 : static_assert(0 < 5, "There is no slot for us");
5675 :
5676 : static bool
5677 0 : get_ondeviceproximity(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
5678 : {
5679 0 : RefPtr<EventHandlerNonNull> result(self->GetOndeviceproximity());
5680 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5681 0 : if (result) {
5682 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
5683 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
5684 0 : return false;
5685 : }
5686 0 : return true;
5687 : } else {
5688 0 : args.rval().setNull();
5689 0 : return true;
5690 : }
5691 : }
5692 :
5693 : static bool
5694 0 : set_ondeviceproximity(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
5695 : {
5696 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
5697 0 : if (args[0].isObject()) {
5698 : { // scope for tempRoot
5699 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
5700 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
5701 : }
5702 : } else {
5703 0 : arg0 = nullptr;
5704 : }
5705 0 : self->SetOndeviceproximity(Constify(arg0));
5706 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5707 :
5708 0 : return true;
5709 : }
5710 :
5711 : static const JSJitInfo ondeviceproximity_getterinfo = {
5712 : { (JSJitGetterOp)get_ondeviceproximity },
5713 : { prototypes::id::Window },
5714 : { PrototypeTraits<prototypes::id::Window>::Depth },
5715 : JSJitInfo::Getter,
5716 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5717 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
5718 : false, /* isInfallible. False in setters. */
5719 : false, /* isMovable. Not relevant for setters. */
5720 : false, /* isEliminatable. Not relevant for setters. */
5721 : false, /* isAlwaysInSlot. Only relevant for getters. */
5722 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5723 : false, /* isTypedMethod. Only relevant for methods. */
5724 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5725 : };
5726 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5727 : static_assert(0 < 5, "There is no slot for us");
5728 : static const JSJitInfo ondeviceproximity_setterinfo = {
5729 : { (JSJitGetterOp)set_ondeviceproximity },
5730 : { prototypes::id::Window },
5731 : { PrototypeTraits<prototypes::id::Window>::Depth },
5732 : JSJitInfo::Setter,
5733 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5734 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5735 : false, /* isInfallible. False in setters. */
5736 : false, /* isMovable. Not relevant for setters. */
5737 : false, /* isEliminatable. Not relevant for setters. */
5738 : false, /* isAlwaysInSlot. Only relevant for getters. */
5739 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5740 : false, /* isTypedMethod. Only relevant for methods. */
5741 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5742 : };
5743 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5744 : static_assert(0 < 5, "There is no slot for us");
5745 :
5746 : static bool
5747 0 : get_onuserproximity(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
5748 : {
5749 0 : RefPtr<EventHandlerNonNull> result(self->GetOnuserproximity());
5750 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5751 0 : if (result) {
5752 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
5753 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
5754 0 : return false;
5755 : }
5756 0 : return true;
5757 : } else {
5758 0 : args.rval().setNull();
5759 0 : return true;
5760 : }
5761 : }
5762 :
5763 : static bool
5764 0 : set_onuserproximity(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
5765 : {
5766 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
5767 0 : if (args[0].isObject()) {
5768 : { // scope for tempRoot
5769 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
5770 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
5771 : }
5772 : } else {
5773 0 : arg0 = nullptr;
5774 : }
5775 0 : self->SetOnuserproximity(Constify(arg0));
5776 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5777 :
5778 0 : return true;
5779 : }
5780 :
5781 : static const JSJitInfo onuserproximity_getterinfo = {
5782 : { (JSJitGetterOp)get_onuserproximity },
5783 : { prototypes::id::Window },
5784 : { PrototypeTraits<prototypes::id::Window>::Depth },
5785 : JSJitInfo::Getter,
5786 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5787 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
5788 : false, /* isInfallible. False in setters. */
5789 : false, /* isMovable. Not relevant for setters. */
5790 : false, /* isEliminatable. Not relevant for setters. */
5791 : false, /* isAlwaysInSlot. Only relevant for getters. */
5792 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5793 : false, /* isTypedMethod. Only relevant for methods. */
5794 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5795 : };
5796 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5797 : static_assert(0 < 5, "There is no slot for us");
5798 : static const JSJitInfo onuserproximity_setterinfo = {
5799 : { (JSJitGetterOp)set_onuserproximity },
5800 : { prototypes::id::Window },
5801 : { PrototypeTraits<prototypes::id::Window>::Depth },
5802 : JSJitInfo::Setter,
5803 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5804 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5805 : false, /* isInfallible. False in setters. */
5806 : false, /* isMovable. Not relevant for setters. */
5807 : false, /* isEliminatable. Not relevant for setters. */
5808 : false, /* isAlwaysInSlot. Only relevant for getters. */
5809 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5810 : false, /* isTypedMethod. Only relevant for methods. */
5811 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5812 : };
5813 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5814 : static_assert(0 < 5, "There is no slot for us");
5815 :
5816 : static bool
5817 0 : get_ondevicelight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
5818 : {
5819 0 : RefPtr<EventHandlerNonNull> result(self->GetOndevicelight());
5820 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5821 0 : if (result) {
5822 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
5823 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
5824 0 : return false;
5825 : }
5826 0 : return true;
5827 : } else {
5828 0 : args.rval().setNull();
5829 0 : return true;
5830 : }
5831 : }
5832 :
5833 : static bool
5834 0 : set_ondevicelight(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
5835 : {
5836 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
5837 0 : if (args[0].isObject()) {
5838 : { // scope for tempRoot
5839 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
5840 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
5841 : }
5842 : } else {
5843 0 : arg0 = nullptr;
5844 : }
5845 0 : self->SetOndevicelight(Constify(arg0));
5846 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5847 :
5848 0 : return true;
5849 : }
5850 :
5851 : static const JSJitInfo ondevicelight_getterinfo = {
5852 : { (JSJitGetterOp)get_ondevicelight },
5853 : { prototypes::id::Window },
5854 : { PrototypeTraits<prototypes::id::Window>::Depth },
5855 : JSJitInfo::Getter,
5856 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5857 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
5858 : false, /* isInfallible. False in setters. */
5859 : false, /* isMovable. Not relevant for setters. */
5860 : false, /* isEliminatable. Not relevant for setters. */
5861 : false, /* isAlwaysInSlot. Only relevant for getters. */
5862 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5863 : false, /* isTypedMethod. Only relevant for methods. */
5864 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5865 : };
5866 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5867 : static_assert(0 < 5, "There is no slot for us");
5868 : static const JSJitInfo ondevicelight_setterinfo = {
5869 : { (JSJitGetterOp)set_ondevicelight },
5870 : { prototypes::id::Window },
5871 : { PrototypeTraits<prototypes::id::Window>::Depth },
5872 : JSJitInfo::Setter,
5873 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5874 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5875 : false, /* isInfallible. False in setters. */
5876 : false, /* isMovable. Not relevant for setters. */
5877 : false, /* isEliminatable. Not relevant for setters. */
5878 : false, /* isAlwaysInSlot. Only relevant for getters. */
5879 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5880 : false, /* isTypedMethod. Only relevant for methods. */
5881 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5882 : };
5883 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5884 : static_assert(0 < 5, "There is no slot for us");
5885 :
5886 : static bool
5887 1 : dump(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
5888 : {
5889 1 : if (MOZ_UNLIKELY(args.length() < 1)) {
5890 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.dump");
5891 : }
5892 2 : binding_detail::FakeString arg0;
5893 1 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
5894 0 : return false;
5895 : }
5896 1 : self->Dump(NonNullHelper(Constify(arg0)));
5897 1 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5898 1 : args.rval().setUndefined();
5899 1 : return true;
5900 : }
5901 :
5902 : static const JSJitInfo dump_methodinfo = {
5903 : { (JSJitGetterOp)dump },
5904 : { prototypes::id::Window },
5905 : { PrototypeTraits<prototypes::id::Window>::Depth },
5906 : JSJitInfo::Method,
5907 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5908 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5909 : false, /* isInfallible. False in setters. */
5910 : false, /* isMovable. Not relevant for setters. */
5911 : false, /* isEliminatable. Not relevant for setters. */
5912 : false, /* isAlwaysInSlot. Only relevant for getters. */
5913 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5914 : false, /* isTypedMethod. Only relevant for methods. */
5915 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5916 : };
5917 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5918 : static_assert(0 < 5, "There is no slot for us");
5919 :
5920 : static bool
5921 0 : setResizable(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
5922 : {
5923 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
5924 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.setResizable");
5925 : }
5926 : bool arg0;
5927 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
5928 0 : return false;
5929 : }
5930 0 : self->SetResizable(arg0);
5931 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5932 0 : args.rval().setUndefined();
5933 0 : return true;
5934 : }
5935 :
5936 : static const JSJitInfo setResizable_methodinfo = {
5937 : { (JSJitGetterOp)setResizable },
5938 : { prototypes::id::Window },
5939 : { PrototypeTraits<prototypes::id::Window>::Depth },
5940 : JSJitInfo::Method,
5941 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
5942 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
5943 : false, /* isInfallible. False in setters. */
5944 : false, /* isMovable. Not relevant for setters. */
5945 : false, /* isEliminatable. Not relevant for setters. */
5946 : false, /* isAlwaysInSlot. Only relevant for getters. */
5947 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
5948 : false, /* isTypedMethod. Only relevant for methods. */
5949 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
5950 : };
5951 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
5952 : static_assert(0 < 5, "There is no slot for us");
5953 :
5954 : static bool
5955 0 : openDialog(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
5956 : {
5957 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
5958 : // Return false from the JSNative in order to trigger
5959 : // an uncatchable exception.
5960 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
5961 0 : return false;
5962 : }
5963 0 : binding_detail::FakeString arg0;
5964 0 : if (args.hasDefined(0)) {
5965 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
5966 0 : return false;
5967 : }
5968 : } else {
5969 : static const char16_t data[] = { 0 };
5970 0 : arg0.Rebind(data, ArrayLength(data) - 1);
5971 : }
5972 0 : binding_detail::FakeString arg1;
5973 0 : if (args.hasDefined(1)) {
5974 0 : if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
5975 0 : return false;
5976 : }
5977 : } else {
5978 : static const char16_t data[] = { 0 };
5979 0 : arg1.Rebind(data, ArrayLength(data) - 1);
5980 : }
5981 0 : binding_detail::FakeString arg2;
5982 0 : if (args.hasDefined(2)) {
5983 0 : if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2)) {
5984 0 : return false;
5985 : }
5986 : } else {
5987 : static const char16_t data[] = { 0 };
5988 0 : arg2.Rebind(data, ArrayLength(data) - 1);
5989 : }
5990 0 : binding_detail::AutoSequence<JS::Value> arg3;
5991 0 : SequenceRooter<JS::Value> arg3_holder(cx, &arg3);
5992 0 : if (args.length() > 3) {
5993 0 : if (!arg3.SetCapacity(args.length() - 3, mozilla::fallible)) {
5994 0 : JS_ReportOutOfMemory(cx);
5995 0 : return false;
5996 : }
5997 0 : for (uint32_t variadicArg = 3; variadicArg < args.length(); ++variadicArg) {
5998 0 : JS::Value& slot = *arg3.AppendElement(mozilla::fallible);
5999 0 : slot = args[variadicArg];
6000 : }
6001 : }
6002 0 : binding_detail::FastErrorResult rv;
6003 0 : auto result(StrongOrRawPtr<nsPIDOMWindowOuter>(self->OpenDialog(cx, NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)), NonNullHelper(Constify(arg2)), Constify(arg3), rv)));
6004 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6005 0 : return false;
6006 : }
6007 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6008 0 : if (!result) {
6009 0 : args.rval().setNull();
6010 0 : return true;
6011 : }
6012 0 : if (!WrapObject(cx, result, args.rval())) {
6013 0 : return false;
6014 : }
6015 0 : return true;
6016 : }
6017 :
6018 : static const JSJitInfo openDialog_methodinfo = {
6019 : { (JSJitGetterOp)openDialog },
6020 : { prototypes::id::Window },
6021 : { PrototypeTraits<prototypes::id::Window>::Depth },
6022 : JSJitInfo::Method,
6023 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6024 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
6025 : false, /* isInfallible. False in setters. */
6026 : false, /* isMovable. Not relevant for setters. */
6027 : false, /* isEliminatable. Not relevant for setters. */
6028 : false, /* isAlwaysInSlot. Only relevant for getters. */
6029 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6030 : false, /* isTypedMethod. Only relevant for methods. */
6031 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6032 : };
6033 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6034 : static_assert(0 < 5, "There is no slot for us");
6035 :
6036 : static bool
6037 0 : get_content(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6038 : {
6039 0 : binding_detail::FastErrorResult rv;
6040 0 : JS::Rooted<JSObject*> result(cx);
6041 0 : self->GetContent(cx, &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
6042 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6043 0 : return false;
6044 : }
6045 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6046 0 : if (result) {
6047 0 : JS::ExposeObjectToActiveJS(result);
6048 : }
6049 0 : args.rval().setObjectOrNull(result);
6050 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
6051 0 : return false;
6052 : }
6053 0 : return true;
6054 : }
6055 :
6056 : static bool
6057 0 : set_content(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
6058 : {
6059 0 : return JS_DefineProperty(cx, obj, "content", args[0], JSPROP_ENUMERATE);
6060 : }
6061 :
6062 : static const JSJitInfo content_getterinfo = {
6063 : { (JSJitGetterOp)get_content },
6064 : { prototypes::id::Window },
6065 : { PrototypeTraits<prototypes::id::Window>::Depth },
6066 : JSJitInfo::Getter,
6067 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6068 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
6069 : false, /* isInfallible. False in setters. */
6070 : false, /* isMovable. Not relevant for setters. */
6071 : false, /* isEliminatable. Not relevant for setters. */
6072 : false, /* isAlwaysInSlot. Only relevant for getters. */
6073 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6074 : false, /* isTypedMethod. Only relevant for methods. */
6075 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6076 : };
6077 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6078 : static_assert(0 < 5, "There is no slot for us");
6079 : static const JSJitInfo content_setterinfo = {
6080 : { (JSJitGetterOp)set_content },
6081 : { prototypes::id::Window },
6082 : { PrototypeTraits<prototypes::id::Window>::Depth },
6083 : JSJitInfo::Setter,
6084 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6085 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
6086 : false, /* isInfallible. False in setters. */
6087 : false, /* isMovable. Not relevant for setters. */
6088 : false, /* isEliminatable. Not relevant for setters. */
6089 : false, /* isAlwaysInSlot. Only relevant for getters. */
6090 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6091 : false, /* isTypedMethod. Only relevant for methods. */
6092 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6093 : };
6094 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6095 : static_assert(0 < 5, "There is no slot for us");
6096 :
6097 : static bool
6098 0 : get__content(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6099 : {
6100 0 : binding_detail::FastErrorResult rv;
6101 0 : JS::Rooted<JSObject*> result(cx);
6102 0 : self->Get_content(cx, &result, SystemCallerGuarantee(), rv);
6103 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6104 0 : return false;
6105 : }
6106 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6107 0 : if (result) {
6108 0 : JS::ExposeObjectToActiveJS(result);
6109 : }
6110 0 : args.rval().setObjectOrNull(result);
6111 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
6112 0 : return false;
6113 : }
6114 0 : return true;
6115 : }
6116 :
6117 : static const JSJitInfo _content_getterinfo = {
6118 : { (JSJitGetterOp)get__content },
6119 : { prototypes::id::Window },
6120 : { PrototypeTraits<prototypes::id::Window>::Depth },
6121 : JSJitInfo::Getter,
6122 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6123 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
6124 : false, /* isInfallible. False in setters. */
6125 : false, /* isMovable. Not relevant for setters. */
6126 : false, /* isEliminatable. Not relevant for setters. */
6127 : false, /* isAlwaysInSlot. Only relevant for getters. */
6128 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6129 : false, /* isTypedMethod. Only relevant for methods. */
6130 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6131 : };
6132 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6133 : static_assert(0 < 5, "There is no slot for us");
6134 :
6135 : static bool
6136 39 : getInterface(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
6137 : {
6138 39 : if (MOZ_UNLIKELY(args.length() < 1)) {
6139 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getInterface");
6140 : }
6141 : nsIJSID* arg0;
6142 78 : RefPtr<nsIJSID> arg0_holder;
6143 39 : if (args[0].isObject()) {
6144 78 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
6145 39 : if (NS_FAILED(UnwrapArg<nsIJSID>(cx, source, getter_AddRefs(arg0_holder)))) {
6146 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.getInterface", "IID");
6147 0 : return false;
6148 : }
6149 39 : MOZ_ASSERT(arg0_holder);
6150 39 : arg0 = arg0_holder;
6151 : } else {
6152 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.getInterface");
6153 0 : return false;
6154 : }
6155 78 : binding_detail::FastErrorResult rv;
6156 78 : JS::Rooted<JS::Value> result(cx);
6157 39 : self->GetInterface(cx, NonNullHelper(arg0), &result, rv);
6158 39 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6159 0 : return false;
6160 : }
6161 39 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6162 39 : JS::ExposeValueToActiveJS(result);
6163 39 : args.rval().set(result);
6164 39 : if (!MaybeWrapValue(cx, args.rval())) {
6165 0 : return false;
6166 : }
6167 39 : return true;
6168 : }
6169 :
6170 : static const JSJitInfo getInterface_methodinfo = {
6171 : { (JSJitGetterOp)getInterface },
6172 : { prototypes::id::Window },
6173 : { PrototypeTraits<prototypes::id::Window>::Depth },
6174 : JSJitInfo::Method,
6175 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6176 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
6177 : false, /* isInfallible. False in setters. */
6178 : false, /* isMovable. Not relevant for setters. */
6179 : false, /* isEliminatable. Not relevant for setters. */
6180 : false, /* isAlwaysInSlot. Only relevant for getters. */
6181 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6182 : false, /* isTypedMethod. Only relevant for methods. */
6183 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6184 : };
6185 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6186 : static_assert(0 < 5, "There is no slot for us");
6187 :
6188 : static bool
6189 0 : get_windowRoot(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6190 : {
6191 0 : binding_detail::FastErrorResult rv;
6192 0 : auto result(StrongOrRawPtr<nsWindowRoot>(self->GetWindowRoot(rv)));
6193 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6194 0 : return false;
6195 : }
6196 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6197 0 : if (!result) {
6198 0 : args.rval().setNull();
6199 0 : return true;
6200 : }
6201 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
6202 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
6203 0 : return false;
6204 : }
6205 0 : return true;
6206 : }
6207 :
6208 : static const JSJitInfo windowRoot_getterinfo = {
6209 : { (JSJitGetterOp)get_windowRoot },
6210 : { prototypes::id::Window },
6211 : { PrototypeTraits<prototypes::id::Window>::Depth },
6212 : JSJitInfo::Getter,
6213 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6214 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
6215 : false, /* isInfallible. False in setters. */
6216 : false, /* isMovable. Not relevant for setters. */
6217 : false, /* isEliminatable. Not relevant for setters. */
6218 : false, /* isAlwaysInSlot. Only relevant for getters. */
6219 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6220 : false, /* isTypedMethod. Only relevant for methods. */
6221 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6222 : };
6223 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6224 : static_assert(0 < 5, "There is no slot for us");
6225 :
6226 : static bool
6227 0 : get_sidebar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6228 : {
6229 0 : binding_detail::FastErrorResult rv;
6230 0 : OwningExternalOrWindowProxy result;
6231 0 : self->GetSidebar(result, rv);
6232 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6233 0 : return false;
6234 : }
6235 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6236 0 : SetDocumentAndPageUseCounter(cx, obj, eUseCounter_Window_sidebar_getter);
6237 0 : if (!result.ToJSVal(cx, obj, args.rval())) {
6238 0 : return false;
6239 : }
6240 0 : return true;
6241 : }
6242 :
6243 : static bool
6244 0 : set_sidebar(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
6245 : {
6246 0 : return JS_DefineProperty(cx, obj, "sidebar", args[0], JSPROP_ENUMERATE);
6247 : }
6248 :
6249 : static const JSJitInfo sidebar_getterinfo = {
6250 : { (JSJitGetterOp)get_sidebar },
6251 : { prototypes::id::Window },
6252 : { PrototypeTraits<prototypes::id::Window>::Depth },
6253 : JSJitInfo::Getter,
6254 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6255 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
6256 : false, /* isInfallible. False in setters. */
6257 : false, /* isMovable. Not relevant for setters. */
6258 : false, /* isEliminatable. Not relevant for setters. */
6259 : false, /* isAlwaysInSlot. Only relevant for getters. */
6260 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6261 : false, /* isTypedMethod. Only relevant for methods. */
6262 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6263 : };
6264 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6265 : static_assert(0 < 5, "There is no slot for us");
6266 : static const JSJitInfo sidebar_setterinfo = {
6267 : { (JSJitGetterOp)set_sidebar },
6268 : { prototypes::id::Window },
6269 : { PrototypeTraits<prototypes::id::Window>::Depth },
6270 : JSJitInfo::Setter,
6271 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6272 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
6273 : false, /* isInfallible. False in setters. */
6274 : false, /* isMovable. Not relevant for setters. */
6275 : false, /* isEliminatable. Not relevant for setters. */
6276 : false, /* isAlwaysInSlot. Only relevant for getters. */
6277 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6278 : false, /* isTypedMethod. Only relevant for methods. */
6279 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6280 : };
6281 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6282 : static_assert(0 < 5, "There is no slot for us");
6283 :
6284 : static bool
6285 0 : get_onvrdisplayconnect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6286 : {
6287 0 : RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplayconnect());
6288 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6289 0 : if (result) {
6290 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
6291 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
6292 0 : return false;
6293 : }
6294 0 : return true;
6295 : } else {
6296 0 : args.rval().setNull();
6297 0 : return true;
6298 : }
6299 : }
6300 :
6301 : static bool
6302 0 : set_onvrdisplayconnect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
6303 : {
6304 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
6305 0 : if (args[0].isObject()) {
6306 : { // scope for tempRoot
6307 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
6308 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
6309 : }
6310 : } else {
6311 0 : arg0 = nullptr;
6312 : }
6313 0 : self->SetOnvrdisplayconnect(Constify(arg0));
6314 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6315 :
6316 0 : return true;
6317 : }
6318 :
6319 : static const JSJitInfo onvrdisplayconnect_getterinfo = {
6320 : { (JSJitGetterOp)get_onvrdisplayconnect },
6321 : { prototypes::id::Window },
6322 : { PrototypeTraits<prototypes::id::Window>::Depth },
6323 : JSJitInfo::Getter,
6324 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6325 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
6326 : false, /* isInfallible. False in setters. */
6327 : false, /* isMovable. Not relevant for setters. */
6328 : false, /* isEliminatable. Not relevant for setters. */
6329 : false, /* isAlwaysInSlot. Only relevant for getters. */
6330 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6331 : false, /* isTypedMethod. Only relevant for methods. */
6332 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6333 : };
6334 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6335 : static_assert(0 < 5, "There is no slot for us");
6336 : static const JSJitInfo onvrdisplayconnect_setterinfo = {
6337 : { (JSJitGetterOp)set_onvrdisplayconnect },
6338 : { prototypes::id::Window },
6339 : { PrototypeTraits<prototypes::id::Window>::Depth },
6340 : JSJitInfo::Setter,
6341 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6342 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
6343 : false, /* isInfallible. False in setters. */
6344 : false, /* isMovable. Not relevant for setters. */
6345 : false, /* isEliminatable. Not relevant for setters. */
6346 : false, /* isAlwaysInSlot. Only relevant for getters. */
6347 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6348 : false, /* isTypedMethod. Only relevant for methods. */
6349 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6350 : };
6351 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6352 : static_assert(0 < 5, "There is no slot for us");
6353 :
6354 : static bool
6355 0 : get_onvrdisplaydisconnect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6356 : {
6357 0 : RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplaydisconnect());
6358 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6359 0 : if (result) {
6360 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
6361 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
6362 0 : return false;
6363 : }
6364 0 : return true;
6365 : } else {
6366 0 : args.rval().setNull();
6367 0 : return true;
6368 : }
6369 : }
6370 :
6371 : static bool
6372 0 : set_onvrdisplaydisconnect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
6373 : {
6374 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
6375 0 : if (args[0].isObject()) {
6376 : { // scope for tempRoot
6377 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
6378 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
6379 : }
6380 : } else {
6381 0 : arg0 = nullptr;
6382 : }
6383 0 : self->SetOnvrdisplaydisconnect(Constify(arg0));
6384 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6385 :
6386 0 : return true;
6387 : }
6388 :
6389 : static const JSJitInfo onvrdisplaydisconnect_getterinfo = {
6390 : { (JSJitGetterOp)get_onvrdisplaydisconnect },
6391 : { prototypes::id::Window },
6392 : { PrototypeTraits<prototypes::id::Window>::Depth },
6393 : JSJitInfo::Getter,
6394 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6395 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
6396 : false, /* isInfallible. False in setters. */
6397 : false, /* isMovable. Not relevant for setters. */
6398 : false, /* isEliminatable. Not relevant for setters. */
6399 : false, /* isAlwaysInSlot. Only relevant for getters. */
6400 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6401 : false, /* isTypedMethod. Only relevant for methods. */
6402 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6403 : };
6404 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6405 : static_assert(0 < 5, "There is no slot for us");
6406 : static const JSJitInfo onvrdisplaydisconnect_setterinfo = {
6407 : { (JSJitGetterOp)set_onvrdisplaydisconnect },
6408 : { prototypes::id::Window },
6409 : { PrototypeTraits<prototypes::id::Window>::Depth },
6410 : JSJitInfo::Setter,
6411 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6412 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
6413 : false, /* isInfallible. False in setters. */
6414 : false, /* isMovable. Not relevant for setters. */
6415 : false, /* isEliminatable. Not relevant for setters. */
6416 : false, /* isAlwaysInSlot. Only relevant for getters. */
6417 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6418 : false, /* isTypedMethod. Only relevant for methods. */
6419 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6420 : };
6421 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6422 : static_assert(0 < 5, "There is no slot for us");
6423 :
6424 : static bool
6425 0 : get_onvrdisplayactivate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6426 : {
6427 0 : RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplayactivate());
6428 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6429 0 : if (result) {
6430 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
6431 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
6432 0 : return false;
6433 : }
6434 0 : return true;
6435 : } else {
6436 0 : args.rval().setNull();
6437 0 : return true;
6438 : }
6439 : }
6440 :
6441 : static bool
6442 0 : set_onvrdisplayactivate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
6443 : {
6444 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
6445 0 : if (args[0].isObject()) {
6446 : { // scope for tempRoot
6447 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
6448 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
6449 : }
6450 : } else {
6451 0 : arg0 = nullptr;
6452 : }
6453 0 : self->SetOnvrdisplayactivate(Constify(arg0));
6454 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6455 :
6456 0 : return true;
6457 : }
6458 :
6459 : static const JSJitInfo onvrdisplayactivate_getterinfo = {
6460 : { (JSJitGetterOp)get_onvrdisplayactivate },
6461 : { prototypes::id::Window },
6462 : { PrototypeTraits<prototypes::id::Window>::Depth },
6463 : JSJitInfo::Getter,
6464 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6465 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
6466 : false, /* isInfallible. False in setters. */
6467 : false, /* isMovable. Not relevant for setters. */
6468 : false, /* isEliminatable. Not relevant for setters. */
6469 : false, /* isAlwaysInSlot. Only relevant for getters. */
6470 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6471 : false, /* isTypedMethod. Only relevant for methods. */
6472 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6473 : };
6474 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6475 : static_assert(0 < 5, "There is no slot for us");
6476 : static const JSJitInfo onvrdisplayactivate_setterinfo = {
6477 : { (JSJitGetterOp)set_onvrdisplayactivate },
6478 : { prototypes::id::Window },
6479 : { PrototypeTraits<prototypes::id::Window>::Depth },
6480 : JSJitInfo::Setter,
6481 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6482 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
6483 : false, /* isInfallible. False in setters. */
6484 : false, /* isMovable. Not relevant for setters. */
6485 : false, /* isEliminatable. Not relevant for setters. */
6486 : false, /* isAlwaysInSlot. Only relevant for getters. */
6487 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6488 : false, /* isTypedMethod. Only relevant for methods. */
6489 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6490 : };
6491 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6492 : static_assert(0 < 5, "There is no slot for us");
6493 :
6494 : static bool
6495 0 : get_onvrdisplaydeactivate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6496 : {
6497 0 : RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplaydeactivate());
6498 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6499 0 : if (result) {
6500 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
6501 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
6502 0 : return false;
6503 : }
6504 0 : return true;
6505 : } else {
6506 0 : args.rval().setNull();
6507 0 : return true;
6508 : }
6509 : }
6510 :
6511 : static bool
6512 0 : set_onvrdisplaydeactivate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
6513 : {
6514 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
6515 0 : if (args[0].isObject()) {
6516 : { // scope for tempRoot
6517 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
6518 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
6519 : }
6520 : } else {
6521 0 : arg0 = nullptr;
6522 : }
6523 0 : self->SetOnvrdisplaydeactivate(Constify(arg0));
6524 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6525 :
6526 0 : return true;
6527 : }
6528 :
6529 : static const JSJitInfo onvrdisplaydeactivate_getterinfo = {
6530 : { (JSJitGetterOp)get_onvrdisplaydeactivate },
6531 : { prototypes::id::Window },
6532 : { PrototypeTraits<prototypes::id::Window>::Depth },
6533 : JSJitInfo::Getter,
6534 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6535 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
6536 : false, /* isInfallible. False in setters. */
6537 : false, /* isMovable. Not relevant for setters. */
6538 : false, /* isEliminatable. Not relevant for setters. */
6539 : false, /* isAlwaysInSlot. Only relevant for getters. */
6540 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6541 : false, /* isTypedMethod. Only relevant for methods. */
6542 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6543 : };
6544 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6545 : static_assert(0 < 5, "There is no slot for us");
6546 : static const JSJitInfo onvrdisplaydeactivate_setterinfo = {
6547 : { (JSJitGetterOp)set_onvrdisplaydeactivate },
6548 : { prototypes::id::Window },
6549 : { PrototypeTraits<prototypes::id::Window>::Depth },
6550 : JSJitInfo::Setter,
6551 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6552 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
6553 : false, /* isInfallible. False in setters. */
6554 : false, /* isMovable. Not relevant for setters. */
6555 : false, /* isEliminatable. Not relevant for setters. */
6556 : false, /* isAlwaysInSlot. Only relevant for getters. */
6557 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6558 : false, /* isTypedMethod. Only relevant for methods. */
6559 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6560 : };
6561 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6562 : static_assert(0 < 5, "There is no slot for us");
6563 :
6564 : static bool
6565 0 : get_onvrdisplaypresentchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6566 : {
6567 0 : RefPtr<EventHandlerNonNull> result(self->GetOnvrdisplaypresentchange());
6568 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6569 0 : if (result) {
6570 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
6571 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
6572 0 : return false;
6573 : }
6574 0 : return true;
6575 : } else {
6576 0 : args.rval().setNull();
6577 0 : return true;
6578 : }
6579 : }
6580 :
6581 : static bool
6582 0 : set_onvrdisplaypresentchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
6583 : {
6584 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
6585 0 : if (args[0].isObject()) {
6586 : { // scope for tempRoot
6587 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
6588 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
6589 : }
6590 : } else {
6591 0 : arg0 = nullptr;
6592 : }
6593 0 : self->SetOnvrdisplaypresentchange(Constify(arg0));
6594 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6595 :
6596 0 : return true;
6597 : }
6598 :
6599 : static const JSJitInfo onvrdisplaypresentchange_getterinfo = {
6600 : { (JSJitGetterOp)get_onvrdisplaypresentchange },
6601 : { prototypes::id::Window },
6602 : { PrototypeTraits<prototypes::id::Window>::Depth },
6603 : JSJitInfo::Getter,
6604 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6605 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
6606 : false, /* isInfallible. False in setters. */
6607 : false, /* isMovable. Not relevant for setters. */
6608 : false, /* isEliminatable. Not relevant for setters. */
6609 : false, /* isAlwaysInSlot. Only relevant for getters. */
6610 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6611 : false, /* isTypedMethod. Only relevant for methods. */
6612 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6613 : };
6614 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6615 : static_assert(0 < 5, "There is no slot for us");
6616 : static const JSJitInfo onvrdisplaypresentchange_setterinfo = {
6617 : { (JSJitGetterOp)set_onvrdisplaypresentchange },
6618 : { prototypes::id::Window },
6619 : { PrototypeTraits<prototypes::id::Window>::Depth },
6620 : JSJitInfo::Setter,
6621 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6622 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
6623 : false, /* isInfallible. False in setters. */
6624 : false, /* isMovable. Not relevant for setters. */
6625 : false, /* isEliminatable. Not relevant for setters. */
6626 : false, /* isAlwaysInSlot. Only relevant for getters. */
6627 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6628 : false, /* isTypedMethod. Only relevant for methods. */
6629 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6630 : };
6631 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6632 : static_assert(0 < 5, "There is no slot for us");
6633 :
6634 : static bool
6635 0 : get_audioWorklet(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6636 : {
6637 0 : binding_detail::FastErrorResult rv;
6638 0 : auto result(StrongOrRawPtr<mozilla::dom::Worklet>(self->GetAudioWorklet(rv)));
6639 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6640 0 : return false;
6641 : }
6642 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6643 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
6644 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
6645 0 : return false;
6646 : }
6647 0 : return true;
6648 : }
6649 :
6650 : static const JSJitInfo audioWorklet_getterinfo = {
6651 : { (JSJitGetterOp)get_audioWorklet },
6652 : { prototypes::id::Window },
6653 : { PrototypeTraits<prototypes::id::Window>::Depth },
6654 : JSJitInfo::Getter,
6655 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6656 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
6657 : false, /* isInfallible. False in setters. */
6658 : false, /* isMovable. Not relevant for setters. */
6659 : false, /* isEliminatable. Not relevant for setters. */
6660 : false, /* isAlwaysInSlot. Only relevant for getters. */
6661 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6662 : false, /* isTypedMethod. Only relevant for methods. */
6663 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6664 : };
6665 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6666 : static_assert(0 < 5, "There is no slot for us");
6667 :
6668 : static bool
6669 0 : get_paintWorklet(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6670 : {
6671 0 : binding_detail::FastErrorResult rv;
6672 0 : auto result(StrongOrRawPtr<mozilla::dom::Worklet>(self->GetPaintWorklet(rv)));
6673 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6674 0 : return false;
6675 : }
6676 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6677 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
6678 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
6679 0 : return false;
6680 : }
6681 0 : return true;
6682 : }
6683 :
6684 : static const JSJitInfo paintWorklet_getterinfo = {
6685 : { (JSJitGetterOp)get_paintWorklet },
6686 : { prototypes::id::Window },
6687 : { PrototypeTraits<prototypes::id::Window>::Depth },
6688 : JSJitInfo::Getter,
6689 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6690 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
6691 : false, /* isInfallible. False in setters. */
6692 : false, /* isMovable. Not relevant for setters. */
6693 : false, /* isEliminatable. Not relevant for setters. */
6694 : false, /* isAlwaysInSlot. Only relevant for getters. */
6695 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6696 : false, /* isTypedMethod. Only relevant for methods. */
6697 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6698 : };
6699 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6700 : static_assert(0 < 5, "There is no slot for us");
6701 :
6702 : static bool
6703 3 : requestIdleCallback(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
6704 : {
6705 3 : if (MOZ_UNLIKELY(args.length() < 1)) {
6706 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.requestIdleCallback");
6707 : }
6708 6 : RootedCallback<OwningNonNull<binding_detail::FastIdleRequestCallback>> arg0(cx);
6709 3 : if (args[0].isObject()) {
6710 3 : if (JS::IsCallable(&args[0].toObject())) {
6711 : { // scope for tempRoot
6712 6 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
6713 6 : arg0 = new binding_detail::FastIdleRequestCallback(tempRoot);
6714 : }
6715 : } else {
6716 0 : ThrowErrorMessage(cx, MSG_NOT_CALLABLE, "Argument 1 of Window.requestIdleCallback");
6717 0 : return false;
6718 : }
6719 : } else {
6720 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.requestIdleCallback");
6721 0 : return false;
6722 : }
6723 6 : binding_detail::FastIdleRequestOptions arg1;
6724 3 : if (!arg1.Init(cx, (args.hasDefined(1)) ? args[1] : JS::NullHandleValue, "Argument 2 of Window.requestIdleCallback", false)) {
6725 0 : return false;
6726 : }
6727 6 : binding_detail::FastErrorResult rv;
6728 3 : uint32_t result(self->RequestIdleCallback(cx, NonNullHelper(arg0), Constify(arg1), rv));
6729 3 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6730 0 : return false;
6731 : }
6732 3 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6733 3 : args.rval().setNumber(result);
6734 3 : return true;
6735 : }
6736 :
6737 : static const JSJitInfo requestIdleCallback_methodinfo = {
6738 : { (JSJitGetterOp)requestIdleCallback },
6739 : { prototypes::id::Window },
6740 : { PrototypeTraits<prototypes::id::Window>::Depth },
6741 : JSJitInfo::Method,
6742 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6743 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
6744 : false, /* isInfallible. False in setters. */
6745 : false, /* isMovable. Not relevant for setters. */
6746 : false, /* isEliminatable. Not relevant for setters. */
6747 : false, /* isAlwaysInSlot. Only relevant for getters. */
6748 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6749 : false, /* isTypedMethod. Only relevant for methods. */
6750 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6751 : };
6752 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6753 : static_assert(0 < 5, "There is no slot for us");
6754 :
6755 : static bool
6756 0 : cancelIdleCallback(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
6757 : {
6758 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
6759 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.cancelIdleCallback");
6760 : }
6761 : uint32_t arg0;
6762 0 : if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
6763 0 : return false;
6764 : }
6765 0 : self->CancelIdleCallback(arg0);
6766 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6767 0 : args.rval().setUndefined();
6768 0 : return true;
6769 : }
6770 :
6771 : static const JSJitInfo cancelIdleCallback_methodinfo = {
6772 : { (JSJitGetterOp)cancelIdleCallback },
6773 : { prototypes::id::Window },
6774 : { PrototypeTraits<prototypes::id::Window>::Depth },
6775 : JSJitInfo::Method,
6776 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6777 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
6778 : false, /* isInfallible. False in setters. */
6779 : false, /* isMovable. Not relevant for setters. */
6780 : false, /* isEliminatable. Not relevant for setters. */
6781 : false, /* isAlwaysInSlot. Only relevant for getters. */
6782 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6783 : false, /* isTypedMethod. Only relevant for methods. */
6784 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6785 : };
6786 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6787 : static_assert(0 < 5, "There is no slot for us");
6788 :
6789 : static bool
6790 0 : get_isSecureContextIfOpenerIgnored(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6791 : {
6792 0 : bool result(self->IsSecureContextIfOpenerIgnored());
6793 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6794 0 : args.rval().setBoolean(result);
6795 0 : return true;
6796 : }
6797 :
6798 : static const JSJitInfo isSecureContextIfOpenerIgnored_getterinfo = {
6799 : { (JSJitGetterOp)get_isSecureContextIfOpenerIgnored },
6800 : { prototypes::id::Window },
6801 : { PrototypeTraits<prototypes::id::Window>::Depth },
6802 : JSJitInfo::Getter,
6803 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6804 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
6805 : true, /* isInfallible. False in setters. */
6806 : false, /* isMovable. Not relevant for setters. */
6807 : false, /* isEliminatable. Not relevant for setters. */
6808 : false, /* isAlwaysInSlot. Only relevant for getters. */
6809 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6810 : false, /* isTypedMethod. Only relevant for methods. */
6811 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6812 : };
6813 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6814 : static_assert(0 < 5, "There is no slot for us");
6815 :
6816 : static bool
6817 0 : getAppLocalesAsBCP47(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
6818 : {
6819 0 : nsTArray<nsString> result;
6820 0 : self->GetAppLocalesAsBCP47(result);
6821 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6822 :
6823 0 : uint32_t length = result.Length();
6824 0 : JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
6825 0 : if (!returnArray) {
6826 0 : return false;
6827 : }
6828 : // Scope for 'tmp'
6829 : {
6830 0 : JS::Rooted<JS::Value> tmp(cx);
6831 0 : for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
6832 : // Control block to let us common up the JS_DefineElement calls when there
6833 : // are different ways to succeed at wrapping the object.
6834 : do {
6835 0 : if (!xpc::NonVoidStringToJsval(cx, result[sequenceIdx0], &tmp)) {
6836 0 : return false;
6837 : }
6838 0 : break;
6839 : } while (0);
6840 0 : if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
6841 : JSPROP_ENUMERATE)) {
6842 0 : return false;
6843 : }
6844 : }
6845 : }
6846 0 : args.rval().setObject(*returnArray);
6847 0 : return true;
6848 : }
6849 :
6850 : static const JSJitInfo getAppLocalesAsBCP47_methodinfo = {
6851 : { (JSJitGetterOp)getAppLocalesAsBCP47 },
6852 : { prototypes::id::Window },
6853 : { PrototypeTraits<prototypes::id::Window>::Depth },
6854 : JSJitInfo::Method,
6855 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6856 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
6857 : false, /* isInfallible. False in setters. */
6858 : false, /* isMovable. Not relevant for setters. */
6859 : false, /* isEliminatable. Not relevant for setters. */
6860 : false, /* isAlwaysInSlot. Only relevant for getters. */
6861 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6862 : false, /* isTypedMethod. Only relevant for methods. */
6863 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6864 : };
6865 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6866 : static_assert(0 < 5, "There is no slot for us");
6867 :
6868 : static bool
6869 0 : get_intlUtils(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6870 : {
6871 0 : binding_detail::FastErrorResult rv;
6872 0 : auto result(StrongOrRawPtr<mozilla::dom::IntlUtils>(self->GetIntlUtils(rv)));
6873 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6874 0 : return false;
6875 : }
6876 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6877 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
6878 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
6879 0 : return false;
6880 : }
6881 0 : return true;
6882 : }
6883 :
6884 : static const JSJitInfo intlUtils_getterinfo = {
6885 : { (JSJitGetterOp)get_intlUtils },
6886 : { prototypes::id::Window },
6887 : { PrototypeTraits<prototypes::id::Window>::Depth },
6888 : JSJitInfo::Getter,
6889 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6890 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
6891 : false, /* isInfallible. False in setters. */
6892 : false, /* isMovable. Not relevant for setters. */
6893 : false, /* isEliminatable. Not relevant for setters. */
6894 : false, /* isAlwaysInSlot. Only relevant for getters. */
6895 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6896 : false, /* isTypedMethod. Only relevant for methods. */
6897 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6898 : };
6899 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6900 : static_assert(0 < 5, "There is no slot for us");
6901 :
6902 : static bool
6903 4 : get_windowState(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6904 : {
6905 4 : uint16_t result(self->WindowState());
6906 4 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6907 4 : args.rval().setInt32(int32_t(result));
6908 4 : return true;
6909 : }
6910 :
6911 : static const JSJitInfo windowState_getterinfo = {
6912 : { (JSJitGetterOp)get_windowState },
6913 : { prototypes::id::Window },
6914 : { PrototypeTraits<prototypes::id::Window>::Depth },
6915 : JSJitInfo::Getter,
6916 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6917 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
6918 : true, /* isInfallible. False in setters. */
6919 : false, /* isMovable. Not relevant for setters. */
6920 : false, /* isEliminatable. Not relevant for setters. */
6921 : false, /* isAlwaysInSlot. Only relevant for getters. */
6922 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6923 : false, /* isTypedMethod. Only relevant for methods. */
6924 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6925 : };
6926 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6927 : static_assert(0 < 5, "There is no slot for us");
6928 :
6929 : static bool
6930 3 : get_isFullyOccluded(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6931 : {
6932 3 : bool result(self->IsFullyOccluded());
6933 3 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6934 3 : args.rval().setBoolean(result);
6935 3 : return true;
6936 : }
6937 :
6938 : static const JSJitInfo isFullyOccluded_getterinfo = {
6939 : { (JSJitGetterOp)get_isFullyOccluded },
6940 : { prototypes::id::Window },
6941 : { PrototypeTraits<prototypes::id::Window>::Depth },
6942 : JSJitInfo::Getter,
6943 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
6944 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
6945 : true, /* isInfallible. False in setters. */
6946 : false, /* isMovable. Not relevant for setters. */
6947 : false, /* isEliminatable. Not relevant for setters. */
6948 : false, /* isAlwaysInSlot. Only relevant for getters. */
6949 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
6950 : false, /* isTypedMethod. Only relevant for methods. */
6951 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
6952 : };
6953 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
6954 : static_assert(0 < 5, "There is no slot for us");
6955 :
6956 : static bool
6957 0 : get_browserDOMWindow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
6958 : {
6959 0 : binding_detail::FastErrorResult rv;
6960 0 : auto result(StrongOrRawPtr<nsIBrowserDOMWindow>(self->GetBrowserDOMWindow(rv)));
6961 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6962 0 : return false;
6963 : }
6964 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
6965 0 : if (!result) {
6966 0 : args.rval().setNull();
6967 0 : return true;
6968 : }
6969 0 : if (!WrapObject(cx, result, &NS_GET_IID(nsIBrowserDOMWindow), args.rval())) {
6970 0 : return false;
6971 : }
6972 0 : return true;
6973 : }
6974 :
6975 : static bool
6976 1 : set_browserDOMWindow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
6977 : {
6978 : nsIBrowserDOMWindow* arg0;
6979 2 : RefPtr<nsIBrowserDOMWindow> arg0_holder;
6980 1 : if (args[0].isObject()) {
6981 2 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
6982 1 : if (NS_FAILED(UnwrapArg<nsIBrowserDOMWindow>(cx, source, getter_AddRefs(arg0_holder)))) {
6983 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Value being assigned to Window.browserDOMWindow", "nsIBrowserDOMWindow");
6984 0 : return false;
6985 : }
6986 1 : MOZ_ASSERT(arg0_holder);
6987 1 : arg0 = arg0_holder;
6988 0 : } else if (args[0].isNullOrUndefined()) {
6989 0 : arg0 = nullptr;
6990 : } else {
6991 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Value being assigned to Window.browserDOMWindow");
6992 0 : return false;
6993 : }
6994 2 : binding_detail::FastErrorResult rv;
6995 1 : self->SetBrowserDOMWindow(Constify(arg0), rv);
6996 1 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
6997 0 : return false;
6998 : }
6999 1 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7000 :
7001 1 : return true;
7002 : }
7003 :
7004 : static const JSJitInfo browserDOMWindow_getterinfo = {
7005 : { (JSJitGetterOp)get_browserDOMWindow },
7006 : { prototypes::id::Window },
7007 : { PrototypeTraits<prototypes::id::Window>::Depth },
7008 : JSJitInfo::Getter,
7009 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7010 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
7011 : false, /* isInfallible. False in setters. */
7012 : false, /* isMovable. Not relevant for setters. */
7013 : false, /* isEliminatable. Not relevant for setters. */
7014 : false, /* isAlwaysInSlot. Only relevant for getters. */
7015 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7016 : false, /* isTypedMethod. Only relevant for methods. */
7017 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7018 : };
7019 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7020 : static_assert(0 < 5, "There is no slot for us");
7021 : static const JSJitInfo browserDOMWindow_setterinfo = {
7022 : { (JSJitGetterOp)set_browserDOMWindow },
7023 : { prototypes::id::Window },
7024 : { PrototypeTraits<prototypes::id::Window>::Depth },
7025 : JSJitInfo::Setter,
7026 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7027 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7028 : false, /* isInfallible. False in setters. */
7029 : false, /* isMovable. Not relevant for setters. */
7030 : false, /* isEliminatable. Not relevant for setters. */
7031 : false, /* isAlwaysInSlot. Only relevant for getters. */
7032 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7033 : false, /* isTypedMethod. Only relevant for methods. */
7034 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7035 : };
7036 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7037 : static_assert(0 < 5, "There is no slot for us");
7038 :
7039 : static bool
7040 0 : getAttention(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
7041 : {
7042 0 : binding_detail::FastErrorResult rv;
7043 0 : self->GetAttention(rv);
7044 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
7045 0 : return false;
7046 : }
7047 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7048 0 : args.rval().setUndefined();
7049 0 : return true;
7050 : }
7051 :
7052 : static const JSJitInfo getAttention_methodinfo = {
7053 : { (JSJitGetterOp)getAttention },
7054 : { prototypes::id::Window },
7055 : { PrototypeTraits<prototypes::id::Window>::Depth },
7056 : JSJitInfo::Method,
7057 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7058 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7059 : false, /* isInfallible. False in setters. */
7060 : false, /* isMovable. Not relevant for setters. */
7061 : false, /* isEliminatable. Not relevant for setters. */
7062 : false, /* isAlwaysInSlot. Only relevant for getters. */
7063 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7064 : false, /* isTypedMethod. Only relevant for methods. */
7065 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7066 : };
7067 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7068 : static_assert(0 < 5, "There is no slot for us");
7069 :
7070 : static bool
7071 0 : getAttentionWithCycleCount(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
7072 : {
7073 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
7074 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getAttentionWithCycleCount");
7075 : }
7076 : int32_t arg0;
7077 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
7078 0 : return false;
7079 : }
7080 0 : binding_detail::FastErrorResult rv;
7081 0 : self->GetAttentionWithCycleCount(arg0, rv);
7082 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
7083 0 : return false;
7084 : }
7085 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7086 0 : args.rval().setUndefined();
7087 0 : return true;
7088 : }
7089 :
7090 : static const JSJitInfo getAttentionWithCycleCount_methodinfo = {
7091 : { (JSJitGetterOp)getAttentionWithCycleCount },
7092 : { prototypes::id::Window },
7093 : { PrototypeTraits<prototypes::id::Window>::Depth },
7094 : JSJitInfo::Method,
7095 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7096 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7097 : false, /* isInfallible. False in setters. */
7098 : false, /* isMovable. Not relevant for setters. */
7099 : false, /* isEliminatable. Not relevant for setters. */
7100 : false, /* isAlwaysInSlot. Only relevant for getters. */
7101 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7102 : false, /* isTypedMethod. Only relevant for methods. */
7103 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7104 : };
7105 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7106 : static_assert(0 < 5, "There is no slot for us");
7107 :
7108 : static bool
7109 0 : setCursor(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
7110 : {
7111 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
7112 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.setCursor");
7113 : }
7114 0 : binding_detail::FakeString arg0;
7115 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
7116 0 : return false;
7117 : }
7118 0 : binding_detail::FastErrorResult rv;
7119 0 : self->SetCursor(NonNullHelper(Constify(arg0)), rv);
7120 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
7121 0 : return false;
7122 : }
7123 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7124 0 : args.rval().setUndefined();
7125 0 : return true;
7126 : }
7127 :
7128 : static const JSJitInfo setCursor_methodinfo = {
7129 : { (JSJitGetterOp)setCursor },
7130 : { prototypes::id::Window },
7131 : { PrototypeTraits<prototypes::id::Window>::Depth },
7132 : JSJitInfo::Method,
7133 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7134 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7135 : false, /* isInfallible. False in setters. */
7136 : false, /* isMovable. Not relevant for setters. */
7137 : false, /* isEliminatable. Not relevant for setters. */
7138 : false, /* isAlwaysInSlot. Only relevant for getters. */
7139 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7140 : false, /* isTypedMethod. Only relevant for methods. */
7141 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7142 : };
7143 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7144 : static_assert(0 < 5, "There is no slot for us");
7145 :
7146 : static bool
7147 0 : maximize(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
7148 : {
7149 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
7150 : // Return false from the JSNative in order to trigger
7151 : // an uncatchable exception.
7152 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7153 0 : return false;
7154 : }
7155 0 : self->Maximize();
7156 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7157 0 : args.rval().setUndefined();
7158 0 : return true;
7159 : }
7160 :
7161 : static const JSJitInfo maximize_methodinfo = {
7162 : { (JSJitGetterOp)maximize },
7163 : { prototypes::id::Window },
7164 : { PrototypeTraits<prototypes::id::Window>::Depth },
7165 : JSJitInfo::Method,
7166 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7167 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7168 : true, /* isInfallible. False in setters. */
7169 : false, /* isMovable. Not relevant for setters. */
7170 : false, /* isEliminatable. Not relevant for setters. */
7171 : false, /* isAlwaysInSlot. Only relevant for getters. */
7172 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7173 : false, /* isTypedMethod. Only relevant for methods. */
7174 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7175 : };
7176 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7177 : static_assert(0 < 5, "There is no slot for us");
7178 :
7179 : static bool
7180 0 : minimize(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
7181 : {
7182 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
7183 : // Return false from the JSNative in order to trigger
7184 : // an uncatchable exception.
7185 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7186 0 : return false;
7187 : }
7188 0 : self->Minimize();
7189 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7190 0 : args.rval().setUndefined();
7191 0 : return true;
7192 : }
7193 :
7194 : static const JSJitInfo minimize_methodinfo = {
7195 : { (JSJitGetterOp)minimize },
7196 : { prototypes::id::Window },
7197 : { PrototypeTraits<prototypes::id::Window>::Depth },
7198 : JSJitInfo::Method,
7199 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7200 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7201 : true, /* isInfallible. False in setters. */
7202 : false, /* isMovable. Not relevant for setters. */
7203 : false, /* isEliminatable. Not relevant for setters. */
7204 : false, /* isAlwaysInSlot. Only relevant for getters. */
7205 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7206 : false, /* isTypedMethod. Only relevant for methods. */
7207 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7208 : };
7209 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7210 : static_assert(0 < 5, "There is no slot for us");
7211 :
7212 : static bool
7213 0 : restore(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
7214 : {
7215 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
7216 : // Return false from the JSNative in order to trigger
7217 : // an uncatchable exception.
7218 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7219 0 : return false;
7220 : }
7221 0 : self->Restore();
7222 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7223 0 : args.rval().setUndefined();
7224 0 : return true;
7225 : }
7226 :
7227 : static const JSJitInfo restore_methodinfo = {
7228 : { (JSJitGetterOp)restore },
7229 : { prototypes::id::Window },
7230 : { PrototypeTraits<prototypes::id::Window>::Depth },
7231 : JSJitInfo::Method,
7232 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7233 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7234 : true, /* isInfallible. False in setters. */
7235 : false, /* isMovable. Not relevant for setters. */
7236 : false, /* isEliminatable. Not relevant for setters. */
7237 : false, /* isAlwaysInSlot. Only relevant for getters. */
7238 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7239 : false, /* isTypedMethod. Only relevant for methods. */
7240 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7241 : };
7242 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7243 : static_assert(0 < 5, "There is no slot for us");
7244 :
7245 : static bool
7246 0 : notifyDefaultButtonLoaded(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
7247 : {
7248 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
7249 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.notifyDefaultButtonLoaded");
7250 : }
7251 0 : NonNull<mozilla::dom::Element> arg0;
7252 0 : if (args[0].isObject()) {
7253 : {
7254 0 : nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[0], arg0);
7255 0 : if (NS_FAILED(rv)) {
7256 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.notifyDefaultButtonLoaded", "Element");
7257 0 : return false;
7258 : }
7259 : }
7260 : } else {
7261 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.notifyDefaultButtonLoaded");
7262 0 : return false;
7263 : }
7264 0 : binding_detail::FastErrorResult rv;
7265 0 : self->NotifyDefaultButtonLoaded(NonNullHelper(arg0), rv);
7266 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
7267 0 : return false;
7268 : }
7269 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7270 0 : args.rval().setUndefined();
7271 0 : return true;
7272 : }
7273 :
7274 : static const JSJitInfo notifyDefaultButtonLoaded_methodinfo = {
7275 : { (JSJitGetterOp)notifyDefaultButtonLoaded },
7276 : { prototypes::id::Window },
7277 : { PrototypeTraits<prototypes::id::Window>::Depth },
7278 : JSJitInfo::Method,
7279 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7280 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7281 : false, /* isInfallible. False in setters. */
7282 : false, /* isMovable. Not relevant for setters. */
7283 : false, /* isEliminatable. Not relevant for setters. */
7284 : false, /* isAlwaysInSlot. Only relevant for getters. */
7285 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7286 : false, /* isTypedMethod. Only relevant for methods. */
7287 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7288 : };
7289 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7290 : static_assert(0 < 5, "There is no slot for us");
7291 :
7292 : static bool
7293 26 : get_messageManager(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
7294 : {
7295 52 : binding_detail::FastErrorResult rv;
7296 26 : auto result(StrongOrRawPtr<nsIMessageBroadcaster>(self->GetMessageManager(rv)));
7297 26 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
7298 0 : return false;
7299 : }
7300 26 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7301 26 : if (!WrapObject(cx, result, &NS_GET_IID(nsIMessageBroadcaster), args.rval())) {
7302 0 : return false;
7303 : }
7304 26 : return true;
7305 : }
7306 :
7307 : static const JSJitInfo messageManager_getterinfo = {
7308 : { (JSJitGetterOp)get_messageManager },
7309 : { prototypes::id::Window },
7310 : { PrototypeTraits<prototypes::id::Window>::Depth },
7311 : JSJitInfo::Getter,
7312 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7313 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
7314 : false, /* isInfallible. False in setters. */
7315 : false, /* isMovable. Not relevant for setters. */
7316 : false, /* isEliminatable. Not relevant for setters. */
7317 : false, /* isAlwaysInSlot. Only relevant for getters. */
7318 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7319 : false, /* isTypedMethod. Only relevant for methods. */
7320 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7321 : };
7322 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7323 : static_assert(0 < 5, "There is no slot for us");
7324 :
7325 : static bool
7326 5 : getGroupMessageManager(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
7327 : {
7328 5 : if (MOZ_UNLIKELY(args.length() < 1)) {
7329 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.getGroupMessageManager");
7330 : }
7331 10 : binding_detail::FakeString arg0;
7332 5 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
7333 0 : return false;
7334 : }
7335 10 : binding_detail::FastErrorResult rv;
7336 5 : auto result(StrongOrRawPtr<nsIMessageBroadcaster>(self->GetGroupMessageManager(NonNullHelper(Constify(arg0)), rv)));
7337 5 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
7338 0 : return false;
7339 : }
7340 5 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7341 5 : if (!WrapObject(cx, result, &NS_GET_IID(nsIMessageBroadcaster), args.rval())) {
7342 0 : return false;
7343 : }
7344 5 : return true;
7345 : }
7346 :
7347 : static const JSJitInfo getGroupMessageManager_methodinfo = {
7348 : { (JSJitGetterOp)getGroupMessageManager },
7349 : { prototypes::id::Window },
7350 : { PrototypeTraits<prototypes::id::Window>::Depth },
7351 : JSJitInfo::Method,
7352 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7353 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
7354 : false, /* isInfallible. False in setters. */
7355 : false, /* isMovable. Not relevant for setters. */
7356 : false, /* isEliminatable. Not relevant for setters. */
7357 : false, /* isAlwaysInSlot. Only relevant for getters. */
7358 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7359 : false, /* isTypedMethod. Only relevant for methods. */
7360 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7361 : };
7362 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7363 : static_assert(0 < 5, "There is no slot for us");
7364 :
7365 : static bool
7366 0 : beginWindowMove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
7367 : {
7368 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
7369 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.beginWindowMove");
7370 : }
7371 0 : NonNull<mozilla::dom::Event> arg0;
7372 0 : if (args[0].isObject()) {
7373 : {
7374 0 : nsresult rv = UnwrapObject<prototypes::id::Event, mozilla::dom::Event>(args[0], arg0);
7375 0 : if (NS_FAILED(rv)) {
7376 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of Window.beginWindowMove", "Event");
7377 0 : return false;
7378 : }
7379 : }
7380 : } else {
7381 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of Window.beginWindowMove");
7382 0 : return false;
7383 : }
7384 : mozilla::dom::Element* arg1;
7385 0 : if (args.hasDefined(1)) {
7386 0 : if (args[1].isObject()) {
7387 : {
7388 0 : nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(args[1], arg1);
7389 0 : if (NS_FAILED(rv)) {
7390 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of Window.beginWindowMove", "Element");
7391 0 : return false;
7392 : }
7393 : }
7394 0 : } else if (args[1].isNullOrUndefined()) {
7395 0 : arg1 = nullptr;
7396 : } else {
7397 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of Window.beginWindowMove");
7398 0 : return false;
7399 : }
7400 : } else {
7401 0 : arg1 = nullptr;
7402 : }
7403 0 : binding_detail::FastErrorResult rv;
7404 0 : self->BeginWindowMove(NonNullHelper(arg0), Constify(arg1), rv);
7405 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
7406 0 : return false;
7407 : }
7408 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7409 0 : args.rval().setUndefined();
7410 0 : return true;
7411 : }
7412 :
7413 : static const JSJitInfo beginWindowMove_methodinfo = {
7414 : { (JSJitGetterOp)beginWindowMove },
7415 : { prototypes::id::Window },
7416 : { PrototypeTraits<prototypes::id::Window>::Depth },
7417 : JSJitInfo::Method,
7418 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7419 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7420 : false, /* isInfallible. False in setters. */
7421 : false, /* isMovable. Not relevant for setters. */
7422 : false, /* isEliminatable. Not relevant for setters. */
7423 : false, /* isAlwaysInSlot. Only relevant for getters. */
7424 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7425 : false, /* isTypedMethod. Only relevant for methods. */
7426 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7427 : };
7428 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7429 : static_assert(0 < 5, "There is no slot for us");
7430 :
7431 : static bool
7432 0 : get_crypto(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
7433 : {
7434 0 : binding_detail::FastErrorResult rv;
7435 0 : auto result(StrongOrRawPtr<mozilla::dom::Crypto>(self->GetCrypto(rv)));
7436 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
7437 0 : return false;
7438 : }
7439 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7440 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
7441 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
7442 0 : return false;
7443 : }
7444 0 : return true;
7445 : }
7446 :
7447 : static const JSJitInfo crypto_getterinfo = {
7448 : { (JSJitGetterOp)get_crypto },
7449 : { prototypes::id::Window },
7450 : { PrototypeTraits<prototypes::id::Window>::Depth },
7451 : JSJitInfo::Getter,
7452 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7453 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
7454 : false, /* isInfallible. False in setters. */
7455 : false, /* isMovable. Not relevant for setters. */
7456 : false, /* isEliminatable. Not relevant for setters. */
7457 : false, /* isAlwaysInSlot. Only relevant for getters. */
7458 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7459 : false, /* isTypedMethod. Only relevant for methods. */
7460 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7461 : };
7462 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7463 : static_assert(0 < 5, "There is no slot for us");
7464 :
7465 : static bool
7466 0 : get_onabort(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
7467 : {
7468 0 : RefPtr<EventHandlerNonNull> result(self->GetOnabort());
7469 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7470 0 : if (result) {
7471 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
7472 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7473 0 : return false;
7474 : }
7475 0 : return true;
7476 : } else {
7477 0 : args.rval().setNull();
7478 0 : return true;
7479 : }
7480 : }
7481 :
7482 : static bool
7483 0 : set_onabort(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
7484 : {
7485 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7486 0 : if (args[0].isObject()) {
7487 : { // scope for tempRoot
7488 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
7489 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
7490 : }
7491 : } else {
7492 0 : arg0 = nullptr;
7493 : }
7494 0 : self->SetOnabort(Constify(arg0));
7495 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7496 :
7497 0 : return true;
7498 : }
7499 :
7500 : static const JSJitInfo onabort_getterinfo = {
7501 : { (JSJitGetterOp)get_onabort },
7502 : { prototypes::id::Window },
7503 : { PrototypeTraits<prototypes::id::Window>::Depth },
7504 : JSJitInfo::Getter,
7505 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7506 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
7507 : false, /* isInfallible. False in setters. */
7508 : false, /* isMovable. Not relevant for setters. */
7509 : false, /* isEliminatable. Not relevant for setters. */
7510 : false, /* isAlwaysInSlot. Only relevant for getters. */
7511 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7512 : false, /* isTypedMethod. Only relevant for methods. */
7513 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7514 : };
7515 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7516 : static_assert(0 < 5, "There is no slot for us");
7517 : static const JSJitInfo onabort_setterinfo = {
7518 : { (JSJitGetterOp)set_onabort },
7519 : { prototypes::id::Window },
7520 : { PrototypeTraits<prototypes::id::Window>::Depth },
7521 : JSJitInfo::Setter,
7522 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7523 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7524 : false, /* isInfallible. False in setters. */
7525 : false, /* isMovable. Not relevant for setters. */
7526 : false, /* isEliminatable. Not relevant for setters. */
7527 : false, /* isAlwaysInSlot. Only relevant for getters. */
7528 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7529 : false, /* isTypedMethod. Only relevant for methods. */
7530 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7531 : };
7532 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7533 : static_assert(0 < 5, "There is no slot for us");
7534 :
7535 : static bool
7536 0 : get_onblur(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
7537 : {
7538 0 : RefPtr<EventHandlerNonNull> result(self->GetOnblur());
7539 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7540 0 : if (result) {
7541 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
7542 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7543 0 : return false;
7544 : }
7545 0 : return true;
7546 : } else {
7547 0 : args.rval().setNull();
7548 0 : return true;
7549 : }
7550 : }
7551 :
7552 : static bool
7553 0 : set_onblur(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
7554 : {
7555 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7556 0 : if (args[0].isObject()) {
7557 : { // scope for tempRoot
7558 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
7559 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
7560 : }
7561 : } else {
7562 0 : arg0 = nullptr;
7563 : }
7564 0 : self->SetOnblur(Constify(arg0));
7565 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7566 :
7567 0 : return true;
7568 : }
7569 :
7570 : static const JSJitInfo onblur_getterinfo = {
7571 : { (JSJitGetterOp)get_onblur },
7572 : { prototypes::id::Window },
7573 : { PrototypeTraits<prototypes::id::Window>::Depth },
7574 : JSJitInfo::Getter,
7575 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7576 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
7577 : false, /* isInfallible. False in setters. */
7578 : false, /* isMovable. Not relevant for setters. */
7579 : false, /* isEliminatable. Not relevant for setters. */
7580 : false, /* isAlwaysInSlot. Only relevant for getters. */
7581 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7582 : false, /* isTypedMethod. Only relevant for methods. */
7583 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7584 : };
7585 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7586 : static_assert(0 < 5, "There is no slot for us");
7587 : static const JSJitInfo onblur_setterinfo = {
7588 : { (JSJitGetterOp)set_onblur },
7589 : { prototypes::id::Window },
7590 : { PrototypeTraits<prototypes::id::Window>::Depth },
7591 : JSJitInfo::Setter,
7592 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7593 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7594 : false, /* isInfallible. False in setters. */
7595 : false, /* isMovable. Not relevant for setters. */
7596 : false, /* isEliminatable. Not relevant for setters. */
7597 : false, /* isAlwaysInSlot. Only relevant for getters. */
7598 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7599 : false, /* isTypedMethod. Only relevant for methods. */
7600 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7601 : };
7602 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7603 : static_assert(0 < 5, "There is no slot for us");
7604 :
7605 : static bool
7606 0 : get_onfocus(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
7607 : {
7608 0 : RefPtr<EventHandlerNonNull> result(self->GetOnfocus());
7609 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7610 0 : if (result) {
7611 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
7612 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7613 0 : return false;
7614 : }
7615 0 : return true;
7616 : } else {
7617 0 : args.rval().setNull();
7618 0 : return true;
7619 : }
7620 : }
7621 :
7622 : static bool
7623 0 : set_onfocus(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
7624 : {
7625 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7626 0 : if (args[0].isObject()) {
7627 : { // scope for tempRoot
7628 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
7629 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
7630 : }
7631 : } else {
7632 0 : arg0 = nullptr;
7633 : }
7634 0 : self->SetOnfocus(Constify(arg0));
7635 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7636 :
7637 0 : return true;
7638 : }
7639 :
7640 : static const JSJitInfo onfocus_getterinfo = {
7641 : { (JSJitGetterOp)get_onfocus },
7642 : { prototypes::id::Window },
7643 : { PrototypeTraits<prototypes::id::Window>::Depth },
7644 : JSJitInfo::Getter,
7645 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7646 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
7647 : false, /* isInfallible. False in setters. */
7648 : false, /* isMovable. Not relevant for setters. */
7649 : false, /* isEliminatable. Not relevant for setters. */
7650 : false, /* isAlwaysInSlot. Only relevant for getters. */
7651 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7652 : false, /* isTypedMethod. Only relevant for methods. */
7653 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7654 : };
7655 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7656 : static_assert(0 < 5, "There is no slot for us");
7657 : static const JSJitInfo onfocus_setterinfo = {
7658 : { (JSJitGetterOp)set_onfocus },
7659 : { prototypes::id::Window },
7660 : { PrototypeTraits<prototypes::id::Window>::Depth },
7661 : JSJitInfo::Setter,
7662 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7663 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7664 : false, /* isInfallible. False in setters. */
7665 : false, /* isMovable. Not relevant for setters. */
7666 : false, /* isEliminatable. Not relevant for setters. */
7667 : false, /* isAlwaysInSlot. Only relevant for getters. */
7668 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7669 : false, /* isTypedMethod. Only relevant for methods. */
7670 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7671 : };
7672 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7673 : static_assert(0 < 5, "There is no slot for us");
7674 :
7675 : static bool
7676 0 : get_onauxclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
7677 : {
7678 0 : RefPtr<EventHandlerNonNull> result(self->GetOnauxclick());
7679 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7680 0 : if (result) {
7681 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
7682 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7683 0 : return false;
7684 : }
7685 0 : return true;
7686 : } else {
7687 0 : args.rval().setNull();
7688 0 : return true;
7689 : }
7690 : }
7691 :
7692 : static bool
7693 0 : set_onauxclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
7694 : {
7695 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7696 0 : if (args[0].isObject()) {
7697 : { // scope for tempRoot
7698 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
7699 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
7700 : }
7701 : } else {
7702 0 : arg0 = nullptr;
7703 : }
7704 0 : self->SetOnauxclick(Constify(arg0));
7705 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7706 :
7707 0 : return true;
7708 : }
7709 :
7710 : static const JSJitInfo onauxclick_getterinfo = {
7711 : { (JSJitGetterOp)get_onauxclick },
7712 : { prototypes::id::Window },
7713 : { PrototypeTraits<prototypes::id::Window>::Depth },
7714 : JSJitInfo::Getter,
7715 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7716 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
7717 : false, /* isInfallible. False in setters. */
7718 : false, /* isMovable. Not relevant for setters. */
7719 : false, /* isEliminatable. Not relevant for setters. */
7720 : false, /* isAlwaysInSlot. Only relevant for getters. */
7721 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7722 : false, /* isTypedMethod. Only relevant for methods. */
7723 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7724 : };
7725 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7726 : static_assert(0 < 5, "There is no slot for us");
7727 : static const JSJitInfo onauxclick_setterinfo = {
7728 : { (JSJitGetterOp)set_onauxclick },
7729 : { prototypes::id::Window },
7730 : { PrototypeTraits<prototypes::id::Window>::Depth },
7731 : JSJitInfo::Setter,
7732 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7733 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7734 : false, /* isInfallible. False in setters. */
7735 : false, /* isMovable. Not relevant for setters. */
7736 : false, /* isEliminatable. Not relevant for setters. */
7737 : false, /* isAlwaysInSlot. Only relevant for getters. */
7738 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7739 : false, /* isTypedMethod. Only relevant for methods. */
7740 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7741 : };
7742 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7743 : static_assert(0 < 5, "There is no slot for us");
7744 :
7745 : static bool
7746 0 : get_oncanplay(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
7747 : {
7748 0 : RefPtr<EventHandlerNonNull> result(self->GetOncanplay());
7749 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7750 0 : if (result) {
7751 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
7752 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7753 0 : return false;
7754 : }
7755 0 : return true;
7756 : } else {
7757 0 : args.rval().setNull();
7758 0 : return true;
7759 : }
7760 : }
7761 :
7762 : static bool
7763 0 : set_oncanplay(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
7764 : {
7765 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7766 0 : if (args[0].isObject()) {
7767 : { // scope for tempRoot
7768 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
7769 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
7770 : }
7771 : } else {
7772 0 : arg0 = nullptr;
7773 : }
7774 0 : self->SetOncanplay(Constify(arg0));
7775 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7776 :
7777 0 : return true;
7778 : }
7779 :
7780 : static const JSJitInfo oncanplay_getterinfo = {
7781 : { (JSJitGetterOp)get_oncanplay },
7782 : { prototypes::id::Window },
7783 : { PrototypeTraits<prototypes::id::Window>::Depth },
7784 : JSJitInfo::Getter,
7785 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7786 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
7787 : false, /* isInfallible. False in setters. */
7788 : false, /* isMovable. Not relevant for setters. */
7789 : false, /* isEliminatable. Not relevant for setters. */
7790 : false, /* isAlwaysInSlot. Only relevant for getters. */
7791 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7792 : false, /* isTypedMethod. Only relevant for methods. */
7793 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7794 : };
7795 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7796 : static_assert(0 < 5, "There is no slot for us");
7797 : static const JSJitInfo oncanplay_setterinfo = {
7798 : { (JSJitGetterOp)set_oncanplay },
7799 : { prototypes::id::Window },
7800 : { PrototypeTraits<prototypes::id::Window>::Depth },
7801 : JSJitInfo::Setter,
7802 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7803 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7804 : false, /* isInfallible. False in setters. */
7805 : false, /* isMovable. Not relevant for setters. */
7806 : false, /* isEliminatable. Not relevant for setters. */
7807 : false, /* isAlwaysInSlot. Only relevant for getters. */
7808 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7809 : false, /* isTypedMethod. Only relevant for methods. */
7810 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7811 : };
7812 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7813 : static_assert(0 < 5, "There is no slot for us");
7814 :
7815 : static bool
7816 0 : get_oncanplaythrough(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
7817 : {
7818 0 : RefPtr<EventHandlerNonNull> result(self->GetOncanplaythrough());
7819 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7820 0 : if (result) {
7821 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
7822 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7823 0 : return false;
7824 : }
7825 0 : return true;
7826 : } else {
7827 0 : args.rval().setNull();
7828 0 : return true;
7829 : }
7830 : }
7831 :
7832 : static bool
7833 0 : set_oncanplaythrough(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
7834 : {
7835 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7836 0 : if (args[0].isObject()) {
7837 : { // scope for tempRoot
7838 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
7839 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
7840 : }
7841 : } else {
7842 0 : arg0 = nullptr;
7843 : }
7844 0 : self->SetOncanplaythrough(Constify(arg0));
7845 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7846 :
7847 0 : return true;
7848 : }
7849 :
7850 : static const JSJitInfo oncanplaythrough_getterinfo = {
7851 : { (JSJitGetterOp)get_oncanplaythrough },
7852 : { prototypes::id::Window },
7853 : { PrototypeTraits<prototypes::id::Window>::Depth },
7854 : JSJitInfo::Getter,
7855 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7856 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
7857 : false, /* isInfallible. False in setters. */
7858 : false, /* isMovable. Not relevant for setters. */
7859 : false, /* isEliminatable. Not relevant for setters. */
7860 : false, /* isAlwaysInSlot. Only relevant for getters. */
7861 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7862 : false, /* isTypedMethod. Only relevant for methods. */
7863 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7864 : };
7865 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7866 : static_assert(0 < 5, "There is no slot for us");
7867 : static const JSJitInfo oncanplaythrough_setterinfo = {
7868 : { (JSJitGetterOp)set_oncanplaythrough },
7869 : { prototypes::id::Window },
7870 : { PrototypeTraits<prototypes::id::Window>::Depth },
7871 : JSJitInfo::Setter,
7872 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7873 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7874 : false, /* isInfallible. False in setters. */
7875 : false, /* isMovable. Not relevant for setters. */
7876 : false, /* isEliminatable. Not relevant for setters. */
7877 : false, /* isAlwaysInSlot. Only relevant for getters. */
7878 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7879 : false, /* isTypedMethod. Only relevant for methods. */
7880 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7881 : };
7882 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7883 : static_assert(0 < 5, "There is no slot for us");
7884 :
7885 : static bool
7886 0 : get_onchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
7887 : {
7888 0 : RefPtr<EventHandlerNonNull> result(self->GetOnchange());
7889 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7890 0 : if (result) {
7891 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
7892 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7893 0 : return false;
7894 : }
7895 0 : return true;
7896 : } else {
7897 0 : args.rval().setNull();
7898 0 : return true;
7899 : }
7900 : }
7901 :
7902 : static bool
7903 0 : set_onchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
7904 : {
7905 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7906 0 : if (args[0].isObject()) {
7907 : { // scope for tempRoot
7908 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
7909 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
7910 : }
7911 : } else {
7912 0 : arg0 = nullptr;
7913 : }
7914 0 : self->SetOnchange(Constify(arg0));
7915 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7916 :
7917 0 : return true;
7918 : }
7919 :
7920 : static const JSJitInfo onchange_getterinfo = {
7921 : { (JSJitGetterOp)get_onchange },
7922 : { prototypes::id::Window },
7923 : { PrototypeTraits<prototypes::id::Window>::Depth },
7924 : JSJitInfo::Getter,
7925 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7926 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
7927 : false, /* isInfallible. False in setters. */
7928 : false, /* isMovable. Not relevant for setters. */
7929 : false, /* isEliminatable. Not relevant for setters. */
7930 : false, /* isAlwaysInSlot. Only relevant for getters. */
7931 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7932 : false, /* isTypedMethod. Only relevant for methods. */
7933 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7934 : };
7935 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7936 : static_assert(0 < 5, "There is no slot for us");
7937 : static const JSJitInfo onchange_setterinfo = {
7938 : { (JSJitGetterOp)set_onchange },
7939 : { prototypes::id::Window },
7940 : { PrototypeTraits<prototypes::id::Window>::Depth },
7941 : JSJitInfo::Setter,
7942 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7943 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
7944 : false, /* isInfallible. False in setters. */
7945 : false, /* isMovable. Not relevant for setters. */
7946 : false, /* isEliminatable. Not relevant for setters. */
7947 : false, /* isAlwaysInSlot. Only relevant for getters. */
7948 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
7949 : false, /* isTypedMethod. Only relevant for methods. */
7950 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
7951 : };
7952 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
7953 : static_assert(0 < 5, "There is no slot for us");
7954 :
7955 : static bool
7956 0 : get_onclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
7957 : {
7958 0 : RefPtr<EventHandlerNonNull> result(self->GetOnclick());
7959 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7960 0 : if (result) {
7961 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
7962 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
7963 0 : return false;
7964 : }
7965 0 : return true;
7966 : } else {
7967 0 : args.rval().setNull();
7968 0 : return true;
7969 : }
7970 : }
7971 :
7972 : static bool
7973 0 : set_onclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
7974 : {
7975 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
7976 0 : if (args[0].isObject()) {
7977 : { // scope for tempRoot
7978 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
7979 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
7980 : }
7981 : } else {
7982 0 : arg0 = nullptr;
7983 : }
7984 0 : self->SetOnclick(Constify(arg0));
7985 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
7986 :
7987 0 : return true;
7988 : }
7989 :
7990 : static const JSJitInfo onclick_getterinfo = {
7991 : { (JSJitGetterOp)get_onclick },
7992 : { prototypes::id::Window },
7993 : { PrototypeTraits<prototypes::id::Window>::Depth },
7994 : JSJitInfo::Getter,
7995 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
7996 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
7997 : false, /* isInfallible. False in setters. */
7998 : false, /* isMovable. Not relevant for setters. */
7999 : false, /* isEliminatable. Not relevant for setters. */
8000 : false, /* isAlwaysInSlot. Only relevant for getters. */
8001 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8002 : false, /* isTypedMethod. Only relevant for methods. */
8003 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8004 : };
8005 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8006 : static_assert(0 < 5, "There is no slot for us");
8007 : static const JSJitInfo onclick_setterinfo = {
8008 : { (JSJitGetterOp)set_onclick },
8009 : { prototypes::id::Window },
8010 : { PrototypeTraits<prototypes::id::Window>::Depth },
8011 : JSJitInfo::Setter,
8012 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8013 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8014 : false, /* isInfallible. False in setters. */
8015 : false, /* isMovable. Not relevant for setters. */
8016 : false, /* isEliminatable. Not relevant for setters. */
8017 : false, /* isAlwaysInSlot. Only relevant for getters. */
8018 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8019 : false, /* isTypedMethod. Only relevant for methods. */
8020 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8021 : };
8022 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8023 : static_assert(0 < 5, "There is no slot for us");
8024 :
8025 : static bool
8026 0 : get_onclose(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
8027 : {
8028 0 : RefPtr<EventHandlerNonNull> result(self->GetOnclose());
8029 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8030 0 : if (result) {
8031 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
8032 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8033 0 : return false;
8034 : }
8035 0 : return true;
8036 : } else {
8037 0 : args.rval().setNull();
8038 0 : return true;
8039 : }
8040 : }
8041 :
8042 : static bool
8043 0 : set_onclose(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
8044 : {
8045 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8046 0 : if (args[0].isObject()) {
8047 : { // scope for tempRoot
8048 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
8049 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
8050 : }
8051 : } else {
8052 0 : arg0 = nullptr;
8053 : }
8054 0 : self->SetOnclose(Constify(arg0));
8055 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8056 :
8057 0 : return true;
8058 : }
8059 :
8060 : static const JSJitInfo onclose_getterinfo = {
8061 : { (JSJitGetterOp)get_onclose },
8062 : { prototypes::id::Window },
8063 : { PrototypeTraits<prototypes::id::Window>::Depth },
8064 : JSJitInfo::Getter,
8065 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8066 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
8067 : false, /* isInfallible. False in setters. */
8068 : false, /* isMovable. Not relevant for setters. */
8069 : false, /* isEliminatable. Not relevant for setters. */
8070 : false, /* isAlwaysInSlot. Only relevant for getters. */
8071 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8072 : false, /* isTypedMethod. Only relevant for methods. */
8073 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8074 : };
8075 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8076 : static_assert(0 < 5, "There is no slot for us");
8077 : static const JSJitInfo onclose_setterinfo = {
8078 : { (JSJitGetterOp)set_onclose },
8079 : { prototypes::id::Window },
8080 : { PrototypeTraits<prototypes::id::Window>::Depth },
8081 : JSJitInfo::Setter,
8082 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8083 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8084 : false, /* isInfallible. False in setters. */
8085 : false, /* isMovable. Not relevant for setters. */
8086 : false, /* isEliminatable. Not relevant for setters. */
8087 : false, /* isAlwaysInSlot. Only relevant for getters. */
8088 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8089 : false, /* isTypedMethod. Only relevant for methods. */
8090 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8091 : };
8092 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8093 : static_assert(0 < 5, "There is no slot for us");
8094 :
8095 : static bool
8096 0 : get_oncontextmenu(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
8097 : {
8098 0 : RefPtr<EventHandlerNonNull> result(self->GetOncontextmenu());
8099 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8100 0 : if (result) {
8101 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
8102 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8103 0 : return false;
8104 : }
8105 0 : return true;
8106 : } else {
8107 0 : args.rval().setNull();
8108 0 : return true;
8109 : }
8110 : }
8111 :
8112 : static bool
8113 0 : set_oncontextmenu(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
8114 : {
8115 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8116 0 : if (args[0].isObject()) {
8117 : { // scope for tempRoot
8118 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
8119 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
8120 : }
8121 : } else {
8122 0 : arg0 = nullptr;
8123 : }
8124 0 : self->SetOncontextmenu(Constify(arg0));
8125 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8126 :
8127 0 : return true;
8128 : }
8129 :
8130 : static const JSJitInfo oncontextmenu_getterinfo = {
8131 : { (JSJitGetterOp)get_oncontextmenu },
8132 : { prototypes::id::Window },
8133 : { PrototypeTraits<prototypes::id::Window>::Depth },
8134 : JSJitInfo::Getter,
8135 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8136 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
8137 : false, /* isInfallible. False in setters. */
8138 : false, /* isMovable. Not relevant for setters. */
8139 : false, /* isEliminatable. Not relevant for setters. */
8140 : false, /* isAlwaysInSlot. Only relevant for getters. */
8141 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8142 : false, /* isTypedMethod. Only relevant for methods. */
8143 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8144 : };
8145 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8146 : static_assert(0 < 5, "There is no slot for us");
8147 : static const JSJitInfo oncontextmenu_setterinfo = {
8148 : { (JSJitGetterOp)set_oncontextmenu },
8149 : { prototypes::id::Window },
8150 : { PrototypeTraits<prototypes::id::Window>::Depth },
8151 : JSJitInfo::Setter,
8152 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8153 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8154 : false, /* isInfallible. False in setters. */
8155 : false, /* isMovable. Not relevant for setters. */
8156 : false, /* isEliminatable. Not relevant for setters. */
8157 : false, /* isAlwaysInSlot. Only relevant for getters. */
8158 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8159 : false, /* isTypedMethod. Only relevant for methods. */
8160 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8161 : };
8162 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8163 : static_assert(0 < 5, "There is no slot for us");
8164 :
8165 : static bool
8166 0 : get_ondblclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
8167 : {
8168 0 : RefPtr<EventHandlerNonNull> result(self->GetOndblclick());
8169 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8170 0 : if (result) {
8171 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
8172 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8173 0 : return false;
8174 : }
8175 0 : return true;
8176 : } else {
8177 0 : args.rval().setNull();
8178 0 : return true;
8179 : }
8180 : }
8181 :
8182 : static bool
8183 0 : set_ondblclick(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
8184 : {
8185 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8186 0 : if (args[0].isObject()) {
8187 : { // scope for tempRoot
8188 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
8189 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
8190 : }
8191 : } else {
8192 0 : arg0 = nullptr;
8193 : }
8194 0 : self->SetOndblclick(Constify(arg0));
8195 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8196 :
8197 0 : return true;
8198 : }
8199 :
8200 : static const JSJitInfo ondblclick_getterinfo = {
8201 : { (JSJitGetterOp)get_ondblclick },
8202 : { prototypes::id::Window },
8203 : { PrototypeTraits<prototypes::id::Window>::Depth },
8204 : JSJitInfo::Getter,
8205 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8206 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
8207 : false, /* isInfallible. False in setters. */
8208 : false, /* isMovable. Not relevant for setters. */
8209 : false, /* isEliminatable. Not relevant for setters. */
8210 : false, /* isAlwaysInSlot. Only relevant for getters. */
8211 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8212 : false, /* isTypedMethod. Only relevant for methods. */
8213 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8214 : };
8215 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8216 : static_assert(0 < 5, "There is no slot for us");
8217 : static const JSJitInfo ondblclick_setterinfo = {
8218 : { (JSJitGetterOp)set_ondblclick },
8219 : { prototypes::id::Window },
8220 : { PrototypeTraits<prototypes::id::Window>::Depth },
8221 : JSJitInfo::Setter,
8222 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8223 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8224 : false, /* isInfallible. False in setters. */
8225 : false, /* isMovable. Not relevant for setters. */
8226 : false, /* isEliminatable. Not relevant for setters. */
8227 : false, /* isAlwaysInSlot. Only relevant for getters. */
8228 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8229 : false, /* isTypedMethod. Only relevant for methods. */
8230 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8231 : };
8232 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8233 : static_assert(0 < 5, "There is no slot for us");
8234 :
8235 : static bool
8236 0 : get_ondrag(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
8237 : {
8238 0 : RefPtr<EventHandlerNonNull> result(self->GetOndrag());
8239 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8240 0 : if (result) {
8241 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
8242 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8243 0 : return false;
8244 : }
8245 0 : return true;
8246 : } else {
8247 0 : args.rval().setNull();
8248 0 : return true;
8249 : }
8250 : }
8251 :
8252 : static bool
8253 0 : set_ondrag(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
8254 : {
8255 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8256 0 : if (args[0].isObject()) {
8257 : { // scope for tempRoot
8258 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
8259 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
8260 : }
8261 : } else {
8262 0 : arg0 = nullptr;
8263 : }
8264 0 : self->SetOndrag(Constify(arg0));
8265 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8266 :
8267 0 : return true;
8268 : }
8269 :
8270 : static const JSJitInfo ondrag_getterinfo = {
8271 : { (JSJitGetterOp)get_ondrag },
8272 : { prototypes::id::Window },
8273 : { PrototypeTraits<prototypes::id::Window>::Depth },
8274 : JSJitInfo::Getter,
8275 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8276 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
8277 : false, /* isInfallible. False in setters. */
8278 : false, /* isMovable. Not relevant for setters. */
8279 : false, /* isEliminatable. Not relevant for setters. */
8280 : false, /* isAlwaysInSlot. Only relevant for getters. */
8281 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8282 : false, /* isTypedMethod. Only relevant for methods. */
8283 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8284 : };
8285 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8286 : static_assert(0 < 5, "There is no slot for us");
8287 : static const JSJitInfo ondrag_setterinfo = {
8288 : { (JSJitGetterOp)set_ondrag },
8289 : { prototypes::id::Window },
8290 : { PrototypeTraits<prototypes::id::Window>::Depth },
8291 : JSJitInfo::Setter,
8292 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8293 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8294 : false, /* isInfallible. False in setters. */
8295 : false, /* isMovable. Not relevant for setters. */
8296 : false, /* isEliminatable. Not relevant for setters. */
8297 : false, /* isAlwaysInSlot. Only relevant for getters. */
8298 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8299 : false, /* isTypedMethod. Only relevant for methods. */
8300 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8301 : };
8302 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8303 : static_assert(0 < 5, "There is no slot for us");
8304 :
8305 : static bool
8306 0 : get_ondragend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
8307 : {
8308 0 : RefPtr<EventHandlerNonNull> result(self->GetOndragend());
8309 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8310 0 : if (result) {
8311 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
8312 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8313 0 : return false;
8314 : }
8315 0 : return true;
8316 : } else {
8317 0 : args.rval().setNull();
8318 0 : return true;
8319 : }
8320 : }
8321 :
8322 : static bool
8323 0 : set_ondragend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
8324 : {
8325 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8326 0 : if (args[0].isObject()) {
8327 : { // scope for tempRoot
8328 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
8329 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
8330 : }
8331 : } else {
8332 0 : arg0 = nullptr;
8333 : }
8334 0 : self->SetOndragend(Constify(arg0));
8335 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8336 :
8337 0 : return true;
8338 : }
8339 :
8340 : static const JSJitInfo ondragend_getterinfo = {
8341 : { (JSJitGetterOp)get_ondragend },
8342 : { prototypes::id::Window },
8343 : { PrototypeTraits<prototypes::id::Window>::Depth },
8344 : JSJitInfo::Getter,
8345 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8346 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
8347 : false, /* isInfallible. False in setters. */
8348 : false, /* isMovable. Not relevant for setters. */
8349 : false, /* isEliminatable. Not relevant for setters. */
8350 : false, /* isAlwaysInSlot. Only relevant for getters. */
8351 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8352 : false, /* isTypedMethod. Only relevant for methods. */
8353 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8354 : };
8355 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8356 : static_assert(0 < 5, "There is no slot for us");
8357 : static const JSJitInfo ondragend_setterinfo = {
8358 : { (JSJitGetterOp)set_ondragend },
8359 : { prototypes::id::Window },
8360 : { PrototypeTraits<prototypes::id::Window>::Depth },
8361 : JSJitInfo::Setter,
8362 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8363 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8364 : false, /* isInfallible. False in setters. */
8365 : false, /* isMovable. Not relevant for setters. */
8366 : false, /* isEliminatable. Not relevant for setters. */
8367 : false, /* isAlwaysInSlot. Only relevant for getters. */
8368 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8369 : false, /* isTypedMethod. Only relevant for methods. */
8370 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8371 : };
8372 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8373 : static_assert(0 < 5, "There is no slot for us");
8374 :
8375 : static bool
8376 0 : get_ondragenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
8377 : {
8378 0 : RefPtr<EventHandlerNonNull> result(self->GetOndragenter());
8379 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8380 0 : if (result) {
8381 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
8382 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8383 0 : return false;
8384 : }
8385 0 : return true;
8386 : } else {
8387 0 : args.rval().setNull();
8388 0 : return true;
8389 : }
8390 : }
8391 :
8392 : static bool
8393 0 : set_ondragenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
8394 : {
8395 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8396 0 : if (args[0].isObject()) {
8397 : { // scope for tempRoot
8398 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
8399 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
8400 : }
8401 : } else {
8402 0 : arg0 = nullptr;
8403 : }
8404 0 : self->SetOndragenter(Constify(arg0));
8405 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8406 :
8407 0 : return true;
8408 : }
8409 :
8410 : static const JSJitInfo ondragenter_getterinfo = {
8411 : { (JSJitGetterOp)get_ondragenter },
8412 : { prototypes::id::Window },
8413 : { PrototypeTraits<prototypes::id::Window>::Depth },
8414 : JSJitInfo::Getter,
8415 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8416 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
8417 : false, /* isInfallible. False in setters. */
8418 : false, /* isMovable. Not relevant for setters. */
8419 : false, /* isEliminatable. Not relevant for setters. */
8420 : false, /* isAlwaysInSlot. Only relevant for getters. */
8421 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8422 : false, /* isTypedMethod. Only relevant for methods. */
8423 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8424 : };
8425 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8426 : static_assert(0 < 5, "There is no slot for us");
8427 : static const JSJitInfo ondragenter_setterinfo = {
8428 : { (JSJitGetterOp)set_ondragenter },
8429 : { prototypes::id::Window },
8430 : { PrototypeTraits<prototypes::id::Window>::Depth },
8431 : JSJitInfo::Setter,
8432 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8433 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8434 : false, /* isInfallible. False in setters. */
8435 : false, /* isMovable. Not relevant for setters. */
8436 : false, /* isEliminatable. Not relevant for setters. */
8437 : false, /* isAlwaysInSlot. Only relevant for getters. */
8438 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8439 : false, /* isTypedMethod. Only relevant for methods. */
8440 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8441 : };
8442 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8443 : static_assert(0 < 5, "There is no slot for us");
8444 :
8445 : static bool
8446 0 : get_ondragexit(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
8447 : {
8448 0 : RefPtr<EventHandlerNonNull> result(self->GetOndragexit());
8449 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8450 0 : if (result) {
8451 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
8452 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8453 0 : return false;
8454 : }
8455 0 : return true;
8456 : } else {
8457 0 : args.rval().setNull();
8458 0 : return true;
8459 : }
8460 : }
8461 :
8462 : static bool
8463 0 : set_ondragexit(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
8464 : {
8465 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8466 0 : if (args[0].isObject()) {
8467 : { // scope for tempRoot
8468 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
8469 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
8470 : }
8471 : } else {
8472 0 : arg0 = nullptr;
8473 : }
8474 0 : self->SetOndragexit(Constify(arg0));
8475 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8476 :
8477 0 : return true;
8478 : }
8479 :
8480 : static const JSJitInfo ondragexit_getterinfo = {
8481 : { (JSJitGetterOp)get_ondragexit },
8482 : { prototypes::id::Window },
8483 : { PrototypeTraits<prototypes::id::Window>::Depth },
8484 : JSJitInfo::Getter,
8485 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8486 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
8487 : false, /* isInfallible. False in setters. */
8488 : false, /* isMovable. Not relevant for setters. */
8489 : false, /* isEliminatable. Not relevant for setters. */
8490 : false, /* isAlwaysInSlot. Only relevant for getters. */
8491 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8492 : false, /* isTypedMethod. Only relevant for methods. */
8493 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8494 : };
8495 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8496 : static_assert(0 < 5, "There is no slot for us");
8497 : static const JSJitInfo ondragexit_setterinfo = {
8498 : { (JSJitGetterOp)set_ondragexit },
8499 : { prototypes::id::Window },
8500 : { PrototypeTraits<prototypes::id::Window>::Depth },
8501 : JSJitInfo::Setter,
8502 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8503 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8504 : false, /* isInfallible. False in setters. */
8505 : false, /* isMovable. Not relevant for setters. */
8506 : false, /* isEliminatable. Not relevant for setters. */
8507 : false, /* isAlwaysInSlot. Only relevant for getters. */
8508 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8509 : false, /* isTypedMethod. Only relevant for methods. */
8510 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8511 : };
8512 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8513 : static_assert(0 < 5, "There is no slot for us");
8514 :
8515 : static bool
8516 0 : get_ondragleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
8517 : {
8518 0 : RefPtr<EventHandlerNonNull> result(self->GetOndragleave());
8519 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8520 0 : if (result) {
8521 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
8522 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8523 0 : return false;
8524 : }
8525 0 : return true;
8526 : } else {
8527 0 : args.rval().setNull();
8528 0 : return true;
8529 : }
8530 : }
8531 :
8532 : static bool
8533 0 : set_ondragleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
8534 : {
8535 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8536 0 : if (args[0].isObject()) {
8537 : { // scope for tempRoot
8538 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
8539 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
8540 : }
8541 : } else {
8542 0 : arg0 = nullptr;
8543 : }
8544 0 : self->SetOndragleave(Constify(arg0));
8545 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8546 :
8547 0 : return true;
8548 : }
8549 :
8550 : static const JSJitInfo ondragleave_getterinfo = {
8551 : { (JSJitGetterOp)get_ondragleave },
8552 : { prototypes::id::Window },
8553 : { PrototypeTraits<prototypes::id::Window>::Depth },
8554 : JSJitInfo::Getter,
8555 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8556 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
8557 : false, /* isInfallible. False in setters. */
8558 : false, /* isMovable. Not relevant for setters. */
8559 : false, /* isEliminatable. Not relevant for setters. */
8560 : false, /* isAlwaysInSlot. Only relevant for getters. */
8561 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8562 : false, /* isTypedMethod. Only relevant for methods. */
8563 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8564 : };
8565 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8566 : static_assert(0 < 5, "There is no slot for us");
8567 : static const JSJitInfo ondragleave_setterinfo = {
8568 : { (JSJitGetterOp)set_ondragleave },
8569 : { prototypes::id::Window },
8570 : { PrototypeTraits<prototypes::id::Window>::Depth },
8571 : JSJitInfo::Setter,
8572 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8573 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8574 : false, /* isInfallible. False in setters. */
8575 : false, /* isMovable. Not relevant for setters. */
8576 : false, /* isEliminatable. Not relevant for setters. */
8577 : false, /* isAlwaysInSlot. Only relevant for getters. */
8578 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8579 : false, /* isTypedMethod. Only relevant for methods. */
8580 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8581 : };
8582 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8583 : static_assert(0 < 5, "There is no slot for us");
8584 :
8585 : static bool
8586 0 : get_ondragover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
8587 : {
8588 0 : RefPtr<EventHandlerNonNull> result(self->GetOndragover());
8589 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8590 0 : if (result) {
8591 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
8592 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8593 0 : return false;
8594 : }
8595 0 : return true;
8596 : } else {
8597 0 : args.rval().setNull();
8598 0 : return true;
8599 : }
8600 : }
8601 :
8602 : static bool
8603 0 : set_ondragover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
8604 : {
8605 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8606 0 : if (args[0].isObject()) {
8607 : { // scope for tempRoot
8608 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
8609 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
8610 : }
8611 : } else {
8612 0 : arg0 = nullptr;
8613 : }
8614 0 : self->SetOndragover(Constify(arg0));
8615 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8616 :
8617 0 : return true;
8618 : }
8619 :
8620 : static const JSJitInfo ondragover_getterinfo = {
8621 : { (JSJitGetterOp)get_ondragover },
8622 : { prototypes::id::Window },
8623 : { PrototypeTraits<prototypes::id::Window>::Depth },
8624 : JSJitInfo::Getter,
8625 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8626 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
8627 : false, /* isInfallible. False in setters. */
8628 : false, /* isMovable. Not relevant for setters. */
8629 : false, /* isEliminatable. Not relevant for setters. */
8630 : false, /* isAlwaysInSlot. Only relevant for getters. */
8631 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8632 : false, /* isTypedMethod. Only relevant for methods. */
8633 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8634 : };
8635 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8636 : static_assert(0 < 5, "There is no slot for us");
8637 : static const JSJitInfo ondragover_setterinfo = {
8638 : { (JSJitGetterOp)set_ondragover },
8639 : { prototypes::id::Window },
8640 : { PrototypeTraits<prototypes::id::Window>::Depth },
8641 : JSJitInfo::Setter,
8642 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8643 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8644 : false, /* isInfallible. False in setters. */
8645 : false, /* isMovable. Not relevant for setters. */
8646 : false, /* isEliminatable. Not relevant for setters. */
8647 : false, /* isAlwaysInSlot. Only relevant for getters. */
8648 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8649 : false, /* isTypedMethod. Only relevant for methods. */
8650 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8651 : };
8652 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8653 : static_assert(0 < 5, "There is no slot for us");
8654 :
8655 : static bool
8656 0 : get_ondragstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
8657 : {
8658 0 : RefPtr<EventHandlerNonNull> result(self->GetOndragstart());
8659 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8660 0 : if (result) {
8661 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
8662 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8663 0 : return false;
8664 : }
8665 0 : return true;
8666 : } else {
8667 0 : args.rval().setNull();
8668 0 : return true;
8669 : }
8670 : }
8671 :
8672 : static bool
8673 0 : set_ondragstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
8674 : {
8675 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8676 0 : if (args[0].isObject()) {
8677 : { // scope for tempRoot
8678 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
8679 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
8680 : }
8681 : } else {
8682 0 : arg0 = nullptr;
8683 : }
8684 0 : self->SetOndragstart(Constify(arg0));
8685 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8686 :
8687 0 : return true;
8688 : }
8689 :
8690 : static const JSJitInfo ondragstart_getterinfo = {
8691 : { (JSJitGetterOp)get_ondragstart },
8692 : { prototypes::id::Window },
8693 : { PrototypeTraits<prototypes::id::Window>::Depth },
8694 : JSJitInfo::Getter,
8695 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8696 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
8697 : false, /* isInfallible. False in setters. */
8698 : false, /* isMovable. Not relevant for setters. */
8699 : false, /* isEliminatable. Not relevant for setters. */
8700 : false, /* isAlwaysInSlot. Only relevant for getters. */
8701 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8702 : false, /* isTypedMethod. Only relevant for methods. */
8703 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8704 : };
8705 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8706 : static_assert(0 < 5, "There is no slot for us");
8707 : static const JSJitInfo ondragstart_setterinfo = {
8708 : { (JSJitGetterOp)set_ondragstart },
8709 : { prototypes::id::Window },
8710 : { PrototypeTraits<prototypes::id::Window>::Depth },
8711 : JSJitInfo::Setter,
8712 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8713 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8714 : false, /* isInfallible. False in setters. */
8715 : false, /* isMovable. Not relevant for setters. */
8716 : false, /* isEliminatable. Not relevant for setters. */
8717 : false, /* isAlwaysInSlot. Only relevant for getters. */
8718 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8719 : false, /* isTypedMethod. Only relevant for methods. */
8720 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8721 : };
8722 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8723 : static_assert(0 < 5, "There is no slot for us");
8724 :
8725 : static bool
8726 0 : get_ondrop(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
8727 : {
8728 0 : RefPtr<EventHandlerNonNull> result(self->GetOndrop());
8729 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8730 0 : if (result) {
8731 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
8732 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8733 0 : return false;
8734 : }
8735 0 : return true;
8736 : } else {
8737 0 : args.rval().setNull();
8738 0 : return true;
8739 : }
8740 : }
8741 :
8742 : static bool
8743 0 : set_ondrop(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
8744 : {
8745 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8746 0 : if (args[0].isObject()) {
8747 : { // scope for tempRoot
8748 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
8749 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
8750 : }
8751 : } else {
8752 0 : arg0 = nullptr;
8753 : }
8754 0 : self->SetOndrop(Constify(arg0));
8755 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8756 :
8757 0 : return true;
8758 : }
8759 :
8760 : static const JSJitInfo ondrop_getterinfo = {
8761 : { (JSJitGetterOp)get_ondrop },
8762 : { prototypes::id::Window },
8763 : { PrototypeTraits<prototypes::id::Window>::Depth },
8764 : JSJitInfo::Getter,
8765 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8766 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
8767 : false, /* isInfallible. False in setters. */
8768 : false, /* isMovable. Not relevant for setters. */
8769 : false, /* isEliminatable. Not relevant for setters. */
8770 : false, /* isAlwaysInSlot. Only relevant for getters. */
8771 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8772 : false, /* isTypedMethod. Only relevant for methods. */
8773 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8774 : };
8775 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8776 : static_assert(0 < 5, "There is no slot for us");
8777 : static const JSJitInfo ondrop_setterinfo = {
8778 : { (JSJitGetterOp)set_ondrop },
8779 : { prototypes::id::Window },
8780 : { PrototypeTraits<prototypes::id::Window>::Depth },
8781 : JSJitInfo::Setter,
8782 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8783 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8784 : false, /* isInfallible. False in setters. */
8785 : false, /* isMovable. Not relevant for setters. */
8786 : false, /* isEliminatable. Not relevant for setters. */
8787 : false, /* isAlwaysInSlot. Only relevant for getters. */
8788 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8789 : false, /* isTypedMethod. Only relevant for methods. */
8790 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8791 : };
8792 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8793 : static_assert(0 < 5, "There is no slot for us");
8794 :
8795 : static bool
8796 0 : get_ondurationchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
8797 : {
8798 0 : RefPtr<EventHandlerNonNull> result(self->GetOndurationchange());
8799 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8800 0 : if (result) {
8801 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
8802 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8803 0 : return false;
8804 : }
8805 0 : return true;
8806 : } else {
8807 0 : args.rval().setNull();
8808 0 : return true;
8809 : }
8810 : }
8811 :
8812 : static bool
8813 0 : set_ondurationchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
8814 : {
8815 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8816 0 : if (args[0].isObject()) {
8817 : { // scope for tempRoot
8818 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
8819 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
8820 : }
8821 : } else {
8822 0 : arg0 = nullptr;
8823 : }
8824 0 : self->SetOndurationchange(Constify(arg0));
8825 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8826 :
8827 0 : return true;
8828 : }
8829 :
8830 : static const JSJitInfo ondurationchange_getterinfo = {
8831 : { (JSJitGetterOp)get_ondurationchange },
8832 : { prototypes::id::Window },
8833 : { PrototypeTraits<prototypes::id::Window>::Depth },
8834 : JSJitInfo::Getter,
8835 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8836 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
8837 : false, /* isInfallible. False in setters. */
8838 : false, /* isMovable. Not relevant for setters. */
8839 : false, /* isEliminatable. Not relevant for setters. */
8840 : false, /* isAlwaysInSlot. Only relevant for getters. */
8841 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8842 : false, /* isTypedMethod. Only relevant for methods. */
8843 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8844 : };
8845 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8846 : static_assert(0 < 5, "There is no slot for us");
8847 : static const JSJitInfo ondurationchange_setterinfo = {
8848 : { (JSJitGetterOp)set_ondurationchange },
8849 : { prototypes::id::Window },
8850 : { PrototypeTraits<prototypes::id::Window>::Depth },
8851 : JSJitInfo::Setter,
8852 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8853 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8854 : false, /* isInfallible. False in setters. */
8855 : false, /* isMovable. Not relevant for setters. */
8856 : false, /* isEliminatable. Not relevant for setters. */
8857 : false, /* isAlwaysInSlot. Only relevant for getters. */
8858 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8859 : false, /* isTypedMethod. Only relevant for methods. */
8860 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8861 : };
8862 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8863 : static_assert(0 < 5, "There is no slot for us");
8864 :
8865 : static bool
8866 0 : get_onemptied(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
8867 : {
8868 0 : RefPtr<EventHandlerNonNull> result(self->GetOnemptied());
8869 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8870 0 : if (result) {
8871 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
8872 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8873 0 : return false;
8874 : }
8875 0 : return true;
8876 : } else {
8877 0 : args.rval().setNull();
8878 0 : return true;
8879 : }
8880 : }
8881 :
8882 : static bool
8883 0 : set_onemptied(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
8884 : {
8885 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8886 0 : if (args[0].isObject()) {
8887 : { // scope for tempRoot
8888 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
8889 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
8890 : }
8891 : } else {
8892 0 : arg0 = nullptr;
8893 : }
8894 0 : self->SetOnemptied(Constify(arg0));
8895 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8896 :
8897 0 : return true;
8898 : }
8899 :
8900 : static const JSJitInfo onemptied_getterinfo = {
8901 : { (JSJitGetterOp)get_onemptied },
8902 : { prototypes::id::Window },
8903 : { PrototypeTraits<prototypes::id::Window>::Depth },
8904 : JSJitInfo::Getter,
8905 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8906 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
8907 : false, /* isInfallible. False in setters. */
8908 : false, /* isMovable. Not relevant for setters. */
8909 : false, /* isEliminatable. Not relevant for setters. */
8910 : false, /* isAlwaysInSlot. Only relevant for getters. */
8911 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8912 : false, /* isTypedMethod. Only relevant for methods. */
8913 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8914 : };
8915 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8916 : static_assert(0 < 5, "There is no slot for us");
8917 : static const JSJitInfo onemptied_setterinfo = {
8918 : { (JSJitGetterOp)set_onemptied },
8919 : { prototypes::id::Window },
8920 : { PrototypeTraits<prototypes::id::Window>::Depth },
8921 : JSJitInfo::Setter,
8922 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8923 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8924 : false, /* isInfallible. False in setters. */
8925 : false, /* isMovable. Not relevant for setters. */
8926 : false, /* isEliminatable. Not relevant for setters. */
8927 : false, /* isAlwaysInSlot. Only relevant for getters. */
8928 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8929 : false, /* isTypedMethod. Only relevant for methods. */
8930 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8931 : };
8932 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8933 : static_assert(0 < 5, "There is no slot for us");
8934 :
8935 : static bool
8936 0 : get_onended(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
8937 : {
8938 0 : RefPtr<EventHandlerNonNull> result(self->GetOnended());
8939 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8940 0 : if (result) {
8941 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
8942 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
8943 0 : return false;
8944 : }
8945 0 : return true;
8946 : } else {
8947 0 : args.rval().setNull();
8948 0 : return true;
8949 : }
8950 : }
8951 :
8952 : static bool
8953 0 : set_onended(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
8954 : {
8955 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
8956 0 : if (args[0].isObject()) {
8957 : { // scope for tempRoot
8958 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
8959 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
8960 : }
8961 : } else {
8962 0 : arg0 = nullptr;
8963 : }
8964 0 : self->SetOnended(Constify(arg0));
8965 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
8966 :
8967 0 : return true;
8968 : }
8969 :
8970 : static const JSJitInfo onended_getterinfo = {
8971 : { (JSJitGetterOp)get_onended },
8972 : { prototypes::id::Window },
8973 : { PrototypeTraits<prototypes::id::Window>::Depth },
8974 : JSJitInfo::Getter,
8975 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8976 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
8977 : false, /* isInfallible. False in setters. */
8978 : false, /* isMovable. Not relevant for setters. */
8979 : false, /* isEliminatable. Not relevant for setters. */
8980 : false, /* isAlwaysInSlot. Only relevant for getters. */
8981 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8982 : false, /* isTypedMethod. Only relevant for methods. */
8983 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
8984 : };
8985 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
8986 : static_assert(0 < 5, "There is no slot for us");
8987 : static const JSJitInfo onended_setterinfo = {
8988 : { (JSJitGetterOp)set_onended },
8989 : { prototypes::id::Window },
8990 : { PrototypeTraits<prototypes::id::Window>::Depth },
8991 : JSJitInfo::Setter,
8992 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
8993 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
8994 : false, /* isInfallible. False in setters. */
8995 : false, /* isMovable. Not relevant for setters. */
8996 : false, /* isEliminatable. Not relevant for setters. */
8997 : false, /* isAlwaysInSlot. Only relevant for getters. */
8998 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
8999 : false, /* isTypedMethod. Only relevant for methods. */
9000 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9001 : };
9002 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9003 : static_assert(0 < 5, "There is no slot for us");
9004 :
9005 : static bool
9006 0 : get_oninput(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9007 : {
9008 0 : RefPtr<EventHandlerNonNull> result(self->GetOninput());
9009 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9010 0 : if (result) {
9011 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9012 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9013 0 : return false;
9014 : }
9015 0 : return true;
9016 : } else {
9017 0 : args.rval().setNull();
9018 0 : return true;
9019 : }
9020 : }
9021 :
9022 : static bool
9023 0 : set_oninput(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
9024 : {
9025 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9026 0 : if (args[0].isObject()) {
9027 : { // scope for tempRoot
9028 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
9029 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
9030 : }
9031 : } else {
9032 0 : arg0 = nullptr;
9033 : }
9034 0 : self->SetOninput(Constify(arg0));
9035 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9036 :
9037 0 : return true;
9038 : }
9039 :
9040 : static const JSJitInfo oninput_getterinfo = {
9041 : { (JSJitGetterOp)get_oninput },
9042 : { prototypes::id::Window },
9043 : { PrototypeTraits<prototypes::id::Window>::Depth },
9044 : JSJitInfo::Getter,
9045 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9046 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
9047 : false, /* isInfallible. False in setters. */
9048 : false, /* isMovable. Not relevant for setters. */
9049 : false, /* isEliminatable. Not relevant for setters. */
9050 : false, /* isAlwaysInSlot. Only relevant for getters. */
9051 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9052 : false, /* isTypedMethod. Only relevant for methods. */
9053 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9054 : };
9055 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9056 : static_assert(0 < 5, "There is no slot for us");
9057 : static const JSJitInfo oninput_setterinfo = {
9058 : { (JSJitGetterOp)set_oninput },
9059 : { prototypes::id::Window },
9060 : { PrototypeTraits<prototypes::id::Window>::Depth },
9061 : JSJitInfo::Setter,
9062 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9063 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
9064 : false, /* isInfallible. False in setters. */
9065 : false, /* isMovable. Not relevant for setters. */
9066 : false, /* isEliminatable. Not relevant for setters. */
9067 : false, /* isAlwaysInSlot. Only relevant for getters. */
9068 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9069 : false, /* isTypedMethod. Only relevant for methods. */
9070 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9071 : };
9072 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9073 : static_assert(0 < 5, "There is no slot for us");
9074 :
9075 : static bool
9076 0 : get_oninvalid(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9077 : {
9078 0 : RefPtr<EventHandlerNonNull> result(self->GetOninvalid());
9079 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9080 0 : if (result) {
9081 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9082 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9083 0 : return false;
9084 : }
9085 0 : return true;
9086 : } else {
9087 0 : args.rval().setNull();
9088 0 : return true;
9089 : }
9090 : }
9091 :
9092 : static bool
9093 0 : set_oninvalid(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
9094 : {
9095 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9096 0 : if (args[0].isObject()) {
9097 : { // scope for tempRoot
9098 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
9099 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
9100 : }
9101 : } else {
9102 0 : arg0 = nullptr;
9103 : }
9104 0 : self->SetOninvalid(Constify(arg0));
9105 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9106 :
9107 0 : return true;
9108 : }
9109 :
9110 : static const JSJitInfo oninvalid_getterinfo = {
9111 : { (JSJitGetterOp)get_oninvalid },
9112 : { prototypes::id::Window },
9113 : { PrototypeTraits<prototypes::id::Window>::Depth },
9114 : JSJitInfo::Getter,
9115 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9116 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
9117 : false, /* isInfallible. False in setters. */
9118 : false, /* isMovable. Not relevant for setters. */
9119 : false, /* isEliminatable. Not relevant for setters. */
9120 : false, /* isAlwaysInSlot. Only relevant for getters. */
9121 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9122 : false, /* isTypedMethod. Only relevant for methods. */
9123 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9124 : };
9125 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9126 : static_assert(0 < 5, "There is no slot for us");
9127 : static const JSJitInfo oninvalid_setterinfo = {
9128 : { (JSJitGetterOp)set_oninvalid },
9129 : { prototypes::id::Window },
9130 : { PrototypeTraits<prototypes::id::Window>::Depth },
9131 : JSJitInfo::Setter,
9132 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9133 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
9134 : false, /* isInfallible. False in setters. */
9135 : false, /* isMovable. Not relevant for setters. */
9136 : false, /* isEliminatable. Not relevant for setters. */
9137 : false, /* isAlwaysInSlot. Only relevant for getters. */
9138 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9139 : false, /* isTypedMethod. Only relevant for methods. */
9140 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9141 : };
9142 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9143 : static_assert(0 < 5, "There is no slot for us");
9144 :
9145 : static bool
9146 0 : get_onkeydown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9147 : {
9148 0 : RefPtr<EventHandlerNonNull> result(self->GetOnkeydown());
9149 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9150 0 : if (result) {
9151 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9152 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9153 0 : return false;
9154 : }
9155 0 : return true;
9156 : } else {
9157 0 : args.rval().setNull();
9158 0 : return true;
9159 : }
9160 : }
9161 :
9162 : static bool
9163 0 : set_onkeydown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
9164 : {
9165 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9166 0 : if (args[0].isObject()) {
9167 : { // scope for tempRoot
9168 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
9169 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
9170 : }
9171 : } else {
9172 0 : arg0 = nullptr;
9173 : }
9174 0 : self->SetOnkeydown(Constify(arg0));
9175 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9176 :
9177 0 : return true;
9178 : }
9179 :
9180 : static const JSJitInfo onkeydown_getterinfo = {
9181 : { (JSJitGetterOp)get_onkeydown },
9182 : { prototypes::id::Window },
9183 : { PrototypeTraits<prototypes::id::Window>::Depth },
9184 : JSJitInfo::Getter,
9185 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9186 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
9187 : false, /* isInfallible. False in setters. */
9188 : false, /* isMovable. Not relevant for setters. */
9189 : false, /* isEliminatable. Not relevant for setters. */
9190 : false, /* isAlwaysInSlot. Only relevant for getters. */
9191 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9192 : false, /* isTypedMethod. Only relevant for methods. */
9193 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9194 : };
9195 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9196 : static_assert(0 < 5, "There is no slot for us");
9197 : static const JSJitInfo onkeydown_setterinfo = {
9198 : { (JSJitGetterOp)set_onkeydown },
9199 : { prototypes::id::Window },
9200 : { PrototypeTraits<prototypes::id::Window>::Depth },
9201 : JSJitInfo::Setter,
9202 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9203 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
9204 : false, /* isInfallible. False in setters. */
9205 : false, /* isMovable. Not relevant for setters. */
9206 : false, /* isEliminatable. Not relevant for setters. */
9207 : false, /* isAlwaysInSlot. Only relevant for getters. */
9208 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9209 : false, /* isTypedMethod. Only relevant for methods. */
9210 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9211 : };
9212 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9213 : static_assert(0 < 5, "There is no slot for us");
9214 :
9215 : static bool
9216 0 : get_onkeypress(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9217 : {
9218 0 : RefPtr<EventHandlerNonNull> result(self->GetOnkeypress());
9219 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9220 0 : if (result) {
9221 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9222 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9223 0 : return false;
9224 : }
9225 0 : return true;
9226 : } else {
9227 0 : args.rval().setNull();
9228 0 : return true;
9229 : }
9230 : }
9231 :
9232 : static bool
9233 0 : set_onkeypress(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
9234 : {
9235 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9236 0 : if (args[0].isObject()) {
9237 : { // scope for tempRoot
9238 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
9239 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
9240 : }
9241 : } else {
9242 0 : arg0 = nullptr;
9243 : }
9244 0 : self->SetOnkeypress(Constify(arg0));
9245 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9246 :
9247 0 : return true;
9248 : }
9249 :
9250 : static const JSJitInfo onkeypress_getterinfo = {
9251 : { (JSJitGetterOp)get_onkeypress },
9252 : { prototypes::id::Window },
9253 : { PrototypeTraits<prototypes::id::Window>::Depth },
9254 : JSJitInfo::Getter,
9255 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9256 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
9257 : false, /* isInfallible. False in setters. */
9258 : false, /* isMovable. Not relevant for setters. */
9259 : false, /* isEliminatable. Not relevant for setters. */
9260 : false, /* isAlwaysInSlot. Only relevant for getters. */
9261 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9262 : false, /* isTypedMethod. Only relevant for methods. */
9263 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9264 : };
9265 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9266 : static_assert(0 < 5, "There is no slot for us");
9267 : static const JSJitInfo onkeypress_setterinfo = {
9268 : { (JSJitGetterOp)set_onkeypress },
9269 : { prototypes::id::Window },
9270 : { PrototypeTraits<prototypes::id::Window>::Depth },
9271 : JSJitInfo::Setter,
9272 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9273 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
9274 : false, /* isInfallible. False in setters. */
9275 : false, /* isMovable. Not relevant for setters. */
9276 : false, /* isEliminatable. Not relevant for setters. */
9277 : false, /* isAlwaysInSlot. Only relevant for getters. */
9278 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9279 : false, /* isTypedMethod. Only relevant for methods. */
9280 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9281 : };
9282 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9283 : static_assert(0 < 5, "There is no slot for us");
9284 :
9285 : static bool
9286 0 : get_onkeyup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9287 : {
9288 0 : RefPtr<EventHandlerNonNull> result(self->GetOnkeyup());
9289 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9290 0 : if (result) {
9291 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9292 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9293 0 : return false;
9294 : }
9295 0 : return true;
9296 : } else {
9297 0 : args.rval().setNull();
9298 0 : return true;
9299 : }
9300 : }
9301 :
9302 : static bool
9303 0 : set_onkeyup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
9304 : {
9305 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9306 0 : if (args[0].isObject()) {
9307 : { // scope for tempRoot
9308 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
9309 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
9310 : }
9311 : } else {
9312 0 : arg0 = nullptr;
9313 : }
9314 0 : self->SetOnkeyup(Constify(arg0));
9315 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9316 :
9317 0 : return true;
9318 : }
9319 :
9320 : static const JSJitInfo onkeyup_getterinfo = {
9321 : { (JSJitGetterOp)get_onkeyup },
9322 : { prototypes::id::Window },
9323 : { PrototypeTraits<prototypes::id::Window>::Depth },
9324 : JSJitInfo::Getter,
9325 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9326 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
9327 : false, /* isInfallible. False in setters. */
9328 : false, /* isMovable. Not relevant for setters. */
9329 : false, /* isEliminatable. Not relevant for setters. */
9330 : false, /* isAlwaysInSlot. Only relevant for getters. */
9331 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9332 : false, /* isTypedMethod. Only relevant for methods. */
9333 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9334 : };
9335 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9336 : static_assert(0 < 5, "There is no slot for us");
9337 : static const JSJitInfo onkeyup_setterinfo = {
9338 : { (JSJitGetterOp)set_onkeyup },
9339 : { prototypes::id::Window },
9340 : { PrototypeTraits<prototypes::id::Window>::Depth },
9341 : JSJitInfo::Setter,
9342 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9343 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
9344 : false, /* isInfallible. False in setters. */
9345 : false, /* isMovable. Not relevant for setters. */
9346 : false, /* isEliminatable. Not relevant for setters. */
9347 : false, /* isAlwaysInSlot. Only relevant for getters. */
9348 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9349 : false, /* isTypedMethod. Only relevant for methods. */
9350 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9351 : };
9352 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9353 : static_assert(0 < 5, "There is no slot for us");
9354 :
9355 : static bool
9356 0 : get_onload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9357 : {
9358 0 : RefPtr<EventHandlerNonNull> result(self->GetOnload());
9359 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9360 0 : if (result) {
9361 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9362 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9363 0 : return false;
9364 : }
9365 0 : return true;
9366 : } else {
9367 0 : args.rval().setNull();
9368 0 : return true;
9369 : }
9370 : }
9371 :
9372 : static bool
9373 0 : set_onload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
9374 : {
9375 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9376 0 : if (args[0].isObject()) {
9377 : { // scope for tempRoot
9378 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
9379 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
9380 : }
9381 : } else {
9382 0 : arg0 = nullptr;
9383 : }
9384 0 : self->SetOnload(Constify(arg0));
9385 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9386 :
9387 0 : return true;
9388 : }
9389 :
9390 : static const JSJitInfo onload_getterinfo = {
9391 : { (JSJitGetterOp)get_onload },
9392 : { prototypes::id::Window },
9393 : { PrototypeTraits<prototypes::id::Window>::Depth },
9394 : JSJitInfo::Getter,
9395 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9396 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
9397 : false, /* isInfallible. False in setters. */
9398 : false, /* isMovable. Not relevant for setters. */
9399 : false, /* isEliminatable. Not relevant for setters. */
9400 : false, /* isAlwaysInSlot. Only relevant for getters. */
9401 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9402 : false, /* isTypedMethod. Only relevant for methods. */
9403 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9404 : };
9405 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9406 : static_assert(0 < 5, "There is no slot for us");
9407 : static const JSJitInfo onload_setterinfo = {
9408 : { (JSJitGetterOp)set_onload },
9409 : { prototypes::id::Window },
9410 : { PrototypeTraits<prototypes::id::Window>::Depth },
9411 : JSJitInfo::Setter,
9412 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9413 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
9414 : false, /* isInfallible. False in setters. */
9415 : false, /* isMovable. Not relevant for setters. */
9416 : false, /* isEliminatable. Not relevant for setters. */
9417 : false, /* isAlwaysInSlot. Only relevant for getters. */
9418 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9419 : false, /* isTypedMethod. Only relevant for methods. */
9420 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9421 : };
9422 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9423 : static_assert(0 < 5, "There is no slot for us");
9424 :
9425 : static bool
9426 0 : get_onloadeddata(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9427 : {
9428 0 : RefPtr<EventHandlerNonNull> result(self->GetOnloadeddata());
9429 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9430 0 : if (result) {
9431 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9432 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9433 0 : return false;
9434 : }
9435 0 : return true;
9436 : } else {
9437 0 : args.rval().setNull();
9438 0 : return true;
9439 : }
9440 : }
9441 :
9442 : static bool
9443 0 : set_onloadeddata(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
9444 : {
9445 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9446 0 : if (args[0].isObject()) {
9447 : { // scope for tempRoot
9448 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
9449 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
9450 : }
9451 : } else {
9452 0 : arg0 = nullptr;
9453 : }
9454 0 : self->SetOnloadeddata(Constify(arg0));
9455 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9456 :
9457 0 : return true;
9458 : }
9459 :
9460 : static const JSJitInfo onloadeddata_getterinfo = {
9461 : { (JSJitGetterOp)get_onloadeddata },
9462 : { prototypes::id::Window },
9463 : { PrototypeTraits<prototypes::id::Window>::Depth },
9464 : JSJitInfo::Getter,
9465 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9466 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
9467 : false, /* isInfallible. False in setters. */
9468 : false, /* isMovable. Not relevant for setters. */
9469 : false, /* isEliminatable. Not relevant for setters. */
9470 : false, /* isAlwaysInSlot. Only relevant for getters. */
9471 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9472 : false, /* isTypedMethod. Only relevant for methods. */
9473 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9474 : };
9475 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9476 : static_assert(0 < 5, "There is no slot for us");
9477 : static const JSJitInfo onloadeddata_setterinfo = {
9478 : { (JSJitGetterOp)set_onloadeddata },
9479 : { prototypes::id::Window },
9480 : { PrototypeTraits<prototypes::id::Window>::Depth },
9481 : JSJitInfo::Setter,
9482 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9483 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
9484 : false, /* isInfallible. False in setters. */
9485 : false, /* isMovable. Not relevant for setters. */
9486 : false, /* isEliminatable. Not relevant for setters. */
9487 : false, /* isAlwaysInSlot. Only relevant for getters. */
9488 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9489 : false, /* isTypedMethod. Only relevant for methods. */
9490 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9491 : };
9492 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9493 : static_assert(0 < 5, "There is no slot for us");
9494 :
9495 : static bool
9496 0 : get_onloadedmetadata(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9497 : {
9498 0 : RefPtr<EventHandlerNonNull> result(self->GetOnloadedmetadata());
9499 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9500 0 : if (result) {
9501 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9502 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9503 0 : return false;
9504 : }
9505 0 : return true;
9506 : } else {
9507 0 : args.rval().setNull();
9508 0 : return true;
9509 : }
9510 : }
9511 :
9512 : static bool
9513 0 : set_onloadedmetadata(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
9514 : {
9515 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9516 0 : if (args[0].isObject()) {
9517 : { // scope for tempRoot
9518 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
9519 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
9520 : }
9521 : } else {
9522 0 : arg0 = nullptr;
9523 : }
9524 0 : self->SetOnloadedmetadata(Constify(arg0));
9525 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9526 :
9527 0 : return true;
9528 : }
9529 :
9530 : static const JSJitInfo onloadedmetadata_getterinfo = {
9531 : { (JSJitGetterOp)get_onloadedmetadata },
9532 : { prototypes::id::Window },
9533 : { PrototypeTraits<prototypes::id::Window>::Depth },
9534 : JSJitInfo::Getter,
9535 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9536 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
9537 : false, /* isInfallible. False in setters. */
9538 : false, /* isMovable. Not relevant for setters. */
9539 : false, /* isEliminatable. Not relevant for setters. */
9540 : false, /* isAlwaysInSlot. Only relevant for getters. */
9541 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9542 : false, /* isTypedMethod. Only relevant for methods. */
9543 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9544 : };
9545 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9546 : static_assert(0 < 5, "There is no slot for us");
9547 : static const JSJitInfo onloadedmetadata_setterinfo = {
9548 : { (JSJitGetterOp)set_onloadedmetadata },
9549 : { prototypes::id::Window },
9550 : { PrototypeTraits<prototypes::id::Window>::Depth },
9551 : JSJitInfo::Setter,
9552 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9553 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
9554 : false, /* isInfallible. False in setters. */
9555 : false, /* isMovable. Not relevant for setters. */
9556 : false, /* isEliminatable. Not relevant for setters. */
9557 : false, /* isAlwaysInSlot. Only relevant for getters. */
9558 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9559 : false, /* isTypedMethod. Only relevant for methods. */
9560 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9561 : };
9562 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9563 : static_assert(0 < 5, "There is no slot for us");
9564 :
9565 : static bool
9566 0 : get_onloadend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9567 : {
9568 0 : RefPtr<EventHandlerNonNull> result(self->GetOnloadend());
9569 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9570 0 : if (result) {
9571 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9572 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9573 0 : return false;
9574 : }
9575 0 : return true;
9576 : } else {
9577 0 : args.rval().setNull();
9578 0 : return true;
9579 : }
9580 : }
9581 :
9582 : static bool
9583 0 : set_onloadend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
9584 : {
9585 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9586 0 : if (args[0].isObject()) {
9587 : { // scope for tempRoot
9588 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
9589 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
9590 : }
9591 : } else {
9592 0 : arg0 = nullptr;
9593 : }
9594 0 : self->SetOnloadend(Constify(arg0));
9595 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9596 :
9597 0 : return true;
9598 : }
9599 :
9600 : static const JSJitInfo onloadend_getterinfo = {
9601 : { (JSJitGetterOp)get_onloadend },
9602 : { prototypes::id::Window },
9603 : { PrototypeTraits<prototypes::id::Window>::Depth },
9604 : JSJitInfo::Getter,
9605 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9606 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
9607 : false, /* isInfallible. False in setters. */
9608 : false, /* isMovable. Not relevant for setters. */
9609 : false, /* isEliminatable. Not relevant for setters. */
9610 : false, /* isAlwaysInSlot. Only relevant for getters. */
9611 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9612 : false, /* isTypedMethod. Only relevant for methods. */
9613 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9614 : };
9615 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9616 : static_assert(0 < 5, "There is no slot for us");
9617 : static const JSJitInfo onloadend_setterinfo = {
9618 : { (JSJitGetterOp)set_onloadend },
9619 : { prototypes::id::Window },
9620 : { PrototypeTraits<prototypes::id::Window>::Depth },
9621 : JSJitInfo::Setter,
9622 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9623 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
9624 : false, /* isInfallible. False in setters. */
9625 : false, /* isMovable. Not relevant for setters. */
9626 : false, /* isEliminatable. Not relevant for setters. */
9627 : false, /* isAlwaysInSlot. Only relevant for getters. */
9628 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9629 : false, /* isTypedMethod. Only relevant for methods. */
9630 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9631 : };
9632 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9633 : static_assert(0 < 5, "There is no slot for us");
9634 :
9635 : static bool
9636 0 : get_onloadstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9637 : {
9638 0 : RefPtr<EventHandlerNonNull> result(self->GetOnloadstart());
9639 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9640 0 : if (result) {
9641 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9642 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9643 0 : return false;
9644 : }
9645 0 : return true;
9646 : } else {
9647 0 : args.rval().setNull();
9648 0 : return true;
9649 : }
9650 : }
9651 :
9652 : static bool
9653 0 : set_onloadstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
9654 : {
9655 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9656 0 : if (args[0].isObject()) {
9657 : { // scope for tempRoot
9658 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
9659 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
9660 : }
9661 : } else {
9662 0 : arg0 = nullptr;
9663 : }
9664 0 : self->SetOnloadstart(Constify(arg0));
9665 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9666 :
9667 0 : return true;
9668 : }
9669 :
9670 : static const JSJitInfo onloadstart_getterinfo = {
9671 : { (JSJitGetterOp)get_onloadstart },
9672 : { prototypes::id::Window },
9673 : { PrototypeTraits<prototypes::id::Window>::Depth },
9674 : JSJitInfo::Getter,
9675 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9676 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
9677 : false, /* isInfallible. False in setters. */
9678 : false, /* isMovable. Not relevant for setters. */
9679 : false, /* isEliminatable. Not relevant for setters. */
9680 : false, /* isAlwaysInSlot. Only relevant for getters. */
9681 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9682 : false, /* isTypedMethod. Only relevant for methods. */
9683 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9684 : };
9685 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9686 : static_assert(0 < 5, "There is no slot for us");
9687 : static const JSJitInfo onloadstart_setterinfo = {
9688 : { (JSJitGetterOp)set_onloadstart },
9689 : { prototypes::id::Window },
9690 : { PrototypeTraits<prototypes::id::Window>::Depth },
9691 : JSJitInfo::Setter,
9692 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9693 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
9694 : false, /* isInfallible. False in setters. */
9695 : false, /* isMovable. Not relevant for setters. */
9696 : false, /* isEliminatable. Not relevant for setters. */
9697 : false, /* isAlwaysInSlot. Only relevant for getters. */
9698 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9699 : false, /* isTypedMethod. Only relevant for methods. */
9700 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9701 : };
9702 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9703 : static_assert(0 < 5, "There is no slot for us");
9704 :
9705 : static bool
9706 0 : get_onmousedown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9707 : {
9708 0 : RefPtr<EventHandlerNonNull> result(self->GetOnmousedown());
9709 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9710 0 : if (result) {
9711 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9712 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9713 0 : return false;
9714 : }
9715 0 : return true;
9716 : } else {
9717 0 : args.rval().setNull();
9718 0 : return true;
9719 : }
9720 : }
9721 :
9722 : static bool
9723 0 : set_onmousedown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
9724 : {
9725 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9726 0 : if (args[0].isObject()) {
9727 : { // scope for tempRoot
9728 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
9729 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
9730 : }
9731 : } else {
9732 0 : arg0 = nullptr;
9733 : }
9734 0 : self->SetOnmousedown(Constify(arg0));
9735 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9736 :
9737 0 : return true;
9738 : }
9739 :
9740 : static const JSJitInfo onmousedown_getterinfo = {
9741 : { (JSJitGetterOp)get_onmousedown },
9742 : { prototypes::id::Window },
9743 : { PrototypeTraits<prototypes::id::Window>::Depth },
9744 : JSJitInfo::Getter,
9745 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9746 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
9747 : false, /* isInfallible. False in setters. */
9748 : false, /* isMovable. Not relevant for setters. */
9749 : false, /* isEliminatable. Not relevant for setters. */
9750 : false, /* isAlwaysInSlot. Only relevant for getters. */
9751 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9752 : false, /* isTypedMethod. Only relevant for methods. */
9753 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9754 : };
9755 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9756 : static_assert(0 < 5, "There is no slot for us");
9757 : static const JSJitInfo onmousedown_setterinfo = {
9758 : { (JSJitGetterOp)set_onmousedown },
9759 : { prototypes::id::Window },
9760 : { PrototypeTraits<prototypes::id::Window>::Depth },
9761 : JSJitInfo::Setter,
9762 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9763 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
9764 : false, /* isInfallible. False in setters. */
9765 : false, /* isMovable. Not relevant for setters. */
9766 : false, /* isEliminatable. Not relevant for setters. */
9767 : false, /* isAlwaysInSlot. Only relevant for getters. */
9768 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9769 : false, /* isTypedMethod. Only relevant for methods. */
9770 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9771 : };
9772 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9773 : static_assert(0 < 5, "There is no slot for us");
9774 :
9775 : static bool
9776 0 : get_onmouseenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9777 : {
9778 0 : RefPtr<EventHandlerNonNull> result(self->GetOnmouseenter());
9779 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9780 0 : if (result) {
9781 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9782 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9783 0 : return false;
9784 : }
9785 0 : return true;
9786 : } else {
9787 0 : args.rval().setNull();
9788 0 : return true;
9789 : }
9790 : }
9791 :
9792 : static bool
9793 0 : set_onmouseenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
9794 : {
9795 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9796 0 : if (args[0].isObject()) {
9797 : { // scope for tempRoot
9798 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
9799 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
9800 : }
9801 : } else {
9802 0 : arg0 = nullptr;
9803 : }
9804 0 : self->SetOnmouseenter(Constify(arg0));
9805 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9806 :
9807 0 : return true;
9808 : }
9809 :
9810 : static const JSJitInfo onmouseenter_getterinfo = {
9811 : { (JSJitGetterOp)get_onmouseenter },
9812 : { prototypes::id::Window },
9813 : { PrototypeTraits<prototypes::id::Window>::Depth },
9814 : JSJitInfo::Getter,
9815 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9816 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
9817 : false, /* isInfallible. False in setters. */
9818 : false, /* isMovable. Not relevant for setters. */
9819 : false, /* isEliminatable. Not relevant for setters. */
9820 : false, /* isAlwaysInSlot. Only relevant for getters. */
9821 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9822 : false, /* isTypedMethod. Only relevant for methods. */
9823 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9824 : };
9825 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9826 : static_assert(0 < 5, "There is no slot for us");
9827 : static const JSJitInfo onmouseenter_setterinfo = {
9828 : { (JSJitGetterOp)set_onmouseenter },
9829 : { prototypes::id::Window },
9830 : { PrototypeTraits<prototypes::id::Window>::Depth },
9831 : JSJitInfo::Setter,
9832 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9833 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
9834 : false, /* isInfallible. False in setters. */
9835 : false, /* isMovable. Not relevant for setters. */
9836 : false, /* isEliminatable. Not relevant for setters. */
9837 : false, /* isAlwaysInSlot. Only relevant for getters. */
9838 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9839 : false, /* isTypedMethod. Only relevant for methods. */
9840 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9841 : };
9842 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9843 : static_assert(0 < 5, "There is no slot for us");
9844 :
9845 : static bool
9846 0 : get_onmouseleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9847 : {
9848 0 : RefPtr<EventHandlerNonNull> result(self->GetOnmouseleave());
9849 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9850 0 : if (result) {
9851 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9852 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9853 0 : return false;
9854 : }
9855 0 : return true;
9856 : } else {
9857 0 : args.rval().setNull();
9858 0 : return true;
9859 : }
9860 : }
9861 :
9862 : static bool
9863 0 : set_onmouseleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
9864 : {
9865 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9866 0 : if (args[0].isObject()) {
9867 : { // scope for tempRoot
9868 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
9869 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
9870 : }
9871 : } else {
9872 0 : arg0 = nullptr;
9873 : }
9874 0 : self->SetOnmouseleave(Constify(arg0));
9875 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9876 :
9877 0 : return true;
9878 : }
9879 :
9880 : static const JSJitInfo onmouseleave_getterinfo = {
9881 : { (JSJitGetterOp)get_onmouseleave },
9882 : { prototypes::id::Window },
9883 : { PrototypeTraits<prototypes::id::Window>::Depth },
9884 : JSJitInfo::Getter,
9885 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9886 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
9887 : false, /* isInfallible. False in setters. */
9888 : false, /* isMovable. Not relevant for setters. */
9889 : false, /* isEliminatable. Not relevant for setters. */
9890 : false, /* isAlwaysInSlot. Only relevant for getters. */
9891 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9892 : false, /* isTypedMethod. Only relevant for methods. */
9893 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9894 : };
9895 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9896 : static_assert(0 < 5, "There is no slot for us");
9897 : static const JSJitInfo onmouseleave_setterinfo = {
9898 : { (JSJitGetterOp)set_onmouseleave },
9899 : { prototypes::id::Window },
9900 : { PrototypeTraits<prototypes::id::Window>::Depth },
9901 : JSJitInfo::Setter,
9902 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9903 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
9904 : false, /* isInfallible. False in setters. */
9905 : false, /* isMovable. Not relevant for setters. */
9906 : false, /* isEliminatable. Not relevant for setters. */
9907 : false, /* isAlwaysInSlot. Only relevant for getters. */
9908 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9909 : false, /* isTypedMethod. Only relevant for methods. */
9910 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9911 : };
9912 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9913 : static_assert(0 < 5, "There is no slot for us");
9914 :
9915 : static bool
9916 0 : get_onmousemove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9917 : {
9918 0 : RefPtr<EventHandlerNonNull> result(self->GetOnmousemove());
9919 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9920 0 : if (result) {
9921 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9922 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9923 0 : return false;
9924 : }
9925 0 : return true;
9926 : } else {
9927 0 : args.rval().setNull();
9928 0 : return true;
9929 : }
9930 : }
9931 :
9932 : static bool
9933 0 : set_onmousemove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
9934 : {
9935 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
9936 0 : if (args[0].isObject()) {
9937 : { // scope for tempRoot
9938 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
9939 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
9940 : }
9941 : } else {
9942 0 : arg0 = nullptr;
9943 : }
9944 0 : self->SetOnmousemove(Constify(arg0));
9945 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9946 :
9947 0 : return true;
9948 : }
9949 :
9950 : static const JSJitInfo onmousemove_getterinfo = {
9951 : { (JSJitGetterOp)get_onmousemove },
9952 : { prototypes::id::Window },
9953 : { PrototypeTraits<prototypes::id::Window>::Depth },
9954 : JSJitInfo::Getter,
9955 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9956 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
9957 : false, /* isInfallible. False in setters. */
9958 : false, /* isMovable. Not relevant for setters. */
9959 : false, /* isEliminatable. Not relevant for setters. */
9960 : false, /* isAlwaysInSlot. Only relevant for getters. */
9961 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9962 : false, /* isTypedMethod. Only relevant for methods. */
9963 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9964 : };
9965 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9966 : static_assert(0 < 5, "There is no slot for us");
9967 : static const JSJitInfo onmousemove_setterinfo = {
9968 : { (JSJitGetterOp)set_onmousemove },
9969 : { prototypes::id::Window },
9970 : { PrototypeTraits<prototypes::id::Window>::Depth },
9971 : JSJitInfo::Setter,
9972 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
9973 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
9974 : false, /* isInfallible. False in setters. */
9975 : false, /* isMovable. Not relevant for setters. */
9976 : false, /* isEliminatable. Not relevant for setters. */
9977 : false, /* isAlwaysInSlot. Only relevant for getters. */
9978 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
9979 : false, /* isTypedMethod. Only relevant for methods. */
9980 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
9981 : };
9982 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
9983 : static_assert(0 < 5, "There is no slot for us");
9984 :
9985 : static bool
9986 0 : get_onmouseout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
9987 : {
9988 0 : RefPtr<EventHandlerNonNull> result(self->GetOnmouseout());
9989 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
9990 0 : if (result) {
9991 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
9992 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
9993 0 : return false;
9994 : }
9995 0 : return true;
9996 : } else {
9997 0 : args.rval().setNull();
9998 0 : return true;
9999 : }
10000 : }
10001 :
10002 : static bool
10003 0 : set_onmouseout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10004 : {
10005 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10006 0 : if (args[0].isObject()) {
10007 : { // scope for tempRoot
10008 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10009 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10010 : }
10011 : } else {
10012 0 : arg0 = nullptr;
10013 : }
10014 0 : self->SetOnmouseout(Constify(arg0));
10015 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10016 :
10017 0 : return true;
10018 : }
10019 :
10020 : static const JSJitInfo onmouseout_getterinfo = {
10021 : { (JSJitGetterOp)get_onmouseout },
10022 : { prototypes::id::Window },
10023 : { PrototypeTraits<prototypes::id::Window>::Depth },
10024 : JSJitInfo::Getter,
10025 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10026 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
10027 : false, /* isInfallible. False in setters. */
10028 : false, /* isMovable. Not relevant for setters. */
10029 : false, /* isEliminatable. Not relevant for setters. */
10030 : false, /* isAlwaysInSlot. Only relevant for getters. */
10031 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10032 : false, /* isTypedMethod. Only relevant for methods. */
10033 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10034 : };
10035 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10036 : static_assert(0 < 5, "There is no slot for us");
10037 : static const JSJitInfo onmouseout_setterinfo = {
10038 : { (JSJitGetterOp)set_onmouseout },
10039 : { prototypes::id::Window },
10040 : { PrototypeTraits<prototypes::id::Window>::Depth },
10041 : JSJitInfo::Setter,
10042 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10043 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
10044 : false, /* isInfallible. False in setters. */
10045 : false, /* isMovable. Not relevant for setters. */
10046 : false, /* isEliminatable. Not relevant for setters. */
10047 : false, /* isAlwaysInSlot. Only relevant for getters. */
10048 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10049 : false, /* isTypedMethod. Only relevant for methods. */
10050 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10051 : };
10052 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10053 : static_assert(0 < 5, "There is no slot for us");
10054 :
10055 : static bool
10056 0 : get_onmouseover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
10057 : {
10058 0 : RefPtr<EventHandlerNonNull> result(self->GetOnmouseover());
10059 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10060 0 : if (result) {
10061 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
10062 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10063 0 : return false;
10064 : }
10065 0 : return true;
10066 : } else {
10067 0 : args.rval().setNull();
10068 0 : return true;
10069 : }
10070 : }
10071 :
10072 : static bool
10073 0 : set_onmouseover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10074 : {
10075 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10076 0 : if (args[0].isObject()) {
10077 : { // scope for tempRoot
10078 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10079 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10080 : }
10081 : } else {
10082 0 : arg0 = nullptr;
10083 : }
10084 0 : self->SetOnmouseover(Constify(arg0));
10085 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10086 :
10087 0 : return true;
10088 : }
10089 :
10090 : static const JSJitInfo onmouseover_getterinfo = {
10091 : { (JSJitGetterOp)get_onmouseover },
10092 : { prototypes::id::Window },
10093 : { PrototypeTraits<prototypes::id::Window>::Depth },
10094 : JSJitInfo::Getter,
10095 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10096 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
10097 : false, /* isInfallible. False in setters. */
10098 : false, /* isMovable. Not relevant for setters. */
10099 : false, /* isEliminatable. Not relevant for setters. */
10100 : false, /* isAlwaysInSlot. Only relevant for getters. */
10101 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10102 : false, /* isTypedMethod. Only relevant for methods. */
10103 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10104 : };
10105 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10106 : static_assert(0 < 5, "There is no slot for us");
10107 : static const JSJitInfo onmouseover_setterinfo = {
10108 : { (JSJitGetterOp)set_onmouseover },
10109 : { prototypes::id::Window },
10110 : { PrototypeTraits<prototypes::id::Window>::Depth },
10111 : JSJitInfo::Setter,
10112 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10113 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
10114 : false, /* isInfallible. False in setters. */
10115 : false, /* isMovable. Not relevant for setters. */
10116 : false, /* isEliminatable. Not relevant for setters. */
10117 : false, /* isAlwaysInSlot. Only relevant for getters. */
10118 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10119 : false, /* isTypedMethod. Only relevant for methods. */
10120 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10121 : };
10122 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10123 : static_assert(0 < 5, "There is no slot for us");
10124 :
10125 : static bool
10126 0 : get_onmouseup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
10127 : {
10128 0 : RefPtr<EventHandlerNonNull> result(self->GetOnmouseup());
10129 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10130 0 : if (result) {
10131 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
10132 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10133 0 : return false;
10134 : }
10135 0 : return true;
10136 : } else {
10137 0 : args.rval().setNull();
10138 0 : return true;
10139 : }
10140 : }
10141 :
10142 : static bool
10143 0 : set_onmouseup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10144 : {
10145 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10146 0 : if (args[0].isObject()) {
10147 : { // scope for tempRoot
10148 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10149 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10150 : }
10151 : } else {
10152 0 : arg0 = nullptr;
10153 : }
10154 0 : self->SetOnmouseup(Constify(arg0));
10155 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10156 :
10157 0 : return true;
10158 : }
10159 :
10160 : static const JSJitInfo onmouseup_getterinfo = {
10161 : { (JSJitGetterOp)get_onmouseup },
10162 : { prototypes::id::Window },
10163 : { PrototypeTraits<prototypes::id::Window>::Depth },
10164 : JSJitInfo::Getter,
10165 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10166 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
10167 : false, /* isInfallible. False in setters. */
10168 : false, /* isMovable. Not relevant for setters. */
10169 : false, /* isEliminatable. Not relevant for setters. */
10170 : false, /* isAlwaysInSlot. Only relevant for getters. */
10171 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10172 : false, /* isTypedMethod. Only relevant for methods. */
10173 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10174 : };
10175 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10176 : static_assert(0 < 5, "There is no slot for us");
10177 : static const JSJitInfo onmouseup_setterinfo = {
10178 : { (JSJitGetterOp)set_onmouseup },
10179 : { prototypes::id::Window },
10180 : { PrototypeTraits<prototypes::id::Window>::Depth },
10181 : JSJitInfo::Setter,
10182 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10183 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
10184 : false, /* isInfallible. False in setters. */
10185 : false, /* isMovable. Not relevant for setters. */
10186 : false, /* isEliminatable. Not relevant for setters. */
10187 : false, /* isAlwaysInSlot. Only relevant for getters. */
10188 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10189 : false, /* isTypedMethod. Only relevant for methods. */
10190 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10191 : };
10192 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10193 : static_assert(0 < 5, "There is no slot for us");
10194 :
10195 : static bool
10196 0 : get_onwheel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
10197 : {
10198 0 : RefPtr<EventHandlerNonNull> result(self->GetOnwheel());
10199 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10200 0 : if (result) {
10201 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
10202 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10203 0 : return false;
10204 : }
10205 0 : return true;
10206 : } else {
10207 0 : args.rval().setNull();
10208 0 : return true;
10209 : }
10210 : }
10211 :
10212 : static bool
10213 0 : set_onwheel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10214 : {
10215 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10216 0 : if (args[0].isObject()) {
10217 : { // scope for tempRoot
10218 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10219 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10220 : }
10221 : } else {
10222 0 : arg0 = nullptr;
10223 : }
10224 0 : self->SetOnwheel(Constify(arg0));
10225 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10226 :
10227 0 : return true;
10228 : }
10229 :
10230 : static const JSJitInfo onwheel_getterinfo = {
10231 : { (JSJitGetterOp)get_onwheel },
10232 : { prototypes::id::Window },
10233 : { PrototypeTraits<prototypes::id::Window>::Depth },
10234 : JSJitInfo::Getter,
10235 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10236 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
10237 : false, /* isInfallible. False in setters. */
10238 : false, /* isMovable. Not relevant for setters. */
10239 : false, /* isEliminatable. Not relevant for setters. */
10240 : false, /* isAlwaysInSlot. Only relevant for getters. */
10241 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10242 : false, /* isTypedMethod. Only relevant for methods. */
10243 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10244 : };
10245 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10246 : static_assert(0 < 5, "There is no slot for us");
10247 : static const JSJitInfo onwheel_setterinfo = {
10248 : { (JSJitGetterOp)set_onwheel },
10249 : { prototypes::id::Window },
10250 : { PrototypeTraits<prototypes::id::Window>::Depth },
10251 : JSJitInfo::Setter,
10252 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10253 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
10254 : false, /* isInfallible. False in setters. */
10255 : false, /* isMovable. Not relevant for setters. */
10256 : false, /* isEliminatable. Not relevant for setters. */
10257 : false, /* isAlwaysInSlot. Only relevant for getters. */
10258 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10259 : false, /* isTypedMethod. Only relevant for methods. */
10260 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10261 : };
10262 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10263 : static_assert(0 < 5, "There is no slot for us");
10264 :
10265 : static bool
10266 0 : get_onpause(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
10267 : {
10268 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpause());
10269 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10270 0 : if (result) {
10271 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
10272 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10273 0 : return false;
10274 : }
10275 0 : return true;
10276 : } else {
10277 0 : args.rval().setNull();
10278 0 : return true;
10279 : }
10280 : }
10281 :
10282 : static bool
10283 0 : set_onpause(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10284 : {
10285 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10286 0 : if (args[0].isObject()) {
10287 : { // scope for tempRoot
10288 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10289 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10290 : }
10291 : } else {
10292 0 : arg0 = nullptr;
10293 : }
10294 0 : self->SetOnpause(Constify(arg0));
10295 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10296 :
10297 0 : return true;
10298 : }
10299 :
10300 : static const JSJitInfo onpause_getterinfo = {
10301 : { (JSJitGetterOp)get_onpause },
10302 : { prototypes::id::Window },
10303 : { PrototypeTraits<prototypes::id::Window>::Depth },
10304 : JSJitInfo::Getter,
10305 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10306 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
10307 : false, /* isInfallible. False in setters. */
10308 : false, /* isMovable. Not relevant for setters. */
10309 : false, /* isEliminatable. Not relevant for setters. */
10310 : false, /* isAlwaysInSlot. Only relevant for getters. */
10311 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10312 : false, /* isTypedMethod. Only relevant for methods. */
10313 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10314 : };
10315 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10316 : static_assert(0 < 5, "There is no slot for us");
10317 : static const JSJitInfo onpause_setterinfo = {
10318 : { (JSJitGetterOp)set_onpause },
10319 : { prototypes::id::Window },
10320 : { PrototypeTraits<prototypes::id::Window>::Depth },
10321 : JSJitInfo::Setter,
10322 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10323 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
10324 : false, /* isInfallible. False in setters. */
10325 : false, /* isMovable. Not relevant for setters. */
10326 : false, /* isEliminatable. Not relevant for setters. */
10327 : false, /* isAlwaysInSlot. Only relevant for getters. */
10328 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10329 : false, /* isTypedMethod. Only relevant for methods. */
10330 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10331 : };
10332 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10333 : static_assert(0 < 5, "There is no slot for us");
10334 :
10335 : static bool
10336 0 : get_onplay(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
10337 : {
10338 0 : RefPtr<EventHandlerNonNull> result(self->GetOnplay());
10339 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10340 0 : if (result) {
10341 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
10342 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10343 0 : return false;
10344 : }
10345 0 : return true;
10346 : } else {
10347 0 : args.rval().setNull();
10348 0 : return true;
10349 : }
10350 : }
10351 :
10352 : static bool
10353 0 : set_onplay(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10354 : {
10355 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10356 0 : if (args[0].isObject()) {
10357 : { // scope for tempRoot
10358 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10359 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10360 : }
10361 : } else {
10362 0 : arg0 = nullptr;
10363 : }
10364 0 : self->SetOnplay(Constify(arg0));
10365 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10366 :
10367 0 : return true;
10368 : }
10369 :
10370 : static const JSJitInfo onplay_getterinfo = {
10371 : { (JSJitGetterOp)get_onplay },
10372 : { prototypes::id::Window },
10373 : { PrototypeTraits<prototypes::id::Window>::Depth },
10374 : JSJitInfo::Getter,
10375 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10376 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
10377 : false, /* isInfallible. False in setters. */
10378 : false, /* isMovable. Not relevant for setters. */
10379 : false, /* isEliminatable. Not relevant for setters. */
10380 : false, /* isAlwaysInSlot. Only relevant for getters. */
10381 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10382 : false, /* isTypedMethod. Only relevant for methods. */
10383 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10384 : };
10385 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10386 : static_assert(0 < 5, "There is no slot for us");
10387 : static const JSJitInfo onplay_setterinfo = {
10388 : { (JSJitGetterOp)set_onplay },
10389 : { prototypes::id::Window },
10390 : { PrototypeTraits<prototypes::id::Window>::Depth },
10391 : JSJitInfo::Setter,
10392 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10393 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
10394 : false, /* isInfallible. False in setters. */
10395 : false, /* isMovable. Not relevant for setters. */
10396 : false, /* isEliminatable. Not relevant for setters. */
10397 : false, /* isAlwaysInSlot. Only relevant for getters. */
10398 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10399 : false, /* isTypedMethod. Only relevant for methods. */
10400 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10401 : };
10402 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10403 : static_assert(0 < 5, "There is no slot for us");
10404 :
10405 : static bool
10406 0 : get_onplaying(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
10407 : {
10408 0 : RefPtr<EventHandlerNonNull> result(self->GetOnplaying());
10409 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10410 0 : if (result) {
10411 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
10412 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10413 0 : return false;
10414 : }
10415 0 : return true;
10416 : } else {
10417 0 : args.rval().setNull();
10418 0 : return true;
10419 : }
10420 : }
10421 :
10422 : static bool
10423 0 : set_onplaying(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10424 : {
10425 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10426 0 : if (args[0].isObject()) {
10427 : { // scope for tempRoot
10428 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10429 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10430 : }
10431 : } else {
10432 0 : arg0 = nullptr;
10433 : }
10434 0 : self->SetOnplaying(Constify(arg0));
10435 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10436 :
10437 0 : return true;
10438 : }
10439 :
10440 : static const JSJitInfo onplaying_getterinfo = {
10441 : { (JSJitGetterOp)get_onplaying },
10442 : { prototypes::id::Window },
10443 : { PrototypeTraits<prototypes::id::Window>::Depth },
10444 : JSJitInfo::Getter,
10445 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10446 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
10447 : false, /* isInfallible. False in setters. */
10448 : false, /* isMovable. Not relevant for setters. */
10449 : false, /* isEliminatable. Not relevant for setters. */
10450 : false, /* isAlwaysInSlot. Only relevant for getters. */
10451 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10452 : false, /* isTypedMethod. Only relevant for methods. */
10453 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10454 : };
10455 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10456 : static_assert(0 < 5, "There is no slot for us");
10457 : static const JSJitInfo onplaying_setterinfo = {
10458 : { (JSJitGetterOp)set_onplaying },
10459 : { prototypes::id::Window },
10460 : { PrototypeTraits<prototypes::id::Window>::Depth },
10461 : JSJitInfo::Setter,
10462 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10463 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
10464 : false, /* isInfallible. False in setters. */
10465 : false, /* isMovable. Not relevant for setters. */
10466 : false, /* isEliminatable. Not relevant for setters. */
10467 : false, /* isAlwaysInSlot. Only relevant for getters. */
10468 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10469 : false, /* isTypedMethod. Only relevant for methods. */
10470 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10471 : };
10472 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10473 : static_assert(0 < 5, "There is no slot for us");
10474 :
10475 : static bool
10476 0 : get_onprogress(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
10477 : {
10478 0 : RefPtr<EventHandlerNonNull> result(self->GetOnprogress());
10479 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10480 0 : if (result) {
10481 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
10482 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10483 0 : return false;
10484 : }
10485 0 : return true;
10486 : } else {
10487 0 : args.rval().setNull();
10488 0 : return true;
10489 : }
10490 : }
10491 :
10492 : static bool
10493 0 : set_onprogress(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10494 : {
10495 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10496 0 : if (args[0].isObject()) {
10497 : { // scope for tempRoot
10498 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10499 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10500 : }
10501 : } else {
10502 0 : arg0 = nullptr;
10503 : }
10504 0 : self->SetOnprogress(Constify(arg0));
10505 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10506 :
10507 0 : return true;
10508 : }
10509 :
10510 : static const JSJitInfo onprogress_getterinfo = {
10511 : { (JSJitGetterOp)get_onprogress },
10512 : { prototypes::id::Window },
10513 : { PrototypeTraits<prototypes::id::Window>::Depth },
10514 : JSJitInfo::Getter,
10515 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10516 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
10517 : false, /* isInfallible. False in setters. */
10518 : false, /* isMovable. Not relevant for setters. */
10519 : false, /* isEliminatable. Not relevant for setters. */
10520 : false, /* isAlwaysInSlot. Only relevant for getters. */
10521 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10522 : false, /* isTypedMethod. Only relevant for methods. */
10523 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10524 : };
10525 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10526 : static_assert(0 < 5, "There is no slot for us");
10527 : static const JSJitInfo onprogress_setterinfo = {
10528 : { (JSJitGetterOp)set_onprogress },
10529 : { prototypes::id::Window },
10530 : { PrototypeTraits<prototypes::id::Window>::Depth },
10531 : JSJitInfo::Setter,
10532 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10533 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
10534 : false, /* isInfallible. False in setters. */
10535 : false, /* isMovable. Not relevant for setters. */
10536 : false, /* isEliminatable. Not relevant for setters. */
10537 : false, /* isAlwaysInSlot. Only relevant for getters. */
10538 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10539 : false, /* isTypedMethod. Only relevant for methods. */
10540 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10541 : };
10542 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10543 : static_assert(0 < 5, "There is no slot for us");
10544 :
10545 : static bool
10546 0 : get_onratechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
10547 : {
10548 0 : RefPtr<EventHandlerNonNull> result(self->GetOnratechange());
10549 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10550 0 : if (result) {
10551 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
10552 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10553 0 : return false;
10554 : }
10555 0 : return true;
10556 : } else {
10557 0 : args.rval().setNull();
10558 0 : return true;
10559 : }
10560 : }
10561 :
10562 : static bool
10563 0 : set_onratechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10564 : {
10565 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10566 0 : if (args[0].isObject()) {
10567 : { // scope for tempRoot
10568 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10569 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10570 : }
10571 : } else {
10572 0 : arg0 = nullptr;
10573 : }
10574 0 : self->SetOnratechange(Constify(arg0));
10575 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10576 :
10577 0 : return true;
10578 : }
10579 :
10580 : static const JSJitInfo onratechange_getterinfo = {
10581 : { (JSJitGetterOp)get_onratechange },
10582 : { prototypes::id::Window },
10583 : { PrototypeTraits<prototypes::id::Window>::Depth },
10584 : JSJitInfo::Getter,
10585 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10586 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
10587 : false, /* isInfallible. False in setters. */
10588 : false, /* isMovable. Not relevant for setters. */
10589 : false, /* isEliminatable. Not relevant for setters. */
10590 : false, /* isAlwaysInSlot. Only relevant for getters. */
10591 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10592 : false, /* isTypedMethod. Only relevant for methods. */
10593 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10594 : };
10595 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10596 : static_assert(0 < 5, "There is no slot for us");
10597 : static const JSJitInfo onratechange_setterinfo = {
10598 : { (JSJitGetterOp)set_onratechange },
10599 : { prototypes::id::Window },
10600 : { PrototypeTraits<prototypes::id::Window>::Depth },
10601 : JSJitInfo::Setter,
10602 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10603 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
10604 : false, /* isInfallible. False in setters. */
10605 : false, /* isMovable. Not relevant for setters. */
10606 : false, /* isEliminatable. Not relevant for setters. */
10607 : false, /* isAlwaysInSlot. Only relevant for getters. */
10608 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10609 : false, /* isTypedMethod. Only relevant for methods. */
10610 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10611 : };
10612 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10613 : static_assert(0 < 5, "There is no slot for us");
10614 :
10615 : static bool
10616 0 : get_onreset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
10617 : {
10618 0 : RefPtr<EventHandlerNonNull> result(self->GetOnreset());
10619 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10620 0 : if (result) {
10621 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
10622 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10623 0 : return false;
10624 : }
10625 0 : return true;
10626 : } else {
10627 0 : args.rval().setNull();
10628 0 : return true;
10629 : }
10630 : }
10631 :
10632 : static bool
10633 0 : set_onreset(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10634 : {
10635 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10636 0 : if (args[0].isObject()) {
10637 : { // scope for tempRoot
10638 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10639 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10640 : }
10641 : } else {
10642 0 : arg0 = nullptr;
10643 : }
10644 0 : self->SetOnreset(Constify(arg0));
10645 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10646 :
10647 0 : return true;
10648 : }
10649 :
10650 : static const JSJitInfo onreset_getterinfo = {
10651 : { (JSJitGetterOp)get_onreset },
10652 : { prototypes::id::Window },
10653 : { PrototypeTraits<prototypes::id::Window>::Depth },
10654 : JSJitInfo::Getter,
10655 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10656 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
10657 : false, /* isInfallible. False in setters. */
10658 : false, /* isMovable. Not relevant for setters. */
10659 : false, /* isEliminatable. Not relevant for setters. */
10660 : false, /* isAlwaysInSlot. Only relevant for getters. */
10661 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10662 : false, /* isTypedMethod. Only relevant for methods. */
10663 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10664 : };
10665 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10666 : static_assert(0 < 5, "There is no slot for us");
10667 : static const JSJitInfo onreset_setterinfo = {
10668 : { (JSJitGetterOp)set_onreset },
10669 : { prototypes::id::Window },
10670 : { PrototypeTraits<prototypes::id::Window>::Depth },
10671 : JSJitInfo::Setter,
10672 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10673 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
10674 : false, /* isInfallible. False in setters. */
10675 : false, /* isMovable. Not relevant for setters. */
10676 : false, /* isEliminatable. Not relevant for setters. */
10677 : false, /* isAlwaysInSlot. Only relevant for getters. */
10678 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10679 : false, /* isTypedMethod. Only relevant for methods. */
10680 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10681 : };
10682 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10683 : static_assert(0 < 5, "There is no slot for us");
10684 :
10685 : static bool
10686 0 : get_onresize(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
10687 : {
10688 0 : RefPtr<EventHandlerNonNull> result(self->GetOnresize());
10689 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10690 0 : if (result) {
10691 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
10692 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10693 0 : return false;
10694 : }
10695 0 : return true;
10696 : } else {
10697 0 : args.rval().setNull();
10698 0 : return true;
10699 : }
10700 : }
10701 :
10702 : static bool
10703 0 : set_onresize(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10704 : {
10705 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10706 0 : if (args[0].isObject()) {
10707 : { // scope for tempRoot
10708 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10709 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10710 : }
10711 : } else {
10712 0 : arg0 = nullptr;
10713 : }
10714 0 : self->SetOnresize(Constify(arg0));
10715 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10716 :
10717 0 : return true;
10718 : }
10719 :
10720 : static const JSJitInfo onresize_getterinfo = {
10721 : { (JSJitGetterOp)get_onresize },
10722 : { prototypes::id::Window },
10723 : { PrototypeTraits<prototypes::id::Window>::Depth },
10724 : JSJitInfo::Getter,
10725 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10726 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
10727 : false, /* isInfallible. False in setters. */
10728 : false, /* isMovable. Not relevant for setters. */
10729 : false, /* isEliminatable. Not relevant for setters. */
10730 : false, /* isAlwaysInSlot. Only relevant for getters. */
10731 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10732 : false, /* isTypedMethod. Only relevant for methods. */
10733 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10734 : };
10735 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10736 : static_assert(0 < 5, "There is no slot for us");
10737 : static const JSJitInfo onresize_setterinfo = {
10738 : { (JSJitGetterOp)set_onresize },
10739 : { prototypes::id::Window },
10740 : { PrototypeTraits<prototypes::id::Window>::Depth },
10741 : JSJitInfo::Setter,
10742 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10743 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
10744 : false, /* isInfallible. False in setters. */
10745 : false, /* isMovable. Not relevant for setters. */
10746 : false, /* isEliminatable. Not relevant for setters. */
10747 : false, /* isAlwaysInSlot. Only relevant for getters. */
10748 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10749 : false, /* isTypedMethod. Only relevant for methods. */
10750 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10751 : };
10752 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10753 : static_assert(0 < 5, "There is no slot for us");
10754 :
10755 : static bool
10756 0 : get_onscroll(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
10757 : {
10758 0 : RefPtr<EventHandlerNonNull> result(self->GetOnscroll());
10759 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10760 0 : if (result) {
10761 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
10762 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10763 0 : return false;
10764 : }
10765 0 : return true;
10766 : } else {
10767 0 : args.rval().setNull();
10768 0 : return true;
10769 : }
10770 : }
10771 :
10772 : static bool
10773 0 : set_onscroll(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10774 : {
10775 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10776 0 : if (args[0].isObject()) {
10777 : { // scope for tempRoot
10778 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10779 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10780 : }
10781 : } else {
10782 0 : arg0 = nullptr;
10783 : }
10784 0 : self->SetOnscroll(Constify(arg0));
10785 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10786 :
10787 0 : return true;
10788 : }
10789 :
10790 : static const JSJitInfo onscroll_getterinfo = {
10791 : { (JSJitGetterOp)get_onscroll },
10792 : { prototypes::id::Window },
10793 : { PrototypeTraits<prototypes::id::Window>::Depth },
10794 : JSJitInfo::Getter,
10795 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10796 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
10797 : false, /* isInfallible. False in setters. */
10798 : false, /* isMovable. Not relevant for setters. */
10799 : false, /* isEliminatable. Not relevant for setters. */
10800 : false, /* isAlwaysInSlot. Only relevant for getters. */
10801 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10802 : false, /* isTypedMethod. Only relevant for methods. */
10803 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10804 : };
10805 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10806 : static_assert(0 < 5, "There is no slot for us");
10807 : static const JSJitInfo onscroll_setterinfo = {
10808 : { (JSJitGetterOp)set_onscroll },
10809 : { prototypes::id::Window },
10810 : { PrototypeTraits<prototypes::id::Window>::Depth },
10811 : JSJitInfo::Setter,
10812 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10813 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
10814 : false, /* isInfallible. False in setters. */
10815 : false, /* isMovable. Not relevant for setters. */
10816 : false, /* isEliminatable. Not relevant for setters. */
10817 : false, /* isAlwaysInSlot. Only relevant for getters. */
10818 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10819 : false, /* isTypedMethod. Only relevant for methods. */
10820 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10821 : };
10822 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10823 : static_assert(0 < 5, "There is no slot for us");
10824 :
10825 : static bool
10826 0 : get_onseeked(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
10827 : {
10828 0 : RefPtr<EventHandlerNonNull> result(self->GetOnseeked());
10829 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10830 0 : if (result) {
10831 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
10832 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10833 0 : return false;
10834 : }
10835 0 : return true;
10836 : } else {
10837 0 : args.rval().setNull();
10838 0 : return true;
10839 : }
10840 : }
10841 :
10842 : static bool
10843 0 : set_onseeked(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10844 : {
10845 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10846 0 : if (args[0].isObject()) {
10847 : { // scope for tempRoot
10848 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10849 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10850 : }
10851 : } else {
10852 0 : arg0 = nullptr;
10853 : }
10854 0 : self->SetOnseeked(Constify(arg0));
10855 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10856 :
10857 0 : return true;
10858 : }
10859 :
10860 : static const JSJitInfo onseeked_getterinfo = {
10861 : { (JSJitGetterOp)get_onseeked },
10862 : { prototypes::id::Window },
10863 : { PrototypeTraits<prototypes::id::Window>::Depth },
10864 : JSJitInfo::Getter,
10865 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10866 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
10867 : false, /* isInfallible. False in setters. */
10868 : false, /* isMovable. Not relevant for setters. */
10869 : false, /* isEliminatable. Not relevant for setters. */
10870 : false, /* isAlwaysInSlot. Only relevant for getters. */
10871 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10872 : false, /* isTypedMethod. Only relevant for methods. */
10873 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10874 : };
10875 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10876 : static_assert(0 < 5, "There is no slot for us");
10877 : static const JSJitInfo onseeked_setterinfo = {
10878 : { (JSJitGetterOp)set_onseeked },
10879 : { prototypes::id::Window },
10880 : { PrototypeTraits<prototypes::id::Window>::Depth },
10881 : JSJitInfo::Setter,
10882 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10883 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
10884 : false, /* isInfallible. False in setters. */
10885 : false, /* isMovable. Not relevant for setters. */
10886 : false, /* isEliminatable. Not relevant for setters. */
10887 : false, /* isAlwaysInSlot. Only relevant for getters. */
10888 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10889 : false, /* isTypedMethod. Only relevant for methods. */
10890 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10891 : };
10892 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10893 : static_assert(0 < 5, "There is no slot for us");
10894 :
10895 : static bool
10896 0 : get_onseeking(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
10897 : {
10898 0 : RefPtr<EventHandlerNonNull> result(self->GetOnseeking());
10899 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10900 0 : if (result) {
10901 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
10902 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10903 0 : return false;
10904 : }
10905 0 : return true;
10906 : } else {
10907 0 : args.rval().setNull();
10908 0 : return true;
10909 : }
10910 : }
10911 :
10912 : static bool
10913 0 : set_onseeking(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10914 : {
10915 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10916 0 : if (args[0].isObject()) {
10917 : { // scope for tempRoot
10918 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10919 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10920 : }
10921 : } else {
10922 0 : arg0 = nullptr;
10923 : }
10924 0 : self->SetOnseeking(Constify(arg0));
10925 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10926 :
10927 0 : return true;
10928 : }
10929 :
10930 : static const JSJitInfo onseeking_getterinfo = {
10931 : { (JSJitGetterOp)get_onseeking },
10932 : { prototypes::id::Window },
10933 : { PrototypeTraits<prototypes::id::Window>::Depth },
10934 : JSJitInfo::Getter,
10935 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10936 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
10937 : false, /* isInfallible. False in setters. */
10938 : false, /* isMovable. Not relevant for setters. */
10939 : false, /* isEliminatable. Not relevant for setters. */
10940 : false, /* isAlwaysInSlot. Only relevant for getters. */
10941 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10942 : false, /* isTypedMethod. Only relevant for methods. */
10943 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10944 : };
10945 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10946 : static_assert(0 < 5, "There is no slot for us");
10947 : static const JSJitInfo onseeking_setterinfo = {
10948 : { (JSJitGetterOp)set_onseeking },
10949 : { prototypes::id::Window },
10950 : { PrototypeTraits<prototypes::id::Window>::Depth },
10951 : JSJitInfo::Setter,
10952 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
10953 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
10954 : false, /* isInfallible. False in setters. */
10955 : false, /* isMovable. Not relevant for setters. */
10956 : false, /* isEliminatable. Not relevant for setters. */
10957 : false, /* isAlwaysInSlot. Only relevant for getters. */
10958 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
10959 : false, /* isTypedMethod. Only relevant for methods. */
10960 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
10961 : };
10962 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
10963 : static_assert(0 < 5, "There is no slot for us");
10964 :
10965 : static bool
10966 0 : get_onselect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
10967 : {
10968 0 : RefPtr<EventHandlerNonNull> result(self->GetOnselect());
10969 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10970 0 : if (result) {
10971 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
10972 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
10973 0 : return false;
10974 : }
10975 0 : return true;
10976 : } else {
10977 0 : args.rval().setNull();
10978 0 : return true;
10979 : }
10980 : }
10981 :
10982 : static bool
10983 0 : set_onselect(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
10984 : {
10985 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
10986 0 : if (args[0].isObject()) {
10987 : { // scope for tempRoot
10988 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
10989 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
10990 : }
10991 : } else {
10992 0 : arg0 = nullptr;
10993 : }
10994 0 : self->SetOnselect(Constify(arg0));
10995 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
10996 :
10997 0 : return true;
10998 : }
10999 :
11000 : static const JSJitInfo onselect_getterinfo = {
11001 : { (JSJitGetterOp)get_onselect },
11002 : { prototypes::id::Window },
11003 : { PrototypeTraits<prototypes::id::Window>::Depth },
11004 : JSJitInfo::Getter,
11005 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11006 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11007 : false, /* isInfallible. False in setters. */
11008 : false, /* isMovable. Not relevant for setters. */
11009 : false, /* isEliminatable. Not relevant for setters. */
11010 : false, /* isAlwaysInSlot. Only relevant for getters. */
11011 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11012 : false, /* isTypedMethod. Only relevant for methods. */
11013 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11014 : };
11015 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11016 : static_assert(0 < 5, "There is no slot for us");
11017 : static const JSJitInfo onselect_setterinfo = {
11018 : { (JSJitGetterOp)set_onselect },
11019 : { prototypes::id::Window },
11020 : { PrototypeTraits<prototypes::id::Window>::Depth },
11021 : JSJitInfo::Setter,
11022 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11023 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
11024 : false, /* isInfallible. False in setters. */
11025 : false, /* isMovable. Not relevant for setters. */
11026 : false, /* isEliminatable. Not relevant for setters. */
11027 : false, /* isAlwaysInSlot. Only relevant for getters. */
11028 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11029 : false, /* isTypedMethod. Only relevant for methods. */
11030 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11031 : };
11032 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11033 : static_assert(0 < 5, "There is no slot for us");
11034 :
11035 : static bool
11036 0 : get_onshow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
11037 : {
11038 0 : RefPtr<EventHandlerNonNull> result(self->GetOnshow());
11039 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11040 0 : if (result) {
11041 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
11042 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11043 0 : return false;
11044 : }
11045 0 : return true;
11046 : } else {
11047 0 : args.rval().setNull();
11048 0 : return true;
11049 : }
11050 : }
11051 :
11052 : static bool
11053 0 : set_onshow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
11054 : {
11055 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11056 0 : if (args[0].isObject()) {
11057 : { // scope for tempRoot
11058 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
11059 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
11060 : }
11061 : } else {
11062 0 : arg0 = nullptr;
11063 : }
11064 0 : self->SetOnshow(Constify(arg0));
11065 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11066 :
11067 0 : return true;
11068 : }
11069 :
11070 : static const JSJitInfo onshow_getterinfo = {
11071 : { (JSJitGetterOp)get_onshow },
11072 : { prototypes::id::Window },
11073 : { PrototypeTraits<prototypes::id::Window>::Depth },
11074 : JSJitInfo::Getter,
11075 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11076 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11077 : false, /* isInfallible. False in setters. */
11078 : false, /* isMovable. Not relevant for setters. */
11079 : false, /* isEliminatable. Not relevant for setters. */
11080 : false, /* isAlwaysInSlot. Only relevant for getters. */
11081 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11082 : false, /* isTypedMethod. Only relevant for methods. */
11083 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11084 : };
11085 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11086 : static_assert(0 < 5, "There is no slot for us");
11087 : static const JSJitInfo onshow_setterinfo = {
11088 : { (JSJitGetterOp)set_onshow },
11089 : { prototypes::id::Window },
11090 : { PrototypeTraits<prototypes::id::Window>::Depth },
11091 : JSJitInfo::Setter,
11092 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11093 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
11094 : false, /* isInfallible. False in setters. */
11095 : false, /* isMovable. Not relevant for setters. */
11096 : false, /* isEliminatable. Not relevant for setters. */
11097 : false, /* isAlwaysInSlot. Only relevant for getters. */
11098 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11099 : false, /* isTypedMethod. Only relevant for methods. */
11100 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11101 : };
11102 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11103 : static_assert(0 < 5, "There is no slot for us");
11104 :
11105 : static bool
11106 0 : get_onstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
11107 : {
11108 0 : RefPtr<EventHandlerNonNull> result(self->GetOnstalled());
11109 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11110 0 : if (result) {
11111 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
11112 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11113 0 : return false;
11114 : }
11115 0 : return true;
11116 : } else {
11117 0 : args.rval().setNull();
11118 0 : return true;
11119 : }
11120 : }
11121 :
11122 : static bool
11123 0 : set_onstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
11124 : {
11125 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11126 0 : if (args[0].isObject()) {
11127 : { // scope for tempRoot
11128 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
11129 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
11130 : }
11131 : } else {
11132 0 : arg0 = nullptr;
11133 : }
11134 0 : self->SetOnstalled(Constify(arg0));
11135 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11136 :
11137 0 : return true;
11138 : }
11139 :
11140 : static const JSJitInfo onstalled_getterinfo = {
11141 : { (JSJitGetterOp)get_onstalled },
11142 : { prototypes::id::Window },
11143 : { PrototypeTraits<prototypes::id::Window>::Depth },
11144 : JSJitInfo::Getter,
11145 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11146 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11147 : false, /* isInfallible. False in setters. */
11148 : false, /* isMovable. Not relevant for setters. */
11149 : false, /* isEliminatable. Not relevant for setters. */
11150 : false, /* isAlwaysInSlot. Only relevant for getters. */
11151 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11152 : false, /* isTypedMethod. Only relevant for methods. */
11153 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11154 : };
11155 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11156 : static_assert(0 < 5, "There is no slot for us");
11157 : static const JSJitInfo onstalled_setterinfo = {
11158 : { (JSJitGetterOp)set_onstalled },
11159 : { prototypes::id::Window },
11160 : { PrototypeTraits<prototypes::id::Window>::Depth },
11161 : JSJitInfo::Setter,
11162 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11163 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
11164 : false, /* isInfallible. False in setters. */
11165 : false, /* isMovable. Not relevant for setters. */
11166 : false, /* isEliminatable. Not relevant for setters. */
11167 : false, /* isAlwaysInSlot. Only relevant for getters. */
11168 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11169 : false, /* isTypedMethod. Only relevant for methods. */
11170 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11171 : };
11172 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11173 : static_assert(0 < 5, "There is no slot for us");
11174 :
11175 : static bool
11176 0 : get_onsubmit(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
11177 : {
11178 0 : RefPtr<EventHandlerNonNull> result(self->GetOnsubmit());
11179 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11180 0 : if (result) {
11181 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
11182 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11183 0 : return false;
11184 : }
11185 0 : return true;
11186 : } else {
11187 0 : args.rval().setNull();
11188 0 : return true;
11189 : }
11190 : }
11191 :
11192 : static bool
11193 0 : set_onsubmit(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
11194 : {
11195 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11196 0 : if (args[0].isObject()) {
11197 : { // scope for tempRoot
11198 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
11199 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
11200 : }
11201 : } else {
11202 0 : arg0 = nullptr;
11203 : }
11204 0 : self->SetOnsubmit(Constify(arg0));
11205 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11206 :
11207 0 : return true;
11208 : }
11209 :
11210 : static const JSJitInfo onsubmit_getterinfo = {
11211 : { (JSJitGetterOp)get_onsubmit },
11212 : { prototypes::id::Window },
11213 : { PrototypeTraits<prototypes::id::Window>::Depth },
11214 : JSJitInfo::Getter,
11215 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11216 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11217 : false, /* isInfallible. False in setters. */
11218 : false, /* isMovable. Not relevant for setters. */
11219 : false, /* isEliminatable. Not relevant for setters. */
11220 : false, /* isAlwaysInSlot. Only relevant for getters. */
11221 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11222 : false, /* isTypedMethod. Only relevant for methods. */
11223 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11224 : };
11225 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11226 : static_assert(0 < 5, "There is no slot for us");
11227 : static const JSJitInfo onsubmit_setterinfo = {
11228 : { (JSJitGetterOp)set_onsubmit },
11229 : { prototypes::id::Window },
11230 : { PrototypeTraits<prototypes::id::Window>::Depth },
11231 : JSJitInfo::Setter,
11232 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11233 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
11234 : false, /* isInfallible. False in setters. */
11235 : false, /* isMovable. Not relevant for setters. */
11236 : false, /* isEliminatable. Not relevant for setters. */
11237 : false, /* isAlwaysInSlot. Only relevant for getters. */
11238 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11239 : false, /* isTypedMethod. Only relevant for methods. */
11240 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11241 : };
11242 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11243 : static_assert(0 < 5, "There is no slot for us");
11244 :
11245 : static bool
11246 0 : get_onsuspend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
11247 : {
11248 0 : RefPtr<EventHandlerNonNull> result(self->GetOnsuspend());
11249 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11250 0 : if (result) {
11251 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
11252 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11253 0 : return false;
11254 : }
11255 0 : return true;
11256 : } else {
11257 0 : args.rval().setNull();
11258 0 : return true;
11259 : }
11260 : }
11261 :
11262 : static bool
11263 0 : set_onsuspend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
11264 : {
11265 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11266 0 : if (args[0].isObject()) {
11267 : { // scope for tempRoot
11268 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
11269 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
11270 : }
11271 : } else {
11272 0 : arg0 = nullptr;
11273 : }
11274 0 : self->SetOnsuspend(Constify(arg0));
11275 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11276 :
11277 0 : return true;
11278 : }
11279 :
11280 : static const JSJitInfo onsuspend_getterinfo = {
11281 : { (JSJitGetterOp)get_onsuspend },
11282 : { prototypes::id::Window },
11283 : { PrototypeTraits<prototypes::id::Window>::Depth },
11284 : JSJitInfo::Getter,
11285 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11286 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11287 : false, /* isInfallible. False in setters. */
11288 : false, /* isMovable. Not relevant for setters. */
11289 : false, /* isEliminatable. Not relevant for setters. */
11290 : false, /* isAlwaysInSlot. Only relevant for getters. */
11291 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11292 : false, /* isTypedMethod. Only relevant for methods. */
11293 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11294 : };
11295 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11296 : static_assert(0 < 5, "There is no slot for us");
11297 : static const JSJitInfo onsuspend_setterinfo = {
11298 : { (JSJitGetterOp)set_onsuspend },
11299 : { prototypes::id::Window },
11300 : { PrototypeTraits<prototypes::id::Window>::Depth },
11301 : JSJitInfo::Setter,
11302 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11303 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
11304 : false, /* isInfallible. False in setters. */
11305 : false, /* isMovable. Not relevant for setters. */
11306 : false, /* isEliminatable. Not relevant for setters. */
11307 : false, /* isAlwaysInSlot. Only relevant for getters. */
11308 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11309 : false, /* isTypedMethod. Only relevant for methods. */
11310 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11311 : };
11312 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11313 : static_assert(0 < 5, "There is no slot for us");
11314 :
11315 : static bool
11316 0 : get_ontimeupdate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
11317 : {
11318 0 : RefPtr<EventHandlerNonNull> result(self->GetOntimeupdate());
11319 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11320 0 : if (result) {
11321 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
11322 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11323 0 : return false;
11324 : }
11325 0 : return true;
11326 : } else {
11327 0 : args.rval().setNull();
11328 0 : return true;
11329 : }
11330 : }
11331 :
11332 : static bool
11333 0 : set_ontimeupdate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
11334 : {
11335 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11336 0 : if (args[0].isObject()) {
11337 : { // scope for tempRoot
11338 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
11339 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
11340 : }
11341 : } else {
11342 0 : arg0 = nullptr;
11343 : }
11344 0 : self->SetOntimeupdate(Constify(arg0));
11345 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11346 :
11347 0 : return true;
11348 : }
11349 :
11350 : static const JSJitInfo ontimeupdate_getterinfo = {
11351 : { (JSJitGetterOp)get_ontimeupdate },
11352 : { prototypes::id::Window },
11353 : { PrototypeTraits<prototypes::id::Window>::Depth },
11354 : JSJitInfo::Getter,
11355 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11356 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11357 : false, /* isInfallible. False in setters. */
11358 : false, /* isMovable. Not relevant for setters. */
11359 : false, /* isEliminatable. Not relevant for setters. */
11360 : false, /* isAlwaysInSlot. Only relevant for getters. */
11361 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11362 : false, /* isTypedMethod. Only relevant for methods. */
11363 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11364 : };
11365 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11366 : static_assert(0 < 5, "There is no slot for us");
11367 : static const JSJitInfo ontimeupdate_setterinfo = {
11368 : { (JSJitGetterOp)set_ontimeupdate },
11369 : { prototypes::id::Window },
11370 : { PrototypeTraits<prototypes::id::Window>::Depth },
11371 : JSJitInfo::Setter,
11372 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11373 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
11374 : false, /* isInfallible. False in setters. */
11375 : false, /* isMovable. Not relevant for setters. */
11376 : false, /* isEliminatable. Not relevant for setters. */
11377 : false, /* isAlwaysInSlot. Only relevant for getters. */
11378 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11379 : false, /* isTypedMethod. Only relevant for methods. */
11380 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11381 : };
11382 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11383 : static_assert(0 < 5, "There is no slot for us");
11384 :
11385 : static bool
11386 0 : get_onvolumechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
11387 : {
11388 0 : RefPtr<EventHandlerNonNull> result(self->GetOnvolumechange());
11389 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11390 0 : if (result) {
11391 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
11392 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11393 0 : return false;
11394 : }
11395 0 : return true;
11396 : } else {
11397 0 : args.rval().setNull();
11398 0 : return true;
11399 : }
11400 : }
11401 :
11402 : static bool
11403 0 : set_onvolumechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
11404 : {
11405 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11406 0 : if (args[0].isObject()) {
11407 : { // scope for tempRoot
11408 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
11409 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
11410 : }
11411 : } else {
11412 0 : arg0 = nullptr;
11413 : }
11414 0 : self->SetOnvolumechange(Constify(arg0));
11415 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11416 :
11417 0 : return true;
11418 : }
11419 :
11420 : static const JSJitInfo onvolumechange_getterinfo = {
11421 : { (JSJitGetterOp)get_onvolumechange },
11422 : { prototypes::id::Window },
11423 : { PrototypeTraits<prototypes::id::Window>::Depth },
11424 : JSJitInfo::Getter,
11425 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11426 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11427 : false, /* isInfallible. False in setters. */
11428 : false, /* isMovable. Not relevant for setters. */
11429 : false, /* isEliminatable. Not relevant for setters. */
11430 : false, /* isAlwaysInSlot. Only relevant for getters. */
11431 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11432 : false, /* isTypedMethod. Only relevant for methods. */
11433 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11434 : };
11435 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11436 : static_assert(0 < 5, "There is no slot for us");
11437 : static const JSJitInfo onvolumechange_setterinfo = {
11438 : { (JSJitGetterOp)set_onvolumechange },
11439 : { prototypes::id::Window },
11440 : { PrototypeTraits<prototypes::id::Window>::Depth },
11441 : JSJitInfo::Setter,
11442 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11443 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
11444 : false, /* isInfallible. False in setters. */
11445 : false, /* isMovable. Not relevant for setters. */
11446 : false, /* isEliminatable. Not relevant for setters. */
11447 : false, /* isAlwaysInSlot. Only relevant for getters. */
11448 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11449 : false, /* isTypedMethod. Only relevant for methods. */
11450 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11451 : };
11452 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11453 : static_assert(0 < 5, "There is no slot for us");
11454 :
11455 : static bool
11456 0 : get_onwaiting(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
11457 : {
11458 0 : RefPtr<EventHandlerNonNull> result(self->GetOnwaiting());
11459 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11460 0 : if (result) {
11461 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
11462 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11463 0 : return false;
11464 : }
11465 0 : return true;
11466 : } else {
11467 0 : args.rval().setNull();
11468 0 : return true;
11469 : }
11470 : }
11471 :
11472 : static bool
11473 0 : set_onwaiting(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
11474 : {
11475 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11476 0 : if (args[0].isObject()) {
11477 : { // scope for tempRoot
11478 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
11479 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
11480 : }
11481 : } else {
11482 0 : arg0 = nullptr;
11483 : }
11484 0 : self->SetOnwaiting(Constify(arg0));
11485 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11486 :
11487 0 : return true;
11488 : }
11489 :
11490 : static const JSJitInfo onwaiting_getterinfo = {
11491 : { (JSJitGetterOp)get_onwaiting },
11492 : { prototypes::id::Window },
11493 : { PrototypeTraits<prototypes::id::Window>::Depth },
11494 : JSJitInfo::Getter,
11495 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11496 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11497 : false, /* isInfallible. False in setters. */
11498 : false, /* isMovable. Not relevant for setters. */
11499 : false, /* isEliminatable. Not relevant for setters. */
11500 : false, /* isAlwaysInSlot. Only relevant for getters. */
11501 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11502 : false, /* isTypedMethod. Only relevant for methods. */
11503 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11504 : };
11505 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11506 : static_assert(0 < 5, "There is no slot for us");
11507 : static const JSJitInfo onwaiting_setterinfo = {
11508 : { (JSJitGetterOp)set_onwaiting },
11509 : { prototypes::id::Window },
11510 : { PrototypeTraits<prototypes::id::Window>::Depth },
11511 : JSJitInfo::Setter,
11512 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11513 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
11514 : false, /* isInfallible. False in setters. */
11515 : false, /* isMovable. Not relevant for setters. */
11516 : false, /* isEliminatable. Not relevant for setters. */
11517 : false, /* isAlwaysInSlot. Only relevant for getters. */
11518 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11519 : false, /* isTypedMethod. Only relevant for methods. */
11520 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11521 : };
11522 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11523 : static_assert(0 < 5, "There is no slot for us");
11524 :
11525 : static bool
11526 0 : get_onselectstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
11527 : {
11528 0 : RefPtr<EventHandlerNonNull> result(self->GetOnselectstart());
11529 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11530 0 : if (result) {
11531 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
11532 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11533 0 : return false;
11534 : }
11535 0 : return true;
11536 : } else {
11537 0 : args.rval().setNull();
11538 0 : return true;
11539 : }
11540 : }
11541 :
11542 : static bool
11543 0 : set_onselectstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
11544 : {
11545 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11546 0 : if (args[0].isObject()) {
11547 : { // scope for tempRoot
11548 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
11549 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
11550 : }
11551 : } else {
11552 0 : arg0 = nullptr;
11553 : }
11554 0 : self->SetOnselectstart(Constify(arg0));
11555 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11556 :
11557 0 : return true;
11558 : }
11559 :
11560 : static const JSJitInfo onselectstart_getterinfo = {
11561 : { (JSJitGetterOp)get_onselectstart },
11562 : { prototypes::id::Window },
11563 : { PrototypeTraits<prototypes::id::Window>::Depth },
11564 : JSJitInfo::Getter,
11565 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11566 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11567 : false, /* isInfallible. False in setters. */
11568 : false, /* isMovable. Not relevant for setters. */
11569 : false, /* isEliminatable. Not relevant for setters. */
11570 : false, /* isAlwaysInSlot. Only relevant for getters. */
11571 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11572 : false, /* isTypedMethod. Only relevant for methods. */
11573 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11574 : };
11575 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11576 : static_assert(0 < 5, "There is no slot for us");
11577 : static const JSJitInfo onselectstart_setterinfo = {
11578 : { (JSJitGetterOp)set_onselectstart },
11579 : { prototypes::id::Window },
11580 : { PrototypeTraits<prototypes::id::Window>::Depth },
11581 : JSJitInfo::Setter,
11582 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11583 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
11584 : false, /* isInfallible. False in setters. */
11585 : false, /* isMovable. Not relevant for setters. */
11586 : false, /* isEliminatable. Not relevant for setters. */
11587 : false, /* isAlwaysInSlot. Only relevant for getters. */
11588 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11589 : false, /* isTypedMethod. Only relevant for methods. */
11590 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11591 : };
11592 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11593 : static_assert(0 < 5, "There is no slot for us");
11594 :
11595 : static bool
11596 0 : get_ontoggle(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
11597 : {
11598 0 : RefPtr<EventHandlerNonNull> result(self->GetOntoggle());
11599 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11600 0 : if (result) {
11601 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
11602 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11603 0 : return false;
11604 : }
11605 0 : return true;
11606 : } else {
11607 0 : args.rval().setNull();
11608 0 : return true;
11609 : }
11610 : }
11611 :
11612 : static bool
11613 0 : set_ontoggle(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
11614 : {
11615 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11616 0 : if (args[0].isObject()) {
11617 : { // scope for tempRoot
11618 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
11619 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
11620 : }
11621 : } else {
11622 0 : arg0 = nullptr;
11623 : }
11624 0 : self->SetOntoggle(Constify(arg0));
11625 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11626 :
11627 0 : return true;
11628 : }
11629 :
11630 : static const JSJitInfo ontoggle_getterinfo = {
11631 : { (JSJitGetterOp)get_ontoggle },
11632 : { prototypes::id::Window },
11633 : { PrototypeTraits<prototypes::id::Window>::Depth },
11634 : JSJitInfo::Getter,
11635 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11636 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11637 : false, /* isInfallible. False in setters. */
11638 : false, /* isMovable. Not relevant for setters. */
11639 : false, /* isEliminatable. Not relevant for setters. */
11640 : false, /* isAlwaysInSlot. Only relevant for getters. */
11641 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11642 : false, /* isTypedMethod. Only relevant for methods. */
11643 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11644 : };
11645 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11646 : static_assert(0 < 5, "There is no slot for us");
11647 : static const JSJitInfo ontoggle_setterinfo = {
11648 : { (JSJitGetterOp)set_ontoggle },
11649 : { prototypes::id::Window },
11650 : { PrototypeTraits<prototypes::id::Window>::Depth },
11651 : JSJitInfo::Setter,
11652 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11653 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
11654 : false, /* isInfallible. False in setters. */
11655 : false, /* isMovable. Not relevant for setters. */
11656 : false, /* isEliminatable. Not relevant for setters. */
11657 : false, /* isAlwaysInSlot. Only relevant for getters. */
11658 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11659 : false, /* isTypedMethod. Only relevant for methods. */
11660 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11661 : };
11662 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11663 : static_assert(0 < 5, "There is no slot for us");
11664 :
11665 : static bool
11666 0 : get_onpointercancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
11667 : {
11668 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpointercancel());
11669 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11670 0 : if (result) {
11671 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
11672 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11673 0 : return false;
11674 : }
11675 0 : return true;
11676 : } else {
11677 0 : args.rval().setNull();
11678 0 : return true;
11679 : }
11680 : }
11681 :
11682 : static bool
11683 0 : set_onpointercancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
11684 : {
11685 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11686 0 : if (args[0].isObject()) {
11687 : { // scope for tempRoot
11688 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
11689 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
11690 : }
11691 : } else {
11692 0 : arg0 = nullptr;
11693 : }
11694 0 : self->SetOnpointercancel(Constify(arg0));
11695 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11696 :
11697 0 : return true;
11698 : }
11699 :
11700 : static const JSJitInfo onpointercancel_getterinfo = {
11701 : { (JSJitGetterOp)get_onpointercancel },
11702 : { prototypes::id::Window },
11703 : { PrototypeTraits<prototypes::id::Window>::Depth },
11704 : JSJitInfo::Getter,
11705 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11706 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11707 : false, /* isInfallible. False in setters. */
11708 : false, /* isMovable. Not relevant for setters. */
11709 : false, /* isEliminatable. Not relevant for setters. */
11710 : false, /* isAlwaysInSlot. Only relevant for getters. */
11711 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11712 : false, /* isTypedMethod. Only relevant for methods. */
11713 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11714 : };
11715 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11716 : static_assert(0 < 5, "There is no slot for us");
11717 : static const JSJitInfo onpointercancel_setterinfo = {
11718 : { (JSJitGetterOp)set_onpointercancel },
11719 : { prototypes::id::Window },
11720 : { PrototypeTraits<prototypes::id::Window>::Depth },
11721 : JSJitInfo::Setter,
11722 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11723 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
11724 : false, /* isInfallible. False in setters. */
11725 : false, /* isMovable. Not relevant for setters. */
11726 : false, /* isEliminatable. Not relevant for setters. */
11727 : false, /* isAlwaysInSlot. Only relevant for getters. */
11728 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11729 : false, /* isTypedMethod. Only relevant for methods. */
11730 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11731 : };
11732 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11733 : static_assert(0 < 5, "There is no slot for us");
11734 :
11735 : static bool
11736 0 : get_onpointerdown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
11737 : {
11738 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpointerdown());
11739 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11740 0 : if (result) {
11741 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
11742 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11743 0 : return false;
11744 : }
11745 0 : return true;
11746 : } else {
11747 0 : args.rval().setNull();
11748 0 : return true;
11749 : }
11750 : }
11751 :
11752 : static bool
11753 0 : set_onpointerdown(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
11754 : {
11755 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11756 0 : if (args[0].isObject()) {
11757 : { // scope for tempRoot
11758 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
11759 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
11760 : }
11761 : } else {
11762 0 : arg0 = nullptr;
11763 : }
11764 0 : self->SetOnpointerdown(Constify(arg0));
11765 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11766 :
11767 0 : return true;
11768 : }
11769 :
11770 : static const JSJitInfo onpointerdown_getterinfo = {
11771 : { (JSJitGetterOp)get_onpointerdown },
11772 : { prototypes::id::Window },
11773 : { PrototypeTraits<prototypes::id::Window>::Depth },
11774 : JSJitInfo::Getter,
11775 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11776 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11777 : false, /* isInfallible. False in setters. */
11778 : false, /* isMovable. Not relevant for setters. */
11779 : false, /* isEliminatable. Not relevant for setters. */
11780 : false, /* isAlwaysInSlot. Only relevant for getters. */
11781 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11782 : false, /* isTypedMethod. Only relevant for methods. */
11783 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11784 : };
11785 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11786 : static_assert(0 < 5, "There is no slot for us");
11787 : static const JSJitInfo onpointerdown_setterinfo = {
11788 : { (JSJitGetterOp)set_onpointerdown },
11789 : { prototypes::id::Window },
11790 : { PrototypeTraits<prototypes::id::Window>::Depth },
11791 : JSJitInfo::Setter,
11792 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11793 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
11794 : false, /* isInfallible. False in setters. */
11795 : false, /* isMovable. Not relevant for setters. */
11796 : false, /* isEliminatable. Not relevant for setters. */
11797 : false, /* isAlwaysInSlot. Only relevant for getters. */
11798 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11799 : false, /* isTypedMethod. Only relevant for methods. */
11800 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11801 : };
11802 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11803 : static_assert(0 < 5, "There is no slot for us");
11804 :
11805 : static bool
11806 0 : get_onpointerup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
11807 : {
11808 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpointerup());
11809 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11810 0 : if (result) {
11811 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
11812 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11813 0 : return false;
11814 : }
11815 0 : return true;
11816 : } else {
11817 0 : args.rval().setNull();
11818 0 : return true;
11819 : }
11820 : }
11821 :
11822 : static bool
11823 0 : set_onpointerup(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
11824 : {
11825 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11826 0 : if (args[0].isObject()) {
11827 : { // scope for tempRoot
11828 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
11829 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
11830 : }
11831 : } else {
11832 0 : arg0 = nullptr;
11833 : }
11834 0 : self->SetOnpointerup(Constify(arg0));
11835 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11836 :
11837 0 : return true;
11838 : }
11839 :
11840 : static const JSJitInfo onpointerup_getterinfo = {
11841 : { (JSJitGetterOp)get_onpointerup },
11842 : { prototypes::id::Window },
11843 : { PrototypeTraits<prototypes::id::Window>::Depth },
11844 : JSJitInfo::Getter,
11845 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11846 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11847 : false, /* isInfallible. False in setters. */
11848 : false, /* isMovable. Not relevant for setters. */
11849 : false, /* isEliminatable. Not relevant for setters. */
11850 : false, /* isAlwaysInSlot. Only relevant for getters. */
11851 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11852 : false, /* isTypedMethod. Only relevant for methods. */
11853 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11854 : };
11855 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11856 : static_assert(0 < 5, "There is no slot for us");
11857 : static const JSJitInfo onpointerup_setterinfo = {
11858 : { (JSJitGetterOp)set_onpointerup },
11859 : { prototypes::id::Window },
11860 : { PrototypeTraits<prototypes::id::Window>::Depth },
11861 : JSJitInfo::Setter,
11862 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11863 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
11864 : false, /* isInfallible. False in setters. */
11865 : false, /* isMovable. Not relevant for setters. */
11866 : false, /* isEliminatable. Not relevant for setters. */
11867 : false, /* isAlwaysInSlot. Only relevant for getters. */
11868 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11869 : false, /* isTypedMethod. Only relevant for methods. */
11870 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11871 : };
11872 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11873 : static_assert(0 < 5, "There is no slot for us");
11874 :
11875 : static bool
11876 0 : get_onpointermove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
11877 : {
11878 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpointermove());
11879 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11880 0 : if (result) {
11881 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
11882 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11883 0 : return false;
11884 : }
11885 0 : return true;
11886 : } else {
11887 0 : args.rval().setNull();
11888 0 : return true;
11889 : }
11890 : }
11891 :
11892 : static bool
11893 0 : set_onpointermove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
11894 : {
11895 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11896 0 : if (args[0].isObject()) {
11897 : { // scope for tempRoot
11898 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
11899 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
11900 : }
11901 : } else {
11902 0 : arg0 = nullptr;
11903 : }
11904 0 : self->SetOnpointermove(Constify(arg0));
11905 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11906 :
11907 0 : return true;
11908 : }
11909 :
11910 : static const JSJitInfo onpointermove_getterinfo = {
11911 : { (JSJitGetterOp)get_onpointermove },
11912 : { prototypes::id::Window },
11913 : { PrototypeTraits<prototypes::id::Window>::Depth },
11914 : JSJitInfo::Getter,
11915 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11916 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11917 : false, /* isInfallible. False in setters. */
11918 : false, /* isMovable. Not relevant for setters. */
11919 : false, /* isEliminatable. Not relevant for setters. */
11920 : false, /* isAlwaysInSlot. Only relevant for getters. */
11921 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11922 : false, /* isTypedMethod. Only relevant for methods. */
11923 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11924 : };
11925 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11926 : static_assert(0 < 5, "There is no slot for us");
11927 : static const JSJitInfo onpointermove_setterinfo = {
11928 : { (JSJitGetterOp)set_onpointermove },
11929 : { prototypes::id::Window },
11930 : { PrototypeTraits<prototypes::id::Window>::Depth },
11931 : JSJitInfo::Setter,
11932 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11933 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
11934 : false, /* isInfallible. False in setters. */
11935 : false, /* isMovable. Not relevant for setters. */
11936 : false, /* isEliminatable. Not relevant for setters. */
11937 : false, /* isAlwaysInSlot. Only relevant for getters. */
11938 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11939 : false, /* isTypedMethod. Only relevant for methods. */
11940 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11941 : };
11942 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11943 : static_assert(0 < 5, "There is no slot for us");
11944 :
11945 : static bool
11946 0 : get_onpointerout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
11947 : {
11948 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpointerout());
11949 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11950 0 : if (result) {
11951 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
11952 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
11953 0 : return false;
11954 : }
11955 0 : return true;
11956 : } else {
11957 0 : args.rval().setNull();
11958 0 : return true;
11959 : }
11960 : }
11961 :
11962 : static bool
11963 0 : set_onpointerout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
11964 : {
11965 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
11966 0 : if (args[0].isObject()) {
11967 : { // scope for tempRoot
11968 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
11969 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
11970 : }
11971 : } else {
11972 0 : arg0 = nullptr;
11973 : }
11974 0 : self->SetOnpointerout(Constify(arg0));
11975 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
11976 :
11977 0 : return true;
11978 : }
11979 :
11980 : static const JSJitInfo onpointerout_getterinfo = {
11981 : { (JSJitGetterOp)get_onpointerout },
11982 : { prototypes::id::Window },
11983 : { PrototypeTraits<prototypes::id::Window>::Depth },
11984 : JSJitInfo::Getter,
11985 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
11986 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
11987 : false, /* isInfallible. False in setters. */
11988 : false, /* isMovable. Not relevant for setters. */
11989 : false, /* isEliminatable. Not relevant for setters. */
11990 : false, /* isAlwaysInSlot. Only relevant for getters. */
11991 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
11992 : false, /* isTypedMethod. Only relevant for methods. */
11993 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
11994 : };
11995 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
11996 : static_assert(0 < 5, "There is no slot for us");
11997 : static const JSJitInfo onpointerout_setterinfo = {
11998 : { (JSJitGetterOp)set_onpointerout },
11999 : { prototypes::id::Window },
12000 : { PrototypeTraits<prototypes::id::Window>::Depth },
12001 : JSJitInfo::Setter,
12002 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12003 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12004 : false, /* isInfallible. False in setters. */
12005 : false, /* isMovable. Not relevant for setters. */
12006 : false, /* isEliminatable. Not relevant for setters. */
12007 : false, /* isAlwaysInSlot. Only relevant for getters. */
12008 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12009 : false, /* isTypedMethod. Only relevant for methods. */
12010 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12011 : };
12012 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12013 : static_assert(0 < 5, "There is no slot for us");
12014 :
12015 : static bool
12016 0 : get_onpointerover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12017 : {
12018 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpointerover());
12019 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12020 0 : if (result) {
12021 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
12022 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12023 0 : return false;
12024 : }
12025 0 : return true;
12026 : } else {
12027 0 : args.rval().setNull();
12028 0 : return true;
12029 : }
12030 : }
12031 :
12032 : static bool
12033 0 : set_onpointerover(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
12034 : {
12035 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12036 0 : if (args[0].isObject()) {
12037 : { // scope for tempRoot
12038 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
12039 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
12040 : }
12041 : } else {
12042 0 : arg0 = nullptr;
12043 : }
12044 0 : self->SetOnpointerover(Constify(arg0));
12045 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12046 :
12047 0 : return true;
12048 : }
12049 :
12050 : static const JSJitInfo onpointerover_getterinfo = {
12051 : { (JSJitGetterOp)get_onpointerover },
12052 : { prototypes::id::Window },
12053 : { PrototypeTraits<prototypes::id::Window>::Depth },
12054 : JSJitInfo::Getter,
12055 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12056 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
12057 : false, /* isInfallible. False in setters. */
12058 : false, /* isMovable. Not relevant for setters. */
12059 : false, /* isEliminatable. Not relevant for setters. */
12060 : false, /* isAlwaysInSlot. Only relevant for getters. */
12061 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12062 : false, /* isTypedMethod. Only relevant for methods. */
12063 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12064 : };
12065 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12066 : static_assert(0 < 5, "There is no slot for us");
12067 : static const JSJitInfo onpointerover_setterinfo = {
12068 : { (JSJitGetterOp)set_onpointerover },
12069 : { prototypes::id::Window },
12070 : { PrototypeTraits<prototypes::id::Window>::Depth },
12071 : JSJitInfo::Setter,
12072 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12073 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12074 : false, /* isInfallible. False in setters. */
12075 : false, /* isMovable. Not relevant for setters. */
12076 : false, /* isEliminatable. Not relevant for setters. */
12077 : false, /* isAlwaysInSlot. Only relevant for getters. */
12078 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12079 : false, /* isTypedMethod. Only relevant for methods. */
12080 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12081 : };
12082 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12083 : static_assert(0 < 5, "There is no slot for us");
12084 :
12085 : static bool
12086 0 : get_onpointerenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12087 : {
12088 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpointerenter());
12089 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12090 0 : if (result) {
12091 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
12092 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12093 0 : return false;
12094 : }
12095 0 : return true;
12096 : } else {
12097 0 : args.rval().setNull();
12098 0 : return true;
12099 : }
12100 : }
12101 :
12102 : static bool
12103 0 : set_onpointerenter(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
12104 : {
12105 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12106 0 : if (args[0].isObject()) {
12107 : { // scope for tempRoot
12108 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
12109 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
12110 : }
12111 : } else {
12112 0 : arg0 = nullptr;
12113 : }
12114 0 : self->SetOnpointerenter(Constify(arg0));
12115 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12116 :
12117 0 : return true;
12118 : }
12119 :
12120 : static const JSJitInfo onpointerenter_getterinfo = {
12121 : { (JSJitGetterOp)get_onpointerenter },
12122 : { prototypes::id::Window },
12123 : { PrototypeTraits<prototypes::id::Window>::Depth },
12124 : JSJitInfo::Getter,
12125 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12126 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
12127 : false, /* isInfallible. False in setters. */
12128 : false, /* isMovable. Not relevant for setters. */
12129 : false, /* isEliminatable. Not relevant for setters. */
12130 : false, /* isAlwaysInSlot. Only relevant for getters. */
12131 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12132 : false, /* isTypedMethod. Only relevant for methods. */
12133 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12134 : };
12135 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12136 : static_assert(0 < 5, "There is no slot for us");
12137 : static const JSJitInfo onpointerenter_setterinfo = {
12138 : { (JSJitGetterOp)set_onpointerenter },
12139 : { prototypes::id::Window },
12140 : { PrototypeTraits<prototypes::id::Window>::Depth },
12141 : JSJitInfo::Setter,
12142 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12143 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12144 : false, /* isInfallible. False in setters. */
12145 : false, /* isMovable. Not relevant for setters. */
12146 : false, /* isEliminatable. Not relevant for setters. */
12147 : false, /* isAlwaysInSlot. Only relevant for getters. */
12148 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12149 : false, /* isTypedMethod. Only relevant for methods. */
12150 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12151 : };
12152 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12153 : static_assert(0 < 5, "There is no slot for us");
12154 :
12155 : static bool
12156 0 : get_onpointerleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12157 : {
12158 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpointerleave());
12159 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12160 0 : if (result) {
12161 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
12162 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12163 0 : return false;
12164 : }
12165 0 : return true;
12166 : } else {
12167 0 : args.rval().setNull();
12168 0 : return true;
12169 : }
12170 : }
12171 :
12172 : static bool
12173 0 : set_onpointerleave(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
12174 : {
12175 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12176 0 : if (args[0].isObject()) {
12177 : { // scope for tempRoot
12178 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
12179 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
12180 : }
12181 : } else {
12182 0 : arg0 = nullptr;
12183 : }
12184 0 : self->SetOnpointerleave(Constify(arg0));
12185 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12186 :
12187 0 : return true;
12188 : }
12189 :
12190 : static const JSJitInfo onpointerleave_getterinfo = {
12191 : { (JSJitGetterOp)get_onpointerleave },
12192 : { prototypes::id::Window },
12193 : { PrototypeTraits<prototypes::id::Window>::Depth },
12194 : JSJitInfo::Getter,
12195 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12196 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
12197 : false, /* isInfallible. False in setters. */
12198 : false, /* isMovable. Not relevant for setters. */
12199 : false, /* isEliminatable. Not relevant for setters. */
12200 : false, /* isAlwaysInSlot. Only relevant for getters. */
12201 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12202 : false, /* isTypedMethod. Only relevant for methods. */
12203 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12204 : };
12205 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12206 : static_assert(0 < 5, "There is no slot for us");
12207 : static const JSJitInfo onpointerleave_setterinfo = {
12208 : { (JSJitGetterOp)set_onpointerleave },
12209 : { prototypes::id::Window },
12210 : { PrototypeTraits<prototypes::id::Window>::Depth },
12211 : JSJitInfo::Setter,
12212 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12213 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12214 : false, /* isInfallible. False in setters. */
12215 : false, /* isMovable. Not relevant for setters. */
12216 : false, /* isEliminatable. Not relevant for setters. */
12217 : false, /* isAlwaysInSlot. Only relevant for getters. */
12218 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12219 : false, /* isTypedMethod. Only relevant for methods. */
12220 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12221 : };
12222 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12223 : static_assert(0 < 5, "There is no slot for us");
12224 :
12225 : static bool
12226 0 : get_ongotpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12227 : {
12228 0 : RefPtr<EventHandlerNonNull> result(self->GetOngotpointercapture());
12229 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12230 0 : if (result) {
12231 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
12232 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12233 0 : return false;
12234 : }
12235 0 : return true;
12236 : } else {
12237 0 : args.rval().setNull();
12238 0 : return true;
12239 : }
12240 : }
12241 :
12242 : static bool
12243 0 : set_ongotpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
12244 : {
12245 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12246 0 : if (args[0].isObject()) {
12247 : { // scope for tempRoot
12248 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
12249 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
12250 : }
12251 : } else {
12252 0 : arg0 = nullptr;
12253 : }
12254 0 : self->SetOngotpointercapture(Constify(arg0));
12255 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12256 :
12257 0 : return true;
12258 : }
12259 :
12260 : static const JSJitInfo ongotpointercapture_getterinfo = {
12261 : { (JSJitGetterOp)get_ongotpointercapture },
12262 : { prototypes::id::Window },
12263 : { PrototypeTraits<prototypes::id::Window>::Depth },
12264 : JSJitInfo::Getter,
12265 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12266 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
12267 : false, /* isInfallible. False in setters. */
12268 : false, /* isMovable. Not relevant for setters. */
12269 : false, /* isEliminatable. Not relevant for setters. */
12270 : false, /* isAlwaysInSlot. Only relevant for getters. */
12271 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12272 : false, /* isTypedMethod. Only relevant for methods. */
12273 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12274 : };
12275 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12276 : static_assert(0 < 5, "There is no slot for us");
12277 : static const JSJitInfo ongotpointercapture_setterinfo = {
12278 : { (JSJitGetterOp)set_ongotpointercapture },
12279 : { prototypes::id::Window },
12280 : { PrototypeTraits<prototypes::id::Window>::Depth },
12281 : JSJitInfo::Setter,
12282 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12283 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12284 : false, /* isInfallible. False in setters. */
12285 : false, /* isMovable. Not relevant for setters. */
12286 : false, /* isEliminatable. Not relevant for setters. */
12287 : false, /* isAlwaysInSlot. Only relevant for getters. */
12288 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12289 : false, /* isTypedMethod. Only relevant for methods. */
12290 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12291 : };
12292 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12293 : static_assert(0 < 5, "There is no slot for us");
12294 :
12295 : static bool
12296 0 : get_onlostpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12297 : {
12298 0 : RefPtr<EventHandlerNonNull> result(self->GetOnlostpointercapture());
12299 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12300 0 : if (result) {
12301 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
12302 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12303 0 : return false;
12304 : }
12305 0 : return true;
12306 : } else {
12307 0 : args.rval().setNull();
12308 0 : return true;
12309 : }
12310 : }
12311 :
12312 : static bool
12313 0 : set_onlostpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
12314 : {
12315 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12316 0 : if (args[0].isObject()) {
12317 : { // scope for tempRoot
12318 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
12319 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
12320 : }
12321 : } else {
12322 0 : arg0 = nullptr;
12323 : }
12324 0 : self->SetOnlostpointercapture(Constify(arg0));
12325 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12326 :
12327 0 : return true;
12328 : }
12329 :
12330 : static const JSJitInfo onlostpointercapture_getterinfo = {
12331 : { (JSJitGetterOp)get_onlostpointercapture },
12332 : { prototypes::id::Window },
12333 : { PrototypeTraits<prototypes::id::Window>::Depth },
12334 : JSJitInfo::Getter,
12335 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12336 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
12337 : false, /* isInfallible. False in setters. */
12338 : false, /* isMovable. Not relevant for setters. */
12339 : false, /* isEliminatable. Not relevant for setters. */
12340 : false, /* isAlwaysInSlot. Only relevant for getters. */
12341 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12342 : false, /* isTypedMethod. Only relevant for methods. */
12343 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12344 : };
12345 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12346 : static_assert(0 < 5, "There is no slot for us");
12347 : static const JSJitInfo onlostpointercapture_setterinfo = {
12348 : { (JSJitGetterOp)set_onlostpointercapture },
12349 : { prototypes::id::Window },
12350 : { PrototypeTraits<prototypes::id::Window>::Depth },
12351 : JSJitInfo::Setter,
12352 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12353 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12354 : false, /* isInfallible. False in setters. */
12355 : false, /* isMovable. Not relevant for setters. */
12356 : false, /* isEliminatable. Not relevant for setters. */
12357 : false, /* isAlwaysInSlot. Only relevant for getters. */
12358 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12359 : false, /* isTypedMethod. Only relevant for methods. */
12360 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12361 : };
12362 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12363 : static_assert(0 < 5, "There is no slot for us");
12364 :
12365 : static bool
12366 0 : get_onmozfullscreenchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12367 : {
12368 0 : RefPtr<EventHandlerNonNull> result(self->GetOnmozfullscreenchange());
12369 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12370 0 : if (result) {
12371 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
12372 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12373 0 : return false;
12374 : }
12375 0 : return true;
12376 : } else {
12377 0 : args.rval().setNull();
12378 0 : return true;
12379 : }
12380 : }
12381 :
12382 : static bool
12383 0 : set_onmozfullscreenchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
12384 : {
12385 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12386 0 : if (args[0].isObject()) {
12387 : { // scope for tempRoot
12388 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
12389 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
12390 : }
12391 : } else {
12392 0 : arg0 = nullptr;
12393 : }
12394 0 : self->SetOnmozfullscreenchange(Constify(arg0));
12395 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12396 :
12397 0 : return true;
12398 : }
12399 :
12400 : static const JSJitInfo onmozfullscreenchange_getterinfo = {
12401 : { (JSJitGetterOp)get_onmozfullscreenchange },
12402 : { prototypes::id::Window },
12403 : { PrototypeTraits<prototypes::id::Window>::Depth },
12404 : JSJitInfo::Getter,
12405 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12406 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
12407 : false, /* isInfallible. False in setters. */
12408 : false, /* isMovable. Not relevant for setters. */
12409 : false, /* isEliminatable. Not relevant for setters. */
12410 : false, /* isAlwaysInSlot. Only relevant for getters. */
12411 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12412 : false, /* isTypedMethod. Only relevant for methods. */
12413 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12414 : };
12415 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12416 : static_assert(0 < 5, "There is no slot for us");
12417 : static const JSJitInfo onmozfullscreenchange_setterinfo = {
12418 : { (JSJitGetterOp)set_onmozfullscreenchange },
12419 : { prototypes::id::Window },
12420 : { PrototypeTraits<prototypes::id::Window>::Depth },
12421 : JSJitInfo::Setter,
12422 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12423 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12424 : false, /* isInfallible. False in setters. */
12425 : false, /* isMovable. Not relevant for setters. */
12426 : false, /* isEliminatable. Not relevant for setters. */
12427 : false, /* isAlwaysInSlot. Only relevant for getters. */
12428 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12429 : false, /* isTypedMethod. Only relevant for methods. */
12430 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12431 : };
12432 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12433 : static_assert(0 < 5, "There is no slot for us");
12434 :
12435 : static bool
12436 0 : get_onmozfullscreenerror(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12437 : {
12438 0 : RefPtr<EventHandlerNonNull> result(self->GetOnmozfullscreenerror());
12439 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12440 0 : if (result) {
12441 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
12442 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12443 0 : return false;
12444 : }
12445 0 : return true;
12446 : } else {
12447 0 : args.rval().setNull();
12448 0 : return true;
12449 : }
12450 : }
12451 :
12452 : static bool
12453 0 : set_onmozfullscreenerror(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
12454 : {
12455 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12456 0 : if (args[0].isObject()) {
12457 : { // scope for tempRoot
12458 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
12459 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
12460 : }
12461 : } else {
12462 0 : arg0 = nullptr;
12463 : }
12464 0 : self->SetOnmozfullscreenerror(Constify(arg0));
12465 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12466 :
12467 0 : return true;
12468 : }
12469 :
12470 : static const JSJitInfo onmozfullscreenerror_getterinfo = {
12471 : { (JSJitGetterOp)get_onmozfullscreenerror },
12472 : { prototypes::id::Window },
12473 : { PrototypeTraits<prototypes::id::Window>::Depth },
12474 : JSJitInfo::Getter,
12475 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12476 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
12477 : false, /* isInfallible. False in setters. */
12478 : false, /* isMovable. Not relevant for setters. */
12479 : false, /* isEliminatable. Not relevant for setters. */
12480 : false, /* isAlwaysInSlot. Only relevant for getters. */
12481 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12482 : false, /* isTypedMethod. Only relevant for methods. */
12483 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12484 : };
12485 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12486 : static_assert(0 < 5, "There is no slot for us");
12487 : static const JSJitInfo onmozfullscreenerror_setterinfo = {
12488 : { (JSJitGetterOp)set_onmozfullscreenerror },
12489 : { prototypes::id::Window },
12490 : { PrototypeTraits<prototypes::id::Window>::Depth },
12491 : JSJitInfo::Setter,
12492 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12493 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12494 : false, /* isInfallible. False in setters. */
12495 : false, /* isMovable. Not relevant for setters. */
12496 : false, /* isEliminatable. Not relevant for setters. */
12497 : false, /* isAlwaysInSlot. Only relevant for getters. */
12498 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12499 : false, /* isTypedMethod. Only relevant for methods. */
12500 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12501 : };
12502 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12503 : static_assert(0 < 5, "There is no slot for us");
12504 :
12505 : static bool
12506 0 : get_onanimationcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12507 : {
12508 0 : RefPtr<EventHandlerNonNull> result(self->GetOnanimationcancel());
12509 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12510 0 : if (result) {
12511 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
12512 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12513 0 : return false;
12514 : }
12515 0 : return true;
12516 : } else {
12517 0 : args.rval().setNull();
12518 0 : return true;
12519 : }
12520 : }
12521 :
12522 : static bool
12523 0 : set_onanimationcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
12524 : {
12525 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12526 0 : if (args[0].isObject()) {
12527 : { // scope for tempRoot
12528 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
12529 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
12530 : }
12531 : } else {
12532 0 : arg0 = nullptr;
12533 : }
12534 0 : self->SetOnanimationcancel(Constify(arg0));
12535 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12536 :
12537 0 : return true;
12538 : }
12539 :
12540 : static const JSJitInfo onanimationcancel_getterinfo = {
12541 : { (JSJitGetterOp)get_onanimationcancel },
12542 : { prototypes::id::Window },
12543 : { PrototypeTraits<prototypes::id::Window>::Depth },
12544 : JSJitInfo::Getter,
12545 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12546 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
12547 : false, /* isInfallible. False in setters. */
12548 : false, /* isMovable. Not relevant for setters. */
12549 : false, /* isEliminatable. Not relevant for setters. */
12550 : false, /* isAlwaysInSlot. Only relevant for getters. */
12551 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12552 : false, /* isTypedMethod. Only relevant for methods. */
12553 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12554 : };
12555 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12556 : static_assert(0 < 5, "There is no slot for us");
12557 : static const JSJitInfo onanimationcancel_setterinfo = {
12558 : { (JSJitGetterOp)set_onanimationcancel },
12559 : { prototypes::id::Window },
12560 : { PrototypeTraits<prototypes::id::Window>::Depth },
12561 : JSJitInfo::Setter,
12562 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12563 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12564 : false, /* isInfallible. False in setters. */
12565 : false, /* isMovable. Not relevant for setters. */
12566 : false, /* isEliminatable. Not relevant for setters. */
12567 : false, /* isAlwaysInSlot. Only relevant for getters. */
12568 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12569 : false, /* isTypedMethod. Only relevant for methods. */
12570 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12571 : };
12572 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12573 : static_assert(0 < 5, "There is no slot for us");
12574 :
12575 : static bool
12576 0 : get_onanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12577 : {
12578 0 : RefPtr<EventHandlerNonNull> result(self->GetOnanimationend());
12579 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12580 0 : if (result) {
12581 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
12582 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12583 0 : return false;
12584 : }
12585 0 : return true;
12586 : } else {
12587 0 : args.rval().setNull();
12588 0 : return true;
12589 : }
12590 : }
12591 :
12592 : static bool
12593 0 : set_onanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
12594 : {
12595 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12596 0 : if (args[0].isObject()) {
12597 : { // scope for tempRoot
12598 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
12599 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
12600 : }
12601 : } else {
12602 0 : arg0 = nullptr;
12603 : }
12604 0 : self->SetOnanimationend(Constify(arg0));
12605 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12606 :
12607 0 : return true;
12608 : }
12609 :
12610 : static const JSJitInfo onanimationend_getterinfo = {
12611 : { (JSJitGetterOp)get_onanimationend },
12612 : { prototypes::id::Window },
12613 : { PrototypeTraits<prototypes::id::Window>::Depth },
12614 : JSJitInfo::Getter,
12615 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12616 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
12617 : false, /* isInfallible. False in setters. */
12618 : false, /* isMovable. Not relevant for setters. */
12619 : false, /* isEliminatable. Not relevant for setters. */
12620 : false, /* isAlwaysInSlot. Only relevant for getters. */
12621 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12622 : false, /* isTypedMethod. Only relevant for methods. */
12623 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12624 : };
12625 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12626 : static_assert(0 < 5, "There is no slot for us");
12627 : static const JSJitInfo onanimationend_setterinfo = {
12628 : { (JSJitGetterOp)set_onanimationend },
12629 : { prototypes::id::Window },
12630 : { PrototypeTraits<prototypes::id::Window>::Depth },
12631 : JSJitInfo::Setter,
12632 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12633 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12634 : false, /* isInfallible. False in setters. */
12635 : false, /* isMovable. Not relevant for setters. */
12636 : false, /* isEliminatable. Not relevant for setters. */
12637 : false, /* isAlwaysInSlot. Only relevant for getters. */
12638 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12639 : false, /* isTypedMethod. Only relevant for methods. */
12640 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12641 : };
12642 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12643 : static_assert(0 < 5, "There is no slot for us");
12644 :
12645 : static bool
12646 0 : get_onanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12647 : {
12648 0 : RefPtr<EventHandlerNonNull> result(self->GetOnanimationiteration());
12649 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12650 0 : if (result) {
12651 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
12652 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12653 0 : return false;
12654 : }
12655 0 : return true;
12656 : } else {
12657 0 : args.rval().setNull();
12658 0 : return true;
12659 : }
12660 : }
12661 :
12662 : static bool
12663 0 : set_onanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
12664 : {
12665 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12666 0 : if (args[0].isObject()) {
12667 : { // scope for tempRoot
12668 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
12669 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
12670 : }
12671 : } else {
12672 0 : arg0 = nullptr;
12673 : }
12674 0 : self->SetOnanimationiteration(Constify(arg0));
12675 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12676 :
12677 0 : return true;
12678 : }
12679 :
12680 : static const JSJitInfo onanimationiteration_getterinfo = {
12681 : { (JSJitGetterOp)get_onanimationiteration },
12682 : { prototypes::id::Window },
12683 : { PrototypeTraits<prototypes::id::Window>::Depth },
12684 : JSJitInfo::Getter,
12685 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12686 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
12687 : false, /* isInfallible. False in setters. */
12688 : false, /* isMovable. Not relevant for setters. */
12689 : false, /* isEliminatable. Not relevant for setters. */
12690 : false, /* isAlwaysInSlot. Only relevant for getters. */
12691 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12692 : false, /* isTypedMethod. Only relevant for methods. */
12693 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12694 : };
12695 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12696 : static_assert(0 < 5, "There is no slot for us");
12697 : static const JSJitInfo onanimationiteration_setterinfo = {
12698 : { (JSJitGetterOp)set_onanimationiteration },
12699 : { prototypes::id::Window },
12700 : { PrototypeTraits<prototypes::id::Window>::Depth },
12701 : JSJitInfo::Setter,
12702 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12703 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12704 : false, /* isInfallible. False in setters. */
12705 : false, /* isMovable. Not relevant for setters. */
12706 : false, /* isEliminatable. Not relevant for setters. */
12707 : false, /* isAlwaysInSlot. Only relevant for getters. */
12708 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12709 : false, /* isTypedMethod. Only relevant for methods. */
12710 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12711 : };
12712 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12713 : static_assert(0 < 5, "There is no slot for us");
12714 :
12715 : static bool
12716 0 : get_onanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12717 : {
12718 0 : RefPtr<EventHandlerNonNull> result(self->GetOnanimationstart());
12719 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12720 0 : if (result) {
12721 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
12722 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12723 0 : return false;
12724 : }
12725 0 : return true;
12726 : } else {
12727 0 : args.rval().setNull();
12728 0 : return true;
12729 : }
12730 : }
12731 :
12732 : static bool
12733 0 : set_onanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
12734 : {
12735 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12736 0 : if (args[0].isObject()) {
12737 : { // scope for tempRoot
12738 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
12739 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
12740 : }
12741 : } else {
12742 0 : arg0 = nullptr;
12743 : }
12744 0 : self->SetOnanimationstart(Constify(arg0));
12745 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12746 :
12747 0 : return true;
12748 : }
12749 :
12750 : static const JSJitInfo onanimationstart_getterinfo = {
12751 : { (JSJitGetterOp)get_onanimationstart },
12752 : { prototypes::id::Window },
12753 : { PrototypeTraits<prototypes::id::Window>::Depth },
12754 : JSJitInfo::Getter,
12755 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12756 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
12757 : false, /* isInfallible. False in setters. */
12758 : false, /* isMovable. Not relevant for setters. */
12759 : false, /* isEliminatable. Not relevant for setters. */
12760 : false, /* isAlwaysInSlot. Only relevant for getters. */
12761 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12762 : false, /* isTypedMethod. Only relevant for methods. */
12763 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12764 : };
12765 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12766 : static_assert(0 < 5, "There is no slot for us");
12767 : static const JSJitInfo onanimationstart_setterinfo = {
12768 : { (JSJitGetterOp)set_onanimationstart },
12769 : { prototypes::id::Window },
12770 : { PrototypeTraits<prototypes::id::Window>::Depth },
12771 : JSJitInfo::Setter,
12772 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12773 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12774 : false, /* isInfallible. False in setters. */
12775 : false, /* isMovable. Not relevant for setters. */
12776 : false, /* isEliminatable. Not relevant for setters. */
12777 : false, /* isAlwaysInSlot. Only relevant for getters. */
12778 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12779 : false, /* isTypedMethod. Only relevant for methods. */
12780 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12781 : };
12782 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12783 : static_assert(0 < 5, "There is no slot for us");
12784 :
12785 : static bool
12786 0 : get_ontransitioncancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12787 : {
12788 0 : RefPtr<EventHandlerNonNull> result(self->GetOntransitioncancel());
12789 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12790 0 : if (result) {
12791 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
12792 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12793 0 : return false;
12794 : }
12795 0 : return true;
12796 : } else {
12797 0 : args.rval().setNull();
12798 0 : return true;
12799 : }
12800 : }
12801 :
12802 : static bool
12803 0 : set_ontransitioncancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
12804 : {
12805 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12806 0 : if (args[0].isObject()) {
12807 : { // scope for tempRoot
12808 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
12809 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
12810 : }
12811 : } else {
12812 0 : arg0 = nullptr;
12813 : }
12814 0 : self->SetOntransitioncancel(Constify(arg0));
12815 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12816 :
12817 0 : return true;
12818 : }
12819 :
12820 : static const JSJitInfo ontransitioncancel_getterinfo = {
12821 : { (JSJitGetterOp)get_ontransitioncancel },
12822 : { prototypes::id::Window },
12823 : { PrototypeTraits<prototypes::id::Window>::Depth },
12824 : JSJitInfo::Getter,
12825 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12826 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
12827 : false, /* isInfallible. False in setters. */
12828 : false, /* isMovable. Not relevant for setters. */
12829 : false, /* isEliminatable. Not relevant for setters. */
12830 : false, /* isAlwaysInSlot. Only relevant for getters. */
12831 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12832 : false, /* isTypedMethod. Only relevant for methods. */
12833 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12834 : };
12835 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12836 : static_assert(0 < 5, "There is no slot for us");
12837 : static const JSJitInfo ontransitioncancel_setterinfo = {
12838 : { (JSJitGetterOp)set_ontransitioncancel },
12839 : { prototypes::id::Window },
12840 : { PrototypeTraits<prototypes::id::Window>::Depth },
12841 : JSJitInfo::Setter,
12842 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12843 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12844 : false, /* isInfallible. False in setters. */
12845 : false, /* isMovable. Not relevant for setters. */
12846 : false, /* isEliminatable. Not relevant for setters. */
12847 : false, /* isAlwaysInSlot. Only relevant for getters. */
12848 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12849 : false, /* isTypedMethod. Only relevant for methods. */
12850 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12851 : };
12852 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12853 : static_assert(0 < 5, "There is no slot for us");
12854 :
12855 : static bool
12856 0 : get_ontransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12857 : {
12858 0 : RefPtr<EventHandlerNonNull> result(self->GetOntransitionend());
12859 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12860 0 : if (result) {
12861 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
12862 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12863 0 : return false;
12864 : }
12865 0 : return true;
12866 : } else {
12867 0 : args.rval().setNull();
12868 0 : return true;
12869 : }
12870 : }
12871 :
12872 : static bool
12873 0 : set_ontransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
12874 : {
12875 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12876 0 : if (args[0].isObject()) {
12877 : { // scope for tempRoot
12878 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
12879 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
12880 : }
12881 : } else {
12882 0 : arg0 = nullptr;
12883 : }
12884 0 : self->SetOntransitionend(Constify(arg0));
12885 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12886 :
12887 0 : return true;
12888 : }
12889 :
12890 : static const JSJitInfo ontransitionend_getterinfo = {
12891 : { (JSJitGetterOp)get_ontransitionend },
12892 : { prototypes::id::Window },
12893 : { PrototypeTraits<prototypes::id::Window>::Depth },
12894 : JSJitInfo::Getter,
12895 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12896 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
12897 : false, /* isInfallible. False in setters. */
12898 : false, /* isMovable. Not relevant for setters. */
12899 : false, /* isEliminatable. Not relevant for setters. */
12900 : false, /* isAlwaysInSlot. Only relevant for getters. */
12901 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12902 : false, /* isTypedMethod. Only relevant for methods. */
12903 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12904 : };
12905 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12906 : static_assert(0 < 5, "There is no slot for us");
12907 : static const JSJitInfo ontransitionend_setterinfo = {
12908 : { (JSJitGetterOp)set_ontransitionend },
12909 : { prototypes::id::Window },
12910 : { PrototypeTraits<prototypes::id::Window>::Depth },
12911 : JSJitInfo::Setter,
12912 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12913 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12914 : false, /* isInfallible. False in setters. */
12915 : false, /* isMovable. Not relevant for setters. */
12916 : false, /* isEliminatable. Not relevant for setters. */
12917 : false, /* isAlwaysInSlot. Only relevant for getters. */
12918 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12919 : false, /* isTypedMethod. Only relevant for methods. */
12920 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12921 : };
12922 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12923 : static_assert(0 < 5, "There is no slot for us");
12924 :
12925 : static bool
12926 0 : get_ontransitionrun(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12927 : {
12928 0 : RefPtr<EventHandlerNonNull> result(self->GetOntransitionrun());
12929 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12930 0 : if (result) {
12931 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
12932 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
12933 0 : return false;
12934 : }
12935 0 : return true;
12936 : } else {
12937 0 : args.rval().setNull();
12938 0 : return true;
12939 : }
12940 : }
12941 :
12942 : static bool
12943 0 : set_ontransitionrun(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
12944 : {
12945 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
12946 0 : if (args[0].isObject()) {
12947 : { // scope for tempRoot
12948 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
12949 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
12950 : }
12951 : } else {
12952 0 : arg0 = nullptr;
12953 : }
12954 0 : self->SetOntransitionrun(Constify(arg0));
12955 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
12956 :
12957 0 : return true;
12958 : }
12959 :
12960 : static const JSJitInfo ontransitionrun_getterinfo = {
12961 : { (JSJitGetterOp)get_ontransitionrun },
12962 : { prototypes::id::Window },
12963 : { PrototypeTraits<prototypes::id::Window>::Depth },
12964 : JSJitInfo::Getter,
12965 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12966 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
12967 : false, /* isInfallible. False in setters. */
12968 : false, /* isMovable. Not relevant for setters. */
12969 : false, /* isEliminatable. Not relevant for setters. */
12970 : false, /* isAlwaysInSlot. Only relevant for getters. */
12971 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12972 : false, /* isTypedMethod. Only relevant for methods. */
12973 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12974 : };
12975 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12976 : static_assert(0 < 5, "There is no slot for us");
12977 : static const JSJitInfo ontransitionrun_setterinfo = {
12978 : { (JSJitGetterOp)set_ontransitionrun },
12979 : { prototypes::id::Window },
12980 : { PrototypeTraits<prototypes::id::Window>::Depth },
12981 : JSJitInfo::Setter,
12982 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
12983 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
12984 : false, /* isInfallible. False in setters. */
12985 : false, /* isMovable. Not relevant for setters. */
12986 : false, /* isEliminatable. Not relevant for setters. */
12987 : false, /* isAlwaysInSlot. Only relevant for getters. */
12988 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
12989 : false, /* isTypedMethod. Only relevant for methods. */
12990 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
12991 : };
12992 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
12993 : static_assert(0 < 5, "There is no slot for us");
12994 :
12995 : static bool
12996 0 : get_ontransitionstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
12997 : {
12998 0 : RefPtr<EventHandlerNonNull> result(self->GetOntransitionstart());
12999 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13000 0 : if (result) {
13001 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
13002 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13003 0 : return false;
13004 : }
13005 0 : return true;
13006 : } else {
13007 0 : args.rval().setNull();
13008 0 : return true;
13009 : }
13010 : }
13011 :
13012 : static bool
13013 0 : set_ontransitionstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
13014 : {
13015 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13016 0 : if (args[0].isObject()) {
13017 : { // scope for tempRoot
13018 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
13019 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
13020 : }
13021 : } else {
13022 0 : arg0 = nullptr;
13023 : }
13024 0 : self->SetOntransitionstart(Constify(arg0));
13025 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13026 :
13027 0 : return true;
13028 : }
13029 :
13030 : static const JSJitInfo ontransitionstart_getterinfo = {
13031 : { (JSJitGetterOp)get_ontransitionstart },
13032 : { prototypes::id::Window },
13033 : { PrototypeTraits<prototypes::id::Window>::Depth },
13034 : JSJitInfo::Getter,
13035 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13036 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
13037 : false, /* isInfallible. False in setters. */
13038 : false, /* isMovable. Not relevant for setters. */
13039 : false, /* isEliminatable. Not relevant for setters. */
13040 : false, /* isAlwaysInSlot. Only relevant for getters. */
13041 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13042 : false, /* isTypedMethod. Only relevant for methods. */
13043 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13044 : };
13045 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13046 : static_assert(0 < 5, "There is no slot for us");
13047 : static const JSJitInfo ontransitionstart_setterinfo = {
13048 : { (JSJitGetterOp)set_ontransitionstart },
13049 : { prototypes::id::Window },
13050 : { PrototypeTraits<prototypes::id::Window>::Depth },
13051 : JSJitInfo::Setter,
13052 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13053 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
13054 : false, /* isInfallible. False in setters. */
13055 : false, /* isMovable. Not relevant for setters. */
13056 : false, /* isEliminatable. Not relevant for setters. */
13057 : false, /* isAlwaysInSlot. Only relevant for getters. */
13058 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13059 : false, /* isTypedMethod. Only relevant for methods. */
13060 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13061 : };
13062 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13063 : static_assert(0 < 5, "There is no slot for us");
13064 :
13065 : static bool
13066 0 : get_onwebkitanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13067 : {
13068 0 : RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationend());
13069 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13070 0 : if (result) {
13071 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
13072 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13073 0 : return false;
13074 : }
13075 0 : return true;
13076 : } else {
13077 0 : args.rval().setNull();
13078 0 : return true;
13079 : }
13080 : }
13081 :
13082 : static bool
13083 0 : set_onwebkitanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
13084 : {
13085 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13086 0 : if (args[0].isObject()) {
13087 : { // scope for tempRoot
13088 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
13089 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
13090 : }
13091 : } else {
13092 0 : arg0 = nullptr;
13093 : }
13094 0 : self->SetOnwebkitanimationend(Constify(arg0));
13095 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13096 :
13097 0 : return true;
13098 : }
13099 :
13100 : static const JSJitInfo onwebkitanimationend_getterinfo = {
13101 : { (JSJitGetterOp)get_onwebkitanimationend },
13102 : { prototypes::id::Window },
13103 : { PrototypeTraits<prototypes::id::Window>::Depth },
13104 : JSJitInfo::Getter,
13105 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13106 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
13107 : false, /* isInfallible. False in setters. */
13108 : false, /* isMovable. Not relevant for setters. */
13109 : false, /* isEliminatable. Not relevant for setters. */
13110 : false, /* isAlwaysInSlot. Only relevant for getters. */
13111 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13112 : false, /* isTypedMethod. Only relevant for methods. */
13113 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13114 : };
13115 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13116 : static_assert(0 < 5, "There is no slot for us");
13117 : static const JSJitInfo onwebkitanimationend_setterinfo = {
13118 : { (JSJitGetterOp)set_onwebkitanimationend },
13119 : { prototypes::id::Window },
13120 : { PrototypeTraits<prototypes::id::Window>::Depth },
13121 : JSJitInfo::Setter,
13122 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13123 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
13124 : false, /* isInfallible. False in setters. */
13125 : false, /* isMovable. Not relevant for setters. */
13126 : false, /* isEliminatable. Not relevant for setters. */
13127 : false, /* isAlwaysInSlot. Only relevant for getters. */
13128 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13129 : false, /* isTypedMethod. Only relevant for methods. */
13130 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13131 : };
13132 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13133 : static_assert(0 < 5, "There is no slot for us");
13134 :
13135 : static bool
13136 0 : get_onwebkitanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13137 : {
13138 0 : RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationiteration());
13139 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13140 0 : if (result) {
13141 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
13142 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13143 0 : return false;
13144 : }
13145 0 : return true;
13146 : } else {
13147 0 : args.rval().setNull();
13148 0 : return true;
13149 : }
13150 : }
13151 :
13152 : static bool
13153 0 : set_onwebkitanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
13154 : {
13155 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13156 0 : if (args[0].isObject()) {
13157 : { // scope for tempRoot
13158 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
13159 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
13160 : }
13161 : } else {
13162 0 : arg0 = nullptr;
13163 : }
13164 0 : self->SetOnwebkitanimationiteration(Constify(arg0));
13165 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13166 :
13167 0 : return true;
13168 : }
13169 :
13170 : static const JSJitInfo onwebkitanimationiteration_getterinfo = {
13171 : { (JSJitGetterOp)get_onwebkitanimationiteration },
13172 : { prototypes::id::Window },
13173 : { PrototypeTraits<prototypes::id::Window>::Depth },
13174 : JSJitInfo::Getter,
13175 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13176 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
13177 : false, /* isInfallible. False in setters. */
13178 : false, /* isMovable. Not relevant for setters. */
13179 : false, /* isEliminatable. Not relevant for setters. */
13180 : false, /* isAlwaysInSlot. Only relevant for getters. */
13181 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13182 : false, /* isTypedMethod. Only relevant for methods. */
13183 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13184 : };
13185 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13186 : static_assert(0 < 5, "There is no slot for us");
13187 : static const JSJitInfo onwebkitanimationiteration_setterinfo = {
13188 : { (JSJitGetterOp)set_onwebkitanimationiteration },
13189 : { prototypes::id::Window },
13190 : { PrototypeTraits<prototypes::id::Window>::Depth },
13191 : JSJitInfo::Setter,
13192 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13193 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
13194 : false, /* isInfallible. False in setters. */
13195 : false, /* isMovable. Not relevant for setters. */
13196 : false, /* isEliminatable. Not relevant for setters. */
13197 : false, /* isAlwaysInSlot. Only relevant for getters. */
13198 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13199 : false, /* isTypedMethod. Only relevant for methods. */
13200 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13201 : };
13202 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13203 : static_assert(0 < 5, "There is no slot for us");
13204 :
13205 : static bool
13206 0 : get_onwebkitanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13207 : {
13208 0 : RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationstart());
13209 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13210 0 : if (result) {
13211 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
13212 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13213 0 : return false;
13214 : }
13215 0 : return true;
13216 : } else {
13217 0 : args.rval().setNull();
13218 0 : return true;
13219 : }
13220 : }
13221 :
13222 : static bool
13223 0 : set_onwebkitanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
13224 : {
13225 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13226 0 : if (args[0].isObject()) {
13227 : { // scope for tempRoot
13228 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
13229 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
13230 : }
13231 : } else {
13232 0 : arg0 = nullptr;
13233 : }
13234 0 : self->SetOnwebkitanimationstart(Constify(arg0));
13235 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13236 :
13237 0 : return true;
13238 : }
13239 :
13240 : static const JSJitInfo onwebkitanimationstart_getterinfo = {
13241 : { (JSJitGetterOp)get_onwebkitanimationstart },
13242 : { prototypes::id::Window },
13243 : { PrototypeTraits<prototypes::id::Window>::Depth },
13244 : JSJitInfo::Getter,
13245 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13246 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
13247 : false, /* isInfallible. False in setters. */
13248 : false, /* isMovable. Not relevant for setters. */
13249 : false, /* isEliminatable. Not relevant for setters. */
13250 : false, /* isAlwaysInSlot. Only relevant for getters. */
13251 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13252 : false, /* isTypedMethod. Only relevant for methods. */
13253 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13254 : };
13255 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13256 : static_assert(0 < 5, "There is no slot for us");
13257 : static const JSJitInfo onwebkitanimationstart_setterinfo = {
13258 : { (JSJitGetterOp)set_onwebkitanimationstart },
13259 : { prototypes::id::Window },
13260 : { PrototypeTraits<prototypes::id::Window>::Depth },
13261 : JSJitInfo::Setter,
13262 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13263 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
13264 : false, /* isInfallible. False in setters. */
13265 : false, /* isMovable. Not relevant for setters. */
13266 : false, /* isEliminatable. Not relevant for setters. */
13267 : false, /* isAlwaysInSlot. Only relevant for getters. */
13268 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13269 : false, /* isTypedMethod. Only relevant for methods. */
13270 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13271 : };
13272 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13273 : static_assert(0 < 5, "There is no slot for us");
13274 :
13275 : static bool
13276 0 : get_onwebkittransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13277 : {
13278 0 : RefPtr<EventHandlerNonNull> result(self->GetOnwebkittransitionend());
13279 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13280 0 : if (result) {
13281 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
13282 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13283 0 : return false;
13284 : }
13285 0 : return true;
13286 : } else {
13287 0 : args.rval().setNull();
13288 0 : return true;
13289 : }
13290 : }
13291 :
13292 : static bool
13293 0 : set_onwebkittransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
13294 : {
13295 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13296 0 : if (args[0].isObject()) {
13297 : { // scope for tempRoot
13298 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
13299 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
13300 : }
13301 : } else {
13302 0 : arg0 = nullptr;
13303 : }
13304 0 : self->SetOnwebkittransitionend(Constify(arg0));
13305 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13306 :
13307 0 : return true;
13308 : }
13309 :
13310 : static const JSJitInfo onwebkittransitionend_getterinfo = {
13311 : { (JSJitGetterOp)get_onwebkittransitionend },
13312 : { prototypes::id::Window },
13313 : { PrototypeTraits<prototypes::id::Window>::Depth },
13314 : JSJitInfo::Getter,
13315 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13316 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
13317 : false, /* isInfallible. False in setters. */
13318 : false, /* isMovable. Not relevant for setters. */
13319 : false, /* isEliminatable. Not relevant for setters. */
13320 : false, /* isAlwaysInSlot. Only relevant for getters. */
13321 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13322 : false, /* isTypedMethod. Only relevant for methods. */
13323 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13324 : };
13325 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13326 : static_assert(0 < 5, "There is no slot for us");
13327 : static const JSJitInfo onwebkittransitionend_setterinfo = {
13328 : { (JSJitGetterOp)set_onwebkittransitionend },
13329 : { prototypes::id::Window },
13330 : { PrototypeTraits<prototypes::id::Window>::Depth },
13331 : JSJitInfo::Setter,
13332 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13333 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
13334 : false, /* isInfallible. False in setters. */
13335 : false, /* isMovable. Not relevant for setters. */
13336 : false, /* isEliminatable. Not relevant for setters. */
13337 : false, /* isAlwaysInSlot. Only relevant for getters. */
13338 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13339 : false, /* isTypedMethod. Only relevant for methods. */
13340 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13341 : };
13342 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13343 : static_assert(0 < 5, "There is no slot for us");
13344 :
13345 : static bool
13346 0 : get_u2f(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13347 : {
13348 0 : binding_detail::FastErrorResult rv;
13349 0 : auto result(StrongOrRawPtr<mozilla::dom::U2F>(self->GetU2f(rv)));
13350 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
13351 0 : return false;
13352 : }
13353 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13354 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
13355 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
13356 0 : return false;
13357 : }
13358 0 : return true;
13359 : }
13360 :
13361 : static const JSJitInfo u2f_getterinfo = {
13362 : { (JSJitGetterOp)get_u2f },
13363 : { prototypes::id::Window },
13364 : { PrototypeTraits<prototypes::id::Window>::Depth },
13365 : JSJitInfo::Getter,
13366 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13367 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
13368 : false, /* isInfallible. False in setters. */
13369 : false, /* isMovable. Not relevant for setters. */
13370 : false, /* isEliminatable. Not relevant for setters. */
13371 : false, /* isAlwaysInSlot. Only relevant for getters. */
13372 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13373 : false, /* isTypedMethod. Only relevant for methods. */
13374 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13375 : };
13376 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13377 : static_assert(0 < 5, "There is no slot for us");
13378 :
13379 : static bool
13380 0 : get_onerror(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13381 : {
13382 0 : RefPtr<OnErrorEventHandlerNonNull> result(self->GetOnerror());
13383 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13384 0 : if (result) {
13385 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
13386 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13387 0 : return false;
13388 : }
13389 0 : return true;
13390 : } else {
13391 0 : args.rval().setNull();
13392 0 : return true;
13393 : }
13394 : }
13395 :
13396 : static bool
13397 0 : set_onerror(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
13398 : {
13399 0 : RootedCallback<RefPtr<binding_detail::FastOnErrorEventHandlerNonNull>> arg0(cx);
13400 0 : if (args[0].isObject()) {
13401 : { // scope for tempRoot
13402 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
13403 0 : arg0 = new binding_detail::FastOnErrorEventHandlerNonNull(tempRoot);
13404 : }
13405 : } else {
13406 0 : arg0 = nullptr;
13407 : }
13408 0 : self->SetOnerror(Constify(arg0));
13409 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13410 :
13411 0 : return true;
13412 : }
13413 :
13414 : static const JSJitInfo onerror_getterinfo = {
13415 : { (JSJitGetterOp)get_onerror },
13416 : { prototypes::id::Window },
13417 : { PrototypeTraits<prototypes::id::Window>::Depth },
13418 : JSJitInfo::Getter,
13419 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13420 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
13421 : false, /* isInfallible. False in setters. */
13422 : false, /* isMovable. Not relevant for setters. */
13423 : false, /* isEliminatable. Not relevant for setters. */
13424 : false, /* isAlwaysInSlot. Only relevant for getters. */
13425 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13426 : false, /* isTypedMethod. Only relevant for methods. */
13427 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13428 : };
13429 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13430 : static_assert(0 < 5, "There is no slot for us");
13431 : static const JSJitInfo onerror_setterinfo = {
13432 : { (JSJitGetterOp)set_onerror },
13433 : { prototypes::id::Window },
13434 : { PrototypeTraits<prototypes::id::Window>::Depth },
13435 : JSJitInfo::Setter,
13436 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13437 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
13438 : false, /* isInfallible. False in setters. */
13439 : false, /* isMovable. Not relevant for setters. */
13440 : false, /* isEliminatable. Not relevant for setters. */
13441 : false, /* isAlwaysInSlot. Only relevant for getters. */
13442 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13443 : false, /* isTypedMethod. Only relevant for methods. */
13444 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13445 : };
13446 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13447 : static_assert(0 < 5, "There is no slot for us");
13448 :
13449 : static bool
13450 0 : get_speechSynthesis(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13451 : {
13452 0 : binding_detail::FastErrorResult rv;
13453 0 : auto result(StrongOrRawPtr<mozilla::dom::SpeechSynthesis>(self->GetSpeechSynthesis(rv)));
13454 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
13455 0 : return false;
13456 : }
13457 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13458 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
13459 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
13460 0 : return false;
13461 : }
13462 0 : return true;
13463 : }
13464 :
13465 : static const JSJitInfo speechSynthesis_getterinfo = {
13466 : { (JSJitGetterOp)get_speechSynthesis },
13467 : { prototypes::id::Window },
13468 : { PrototypeTraits<prototypes::id::Window>::Depth },
13469 : JSJitInfo::Getter,
13470 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13471 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
13472 : false, /* isInfallible. False in setters. */
13473 : false, /* isMovable. Not relevant for setters. */
13474 : false, /* isEliminatable. Not relevant for setters. */
13475 : false, /* isAlwaysInSlot. Only relevant for getters. */
13476 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13477 : false, /* isTypedMethod. Only relevant for methods. */
13478 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13479 : };
13480 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13481 : static_assert(0 < 5, "There is no slot for us");
13482 :
13483 : static bool
13484 0 : get_ontouchstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13485 : {
13486 0 : RefPtr<EventHandlerNonNull> result(self->GetOntouchstart());
13487 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13488 0 : if (result) {
13489 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
13490 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13491 0 : return false;
13492 : }
13493 0 : return true;
13494 : } else {
13495 0 : args.rval().setNull();
13496 0 : return true;
13497 : }
13498 : }
13499 :
13500 : static bool
13501 0 : set_ontouchstart(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
13502 : {
13503 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13504 0 : if (args[0].isObject()) {
13505 : { // scope for tempRoot
13506 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
13507 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
13508 : }
13509 : } else {
13510 0 : arg0 = nullptr;
13511 : }
13512 0 : self->SetOntouchstart(Constify(arg0));
13513 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13514 :
13515 0 : return true;
13516 : }
13517 :
13518 : static const JSJitInfo ontouchstart_getterinfo = {
13519 : { (JSJitGetterOp)get_ontouchstart },
13520 : { prototypes::id::Window },
13521 : { PrototypeTraits<prototypes::id::Window>::Depth },
13522 : JSJitInfo::Getter,
13523 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13524 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
13525 : false, /* isInfallible. False in setters. */
13526 : false, /* isMovable. Not relevant for setters. */
13527 : false, /* isEliminatable. Not relevant for setters. */
13528 : false, /* isAlwaysInSlot. Only relevant for getters. */
13529 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13530 : false, /* isTypedMethod. Only relevant for methods. */
13531 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13532 : };
13533 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13534 : static_assert(0 < 5, "There is no slot for us");
13535 : static const JSJitInfo ontouchstart_setterinfo = {
13536 : { (JSJitGetterOp)set_ontouchstart },
13537 : { prototypes::id::Window },
13538 : { PrototypeTraits<prototypes::id::Window>::Depth },
13539 : JSJitInfo::Setter,
13540 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13541 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
13542 : false, /* isInfallible. False in setters. */
13543 : false, /* isMovable. Not relevant for setters. */
13544 : false, /* isEliminatable. Not relevant for setters. */
13545 : false, /* isAlwaysInSlot. Only relevant for getters. */
13546 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13547 : false, /* isTypedMethod. Only relevant for methods. */
13548 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13549 : };
13550 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13551 : static_assert(0 < 5, "There is no slot for us");
13552 :
13553 : static bool
13554 0 : get_ontouchend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13555 : {
13556 0 : RefPtr<EventHandlerNonNull> result(self->GetOntouchend());
13557 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13558 0 : if (result) {
13559 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
13560 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13561 0 : return false;
13562 : }
13563 0 : return true;
13564 : } else {
13565 0 : args.rval().setNull();
13566 0 : return true;
13567 : }
13568 : }
13569 :
13570 : static bool
13571 0 : set_ontouchend(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
13572 : {
13573 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13574 0 : if (args[0].isObject()) {
13575 : { // scope for tempRoot
13576 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
13577 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
13578 : }
13579 : } else {
13580 0 : arg0 = nullptr;
13581 : }
13582 0 : self->SetOntouchend(Constify(arg0));
13583 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13584 :
13585 0 : return true;
13586 : }
13587 :
13588 : static const JSJitInfo ontouchend_getterinfo = {
13589 : { (JSJitGetterOp)get_ontouchend },
13590 : { prototypes::id::Window },
13591 : { PrototypeTraits<prototypes::id::Window>::Depth },
13592 : JSJitInfo::Getter,
13593 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13594 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
13595 : false, /* isInfallible. False in setters. */
13596 : false, /* isMovable. Not relevant for setters. */
13597 : false, /* isEliminatable. Not relevant for setters. */
13598 : false, /* isAlwaysInSlot. Only relevant for getters. */
13599 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13600 : false, /* isTypedMethod. Only relevant for methods. */
13601 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13602 : };
13603 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13604 : static_assert(0 < 5, "There is no slot for us");
13605 : static const JSJitInfo ontouchend_setterinfo = {
13606 : { (JSJitGetterOp)set_ontouchend },
13607 : { prototypes::id::Window },
13608 : { PrototypeTraits<prototypes::id::Window>::Depth },
13609 : JSJitInfo::Setter,
13610 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13611 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
13612 : false, /* isInfallible. False in setters. */
13613 : false, /* isMovable. Not relevant for setters. */
13614 : false, /* isEliminatable. Not relevant for setters. */
13615 : false, /* isAlwaysInSlot. Only relevant for getters. */
13616 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13617 : false, /* isTypedMethod. Only relevant for methods. */
13618 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13619 : };
13620 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13621 : static_assert(0 < 5, "There is no slot for us");
13622 :
13623 : static bool
13624 0 : get_ontouchmove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13625 : {
13626 0 : RefPtr<EventHandlerNonNull> result(self->GetOntouchmove());
13627 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13628 0 : if (result) {
13629 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
13630 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13631 0 : return false;
13632 : }
13633 0 : return true;
13634 : } else {
13635 0 : args.rval().setNull();
13636 0 : return true;
13637 : }
13638 : }
13639 :
13640 : static bool
13641 0 : set_ontouchmove(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
13642 : {
13643 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13644 0 : if (args[0].isObject()) {
13645 : { // scope for tempRoot
13646 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
13647 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
13648 : }
13649 : } else {
13650 0 : arg0 = nullptr;
13651 : }
13652 0 : self->SetOntouchmove(Constify(arg0));
13653 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13654 :
13655 0 : return true;
13656 : }
13657 :
13658 : static const JSJitInfo ontouchmove_getterinfo = {
13659 : { (JSJitGetterOp)get_ontouchmove },
13660 : { prototypes::id::Window },
13661 : { PrototypeTraits<prototypes::id::Window>::Depth },
13662 : JSJitInfo::Getter,
13663 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13664 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
13665 : false, /* isInfallible. False in setters. */
13666 : false, /* isMovable. Not relevant for setters. */
13667 : false, /* isEliminatable. Not relevant for setters. */
13668 : false, /* isAlwaysInSlot. Only relevant for getters. */
13669 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13670 : false, /* isTypedMethod. Only relevant for methods. */
13671 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13672 : };
13673 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13674 : static_assert(0 < 5, "There is no slot for us");
13675 : static const JSJitInfo ontouchmove_setterinfo = {
13676 : { (JSJitGetterOp)set_ontouchmove },
13677 : { prototypes::id::Window },
13678 : { PrototypeTraits<prototypes::id::Window>::Depth },
13679 : JSJitInfo::Setter,
13680 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13681 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
13682 : false, /* isInfallible. False in setters. */
13683 : false, /* isMovable. Not relevant for setters. */
13684 : false, /* isEliminatable. Not relevant for setters. */
13685 : false, /* isAlwaysInSlot. Only relevant for getters. */
13686 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13687 : false, /* isTypedMethod. Only relevant for methods. */
13688 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13689 : };
13690 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13691 : static_assert(0 < 5, "There is no slot for us");
13692 :
13693 : static bool
13694 0 : get_ontouchcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13695 : {
13696 0 : RefPtr<EventHandlerNonNull> result(self->GetOntouchcancel());
13697 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13698 0 : if (result) {
13699 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
13700 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13701 0 : return false;
13702 : }
13703 0 : return true;
13704 : } else {
13705 0 : args.rval().setNull();
13706 0 : return true;
13707 : }
13708 : }
13709 :
13710 : static bool
13711 0 : set_ontouchcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
13712 : {
13713 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13714 0 : if (args[0].isObject()) {
13715 : { // scope for tempRoot
13716 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
13717 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
13718 : }
13719 : } else {
13720 0 : arg0 = nullptr;
13721 : }
13722 0 : self->SetOntouchcancel(Constify(arg0));
13723 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13724 :
13725 0 : return true;
13726 : }
13727 :
13728 : static const JSJitInfo ontouchcancel_getterinfo = {
13729 : { (JSJitGetterOp)get_ontouchcancel },
13730 : { prototypes::id::Window },
13731 : { PrototypeTraits<prototypes::id::Window>::Depth },
13732 : JSJitInfo::Getter,
13733 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13734 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
13735 : false, /* isInfallible. False in setters. */
13736 : false, /* isMovable. Not relevant for setters. */
13737 : false, /* isEliminatable. Not relevant for setters. */
13738 : false, /* isAlwaysInSlot. Only relevant for getters. */
13739 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13740 : false, /* isTypedMethod. Only relevant for methods. */
13741 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13742 : };
13743 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13744 : static_assert(0 < 5, "There is no slot for us");
13745 : static const JSJitInfo ontouchcancel_setterinfo = {
13746 : { (JSJitGetterOp)set_ontouchcancel },
13747 : { prototypes::id::Window },
13748 : { PrototypeTraits<prototypes::id::Window>::Depth },
13749 : JSJitInfo::Setter,
13750 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13751 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
13752 : false, /* isInfallible. False in setters. */
13753 : false, /* isMovable. Not relevant for setters. */
13754 : false, /* isEliminatable. Not relevant for setters. */
13755 : false, /* isAlwaysInSlot. Only relevant for getters. */
13756 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13757 : false, /* isTypedMethod. Only relevant for methods. */
13758 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13759 : };
13760 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13761 : static_assert(0 < 5, "There is no slot for us");
13762 :
13763 : static bool
13764 0 : get_onafterprint(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13765 : {
13766 0 : RefPtr<EventHandlerNonNull> result(self->GetOnafterprint());
13767 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13768 0 : if (result) {
13769 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
13770 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13771 0 : return false;
13772 : }
13773 0 : return true;
13774 : } else {
13775 0 : args.rval().setNull();
13776 0 : return true;
13777 : }
13778 : }
13779 :
13780 : static bool
13781 0 : set_onafterprint(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
13782 : {
13783 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13784 0 : if (args[0].isObject()) {
13785 : { // scope for tempRoot
13786 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
13787 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
13788 : }
13789 : } else {
13790 0 : arg0 = nullptr;
13791 : }
13792 0 : self->SetOnafterprint(Constify(arg0));
13793 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13794 :
13795 0 : return true;
13796 : }
13797 :
13798 : static const JSJitInfo onafterprint_getterinfo = {
13799 : { (JSJitGetterOp)get_onafterprint },
13800 : { prototypes::id::Window },
13801 : { PrototypeTraits<prototypes::id::Window>::Depth },
13802 : JSJitInfo::Getter,
13803 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13804 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
13805 : false, /* isInfallible. False in setters. */
13806 : false, /* isMovable. Not relevant for setters. */
13807 : false, /* isEliminatable. Not relevant for setters. */
13808 : false, /* isAlwaysInSlot. Only relevant for getters. */
13809 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13810 : false, /* isTypedMethod. Only relevant for methods. */
13811 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13812 : };
13813 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13814 : static_assert(0 < 5, "There is no slot for us");
13815 : static const JSJitInfo onafterprint_setterinfo = {
13816 : { (JSJitGetterOp)set_onafterprint },
13817 : { prototypes::id::Window },
13818 : { PrototypeTraits<prototypes::id::Window>::Depth },
13819 : JSJitInfo::Setter,
13820 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13821 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
13822 : false, /* isInfallible. False in setters. */
13823 : false, /* isMovable. Not relevant for setters. */
13824 : false, /* isEliminatable. Not relevant for setters. */
13825 : false, /* isAlwaysInSlot. Only relevant for getters. */
13826 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13827 : false, /* isTypedMethod. Only relevant for methods. */
13828 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13829 : };
13830 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13831 : static_assert(0 < 5, "There is no slot for us");
13832 :
13833 : static bool
13834 0 : get_onbeforeprint(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13835 : {
13836 0 : RefPtr<EventHandlerNonNull> result(self->GetOnbeforeprint());
13837 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13838 0 : if (result) {
13839 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
13840 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13841 0 : return false;
13842 : }
13843 0 : return true;
13844 : } else {
13845 0 : args.rval().setNull();
13846 0 : return true;
13847 : }
13848 : }
13849 :
13850 : static bool
13851 0 : set_onbeforeprint(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
13852 : {
13853 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13854 0 : if (args[0].isObject()) {
13855 : { // scope for tempRoot
13856 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
13857 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
13858 : }
13859 : } else {
13860 0 : arg0 = nullptr;
13861 : }
13862 0 : self->SetOnbeforeprint(Constify(arg0));
13863 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13864 :
13865 0 : return true;
13866 : }
13867 :
13868 : static const JSJitInfo onbeforeprint_getterinfo = {
13869 : { (JSJitGetterOp)get_onbeforeprint },
13870 : { prototypes::id::Window },
13871 : { PrototypeTraits<prototypes::id::Window>::Depth },
13872 : JSJitInfo::Getter,
13873 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13874 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
13875 : false, /* isInfallible. False in setters. */
13876 : false, /* isMovable. Not relevant for setters. */
13877 : false, /* isEliminatable. Not relevant for setters. */
13878 : false, /* isAlwaysInSlot. Only relevant for getters. */
13879 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13880 : false, /* isTypedMethod. Only relevant for methods. */
13881 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13882 : };
13883 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13884 : static_assert(0 < 5, "There is no slot for us");
13885 : static const JSJitInfo onbeforeprint_setterinfo = {
13886 : { (JSJitGetterOp)set_onbeforeprint },
13887 : { prototypes::id::Window },
13888 : { PrototypeTraits<prototypes::id::Window>::Depth },
13889 : JSJitInfo::Setter,
13890 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13891 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
13892 : false, /* isInfallible. False in setters. */
13893 : false, /* isMovable. Not relevant for setters. */
13894 : false, /* isEliminatable. Not relevant for setters. */
13895 : false, /* isAlwaysInSlot. Only relevant for getters. */
13896 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13897 : false, /* isTypedMethod. Only relevant for methods. */
13898 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13899 : };
13900 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13901 : static_assert(0 < 5, "There is no slot for us");
13902 :
13903 : static bool
13904 0 : get_onbeforeunload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13905 : {
13906 0 : RefPtr<OnBeforeUnloadEventHandlerNonNull> result(self->GetOnbeforeunload());
13907 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13908 0 : if (result) {
13909 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
13910 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13911 0 : return false;
13912 : }
13913 0 : return true;
13914 : } else {
13915 0 : args.rval().setNull();
13916 0 : return true;
13917 : }
13918 : }
13919 :
13920 : static bool
13921 0 : set_onbeforeunload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
13922 : {
13923 0 : RootedCallback<RefPtr<binding_detail::FastOnBeforeUnloadEventHandlerNonNull>> arg0(cx);
13924 0 : if (args[0].isObject()) {
13925 : { // scope for tempRoot
13926 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
13927 0 : arg0 = new binding_detail::FastOnBeforeUnloadEventHandlerNonNull(tempRoot);
13928 : }
13929 : } else {
13930 0 : arg0 = nullptr;
13931 : }
13932 0 : self->SetOnbeforeunload(Constify(arg0));
13933 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13934 :
13935 0 : return true;
13936 : }
13937 :
13938 : static const JSJitInfo onbeforeunload_getterinfo = {
13939 : { (JSJitGetterOp)get_onbeforeunload },
13940 : { prototypes::id::Window },
13941 : { PrototypeTraits<prototypes::id::Window>::Depth },
13942 : JSJitInfo::Getter,
13943 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13944 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
13945 : false, /* isInfallible. False in setters. */
13946 : false, /* isMovable. Not relevant for setters. */
13947 : false, /* isEliminatable. Not relevant for setters. */
13948 : false, /* isAlwaysInSlot. Only relevant for getters. */
13949 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13950 : false, /* isTypedMethod. Only relevant for methods. */
13951 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13952 : };
13953 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13954 : static_assert(0 < 5, "There is no slot for us");
13955 : static const JSJitInfo onbeforeunload_setterinfo = {
13956 : { (JSJitGetterOp)set_onbeforeunload },
13957 : { prototypes::id::Window },
13958 : { PrototypeTraits<prototypes::id::Window>::Depth },
13959 : JSJitInfo::Setter,
13960 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
13961 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
13962 : false, /* isInfallible. False in setters. */
13963 : false, /* isMovable. Not relevant for setters. */
13964 : false, /* isEliminatable. Not relevant for setters. */
13965 : false, /* isAlwaysInSlot. Only relevant for getters. */
13966 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
13967 : false, /* isTypedMethod. Only relevant for methods. */
13968 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
13969 : };
13970 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
13971 : static_assert(0 < 5, "There is no slot for us");
13972 :
13973 : static bool
13974 0 : get_onhashchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
13975 : {
13976 0 : RefPtr<EventHandlerNonNull> result(self->GetOnhashchange());
13977 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
13978 0 : if (result) {
13979 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
13980 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
13981 0 : return false;
13982 : }
13983 0 : return true;
13984 : } else {
13985 0 : args.rval().setNull();
13986 0 : return true;
13987 : }
13988 : }
13989 :
13990 : static bool
13991 0 : set_onhashchange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
13992 : {
13993 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
13994 0 : if (args[0].isObject()) {
13995 : { // scope for tempRoot
13996 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
13997 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
13998 : }
13999 : } else {
14000 0 : arg0 = nullptr;
14001 : }
14002 0 : self->SetOnhashchange(Constify(arg0));
14003 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14004 :
14005 0 : return true;
14006 : }
14007 :
14008 : static const JSJitInfo onhashchange_getterinfo = {
14009 : { (JSJitGetterOp)get_onhashchange },
14010 : { prototypes::id::Window },
14011 : { PrototypeTraits<prototypes::id::Window>::Depth },
14012 : JSJitInfo::Getter,
14013 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14014 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
14015 : false, /* isInfallible. False in setters. */
14016 : false, /* isMovable. Not relevant for setters. */
14017 : false, /* isEliminatable. Not relevant for setters. */
14018 : false, /* isAlwaysInSlot. Only relevant for getters. */
14019 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14020 : false, /* isTypedMethod. Only relevant for methods. */
14021 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14022 : };
14023 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14024 : static_assert(0 < 5, "There is no slot for us");
14025 : static const JSJitInfo onhashchange_setterinfo = {
14026 : { (JSJitGetterOp)set_onhashchange },
14027 : { prototypes::id::Window },
14028 : { PrototypeTraits<prototypes::id::Window>::Depth },
14029 : JSJitInfo::Setter,
14030 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14031 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
14032 : false, /* isInfallible. False in setters. */
14033 : false, /* isMovable. Not relevant for setters. */
14034 : false, /* isEliminatable. Not relevant for setters. */
14035 : false, /* isAlwaysInSlot. Only relevant for getters. */
14036 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14037 : false, /* isTypedMethod. Only relevant for methods. */
14038 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14039 : };
14040 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14041 : static_assert(0 < 5, "There is no slot for us");
14042 :
14043 : static bool
14044 0 : get_onlanguagechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
14045 : {
14046 0 : RefPtr<EventHandlerNonNull> result(self->GetOnlanguagechange());
14047 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14048 0 : if (result) {
14049 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
14050 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14051 0 : return false;
14052 : }
14053 0 : return true;
14054 : } else {
14055 0 : args.rval().setNull();
14056 0 : return true;
14057 : }
14058 : }
14059 :
14060 : static bool
14061 0 : set_onlanguagechange(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
14062 : {
14063 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14064 0 : if (args[0].isObject()) {
14065 : { // scope for tempRoot
14066 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
14067 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
14068 : }
14069 : } else {
14070 0 : arg0 = nullptr;
14071 : }
14072 0 : self->SetOnlanguagechange(Constify(arg0));
14073 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14074 :
14075 0 : return true;
14076 : }
14077 :
14078 : static const JSJitInfo onlanguagechange_getterinfo = {
14079 : { (JSJitGetterOp)get_onlanguagechange },
14080 : { prototypes::id::Window },
14081 : { PrototypeTraits<prototypes::id::Window>::Depth },
14082 : JSJitInfo::Getter,
14083 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14084 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
14085 : false, /* isInfallible. False in setters. */
14086 : false, /* isMovable. Not relevant for setters. */
14087 : false, /* isEliminatable. Not relevant for setters. */
14088 : false, /* isAlwaysInSlot. Only relevant for getters. */
14089 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14090 : false, /* isTypedMethod. Only relevant for methods. */
14091 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14092 : };
14093 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14094 : static_assert(0 < 5, "There is no slot for us");
14095 : static const JSJitInfo onlanguagechange_setterinfo = {
14096 : { (JSJitGetterOp)set_onlanguagechange },
14097 : { prototypes::id::Window },
14098 : { PrototypeTraits<prototypes::id::Window>::Depth },
14099 : JSJitInfo::Setter,
14100 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14101 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
14102 : false, /* isInfallible. False in setters. */
14103 : false, /* isMovable. Not relevant for setters. */
14104 : false, /* isEliminatable. Not relevant for setters. */
14105 : false, /* isAlwaysInSlot. Only relevant for getters. */
14106 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14107 : false, /* isTypedMethod. Only relevant for methods. */
14108 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14109 : };
14110 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14111 : static_assert(0 < 5, "There is no slot for us");
14112 :
14113 : static bool
14114 0 : get_onmessage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
14115 : {
14116 0 : RefPtr<EventHandlerNonNull> result(self->GetOnmessage());
14117 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14118 0 : if (result) {
14119 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
14120 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14121 0 : return false;
14122 : }
14123 0 : return true;
14124 : } else {
14125 0 : args.rval().setNull();
14126 0 : return true;
14127 : }
14128 : }
14129 :
14130 : static bool
14131 0 : set_onmessage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
14132 : {
14133 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14134 0 : if (args[0].isObject()) {
14135 : { // scope for tempRoot
14136 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
14137 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
14138 : }
14139 : } else {
14140 0 : arg0 = nullptr;
14141 : }
14142 0 : self->SetOnmessage(Constify(arg0));
14143 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14144 :
14145 0 : return true;
14146 : }
14147 :
14148 : static const JSJitInfo onmessage_getterinfo = {
14149 : { (JSJitGetterOp)get_onmessage },
14150 : { prototypes::id::Window },
14151 : { PrototypeTraits<prototypes::id::Window>::Depth },
14152 : JSJitInfo::Getter,
14153 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14154 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
14155 : false, /* isInfallible. False in setters. */
14156 : false, /* isMovable. Not relevant for setters. */
14157 : false, /* isEliminatable. Not relevant for setters. */
14158 : false, /* isAlwaysInSlot. Only relevant for getters. */
14159 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14160 : false, /* isTypedMethod. Only relevant for methods. */
14161 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14162 : };
14163 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14164 : static_assert(0 < 5, "There is no slot for us");
14165 : static const JSJitInfo onmessage_setterinfo = {
14166 : { (JSJitGetterOp)set_onmessage },
14167 : { prototypes::id::Window },
14168 : { PrototypeTraits<prototypes::id::Window>::Depth },
14169 : JSJitInfo::Setter,
14170 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14171 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
14172 : false, /* isInfallible. False in setters. */
14173 : false, /* isMovable. Not relevant for setters. */
14174 : false, /* isEliminatable. Not relevant for setters. */
14175 : false, /* isAlwaysInSlot. Only relevant for getters. */
14176 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14177 : false, /* isTypedMethod. Only relevant for methods. */
14178 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14179 : };
14180 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14181 : static_assert(0 < 5, "There is no slot for us");
14182 :
14183 : static bool
14184 0 : get_onoffline(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
14185 : {
14186 0 : RefPtr<EventHandlerNonNull> result(self->GetOnoffline());
14187 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14188 0 : if (result) {
14189 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
14190 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14191 0 : return false;
14192 : }
14193 0 : return true;
14194 : } else {
14195 0 : args.rval().setNull();
14196 0 : return true;
14197 : }
14198 : }
14199 :
14200 : static bool
14201 0 : set_onoffline(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
14202 : {
14203 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14204 0 : if (args[0].isObject()) {
14205 : { // scope for tempRoot
14206 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
14207 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
14208 : }
14209 : } else {
14210 0 : arg0 = nullptr;
14211 : }
14212 0 : self->SetOnoffline(Constify(arg0));
14213 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14214 :
14215 0 : return true;
14216 : }
14217 :
14218 : static const JSJitInfo onoffline_getterinfo = {
14219 : { (JSJitGetterOp)get_onoffline },
14220 : { prototypes::id::Window },
14221 : { PrototypeTraits<prototypes::id::Window>::Depth },
14222 : JSJitInfo::Getter,
14223 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14224 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
14225 : false, /* isInfallible. False in setters. */
14226 : false, /* isMovable. Not relevant for setters. */
14227 : false, /* isEliminatable. Not relevant for setters. */
14228 : false, /* isAlwaysInSlot. Only relevant for getters. */
14229 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14230 : false, /* isTypedMethod. Only relevant for methods. */
14231 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14232 : };
14233 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14234 : static_assert(0 < 5, "There is no slot for us");
14235 : static const JSJitInfo onoffline_setterinfo = {
14236 : { (JSJitGetterOp)set_onoffline },
14237 : { prototypes::id::Window },
14238 : { PrototypeTraits<prototypes::id::Window>::Depth },
14239 : JSJitInfo::Setter,
14240 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14241 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
14242 : false, /* isInfallible. False in setters. */
14243 : false, /* isMovable. Not relevant for setters. */
14244 : false, /* isEliminatable. Not relevant for setters. */
14245 : false, /* isAlwaysInSlot. Only relevant for getters. */
14246 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14247 : false, /* isTypedMethod. Only relevant for methods. */
14248 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14249 : };
14250 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14251 : static_assert(0 < 5, "There is no slot for us");
14252 :
14253 : static bool
14254 0 : get_ononline(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
14255 : {
14256 0 : RefPtr<EventHandlerNonNull> result(self->GetOnonline());
14257 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14258 0 : if (result) {
14259 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
14260 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14261 0 : return false;
14262 : }
14263 0 : return true;
14264 : } else {
14265 0 : args.rval().setNull();
14266 0 : return true;
14267 : }
14268 : }
14269 :
14270 : static bool
14271 0 : set_ononline(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
14272 : {
14273 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14274 0 : if (args[0].isObject()) {
14275 : { // scope for tempRoot
14276 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
14277 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
14278 : }
14279 : } else {
14280 0 : arg0 = nullptr;
14281 : }
14282 0 : self->SetOnonline(Constify(arg0));
14283 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14284 :
14285 0 : return true;
14286 : }
14287 :
14288 : static const JSJitInfo ononline_getterinfo = {
14289 : { (JSJitGetterOp)get_ononline },
14290 : { prototypes::id::Window },
14291 : { PrototypeTraits<prototypes::id::Window>::Depth },
14292 : JSJitInfo::Getter,
14293 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14294 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
14295 : false, /* isInfallible. False in setters. */
14296 : false, /* isMovable. Not relevant for setters. */
14297 : false, /* isEliminatable. Not relevant for setters. */
14298 : false, /* isAlwaysInSlot. Only relevant for getters. */
14299 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14300 : false, /* isTypedMethod. Only relevant for methods. */
14301 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14302 : };
14303 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14304 : static_assert(0 < 5, "There is no slot for us");
14305 : static const JSJitInfo ononline_setterinfo = {
14306 : { (JSJitGetterOp)set_ononline },
14307 : { prototypes::id::Window },
14308 : { PrototypeTraits<prototypes::id::Window>::Depth },
14309 : JSJitInfo::Setter,
14310 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14311 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
14312 : false, /* isInfallible. False in setters. */
14313 : false, /* isMovable. Not relevant for setters. */
14314 : false, /* isEliminatable. Not relevant for setters. */
14315 : false, /* isAlwaysInSlot. Only relevant for getters. */
14316 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14317 : false, /* isTypedMethod. Only relevant for methods. */
14318 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14319 : };
14320 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14321 : static_assert(0 < 5, "There is no slot for us");
14322 :
14323 : static bool
14324 0 : get_onpagehide(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
14325 : {
14326 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpagehide());
14327 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14328 0 : if (result) {
14329 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
14330 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14331 0 : return false;
14332 : }
14333 0 : return true;
14334 : } else {
14335 0 : args.rval().setNull();
14336 0 : return true;
14337 : }
14338 : }
14339 :
14340 : static bool
14341 0 : set_onpagehide(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
14342 : {
14343 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14344 0 : if (args[0].isObject()) {
14345 : { // scope for tempRoot
14346 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
14347 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
14348 : }
14349 : } else {
14350 0 : arg0 = nullptr;
14351 : }
14352 0 : self->SetOnpagehide(Constify(arg0));
14353 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14354 :
14355 0 : return true;
14356 : }
14357 :
14358 : static const JSJitInfo onpagehide_getterinfo = {
14359 : { (JSJitGetterOp)get_onpagehide },
14360 : { prototypes::id::Window },
14361 : { PrototypeTraits<prototypes::id::Window>::Depth },
14362 : JSJitInfo::Getter,
14363 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14364 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
14365 : false, /* isInfallible. False in setters. */
14366 : false, /* isMovable. Not relevant for setters. */
14367 : false, /* isEliminatable. Not relevant for setters. */
14368 : false, /* isAlwaysInSlot. Only relevant for getters. */
14369 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14370 : false, /* isTypedMethod. Only relevant for methods. */
14371 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14372 : };
14373 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14374 : static_assert(0 < 5, "There is no slot for us");
14375 : static const JSJitInfo onpagehide_setterinfo = {
14376 : { (JSJitGetterOp)set_onpagehide },
14377 : { prototypes::id::Window },
14378 : { PrototypeTraits<prototypes::id::Window>::Depth },
14379 : JSJitInfo::Setter,
14380 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14381 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
14382 : false, /* isInfallible. False in setters. */
14383 : false, /* isMovable. Not relevant for setters. */
14384 : false, /* isEliminatable. Not relevant for setters. */
14385 : false, /* isAlwaysInSlot. Only relevant for getters. */
14386 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14387 : false, /* isTypedMethod. Only relevant for methods. */
14388 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14389 : };
14390 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14391 : static_assert(0 < 5, "There is no slot for us");
14392 :
14393 : static bool
14394 0 : get_onpageshow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
14395 : {
14396 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpageshow());
14397 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14398 0 : if (result) {
14399 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
14400 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14401 0 : return false;
14402 : }
14403 0 : return true;
14404 : } else {
14405 0 : args.rval().setNull();
14406 0 : return true;
14407 : }
14408 : }
14409 :
14410 : static bool
14411 0 : set_onpageshow(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
14412 : {
14413 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14414 0 : if (args[0].isObject()) {
14415 : { // scope for tempRoot
14416 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
14417 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
14418 : }
14419 : } else {
14420 0 : arg0 = nullptr;
14421 : }
14422 0 : self->SetOnpageshow(Constify(arg0));
14423 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14424 :
14425 0 : return true;
14426 : }
14427 :
14428 : static const JSJitInfo onpageshow_getterinfo = {
14429 : { (JSJitGetterOp)get_onpageshow },
14430 : { prototypes::id::Window },
14431 : { PrototypeTraits<prototypes::id::Window>::Depth },
14432 : JSJitInfo::Getter,
14433 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14434 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
14435 : false, /* isInfallible. False in setters. */
14436 : false, /* isMovable. Not relevant for setters. */
14437 : false, /* isEliminatable. Not relevant for setters. */
14438 : false, /* isAlwaysInSlot. Only relevant for getters. */
14439 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14440 : false, /* isTypedMethod. Only relevant for methods. */
14441 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14442 : };
14443 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14444 : static_assert(0 < 5, "There is no slot for us");
14445 : static const JSJitInfo onpageshow_setterinfo = {
14446 : { (JSJitGetterOp)set_onpageshow },
14447 : { prototypes::id::Window },
14448 : { PrototypeTraits<prototypes::id::Window>::Depth },
14449 : JSJitInfo::Setter,
14450 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14451 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
14452 : false, /* isInfallible. False in setters. */
14453 : false, /* isMovable. Not relevant for setters. */
14454 : false, /* isEliminatable. Not relevant for setters. */
14455 : false, /* isAlwaysInSlot. Only relevant for getters. */
14456 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14457 : false, /* isTypedMethod. Only relevant for methods. */
14458 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14459 : };
14460 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14461 : static_assert(0 < 5, "There is no slot for us");
14462 :
14463 : static bool
14464 0 : get_onpopstate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
14465 : {
14466 0 : RefPtr<EventHandlerNonNull> result(self->GetOnpopstate());
14467 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14468 0 : if (result) {
14469 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
14470 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14471 0 : return false;
14472 : }
14473 0 : return true;
14474 : } else {
14475 0 : args.rval().setNull();
14476 0 : return true;
14477 : }
14478 : }
14479 :
14480 : static bool
14481 0 : set_onpopstate(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
14482 : {
14483 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14484 0 : if (args[0].isObject()) {
14485 : { // scope for tempRoot
14486 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
14487 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
14488 : }
14489 : } else {
14490 0 : arg0 = nullptr;
14491 : }
14492 0 : self->SetOnpopstate(Constify(arg0));
14493 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14494 :
14495 0 : return true;
14496 : }
14497 :
14498 : static const JSJitInfo onpopstate_getterinfo = {
14499 : { (JSJitGetterOp)get_onpopstate },
14500 : { prototypes::id::Window },
14501 : { PrototypeTraits<prototypes::id::Window>::Depth },
14502 : JSJitInfo::Getter,
14503 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14504 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
14505 : false, /* isInfallible. False in setters. */
14506 : false, /* isMovable. Not relevant for setters. */
14507 : false, /* isEliminatable. Not relevant for setters. */
14508 : false, /* isAlwaysInSlot. Only relevant for getters. */
14509 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14510 : false, /* isTypedMethod. Only relevant for methods. */
14511 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14512 : };
14513 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14514 : static_assert(0 < 5, "There is no slot for us");
14515 : static const JSJitInfo onpopstate_setterinfo = {
14516 : { (JSJitGetterOp)set_onpopstate },
14517 : { prototypes::id::Window },
14518 : { PrototypeTraits<prototypes::id::Window>::Depth },
14519 : JSJitInfo::Setter,
14520 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14521 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
14522 : false, /* isInfallible. False in setters. */
14523 : false, /* isMovable. Not relevant for setters. */
14524 : false, /* isEliminatable. Not relevant for setters. */
14525 : false, /* isAlwaysInSlot. Only relevant for getters. */
14526 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14527 : false, /* isTypedMethod. Only relevant for methods. */
14528 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14529 : };
14530 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14531 : static_assert(0 < 5, "There is no slot for us");
14532 :
14533 : static bool
14534 0 : get_onstorage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
14535 : {
14536 0 : RefPtr<EventHandlerNonNull> result(self->GetOnstorage());
14537 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14538 0 : if (result) {
14539 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
14540 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14541 0 : return false;
14542 : }
14543 0 : return true;
14544 : } else {
14545 0 : args.rval().setNull();
14546 0 : return true;
14547 : }
14548 : }
14549 :
14550 : static bool
14551 0 : set_onstorage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
14552 : {
14553 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14554 0 : if (args[0].isObject()) {
14555 : { // scope for tempRoot
14556 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
14557 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
14558 : }
14559 : } else {
14560 0 : arg0 = nullptr;
14561 : }
14562 0 : self->SetOnstorage(Constify(arg0));
14563 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14564 :
14565 0 : return true;
14566 : }
14567 :
14568 : static const JSJitInfo onstorage_getterinfo = {
14569 : { (JSJitGetterOp)get_onstorage },
14570 : { prototypes::id::Window },
14571 : { PrototypeTraits<prototypes::id::Window>::Depth },
14572 : JSJitInfo::Getter,
14573 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14574 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
14575 : false, /* isInfallible. False in setters. */
14576 : false, /* isMovable. Not relevant for setters. */
14577 : false, /* isEliminatable. Not relevant for setters. */
14578 : false, /* isAlwaysInSlot. Only relevant for getters. */
14579 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14580 : false, /* isTypedMethod. Only relevant for methods. */
14581 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14582 : };
14583 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14584 : static_assert(0 < 5, "There is no slot for us");
14585 : static const JSJitInfo onstorage_setterinfo = {
14586 : { (JSJitGetterOp)set_onstorage },
14587 : { prototypes::id::Window },
14588 : { PrototypeTraits<prototypes::id::Window>::Depth },
14589 : JSJitInfo::Setter,
14590 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14591 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
14592 : false, /* isInfallible. False in setters. */
14593 : false, /* isMovable. Not relevant for setters. */
14594 : false, /* isEliminatable. Not relevant for setters. */
14595 : false, /* isAlwaysInSlot. Only relevant for getters. */
14596 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14597 : false, /* isTypedMethod. Only relevant for methods. */
14598 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14599 : };
14600 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14601 : static_assert(0 < 5, "There is no slot for us");
14602 :
14603 : static bool
14604 0 : get_onunload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
14605 : {
14606 0 : RefPtr<EventHandlerNonNull> result(self->GetOnunload());
14607 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14608 0 : if (result) {
14609 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
14610 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
14611 0 : return false;
14612 : }
14613 0 : return true;
14614 : } else {
14615 0 : args.rval().setNull();
14616 0 : return true;
14617 : }
14618 : }
14619 :
14620 : static bool
14621 0 : set_onunload(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
14622 : {
14623 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
14624 0 : if (args[0].isObject()) {
14625 : { // scope for tempRoot
14626 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
14627 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
14628 : }
14629 : } else {
14630 0 : arg0 = nullptr;
14631 : }
14632 0 : self->SetOnunload(Constify(arg0));
14633 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14634 :
14635 0 : return true;
14636 : }
14637 :
14638 : static const JSJitInfo onunload_getterinfo = {
14639 : { (JSJitGetterOp)get_onunload },
14640 : { prototypes::id::Window },
14641 : { PrototypeTraits<prototypes::id::Window>::Depth },
14642 : JSJitInfo::Getter,
14643 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14644 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
14645 : false, /* isInfallible. False in setters. */
14646 : false, /* isMovable. Not relevant for setters. */
14647 : false, /* isEliminatable. Not relevant for setters. */
14648 : false, /* isAlwaysInSlot. Only relevant for getters. */
14649 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14650 : false, /* isTypedMethod. Only relevant for methods. */
14651 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14652 : };
14653 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14654 : static_assert(0 < 5, "There is no slot for us");
14655 : static const JSJitInfo onunload_setterinfo = {
14656 : { (JSJitGetterOp)set_onunload },
14657 : { prototypes::id::Window },
14658 : { PrototypeTraits<prototypes::id::Window>::Depth },
14659 : JSJitInfo::Setter,
14660 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14661 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
14662 : false, /* isInfallible. False in setters. */
14663 : false, /* isMovable. Not relevant for setters. */
14664 : false, /* isEliminatable. Not relevant for setters. */
14665 : false, /* isAlwaysInSlot. Only relevant for getters. */
14666 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14667 : false, /* isTypedMethod. Only relevant for methods. */
14668 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14669 : };
14670 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14671 : static_assert(0 < 5, "There is no slot for us");
14672 :
14673 : static bool
14674 0 : get_localStorage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
14675 : {
14676 0 : binding_detail::FastErrorResult rv;
14677 0 : auto result(StrongOrRawPtr<mozilla::dom::Storage>(self->GetLocalStorage(rv)));
14678 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
14679 0 : return false;
14680 : }
14681 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14682 0 : if (!result) {
14683 0 : args.rval().setNull();
14684 0 : return true;
14685 : }
14686 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
14687 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
14688 0 : return false;
14689 : }
14690 0 : return true;
14691 : }
14692 :
14693 : static const JSJitInfo localStorage_getterinfo = {
14694 : { (JSJitGetterOp)get_localStorage },
14695 : { prototypes::id::Window },
14696 : { PrototypeTraits<prototypes::id::Window>::Depth },
14697 : JSJitInfo::Getter,
14698 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14699 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
14700 : false, /* isInfallible. False in setters. */
14701 : false, /* isMovable. Not relevant for setters. */
14702 : false, /* isEliminatable. Not relevant for setters. */
14703 : false, /* isAlwaysInSlot. Only relevant for getters. */
14704 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14705 : false, /* isTypedMethod. Only relevant for methods. */
14706 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14707 : };
14708 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14709 : static_assert(0 < 5, "There is no slot for us");
14710 :
14711 : static bool
14712 0 : get_dialogArguments(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
14713 : {
14714 0 : binding_detail::FastErrorResult rv;
14715 0 : JSCompartment* compartment = js::GetContextCompartment(cx);
14716 0 : MOZ_ASSERT(compartment);
14717 0 : JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
14718 : // Initializing a nonnull is pretty darn annoying...
14719 0 : NonNull<nsIPrincipal> subjectPrincipal;
14720 0 : subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
14721 0 : JS::Rooted<JS::Value> result(cx);
14722 0 : self->GetDialogArguments(cx, &result, subjectPrincipal, rv);
14723 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
14724 0 : return false;
14725 : }
14726 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14727 0 : JS::ExposeValueToActiveJS(result);
14728 0 : args.rval().set(result);
14729 0 : if (!MaybeWrapValue(cx, args.rval())) {
14730 0 : return false;
14731 : }
14732 0 : return true;
14733 : }
14734 :
14735 : static const JSJitInfo dialogArguments_getterinfo = {
14736 : { (JSJitGetterOp)get_dialogArguments },
14737 : { prototypes::id::Window },
14738 : { PrototypeTraits<prototypes::id::Window>::Depth },
14739 : JSJitInfo::Getter,
14740 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14741 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
14742 : false, /* isInfallible. False in setters. */
14743 : false, /* isMovable. Not relevant for setters. */
14744 : false, /* isEliminatable. Not relevant for setters. */
14745 : false, /* isAlwaysInSlot. Only relevant for getters. */
14746 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14747 : false, /* isTypedMethod. Only relevant for methods. */
14748 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14749 : };
14750 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14751 : static_assert(0 < 5, "There is no slot for us");
14752 :
14753 : static bool
14754 0 : get_returnValue(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
14755 : {
14756 0 : binding_detail::FastErrorResult rv;
14757 0 : JSCompartment* compartment = js::GetContextCompartment(cx);
14758 0 : MOZ_ASSERT(compartment);
14759 0 : JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
14760 : // Initializing a nonnull is pretty darn annoying...
14761 0 : NonNull<nsIPrincipal> subjectPrincipal;
14762 0 : subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
14763 0 : JS::Rooted<JS::Value> result(cx);
14764 0 : self->GetReturnValue(cx, &result, subjectPrincipal, rv);
14765 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
14766 0 : return false;
14767 : }
14768 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14769 0 : JS::ExposeValueToActiveJS(result);
14770 0 : args.rval().set(result);
14771 0 : if (!MaybeWrapValue(cx, args.rval())) {
14772 0 : return false;
14773 : }
14774 0 : return true;
14775 : }
14776 :
14777 : static bool
14778 0 : set_returnValue(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
14779 : {
14780 0 : JS::Rooted<JS::Value> arg0(cx);
14781 0 : arg0 = args[0];
14782 0 : binding_detail::FastErrorResult rv;
14783 0 : JSCompartment* compartment = js::GetContextCompartment(cx);
14784 0 : MOZ_ASSERT(compartment);
14785 0 : JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
14786 : // Initializing a nonnull is pretty darn annoying...
14787 0 : NonNull<nsIPrincipal> subjectPrincipal;
14788 0 : subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
14789 0 : self->SetReturnValue(cx, arg0, subjectPrincipal, rv);
14790 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
14791 0 : return false;
14792 : }
14793 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14794 :
14795 0 : return true;
14796 : }
14797 :
14798 : static const JSJitInfo returnValue_getterinfo = {
14799 : { (JSJitGetterOp)get_returnValue },
14800 : { prototypes::id::Window },
14801 : { PrototypeTraits<prototypes::id::Window>::Depth },
14802 : JSJitInfo::Getter,
14803 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14804 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
14805 : false, /* isInfallible. False in setters. */
14806 : false, /* isMovable. Not relevant for setters. */
14807 : false, /* isEliminatable. Not relevant for setters. */
14808 : false, /* isAlwaysInSlot. Only relevant for getters. */
14809 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14810 : false, /* isTypedMethod. Only relevant for methods. */
14811 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14812 : };
14813 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14814 : static_assert(0 < 5, "There is no slot for us");
14815 : static const JSJitInfo returnValue_setterinfo = {
14816 : { (JSJitGetterOp)set_returnValue },
14817 : { prototypes::id::Window },
14818 : { PrototypeTraits<prototypes::id::Window>::Depth },
14819 : JSJitInfo::Setter,
14820 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14821 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
14822 : false, /* isInfallible. False in setters. */
14823 : false, /* isMovable. Not relevant for setters. */
14824 : false, /* isEliminatable. Not relevant for setters. */
14825 : false, /* isAlwaysInSlot. Only relevant for getters. */
14826 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14827 : false, /* isTypedMethod. Only relevant for methods. */
14828 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14829 : };
14830 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14831 : static_assert(0 < 5, "There is no slot for us");
14832 :
14833 : static bool
14834 0 : get_origin(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
14835 : {
14836 0 : DOMString result;
14837 0 : self->GetOrigin(result);
14838 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14839 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
14840 0 : return false;
14841 : }
14842 0 : return true;
14843 : }
14844 :
14845 : static bool
14846 0 : set_origin(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitSetterCallArgs args)
14847 : {
14848 0 : return JS_DefineProperty(cx, obj, "origin", args[0], JSPROP_ENUMERATE);
14849 : }
14850 :
14851 : static const JSJitInfo origin_getterinfo = {
14852 : { (JSJitGetterOp)get_origin },
14853 : { prototypes::id::Window },
14854 : { PrototypeTraits<prototypes::id::Window>::Depth },
14855 : JSJitInfo::Getter,
14856 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14857 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
14858 : false, /* isInfallible. False in setters. */
14859 : false, /* isMovable. Not relevant for setters. */
14860 : false, /* isEliminatable. Not relevant for setters. */
14861 : false, /* isAlwaysInSlot. Only relevant for getters. */
14862 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14863 : false, /* isTypedMethod. Only relevant for methods. */
14864 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14865 : };
14866 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14867 : static_assert(0 < 5, "There is no slot for us");
14868 : static const JSJitInfo origin_setterinfo = {
14869 : { (JSJitGetterOp)set_origin },
14870 : { prototypes::id::Window },
14871 : { PrototypeTraits<prototypes::id::Window>::Depth },
14872 : JSJitInfo::Setter,
14873 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14874 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
14875 : false, /* isInfallible. False in setters. */
14876 : false, /* isMovable. Not relevant for setters. */
14877 : false, /* isEliminatable. Not relevant for setters. */
14878 : false, /* isAlwaysInSlot. Only relevant for getters. */
14879 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14880 : false, /* isTypedMethod. Only relevant for methods. */
14881 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14882 : };
14883 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14884 : static_assert(0 < 5, "There is no slot for us");
14885 :
14886 : static bool
14887 0 : btoa(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
14888 : {
14889 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
14890 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.btoa");
14891 : }
14892 0 : binding_detail::FakeString arg0;
14893 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
14894 0 : return false;
14895 : }
14896 0 : binding_detail::FastErrorResult rv;
14897 0 : DOMString result;
14898 0 : self->Btoa(NonNullHelper(Constify(arg0)), result, rv);
14899 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
14900 0 : return false;
14901 : }
14902 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14903 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
14904 0 : return false;
14905 : }
14906 0 : return true;
14907 : }
14908 :
14909 : static const JSJitInfo btoa_methodinfo = {
14910 : { (JSJitGetterOp)btoa },
14911 : { prototypes::id::Window },
14912 : { PrototypeTraits<prototypes::id::Window>::Depth },
14913 : JSJitInfo::Method,
14914 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14915 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
14916 : false, /* isInfallible. False in setters. */
14917 : false, /* isMovable. Not relevant for setters. */
14918 : false, /* isEliminatable. Not relevant for setters. */
14919 : false, /* isAlwaysInSlot. Only relevant for getters. */
14920 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14921 : false, /* isTypedMethod. Only relevant for methods. */
14922 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14923 : };
14924 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14925 : static_assert(0 < 5, "There is no slot for us");
14926 :
14927 : static bool
14928 0 : atob(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
14929 : {
14930 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
14931 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.atob");
14932 : }
14933 0 : binding_detail::FakeString arg0;
14934 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
14935 0 : return false;
14936 : }
14937 0 : binding_detail::FastErrorResult rv;
14938 0 : DOMString result;
14939 0 : self->Atob(NonNullHelper(Constify(arg0)), result, rv);
14940 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
14941 0 : return false;
14942 : }
14943 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
14944 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
14945 0 : return false;
14946 : }
14947 0 : return true;
14948 : }
14949 :
14950 : static const JSJitInfo atob_methodinfo = {
14951 : { (JSJitGetterOp)atob },
14952 : { prototypes::id::Window },
14953 : { PrototypeTraits<prototypes::id::Window>::Depth },
14954 : JSJitInfo::Method,
14955 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
14956 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
14957 : false, /* isInfallible. False in setters. */
14958 : false, /* isMovable. Not relevant for setters. */
14959 : false, /* isEliminatable. Not relevant for setters. */
14960 : false, /* isAlwaysInSlot. Only relevant for getters. */
14961 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
14962 : false, /* isTypedMethod. Only relevant for methods. */
14963 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
14964 : };
14965 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
14966 : static_assert(0 < 5, "There is no slot for us");
14967 :
14968 : static bool
14969 11 : setTimeout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
14970 : {
14971 11 : unsigned argcount = std::min(args.length(), 3u);
14972 11 : switch (argcount) {
14973 : case 1: {
14974 : MOZ_FALLTHROUGH;
14975 : }
14976 : case 2: {
14977 : MOZ_FALLTHROUGH;
14978 : }
14979 : case 3: {
14980 11 : if (args[0].isObject()) {
14981 : do {
14982 11 : RootedCallback<OwningNonNull<binding_detail::FastFunction>> arg0(cx);
14983 11 : if (JS::IsCallable(&args[0].toObject())) {
14984 : { // scope for tempRoot
14985 22 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
14986 22 : arg0 = new binding_detail::FastFunction(tempRoot);
14987 : }
14988 : } else {
14989 0 : break;
14990 : }
14991 : int32_t arg1;
14992 11 : if (args.hasDefined(1)) {
14993 11 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
14994 0 : return false;
14995 : }
14996 : } else {
14997 0 : arg1 = 0;
14998 : }
14999 22 : binding_detail::AutoSequence<JS::Value> arg2;
15000 22 : SequenceRooter<JS::Value> arg2_holder(cx, &arg2);
15001 11 : if (args.length() > 2) {
15002 2 : if (!arg2.SetCapacity(args.length() - 2, mozilla::fallible)) {
15003 0 : JS_ReportOutOfMemory(cx);
15004 0 : return false;
15005 : }
15006 4 : for (uint32_t variadicArg = 2; variadicArg < args.length(); ++variadicArg) {
15007 2 : JS::Value& slot = *arg2.AppendElement(mozilla::fallible);
15008 2 : slot = args[variadicArg];
15009 : }
15010 : }
15011 22 : binding_detail::FastErrorResult rv;
15012 11 : int32_t result(self->SetTimeout(cx, NonNullHelper(arg0), arg1, Constify(arg2), rv));
15013 11 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15014 0 : return false;
15015 : }
15016 11 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15017 11 : args.rval().setInt32(int32_t(result));
15018 11 : return true;
15019 : } while (0);
15020 : }
15021 0 : binding_detail::FakeString arg0;
15022 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
15023 0 : return false;
15024 : }
15025 : int32_t arg1;
15026 0 : if (args.hasDefined(1)) {
15027 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
15028 0 : return false;
15029 : }
15030 : } else {
15031 0 : arg1 = 0;
15032 : }
15033 0 : binding_detail::AutoSequence<JS::Value> arg2;
15034 0 : SequenceRooter<JS::Value> arg2_holder(cx, &arg2);
15035 0 : if (args.length() > 2) {
15036 0 : if (!arg2.SetCapacity(args.length() - 2, mozilla::fallible)) {
15037 0 : JS_ReportOutOfMemory(cx);
15038 0 : return false;
15039 : }
15040 0 : for (uint32_t variadicArg = 2; variadicArg < args.length(); ++variadicArg) {
15041 0 : JS::Value& slot = *arg2.AppendElement(mozilla::fallible);
15042 0 : slot = args[variadicArg];
15043 : }
15044 : }
15045 0 : binding_detail::FastErrorResult rv;
15046 0 : int32_t result(self->SetTimeout(cx, NonNullHelper(Constify(arg0)), arg1, Constify(arg2), rv));
15047 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15048 0 : return false;
15049 : }
15050 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15051 0 : args.rval().setInt32(int32_t(result));
15052 0 : return true;
15053 : break;
15054 : }
15055 : default: {
15056 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.setTimeout");
15057 : break;
15058 : }
15059 : }
15060 : MOZ_CRASH("We have an always-returning default case");
15061 : return false;
15062 : }
15063 :
15064 : static const JSJitInfo setTimeout_methodinfo = {
15065 : { (JSJitGetterOp)setTimeout },
15066 : { prototypes::id::Window },
15067 : { PrototypeTraits<prototypes::id::Window>::Depth },
15068 : JSJitInfo::Method,
15069 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
15070 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
15071 : false, /* isInfallible. False in setters. */
15072 : false, /* isMovable. Not relevant for setters. */
15073 : false, /* isEliminatable. Not relevant for setters. */
15074 : false, /* isAlwaysInSlot. Only relevant for getters. */
15075 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
15076 : false, /* isTypedMethod. Only relevant for methods. */
15077 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
15078 : };
15079 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15080 : static_assert(0 < 5, "There is no slot for us");
15081 :
15082 : static bool
15083 3 : clearTimeout(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
15084 : {
15085 : int32_t arg0;
15086 3 : if (args.hasDefined(0)) {
15087 3 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
15088 0 : return false;
15089 : }
15090 : } else {
15091 0 : arg0 = 0;
15092 : }
15093 3 : self->ClearTimeout(arg0);
15094 3 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15095 3 : args.rval().setUndefined();
15096 3 : return true;
15097 : }
15098 :
15099 : static const JSJitInfo clearTimeout_methodinfo = {
15100 : { (JSJitGetterOp)clearTimeout },
15101 : { prototypes::id::Window },
15102 : { PrototypeTraits<prototypes::id::Window>::Depth },
15103 : JSJitInfo::Method,
15104 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
15105 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
15106 : false, /* isInfallible. False in setters. */
15107 : false, /* isMovable. Not relevant for setters. */
15108 : false, /* isEliminatable. Not relevant for setters. */
15109 : false, /* isAlwaysInSlot. Only relevant for getters. */
15110 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
15111 : false, /* isTypedMethod. Only relevant for methods. */
15112 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
15113 : };
15114 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15115 : static_assert(0 < 5, "There is no slot for us");
15116 :
15117 : static bool
15118 0 : setInterval(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
15119 : {
15120 0 : unsigned argcount = std::min(args.length(), 3u);
15121 0 : switch (argcount) {
15122 : case 1: {
15123 : MOZ_FALLTHROUGH;
15124 : }
15125 : case 2: {
15126 : MOZ_FALLTHROUGH;
15127 : }
15128 : case 3: {
15129 0 : if (args[0].isObject()) {
15130 : do {
15131 0 : RootedCallback<OwningNonNull<binding_detail::FastFunction>> arg0(cx);
15132 0 : if (JS::IsCallable(&args[0].toObject())) {
15133 : { // scope for tempRoot
15134 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
15135 0 : arg0 = new binding_detail::FastFunction(tempRoot);
15136 : }
15137 : } else {
15138 0 : break;
15139 : }
15140 0 : Optional<int32_t> arg1;
15141 0 : if (args.hasDefined(1)) {
15142 0 : arg1.Construct();
15143 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1.Value())) {
15144 0 : return false;
15145 : }
15146 : }
15147 0 : binding_detail::AutoSequence<JS::Value> arg2;
15148 0 : SequenceRooter<JS::Value> arg2_holder(cx, &arg2);
15149 0 : if (args.length() > 2) {
15150 0 : if (!arg2.SetCapacity(args.length() - 2, mozilla::fallible)) {
15151 0 : JS_ReportOutOfMemory(cx);
15152 0 : return false;
15153 : }
15154 0 : for (uint32_t variadicArg = 2; variadicArg < args.length(); ++variadicArg) {
15155 0 : JS::Value& slot = *arg2.AppendElement(mozilla::fallible);
15156 0 : slot = args[variadicArg];
15157 : }
15158 : }
15159 0 : binding_detail::FastErrorResult rv;
15160 0 : int32_t result(self->SetInterval(cx, NonNullHelper(arg0), Constify(arg1), Constify(arg2), rv));
15161 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15162 0 : return false;
15163 : }
15164 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15165 0 : args.rval().setInt32(int32_t(result));
15166 0 : return true;
15167 : } while (0);
15168 : }
15169 0 : binding_detail::FakeString arg0;
15170 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
15171 0 : return false;
15172 : }
15173 0 : Optional<int32_t> arg1;
15174 0 : if (args.hasDefined(1)) {
15175 0 : arg1.Construct();
15176 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1.Value())) {
15177 0 : return false;
15178 : }
15179 : }
15180 0 : binding_detail::AutoSequence<JS::Value> arg2;
15181 0 : SequenceRooter<JS::Value> arg2_holder(cx, &arg2);
15182 0 : if (args.length() > 2) {
15183 0 : if (!arg2.SetCapacity(args.length() - 2, mozilla::fallible)) {
15184 0 : JS_ReportOutOfMemory(cx);
15185 0 : return false;
15186 : }
15187 0 : for (uint32_t variadicArg = 2; variadicArg < args.length(); ++variadicArg) {
15188 0 : JS::Value& slot = *arg2.AppendElement(mozilla::fallible);
15189 0 : slot = args[variadicArg];
15190 : }
15191 : }
15192 0 : binding_detail::FastErrorResult rv;
15193 0 : int32_t result(self->SetInterval(cx, NonNullHelper(Constify(arg0)), Constify(arg1), Constify(arg2), rv));
15194 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15195 0 : return false;
15196 : }
15197 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15198 0 : args.rval().setInt32(int32_t(result));
15199 0 : return true;
15200 : break;
15201 : }
15202 : default: {
15203 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.setInterval");
15204 : break;
15205 : }
15206 : }
15207 : MOZ_CRASH("We have an always-returning default case");
15208 : return false;
15209 : }
15210 :
15211 : static const JSJitInfo setInterval_methodinfo = {
15212 : { (JSJitGetterOp)setInterval },
15213 : { prototypes::id::Window },
15214 : { PrototypeTraits<prototypes::id::Window>::Depth },
15215 : JSJitInfo::Method,
15216 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
15217 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
15218 : false, /* isInfallible. False in setters. */
15219 : false, /* isMovable. Not relevant for setters. */
15220 : false, /* isEliminatable. Not relevant for setters. */
15221 : false, /* isAlwaysInSlot. Only relevant for getters. */
15222 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
15223 : false, /* isTypedMethod. Only relevant for methods. */
15224 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
15225 : };
15226 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15227 : static_assert(0 < 5, "There is no slot for us");
15228 :
15229 : static bool
15230 0 : clearInterval(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
15231 : {
15232 : int32_t arg0;
15233 0 : if (args.hasDefined(0)) {
15234 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
15235 0 : return false;
15236 : }
15237 : } else {
15238 0 : arg0 = 0;
15239 : }
15240 0 : self->ClearInterval(arg0);
15241 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15242 0 : args.rval().setUndefined();
15243 0 : return true;
15244 : }
15245 :
15246 : static const JSJitInfo clearInterval_methodinfo = {
15247 : { (JSJitGetterOp)clearInterval },
15248 : { prototypes::id::Window },
15249 : { PrototypeTraits<prototypes::id::Window>::Depth },
15250 : JSJitInfo::Method,
15251 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
15252 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
15253 : false, /* isInfallible. False in setters. */
15254 : false, /* isMovable. Not relevant for setters. */
15255 : false, /* isEliminatable. Not relevant for setters. */
15256 : false, /* isAlwaysInSlot. Only relevant for getters. */
15257 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
15258 : false, /* isTypedMethod. Only relevant for methods. */
15259 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
15260 : };
15261 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15262 : static_assert(0 < 5, "There is no slot for us");
15263 :
15264 : static bool
15265 0 : createImageBitmap(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
15266 : {
15267 0 : unsigned argcount = std::min(args.length(), 5u);
15268 0 : switch (argcount) {
15269 : case 1: {
15270 0 : HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer arg0;
15271 0 : HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBufferArgument arg0_holder(arg0);
15272 : {
15273 0 : bool done = false, failed = false, tryNext;
15274 0 : if (args[0].isObject()) {
15275 0 : done = (failed = !arg0_holder.TrySetToHTMLImageElement(cx, args[0], tryNext, false)) || !tryNext ||
15276 0 : (failed = !arg0_holder.TrySetToHTMLVideoElement(cx, args[0], tryNext, false)) || !tryNext ||
15277 0 : (failed = !arg0_holder.TrySetToHTMLCanvasElement(cx, args[0], tryNext, false)) || !tryNext ||
15278 0 : (failed = !arg0_holder.TrySetToBlob(cx, args[0], tryNext, false)) || !tryNext ||
15279 0 : (failed = !arg0_holder.TrySetToImageData(cx, args[0], tryNext, false)) || !tryNext ||
15280 0 : (failed = !arg0_holder.TrySetToCanvasRenderingContext2D(cx, args[0], tryNext, false)) || !tryNext ||
15281 0 : (failed = !arg0_holder.TrySetToImageBitmap(cx, args[0], tryNext, false)) || !tryNext ||
15282 0 : (failed = !arg0_holder.TrySetToArrayBufferView(cx, args[0], tryNext, false)) || !tryNext ||
15283 0 : (failed = !arg0_holder.TrySetToArrayBuffer(cx, args[0], tryNext, false)) || !tryNext;
15284 :
15285 : }
15286 0 : if (failed) {
15287 0 : return false;
15288 : }
15289 0 : if (!done) {
15290 0 : ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 1 of Window.createImageBitmap", "HTMLImageElement, HTMLVideoElement, HTMLCanvasElement, Blob, ImageData, CanvasRenderingContext2D, ImageBitmap, ArrayBufferView, ArrayBuffer");
15291 0 : return false;
15292 : }
15293 : }
15294 0 : binding_detail::FastErrorResult rv;
15295 0 : auto result(StrongOrRawPtr<Promise>(self->CreateImageBitmap(cx, Constify(arg0), rv)));
15296 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15297 0 : return false;
15298 : }
15299 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15300 0 : if (!ToJSValue(cx, result, args.rval())) {
15301 0 : return false;
15302 : }
15303 0 : return true;
15304 : break;
15305 : }
15306 : case 5: {
15307 0 : HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer arg0;
15308 0 : HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBufferArgument arg0_holder(arg0);
15309 : {
15310 0 : bool done = false, failed = false, tryNext;
15311 0 : if (args[0].isObject()) {
15312 0 : done = (failed = !arg0_holder.TrySetToHTMLImageElement(cx, args[0], tryNext, false)) || !tryNext ||
15313 0 : (failed = !arg0_holder.TrySetToHTMLVideoElement(cx, args[0], tryNext, false)) || !tryNext ||
15314 0 : (failed = !arg0_holder.TrySetToHTMLCanvasElement(cx, args[0], tryNext, false)) || !tryNext ||
15315 0 : (failed = !arg0_holder.TrySetToBlob(cx, args[0], tryNext, false)) || !tryNext ||
15316 0 : (failed = !arg0_holder.TrySetToImageData(cx, args[0], tryNext, false)) || !tryNext ||
15317 0 : (failed = !arg0_holder.TrySetToCanvasRenderingContext2D(cx, args[0], tryNext, false)) || !tryNext ||
15318 0 : (failed = !arg0_holder.TrySetToImageBitmap(cx, args[0], tryNext, false)) || !tryNext ||
15319 0 : (failed = !arg0_holder.TrySetToArrayBufferView(cx, args[0], tryNext, false)) || !tryNext ||
15320 0 : (failed = !arg0_holder.TrySetToArrayBuffer(cx, args[0], tryNext, false)) || !tryNext;
15321 :
15322 : }
15323 0 : if (failed) {
15324 0 : return false;
15325 : }
15326 0 : if (!done) {
15327 0 : ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 1 of Window.createImageBitmap", "HTMLImageElement, HTMLVideoElement, HTMLCanvasElement, Blob, ImageData, CanvasRenderingContext2D, ImageBitmap, ArrayBufferView, ArrayBuffer");
15328 0 : return false;
15329 : }
15330 : }
15331 : int32_t arg1;
15332 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
15333 0 : return false;
15334 : }
15335 : int32_t arg2;
15336 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
15337 0 : return false;
15338 : }
15339 0 : if (args[3].isNumber()) {
15340 : int32_t arg3;
15341 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
15342 0 : return false;
15343 : }
15344 : int32_t arg4;
15345 0 : if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
15346 0 : return false;
15347 : }
15348 0 : binding_detail::FastErrorResult rv;
15349 0 : auto result(StrongOrRawPtr<Promise>(self->CreateImageBitmap(cx, Constify(arg0), arg1, arg2, arg3, arg4, rv)));
15350 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15351 0 : return false;
15352 : }
15353 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15354 0 : if (!ToJSValue(cx, result, args.rval())) {
15355 0 : return false;
15356 : }
15357 0 : return true;
15358 : }
15359 : ImageBitmapFormat arg3;
15360 : {
15361 : int index;
15362 0 : if (!FindEnumStringIndex<true>(cx, args[3], ImageBitmapFormatValues::strings, "ImageBitmapFormat", "Argument 4 of Window.createImageBitmap", &index)) {
15363 0 : return false;
15364 : }
15365 0 : MOZ_ASSERT(index >= 0);
15366 0 : arg3 = static_cast<ImageBitmapFormat>(index);
15367 : }
15368 0 : binding_detail::AutoSequence<ChannelPixelLayout> arg4;
15369 0 : if (args[4].isObject()) {
15370 0 : JS::ForOfIterator iter(cx);
15371 0 : if (!iter.init(args[4], JS::ForOfIterator::AllowNonIterable)) {
15372 0 : return false;
15373 : }
15374 0 : if (!iter.valueIsIterable()) {
15375 0 : ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 5 of Window.createImageBitmap");
15376 0 : return false;
15377 : }
15378 0 : binding_detail::AutoSequence<ChannelPixelLayout> &arr = arg4;
15379 0 : JS::Rooted<JS::Value> temp(cx);
15380 : while (true) {
15381 : bool done;
15382 0 : if (!iter.next(&temp, &done)) {
15383 0 : return false;
15384 : }
15385 0 : if (done) {
15386 0 : break;
15387 : }
15388 0 : ChannelPixelLayout* slotPtr = arr.AppendElement(mozilla::fallible);
15389 0 : if (!slotPtr) {
15390 0 : JS_ReportOutOfMemory(cx);
15391 0 : return false;
15392 : }
15393 0 : ChannelPixelLayout& slot = *slotPtr;
15394 0 : if (!slot.Init(cx, temp, "Element of argument 5 of Window.createImageBitmap", false)) {
15395 0 : return false;
15396 : }
15397 0 : }
15398 : } else {
15399 0 : ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 5 of Window.createImageBitmap");
15400 0 : return false;
15401 : }
15402 0 : binding_detail::FastErrorResult rv;
15403 0 : auto result(StrongOrRawPtr<Promise>(self->CreateImageBitmap(cx, Constify(arg0), arg1, arg2, arg3, Constify(arg4), rv)));
15404 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15405 0 : return false;
15406 : }
15407 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15408 0 : if (!ToJSValue(cx, result, args.rval())) {
15409 0 : return false;
15410 : }
15411 0 : return true;
15412 : break;
15413 : }
15414 : default: {
15415 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.createImageBitmap");
15416 : break;
15417 : }
15418 : }
15419 : MOZ_CRASH("We have an always-returning default case");
15420 : return false;
15421 : }
15422 :
15423 : static bool
15424 0 : createImageBitmap_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
15425 : {
15426 : // Make sure to save the callee before someone maybe messes
15427 : // with rval().
15428 0 : JS::Rooted<JSObject*> callee(cx, &args.callee());
15429 0 : bool ok = createImageBitmap(cx, obj, self, args);
15430 0 : if (ok) {
15431 0 : return true;
15432 : }
15433 0 : return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
15434 0 : args.rval());
15435 : }
15436 :
15437 : static const JSJitInfo createImageBitmap_methodinfo = {
15438 : { (JSJitGetterOp)createImageBitmap_promiseWrapper },
15439 : { prototypes::id::Window },
15440 : { PrototypeTraits<prototypes::id::Window>::Depth },
15441 : JSJitInfo::Method,
15442 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
15443 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
15444 : false, /* isInfallible. False in setters. */
15445 : false, /* isMovable. Not relevant for setters. */
15446 : false, /* isEliminatable. Not relevant for setters. */
15447 : false, /* isAlwaysInSlot. Only relevant for getters. */
15448 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
15449 : false, /* isTypedMethod. Only relevant for methods. */
15450 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
15451 : };
15452 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15453 : static_assert(0 < 5, "There is no slot for us");
15454 :
15455 : static bool
15456 0 : fetch(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
15457 : {
15458 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
15459 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window.fetch");
15460 : }
15461 0 : RequestOrUSVString arg0;
15462 0 : RequestOrUSVStringArgument arg0_holder(arg0);
15463 : {
15464 0 : bool done = false, failed = false, tryNext;
15465 0 : if (args[0].isObject()) {
15466 0 : done = (failed = !arg0_holder.TrySetToRequest(cx, args[0], tryNext, false)) || !tryNext;
15467 :
15468 : }
15469 0 : if (!done) {
15470 : do {
15471 0 : done = (failed = !arg0_holder.TrySetToUSVString(cx, args[0], tryNext)) || !tryNext;
15472 0 : break;
15473 : } while (0);
15474 : }
15475 0 : if (failed) {
15476 0 : return false;
15477 : }
15478 0 : if (!done) {
15479 0 : ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 1 of Window.fetch", "Request");
15480 0 : return false;
15481 : }
15482 : }
15483 0 : RootedDictionary<binding_detail::FastRequestInit> arg1(cx);
15484 0 : if (!arg1.Init(cx, (args.hasDefined(1)) ? args[1] : JS::NullHandleValue, "Argument 2 of Window.fetch", false)) {
15485 0 : return false;
15486 : }
15487 0 : binding_detail::FastErrorResult rv;
15488 0 : auto result(StrongOrRawPtr<Promise>(self->Fetch(Constify(arg0), Constify(arg1), nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv)));
15489 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15490 0 : return false;
15491 : }
15492 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15493 : static_assert(!IsPointer<decltype(result)>::value,
15494 : "NewObject implies that we need to keep the object alive with a strong reference.");
15495 0 : if (!ToJSValue(cx, result, args.rval())) {
15496 0 : return false;
15497 : }
15498 0 : return true;
15499 : }
15500 :
15501 : static bool
15502 0 : fetch_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, const JSJitMethodCallArgs& args)
15503 : {
15504 : // Make sure to save the callee before someone maybe messes
15505 : // with rval().
15506 0 : JS::Rooted<JSObject*> callee(cx, &args.callee());
15507 0 : bool ok = fetch(cx, obj, self, args);
15508 0 : if (ok) {
15509 0 : return true;
15510 : }
15511 0 : return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
15512 0 : args.rval());
15513 : }
15514 :
15515 : static const JSJitInfo fetch_methodinfo = {
15516 : { (JSJitGetterOp)fetch_promiseWrapper },
15517 : { prototypes::id::Window },
15518 : { PrototypeTraits<prototypes::id::Window>::Depth },
15519 : JSJitInfo::Method,
15520 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
15521 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
15522 : false, /* isInfallible. False in setters. */
15523 : false, /* isMovable. Not relevant for setters. */
15524 : false, /* isEliminatable. Not relevant for setters. */
15525 : false, /* isAlwaysInSlot. Only relevant for getters. */
15526 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
15527 : false, /* isTypedMethod. Only relevant for methods. */
15528 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
15529 : };
15530 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15531 : static_assert(0 < 5, "There is no slot for us");
15532 :
15533 : static bool
15534 0 : get_isSecureContext(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
15535 : {
15536 0 : bool result(self->IsSecureContext());
15537 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15538 0 : args.rval().setBoolean(result);
15539 0 : return true;
15540 : }
15541 :
15542 : static const JSJitInfo isSecureContext_getterinfo = {
15543 : { (JSJitGetterOp)get_isSecureContext },
15544 : { prototypes::id::Window },
15545 : { PrototypeTraits<prototypes::id::Window>::Depth },
15546 : JSJitInfo::Getter,
15547 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
15548 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
15549 : true, /* isInfallible. False in setters. */
15550 : false, /* isMovable. Not relevant for setters. */
15551 : false, /* isEliminatable. Not relevant for setters. */
15552 : false, /* isAlwaysInSlot. Only relevant for getters. */
15553 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
15554 : false, /* isTypedMethod. Only relevant for methods. */
15555 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
15556 : };
15557 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15558 : static_assert(0 < 5, "There is no slot for us");
15559 :
15560 : static bool
15561 0 : get_indexedDB(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
15562 : {
15563 0 : binding_detail::FastErrorResult rv;
15564 0 : auto result(StrongOrRawPtr<mozilla::dom::IDBFactory>(self->GetIndexedDB(rv)));
15565 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15566 0 : return false;
15567 : }
15568 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15569 0 : if (!result) {
15570 0 : args.rval().setNull();
15571 0 : return true;
15572 : }
15573 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
15574 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
15575 0 : return false;
15576 : }
15577 0 : return true;
15578 : }
15579 :
15580 : static const JSJitInfo indexedDB_getterinfo = {
15581 : { (JSJitGetterOp)get_indexedDB },
15582 : { prototypes::id::Window },
15583 : { PrototypeTraits<prototypes::id::Window>::Depth },
15584 : JSJitInfo::Getter,
15585 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
15586 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
15587 : false, /* isInfallible. False in setters. */
15588 : false, /* isMovable. Not relevant for setters. */
15589 : false, /* isEliminatable. Not relevant for setters. */
15590 : false, /* isAlwaysInSlot. Only relevant for getters. */
15591 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
15592 : false, /* isTypedMethod. Only relevant for methods. */
15593 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
15594 : };
15595 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15596 : static_assert(0 < 5, "There is no slot for us");
15597 :
15598 : static bool
15599 0 : get_caches(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
15600 : {
15601 0 : binding_detail::FastErrorResult rv;
15602 0 : auto result(StrongOrRawPtr<mozilla::dom::cache::CacheStorage>(self->GetCaches(rv)));
15603 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15604 0 : return false;
15605 : }
15606 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15607 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
15608 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
15609 0 : return false;
15610 : }
15611 0 : return true;
15612 : }
15613 :
15614 : static const JSJitInfo caches_getterinfo = {
15615 : { (JSJitGetterOp)get_caches },
15616 : { prototypes::id::Window },
15617 : { PrototypeTraits<prototypes::id::Window>::Depth },
15618 : JSJitInfo::Getter,
15619 : JSJitInfo::AliasNone, /* aliasSet. Not relevant for setters. */
15620 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
15621 : false, /* isInfallible. False in setters. */
15622 : false, /* isMovable. Not relevant for setters. */
15623 : false, /* isEliminatable. Not relevant for setters. */
15624 : false, /* isAlwaysInSlot. Only relevant for getters. */
15625 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
15626 : false, /* isTypedMethod. Only relevant for methods. */
15627 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
15628 : };
15629 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15630 : static_assert(0 < 5, "There is no slot for us");
15631 :
15632 : static bool
15633 0 : get_sessionStorage(JSContext* cx, JS::Handle<JSObject*> obj, nsGlobalWindow* self, JSJitGetterCallArgs args)
15634 : {
15635 0 : binding_detail::FastErrorResult rv;
15636 0 : auto result(StrongOrRawPtr<mozilla::dom::Storage>(self->GetSessionStorage(rv)));
15637 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
15638 0 : return false;
15639 : }
15640 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15641 0 : if (!result) {
15642 0 : args.rval().setNull();
15643 0 : return true;
15644 : }
15645 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
15646 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
15647 0 : return false;
15648 : }
15649 0 : return true;
15650 : }
15651 :
15652 : static const JSJitInfo sessionStorage_getterinfo = {
15653 : { (JSJitGetterOp)get_sessionStorage },
15654 : { prototypes::id::Window },
15655 : { PrototypeTraits<prototypes::id::Window>::Depth },
15656 : JSJitInfo::Getter,
15657 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
15658 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
15659 : false, /* isInfallible. False in setters. */
15660 : false, /* isMovable. Not relevant for setters. */
15661 : false, /* isEliminatable. Not relevant for setters. */
15662 : false, /* isAlwaysInSlot. Only relevant for getters. */
15663 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
15664 : false, /* isTypedMethod. Only relevant for methods. */
15665 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
15666 : };
15667 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
15668 : static_assert(0 < 5, "There is no slot for us");
15669 :
15670 : static bool
15671 75 : genericMethod(JSContext* cx, unsigned argc, JS::Value* vp)
15672 : {
15673 75 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
15674 75 : if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
15675 0 : return ThrowInvalidThis(cx, args, false, "Window");
15676 : }
15677 150 : JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
15678 :
15679 : nsGlobalWindow* self;
15680 150 : JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
15681 : {
15682 75 : nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
15683 75 : if (NS_FAILED(rv)) {
15684 0 : return ThrowInvalidThis(cx, args, rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO, "Window");
15685 : }
15686 : }
15687 75 : const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
15688 75 : MOZ_ASSERT(info->type() == JSJitInfo::Method);
15689 75 : JSJitMethodOp method = info->method;
15690 75 : bool ok = method(cx, obj, self, JSJitMethodCallArgs(args));
15691 : #ifdef DEBUG
15692 75 : if (ok) {
15693 75 : AssertReturnTypeMatchesJitinfo(info, args.rval());
15694 : }
15695 : #endif
15696 75 : return ok;
15697 : }
15698 :
15699 : static bool
15700 0 : genericPromiseReturningMethod(JSContext* cx, unsigned argc, JS::Value* vp)
15701 : {
15702 0 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
15703 : // Make sure to save the callee before someone maybe messes with rval().
15704 0 : JS::Rooted<JSObject*> callee(cx, &args.callee());
15705 0 : if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
15706 0 : ThrowInvalidThis(cx, args, false, "Window");
15707 :
15708 0 : return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
15709 0 : args.rval());
15710 : }
15711 0 : JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
15712 :
15713 : nsGlobalWindow* self;
15714 0 : JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
15715 : {
15716 0 : nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
15717 0 : if (NS_FAILED(rv)) {
15718 0 : ThrowInvalidThis(cx, args, rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO, "Window");
15719 :
15720 0 : return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
15721 0 : args.rval());
15722 : }
15723 : }
15724 0 : const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
15725 0 : MOZ_ASSERT(info->type() == JSJitInfo::Method);
15726 0 : JSJitMethodOp method = info->method;
15727 0 : bool ok = method(cx, obj, self, JSJitMethodCallArgs(args));
15728 0 : if (ok) {
15729 : #ifdef DEBUG
15730 0 : AssertReturnTypeMatchesJitinfo(info, args.rval());
15731 : #endif
15732 0 : return true;
15733 : }
15734 :
15735 0 : MOZ_ASSERT(info->returnType() == JSVAL_TYPE_OBJECT);
15736 0 : return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
15737 0 : args.rval());
15738 : }
15739 :
15740 : static bool
15741 0 : genericCrossOriginMethod(JSContext* cx, unsigned argc, JS::Value* vp)
15742 : {
15743 0 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
15744 0 : if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
15745 0 : return ThrowInvalidThis(cx, args, false, "Window");
15746 : }
15747 0 : JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
15748 :
15749 : nsGlobalWindow* self;
15750 0 : JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
15751 0 : JS::Rooted<JSObject*> maybeUncheckedObj(cx, &rootSelf.toObject());
15752 : {
15753 0 : if (xpc::WrapperFactory::IsXrayWrapper(maybeUncheckedObj)) {
15754 0 : maybeUncheckedObj = js::UncheckedUnwrap(maybeUncheckedObj);
15755 : } else {
15756 0 : maybeUncheckedObj = js::CheckedUnwrap(maybeUncheckedObj);
15757 0 : if (!maybeUncheckedObj) {
15758 0 : return ThrowInvalidThis(cx, args, true, "Window");
15759 : }
15760 : }
15761 0 : nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&maybeUncheckedObj, self);
15762 0 : if (NS_FAILED(rv)) {
15763 0 : return ThrowInvalidThis(cx, args, rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO, "Window");
15764 : }
15765 : }
15766 0 : const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
15767 0 : MOZ_ASSERT(info->type() == JSJitInfo::Method);
15768 0 : JSJitMethodOp method = info->method;
15769 0 : bool ok = method(cx, obj, self, JSJitMethodCallArgs(args));
15770 : #ifdef DEBUG
15771 0 : if (ok) {
15772 0 : AssertReturnTypeMatchesJitinfo(info, args.rval());
15773 : }
15774 : #endif
15775 0 : return ok;
15776 : }
15777 :
15778 : static bool
15779 367 : genericGetter(JSContext* cx, unsigned argc, JS::Value* vp)
15780 : {
15781 367 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
15782 367 : if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
15783 0 : return ThrowInvalidThis(cx, args, false, "Window");
15784 : }
15785 734 : JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
15786 :
15787 : nsGlobalWindow* self;
15788 734 : JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
15789 : {
15790 367 : nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
15791 367 : if (NS_FAILED(rv)) {
15792 0 : return ThrowInvalidThis(cx, args, rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO, "Window");
15793 : }
15794 : }
15795 367 : const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
15796 367 : MOZ_ASSERT(info->type() == JSJitInfo::Getter);
15797 367 : JSJitGetterOp getter = info->getter;
15798 367 : bool ok = getter(cx, obj, self, JSJitGetterCallArgs(args));
15799 : #ifdef DEBUG
15800 367 : if (ok) {
15801 367 : AssertReturnTypeMatchesJitinfo(info, args.rval());
15802 : }
15803 : #endif
15804 367 : return ok;
15805 : }
15806 :
15807 : static bool
15808 0 : genericLenientGetter(JSContext* cx, unsigned argc, JS::Value* vp)
15809 : {
15810 0 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
15811 0 : if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
15812 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15813 0 : if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
15814 0 : return false;
15815 : }
15816 0 : args.rval().set(JS::UndefinedValue());
15817 0 : return true;
15818 : }
15819 0 : JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
15820 :
15821 : nsGlobalWindow* self;
15822 0 : JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
15823 : {
15824 0 : nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
15825 0 : if (NS_FAILED(rv)) {
15826 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15827 0 : if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
15828 0 : return false;
15829 : }
15830 0 : args.rval().set(JS::UndefinedValue());
15831 0 : return true;
15832 : }
15833 : }
15834 0 : const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
15835 0 : MOZ_ASSERT(info->type() == JSJitInfo::Getter);
15836 0 : JSJitGetterOp getter = info->getter;
15837 0 : bool ok = getter(cx, obj, self, JSJitGetterCallArgs(args));
15838 : #ifdef DEBUG
15839 0 : if (ok) {
15840 0 : AssertReturnTypeMatchesJitinfo(info, args.rval());
15841 : }
15842 : #endif
15843 0 : return ok;
15844 : }
15845 :
15846 : static bool
15847 205 : genericCrossOriginGetter(JSContext* cx, unsigned argc, JS::Value* vp)
15848 : {
15849 205 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
15850 205 : if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
15851 0 : return ThrowInvalidThis(cx, args, false, "Window");
15852 : }
15853 410 : JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
15854 :
15855 : nsGlobalWindow* self;
15856 410 : JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
15857 410 : JS::Rooted<JSObject*> maybeUncheckedObj(cx, &rootSelf.toObject());
15858 : {
15859 205 : if (xpc::WrapperFactory::IsXrayWrapper(maybeUncheckedObj)) {
15860 22 : maybeUncheckedObj = js::UncheckedUnwrap(maybeUncheckedObj);
15861 : } else {
15862 183 : maybeUncheckedObj = js::CheckedUnwrap(maybeUncheckedObj);
15863 183 : if (!maybeUncheckedObj) {
15864 0 : return ThrowInvalidThis(cx, args, true, "Window");
15865 : }
15866 : }
15867 205 : nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&maybeUncheckedObj, self);
15868 205 : if (NS_FAILED(rv)) {
15869 0 : return ThrowInvalidThis(cx, args, rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO, "Window");
15870 : }
15871 : }
15872 205 : const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
15873 205 : MOZ_ASSERT(info->type() == JSJitInfo::Getter);
15874 205 : JSJitGetterOp getter = info->getter;
15875 205 : bool ok = getter(cx, obj, self, JSJitGetterCallArgs(args));
15876 : #ifdef DEBUG
15877 205 : if (ok) {
15878 205 : AssertReturnTypeMatchesJitinfo(info, args.rval());
15879 : }
15880 : #endif
15881 205 : return ok;
15882 : }
15883 :
15884 : static bool
15885 1 : genericSetter(JSContext* cx, unsigned argc, JS::Value* vp)
15886 : {
15887 1 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
15888 1 : if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
15889 0 : return ThrowInvalidThis(cx, args, false, "Window");
15890 : }
15891 2 : JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
15892 :
15893 : nsGlobalWindow* self;
15894 2 : JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
15895 : {
15896 1 : nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
15897 1 : if (NS_FAILED(rv)) {
15898 0 : return ThrowInvalidThis(cx, args, rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO, "Window");
15899 : }
15900 : }
15901 1 : if (args.length() == 0) {
15902 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window attribute setter");
15903 : }
15904 1 : const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
15905 1 : MOZ_ASSERT(info->type() == JSJitInfo::Setter);
15906 1 : JSJitSetterOp setter = info->setter;
15907 1 : if (!setter(cx, obj, self, JSJitSetterCallArgs(args))) {
15908 0 : return false;
15909 : }
15910 1 : args.rval().setUndefined();
15911 : #ifdef DEBUG
15912 1 : AssertReturnTypeMatchesJitinfo(info, args.rval());
15913 : #endif
15914 1 : return true;
15915 : }
15916 :
15917 : static bool
15918 0 : genericLenientSetter(JSContext* cx, unsigned argc, JS::Value* vp)
15919 : {
15920 0 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
15921 0 : if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
15922 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15923 0 : if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
15924 0 : return false;
15925 : }
15926 0 : args.rval().set(JS::UndefinedValue());
15927 0 : return true;
15928 : }
15929 0 : JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
15930 :
15931 : nsGlobalWindow* self;
15932 0 : JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
15933 : {
15934 0 : nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
15935 0 : if (NS_FAILED(rv)) {
15936 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
15937 0 : if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
15938 0 : return false;
15939 : }
15940 0 : args.rval().set(JS::UndefinedValue());
15941 0 : return true;
15942 : }
15943 : }
15944 0 : if (args.length() == 0) {
15945 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window attribute setter");
15946 : }
15947 0 : const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
15948 0 : MOZ_ASSERT(info->type() == JSJitInfo::Setter);
15949 0 : JSJitSetterOp setter = info->setter;
15950 0 : if (!setter(cx, obj, self, JSJitSetterCallArgs(args))) {
15951 0 : return false;
15952 : }
15953 0 : args.rval().setUndefined();
15954 : #ifdef DEBUG
15955 0 : AssertReturnTypeMatchesJitinfo(info, args.rval());
15956 : #endif
15957 0 : return true;
15958 : }
15959 :
15960 : static bool
15961 0 : genericCrossOriginSetter(JSContext* cx, unsigned argc, JS::Value* vp)
15962 : {
15963 0 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
15964 0 : if (!args.thisv().isNullOrUndefined() && !args.thisv().isObject()) {
15965 0 : return ThrowInvalidThis(cx, args, false, "Window");
15966 : }
15967 0 : JS::Rooted<JSObject*> obj(cx, args.thisv().isObject() ? &args.thisv().toObject() : js::GetGlobalForObjectCrossCompartment(&args.callee()));
15968 :
15969 : nsGlobalWindow* self;
15970 0 : JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
15971 0 : JS::Rooted<JSObject*> maybeUncheckedObj(cx, &rootSelf.toObject());
15972 : {
15973 0 : if (xpc::WrapperFactory::IsXrayWrapper(maybeUncheckedObj)) {
15974 0 : maybeUncheckedObj = js::UncheckedUnwrap(maybeUncheckedObj);
15975 : } else {
15976 0 : maybeUncheckedObj = js::CheckedUnwrap(maybeUncheckedObj);
15977 0 : if (!maybeUncheckedObj) {
15978 0 : return ThrowInvalidThis(cx, args, true, "Window");
15979 : }
15980 : }
15981 0 : nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&maybeUncheckedObj, self);
15982 0 : if (NS_FAILED(rv)) {
15983 0 : return ThrowInvalidThis(cx, args, rv == NS_ERROR_XPC_SECURITY_MANAGER_VETO, "Window");
15984 : }
15985 : }
15986 0 : if (args.length() == 0) {
15987 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "Window attribute setter");
15988 : }
15989 0 : const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
15990 0 : MOZ_ASSERT(info->type() == JSJitInfo::Setter);
15991 0 : JSJitSetterOp setter = info->setter;
15992 0 : if (!setter(cx, obj, self, JSJitSetterCallArgs(args))) {
15993 0 : return false;
15994 : }
15995 0 : args.rval().setUndefined();
15996 : #ifdef DEBUG
15997 0 : AssertReturnTypeMatchesJitinfo(info, args.rval());
15998 : #endif
15999 0 : return true;
16000 : }
16001 :
16002 : static void
16003 0 : _finalize(js::FreeOp* fop, JSObject* obj)
16004 : {
16005 0 : nsGlobalWindow* self = UnwrapPossiblyNotInitializedDOMObject<nsGlobalWindow>(obj);
16006 0 : if (self) {
16007 0 : ClearWrapper(self, self, obj);
16008 0 : mozilla::dom::FinalizeGlobal(CastToJSFreeOp(fop), obj);
16009 0 : AddForDeferredFinalization<nsGlobalWindow>(self);
16010 : }
16011 0 : }
16012 :
16013 : static void
16014 0 : _objectMoved(JSObject* obj, const JSObject* old)
16015 : {
16016 0 : nsGlobalWindow* self = UnwrapPossiblyNotInitializedDOMObject<nsGlobalWindow>(obj);
16017 0 : if (self) {
16018 0 : UpdateWrapper(self, self, obj, old);
16019 : }
16020 0 : }
16021 :
16022 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
16023 : #if defined(__clang__)
16024 : #pragma clang diagnostic push
16025 : #pragma clang diagnostic ignored "-Wmissing-braces"
16026 : #endif
16027 : static const JSFunctionSpec sMethods_specs[] = {
16028 : JS_FNSPEC("close", genericCrossOriginMethod, reinterpret_cast<const JSJitInfo*>(&close_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16029 : JS_FNSPEC("stop", genericMethod, reinterpret_cast<const JSJitInfo*>(&stop_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16030 : JS_FNSPEC("focus", genericCrossOriginMethod, reinterpret_cast<const JSJitInfo*>(&focus_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16031 : JS_FNSPEC("blur", genericCrossOriginMethod, reinterpret_cast<const JSJitInfo*>(&blur_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16032 : JS_FNSPEC("open", genericMethod, reinterpret_cast<const JSJitInfo*>(&open_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16033 : JS_FNSPEC("alert", genericMethod, reinterpret_cast<const JSJitInfo*>(&alert_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16034 : JS_FNSPEC("confirm", genericMethod, reinterpret_cast<const JSJitInfo*>(&confirm_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16035 : JS_FNSPEC("prompt", genericMethod, reinterpret_cast<const JSJitInfo*>(&prompt_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16036 : JS_FNSPEC("print", genericMethod, reinterpret_cast<const JSJitInfo*>(&print_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16037 : JS_FS_END,
16038 : JS_FNSPEC("showModalDialog", genericMethod, reinterpret_cast<const JSJitInfo*>(&showModalDialog_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16039 : JS_FS_END,
16040 : JS_FNSPEC("postMessage", genericCrossOriginMethod, reinterpret_cast<const JSJitInfo*>(&postMessage_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
16041 : JS_FNSPEC("captureEvents", genericMethod, reinterpret_cast<const JSJitInfo*>(&captureEvents_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16042 : JS_FNSPEC("releaseEvents", genericMethod, reinterpret_cast<const JSJitInfo*>(&releaseEvents_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16043 : JS_FNSPEC("getSelection", genericMethod, reinterpret_cast<const JSJitInfo*>(&getSelection_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16044 : JS_FNSPEC("getComputedStyle", genericMethod, reinterpret_cast<const JSJitInfo*>(&getComputedStyle_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16045 : JS_FNSPEC("matchMedia", genericMethod, reinterpret_cast<const JSJitInfo*>(&matchMedia_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16046 : JS_FNSPEC("moveTo", genericMethod, reinterpret_cast<const JSJitInfo*>(&moveTo_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
16047 : JS_FNSPEC("moveBy", genericMethod, reinterpret_cast<const JSJitInfo*>(&moveBy_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
16048 : JS_FNSPEC("resizeTo", genericMethod, reinterpret_cast<const JSJitInfo*>(&resizeTo_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
16049 : JS_FNSPEC("resizeBy", genericMethod, reinterpret_cast<const JSJitInfo*>(&resizeBy_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
16050 : JS_FNSPEC("scroll", genericMethod, reinterpret_cast<const JSJitInfo*>(&scroll_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16051 : JS_FNSPEC("scrollTo", genericMethod, reinterpret_cast<const JSJitInfo*>(&scrollTo_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16052 : JS_FNSPEC("scrollBy", genericMethod, reinterpret_cast<const JSJitInfo*>(&scrollBy_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16053 : JS_FNSPEC("requestAnimationFrame", genericMethod, reinterpret_cast<const JSJitInfo*>(&requestAnimationFrame_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16054 : JS_FNSPEC("cancelAnimationFrame", genericMethod, reinterpret_cast<const JSJitInfo*>(&cancelAnimationFrame_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16055 : JS_FNSPEC("getDefaultComputedStyle", genericMethod, reinterpret_cast<const JSJitInfo*>(&getDefaultComputedStyle_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16056 : JS_FNSPEC("scrollByLines", genericMethod, reinterpret_cast<const JSJitInfo*>(&scrollByLines_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16057 : JS_FNSPEC("scrollByPages", genericMethod, reinterpret_cast<const JSJitInfo*>(&scrollByPages_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16058 : JS_FNSPEC("sizeToContent", genericMethod, reinterpret_cast<const JSJitInfo*>(&sizeToContent_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16059 : JS_FNSPEC("updateCommands", genericMethod, reinterpret_cast<const JSJitInfo*>(&updateCommands_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16060 : JS_FNSPEC("find", genericMethod, reinterpret_cast<const JSJitInfo*>(&find_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16061 : JS_FNSPEC("dump", genericMethod, reinterpret_cast<const JSJitInfo*>(&dump_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16062 : JS_FNSPEC("setResizable", genericMethod, reinterpret_cast<const JSJitInfo*>(&setResizable_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16063 : JS_FS_END,
16064 : JS_FNSPEC("requestIdleCallback", genericMethod, reinterpret_cast<const JSJitInfo*>(&requestIdleCallback_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16065 : JS_FNSPEC("cancelIdleCallback", genericMethod, reinterpret_cast<const JSJitInfo*>(&cancelIdleCallback_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16066 : JS_FS_END,
16067 : JS_FNSPEC("getAppLocalesAsBCP47", genericMethod, reinterpret_cast<const JSJitInfo*>(&getAppLocalesAsBCP47_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16068 : JS_FS_END,
16069 : JS_FNSPEC("getAttention", genericMethod, reinterpret_cast<const JSJitInfo*>(&getAttention_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16070 : JS_FNSPEC("getAttentionWithCycleCount", genericMethod, reinterpret_cast<const JSJitInfo*>(&getAttentionWithCycleCount_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16071 : JS_FNSPEC("setCursor", genericMethod, reinterpret_cast<const JSJitInfo*>(&setCursor_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16072 : JS_FNSPEC("maximize", genericMethod, reinterpret_cast<const JSJitInfo*>(&maximize_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16073 : JS_FNSPEC("minimize", genericMethod, reinterpret_cast<const JSJitInfo*>(&minimize_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16074 : JS_FNSPEC("restore", genericMethod, reinterpret_cast<const JSJitInfo*>(&restore_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16075 : JS_FNSPEC("notifyDefaultButtonLoaded", genericMethod, reinterpret_cast<const JSJitInfo*>(¬ifyDefaultButtonLoaded_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16076 : JS_FNSPEC("getGroupMessageManager", genericMethod, reinterpret_cast<const JSJitInfo*>(&getGroupMessageManager_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16077 : JS_FNSPEC("beginWindowMove", genericMethod, reinterpret_cast<const JSJitInfo*>(&beginWindowMove_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16078 : JS_FS_END,
16079 : JS_FNSPEC("QueryInterface", QueryInterface, nullptr, 1, 0, nullptr),
16080 : JS_FS_END,
16081 : JS_FNSPEC("btoa", genericMethod, reinterpret_cast<const JSJitInfo*>(&btoa_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16082 : JS_FNSPEC("atob", genericMethod, reinterpret_cast<const JSJitInfo*>(&atob_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16083 : JS_FNSPEC("setTimeout", genericMethod, reinterpret_cast<const JSJitInfo*>(&setTimeout_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16084 : JS_FNSPEC("clearTimeout", genericMethod, reinterpret_cast<const JSJitInfo*>(&clearTimeout_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16085 : JS_FNSPEC("setInterval", genericMethod, reinterpret_cast<const JSJitInfo*>(&setInterval_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16086 : JS_FNSPEC("clearInterval", genericMethod, reinterpret_cast<const JSJitInfo*>(&clearInterval_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16087 : JS_FNSPEC("createImageBitmap", genericPromiseReturningMethod, reinterpret_cast<const JSJitInfo*>(&createImageBitmap_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16088 : JS_FNSPEC("fetch", genericPromiseReturningMethod, reinterpret_cast<const JSJitInfo*>(&fetch_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16089 : JS_FS_END
16090 : };
16091 : #if defined(__clang__)
16092 : #pragma clang diagnostic pop
16093 : #endif
16094 :
16095 : static PrefableDisablers sMethods_disablers10 = {
16096 : true, false, 0, &nsGlobalWindow::IsShowModalDialogEnabled
16097 : };
16098 :
16099 : static PrefableDisablers sMethods_disablers36 = {
16100 : true, false, 0, &nsGlobalWindow::IsRequestIdleCallbackEnabled
16101 : };
16102 :
16103 : static PrefableDisablers sMethods_disablers39 = {
16104 : true, false, 0, &IsChromeOrXBL
16105 : };
16106 :
16107 : static PrefableDisablers sMethods_disablers41 = {
16108 : true, false, 0, &nsGlobalWindow::IsPrivilegedChromeWindow
16109 : };
16110 :
16111 : static PrefableDisablers sMethods_disablers51 = {
16112 : true, false, 0, &WantsQueryInterface<nsGlobalWindow>::Enabled
16113 : };
16114 :
16115 : // Can't be const because the pref-enabled boolean needs to be writable
16116 : static Prefable<const JSFunctionSpec> sMethods[] = {
16117 : { nullptr, &sMethods_specs[0] },
16118 : { &sMethods_disablers10, &sMethods_specs[10] },
16119 : { nullptr, &sMethods_specs[12] },
16120 : { &sMethods_disablers36, &sMethods_specs[36] },
16121 : { &sMethods_disablers39, &sMethods_specs[39] },
16122 : { &sMethods_disablers41, &sMethods_specs[41] },
16123 : { &sMethods_disablers51, &sMethods_specs[51] },
16124 : { nullptr, &sMethods_specs[53] },
16125 : { nullptr, nullptr }
16126 : };
16127 :
16128 : static_assert(8 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
16129 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
16130 : static_assert(23 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
16131 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
16132 :
16133 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
16134 : #if defined(__clang__)
16135 : #pragma clang diagnostic push
16136 : #pragma clang diagnostic ignored "-Wmissing-braces"
16137 : #endif
16138 : static const JSFunctionSpec sChromeMethods_specs[] = {
16139 : JS_FNSPEC("mozScrollSnap", genericMethod, reinterpret_cast<const JSJitInfo*>(&mozScrollSnap_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16140 : JS_FNSPEC("back", genericMethod, reinterpret_cast<const JSJitInfo*>(&back_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16141 : JS_FNSPEC("forward", genericMethod, reinterpret_cast<const JSJitInfo*>(&forward_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16142 : JS_FNSPEC("home", genericMethod, reinterpret_cast<const JSJitInfo*>(&home_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16143 : JS_FNSPEC("openDialog", genericMethod, reinterpret_cast<const JSJitInfo*>(&openDialog_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
16144 : JS_FNSPEC("getInterface", genericMethod, reinterpret_cast<const JSJitInfo*>(&getInterface_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
16145 : JS_FS_END
16146 : };
16147 : #if defined(__clang__)
16148 : #pragma clang diagnostic pop
16149 : #endif
16150 :
16151 :
16152 : // Can't be const because the pref-enabled boolean needs to be writable
16153 : static Prefable<const JSFunctionSpec> sChromeMethods[] = {
16154 : { nullptr, &sChromeMethods_specs[0] },
16155 : { nullptr, nullptr }
16156 : };
16157 :
16158 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
16159 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
16160 : static_assert(6 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
16161 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
16162 :
16163 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
16164 : #if defined(__clang__)
16165 : #pragma clang diagnostic push
16166 : #pragma clang diagnostic ignored "-Wmissing-braces"
16167 : #endif
16168 : static const JSPropertySpec sAttributes_specs[] = {
16169 : { "self", JSPROP_SHARED | JSPROP_ENUMERATE, genericCrossOriginGetter, &self_getterinfo, genericSetter, &self_setterinfo },
16170 : { "name", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &name_getterinfo, genericSetter, &name_setterinfo },
16171 : { "history", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &history_getterinfo, nullptr, nullptr },
16172 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16173 : { "customElements", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &customElements_getterinfo, nullptr, nullptr },
16174 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16175 : { "locationbar", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &locationbar_getterinfo, genericSetter, &locationbar_setterinfo },
16176 : { "menubar", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &menubar_getterinfo, genericSetter, &menubar_setterinfo },
16177 : { "personalbar", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &personalbar_getterinfo, genericSetter, &personalbar_setterinfo },
16178 : { "scrollbars", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &scrollbars_getterinfo, genericSetter, &scrollbars_setterinfo },
16179 : { "statusbar", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &statusbar_getterinfo, genericSetter, &statusbar_setterinfo },
16180 : { "toolbar", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &toolbar_getterinfo, genericSetter, &toolbar_setterinfo },
16181 : { "status", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &status_getterinfo, genericSetter, &status_setterinfo },
16182 : { "closed", JSPROP_SHARED | JSPROP_ENUMERATE, genericCrossOriginGetter, &closed_getterinfo, nullptr, nullptr },
16183 : { "frames", JSPROP_SHARED | JSPROP_ENUMERATE, genericCrossOriginGetter, &frames_getterinfo, genericSetter, &frames_setterinfo },
16184 : { "length", JSPROP_SHARED | JSPROP_ENUMERATE, genericCrossOriginGetter, &length_getterinfo, genericSetter, &length_setterinfo },
16185 : { "opener", JSPROP_SHARED | JSPROP_ENUMERATE, genericCrossOriginGetter, &opener_getterinfo, genericSetter, &opener_setterinfo },
16186 : { "parent", JSPROP_SHARED | JSPROP_ENUMERATE, genericCrossOriginGetter, &parent_getterinfo, genericSetter, &parent_setterinfo },
16187 : { "frameElement", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &frameElement_getterinfo, nullptr, nullptr },
16188 : { "navigator", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &navigator_getterinfo, nullptr, nullptr },
16189 : { "external", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &external_getterinfo, genericSetter, &external_setterinfo },
16190 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16191 : { "applicationCache", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &applicationCache_getterinfo, nullptr, nullptr },
16192 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16193 : { "onappinstalled", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onappinstalled_getterinfo, genericSetter, &onappinstalled_setterinfo },
16194 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16195 : { "screen", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &screen_getterinfo, genericSetter, &screen_setterinfo },
16196 : { "innerWidth", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &innerWidth_getterinfo, genericSetter, &innerWidth_setterinfo },
16197 : { "innerHeight", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &innerHeight_getterinfo, genericSetter, &innerHeight_setterinfo },
16198 : { "scrollX", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &scrollX_getterinfo, genericSetter, &scrollX_setterinfo },
16199 : { "pageXOffset", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &pageXOffset_getterinfo, genericSetter, &pageXOffset_setterinfo },
16200 : { "scrollY", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &scrollY_getterinfo, genericSetter, &scrollY_setterinfo },
16201 : { "pageYOffset", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &pageYOffset_getterinfo, genericSetter, &pageYOffset_setterinfo },
16202 : { "screenX", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &screenX_getterinfo, genericSetter, &screenX_setterinfo },
16203 : { "screenY", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &screenY_getterinfo, genericSetter, &screenY_setterinfo },
16204 : { "outerWidth", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &outerWidth_getterinfo, genericSetter, &outerWidth_setterinfo },
16205 : { "outerHeight", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &outerHeight_getterinfo, genericSetter, &outerHeight_setterinfo },
16206 : { "performance", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &performance_getterinfo, genericSetter, &performance_setterinfo },
16207 : { "mozInnerScreenX", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &mozInnerScreenX_getterinfo, nullptr, nullptr },
16208 : { "mozInnerScreenY", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &mozInnerScreenY_getterinfo, nullptr, nullptr },
16209 : { "devicePixelRatio", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &devicePixelRatio_getterinfo, genericSetter, &devicePixelRatio_setterinfo },
16210 : { "scrollMaxX", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &scrollMaxX_getterinfo, genericSetter, &scrollMaxX_setterinfo },
16211 : { "scrollMaxY", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &scrollMaxY_getterinfo, genericSetter, &scrollMaxY_setterinfo },
16212 : { "fullScreen", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &fullScreen_getterinfo, genericSetter, &fullScreen_setterinfo },
16213 : { "mozPaintCount", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &mozPaintCount_getterinfo, nullptr, nullptr },
16214 : { "ondevicemotion", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondevicemotion_getterinfo, genericSetter, &ondevicemotion_setterinfo },
16215 : { "ondeviceorientation", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondeviceorientation_getterinfo, genericSetter, &ondeviceorientation_setterinfo },
16216 : { "onabsolutedeviceorientation", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onabsolutedeviceorientation_getterinfo, genericSetter, &onabsolutedeviceorientation_setterinfo },
16217 : { "ondeviceproximity", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondeviceproximity_getterinfo, genericSetter, &ondeviceproximity_setterinfo },
16218 : { "onuserproximity", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onuserproximity_getterinfo, genericSetter, &onuserproximity_setterinfo },
16219 : { "ondevicelight", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondevicelight_getterinfo, genericSetter, &ondevicelight_setterinfo },
16220 : { "content", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &content_getterinfo, genericSetter, &content_setterinfo },
16221 : { "sidebar", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &sidebar_getterinfo, genericSetter, &sidebar_setterinfo },
16222 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16223 : { "onvrdisplayconnect", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onvrdisplayconnect_getterinfo, genericSetter, &onvrdisplayconnect_setterinfo },
16224 : { "onvrdisplaydisconnect", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onvrdisplaydisconnect_getterinfo, genericSetter, &onvrdisplaydisconnect_setterinfo },
16225 : { "onvrdisplayactivate", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onvrdisplayactivate_getterinfo, genericSetter, &onvrdisplayactivate_setterinfo },
16226 : { "onvrdisplaydeactivate", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onvrdisplaydeactivate_getterinfo, genericSetter, &onvrdisplaydeactivate_setterinfo },
16227 : { "onvrdisplaypresentchange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onvrdisplaypresentchange_getterinfo, genericSetter, &onvrdisplaypresentchange_setterinfo },
16228 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16229 : { "audioWorklet", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &audioWorklet_getterinfo, nullptr, nullptr },
16230 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16231 : { "paintWorklet", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &paintWorklet_getterinfo, nullptr, nullptr },
16232 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16233 : { "intlUtils", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &intlUtils_getterinfo, nullptr, nullptr },
16234 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16235 : { "windowState", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &windowState_getterinfo, nullptr, nullptr },
16236 : { "isFullyOccluded", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &isFullyOccluded_getterinfo, nullptr, nullptr },
16237 : { "browserDOMWindow", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &browserDOMWindow_getterinfo, genericSetter, &browserDOMWindow_setterinfo },
16238 : { "messageManager", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &messageManager_getterinfo, nullptr, nullptr },
16239 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16240 : { "crypto", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &crypto_getterinfo, nullptr, nullptr },
16241 : { "onabort", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onabort_getterinfo, genericSetter, &onabort_setterinfo },
16242 : { "onblur", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onblur_getterinfo, genericSetter, &onblur_setterinfo },
16243 : { "onfocus", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onfocus_getterinfo, genericSetter, &onfocus_setterinfo },
16244 : { "onauxclick", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onauxclick_getterinfo, genericSetter, &onauxclick_setterinfo },
16245 : { "oncanplay", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &oncanplay_getterinfo, genericSetter, &oncanplay_setterinfo },
16246 : { "oncanplaythrough", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &oncanplaythrough_getterinfo, genericSetter, &oncanplaythrough_setterinfo },
16247 : { "onchange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onchange_getterinfo, genericSetter, &onchange_setterinfo },
16248 : { "onclick", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onclick_getterinfo, genericSetter, &onclick_setterinfo },
16249 : { "onclose", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onclose_getterinfo, genericSetter, &onclose_setterinfo },
16250 : { "oncontextmenu", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &oncontextmenu_getterinfo, genericSetter, &oncontextmenu_setterinfo },
16251 : { "ondblclick", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondblclick_getterinfo, genericSetter, &ondblclick_setterinfo },
16252 : { "ondrag", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondrag_getterinfo, genericSetter, &ondrag_setterinfo },
16253 : { "ondragend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondragend_getterinfo, genericSetter, &ondragend_setterinfo },
16254 : { "ondragenter", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondragenter_getterinfo, genericSetter, &ondragenter_setterinfo },
16255 : { "ondragexit", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondragexit_getterinfo, genericSetter, &ondragexit_setterinfo },
16256 : { "ondragleave", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondragleave_getterinfo, genericSetter, &ondragleave_setterinfo },
16257 : { "ondragover", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondragover_getterinfo, genericSetter, &ondragover_setterinfo },
16258 : { "ondragstart", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondragstart_getterinfo, genericSetter, &ondragstart_setterinfo },
16259 : { "ondrop", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondrop_getterinfo, genericSetter, &ondrop_setterinfo },
16260 : { "ondurationchange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ondurationchange_getterinfo, genericSetter, &ondurationchange_setterinfo },
16261 : { "onemptied", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onemptied_getterinfo, genericSetter, &onemptied_setterinfo },
16262 : { "onended", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onended_getterinfo, genericSetter, &onended_setterinfo },
16263 : { "oninput", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &oninput_getterinfo, genericSetter, &oninput_setterinfo },
16264 : { "oninvalid", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &oninvalid_getterinfo, genericSetter, &oninvalid_setterinfo },
16265 : { "onkeydown", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onkeydown_getterinfo, genericSetter, &onkeydown_setterinfo },
16266 : { "onkeypress", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onkeypress_getterinfo, genericSetter, &onkeypress_setterinfo },
16267 : { "onkeyup", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onkeyup_getterinfo, genericSetter, &onkeyup_setterinfo },
16268 : { "onload", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onload_getterinfo, genericSetter, &onload_setterinfo },
16269 : { "onloadeddata", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onloadeddata_getterinfo, genericSetter, &onloadeddata_setterinfo },
16270 : { "onloadedmetadata", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onloadedmetadata_getterinfo, genericSetter, &onloadedmetadata_setterinfo },
16271 : { "onloadend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onloadend_getterinfo, genericSetter, &onloadend_setterinfo },
16272 : { "onloadstart", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onloadstart_getterinfo, genericSetter, &onloadstart_setterinfo },
16273 : { "onmousedown", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmousedown_getterinfo, genericSetter, &onmousedown_setterinfo },
16274 : { "onmouseenter", JSPROP_SHARED | JSPROP_ENUMERATE, genericLenientGetter, &onmouseenter_getterinfo, genericLenientSetter, &onmouseenter_setterinfo },
16275 : { "onmouseleave", JSPROP_SHARED | JSPROP_ENUMERATE, genericLenientGetter, &onmouseleave_getterinfo, genericLenientSetter, &onmouseleave_setterinfo },
16276 : { "onmousemove", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmousemove_getterinfo, genericSetter, &onmousemove_setterinfo },
16277 : { "onmouseout", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmouseout_getterinfo, genericSetter, &onmouseout_setterinfo },
16278 : { "onmouseover", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmouseover_getterinfo, genericSetter, &onmouseover_setterinfo },
16279 : { "onmouseup", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmouseup_getterinfo, genericSetter, &onmouseup_setterinfo },
16280 : { "onwheel", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onwheel_getterinfo, genericSetter, &onwheel_setterinfo },
16281 : { "onpause", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpause_getterinfo, genericSetter, &onpause_setterinfo },
16282 : { "onplay", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onplay_getterinfo, genericSetter, &onplay_setterinfo },
16283 : { "onplaying", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onplaying_getterinfo, genericSetter, &onplaying_setterinfo },
16284 : { "onprogress", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onprogress_getterinfo, genericSetter, &onprogress_setterinfo },
16285 : { "onratechange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onratechange_getterinfo, genericSetter, &onratechange_setterinfo },
16286 : { "onreset", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onreset_getterinfo, genericSetter, &onreset_setterinfo },
16287 : { "onresize", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onresize_getterinfo, genericSetter, &onresize_setterinfo },
16288 : { "onscroll", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onscroll_getterinfo, genericSetter, &onscroll_setterinfo },
16289 : { "onseeked", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onseeked_getterinfo, genericSetter, &onseeked_setterinfo },
16290 : { "onseeking", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onseeking_getterinfo, genericSetter, &onseeking_setterinfo },
16291 : { "onselect", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onselect_getterinfo, genericSetter, &onselect_setterinfo },
16292 : { "onshow", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onshow_getterinfo, genericSetter, &onshow_setterinfo },
16293 : { "onstalled", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onstalled_getterinfo, genericSetter, &onstalled_setterinfo },
16294 : { "onsubmit", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onsubmit_getterinfo, genericSetter, &onsubmit_setterinfo },
16295 : { "onsuspend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onsuspend_getterinfo, genericSetter, &onsuspend_setterinfo },
16296 : { "ontimeupdate", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontimeupdate_getterinfo, genericSetter, &ontimeupdate_setterinfo },
16297 : { "onvolumechange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onvolumechange_getterinfo, genericSetter, &onvolumechange_setterinfo },
16298 : { "onwaiting", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onwaiting_getterinfo, genericSetter, &onwaiting_setterinfo },
16299 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16300 : { "onselectstart", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onselectstart_getterinfo, genericSetter, &onselectstart_setterinfo },
16301 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16302 : { "ontoggle", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontoggle_getterinfo, genericSetter, &ontoggle_setterinfo },
16303 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16304 : { "onpointercancel", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointercancel_getterinfo, genericSetter, &onpointercancel_setterinfo },
16305 : { "onpointerdown", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointerdown_getterinfo, genericSetter, &onpointerdown_setterinfo },
16306 : { "onpointerup", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointerup_getterinfo, genericSetter, &onpointerup_setterinfo },
16307 : { "onpointermove", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointermove_getterinfo, genericSetter, &onpointermove_setterinfo },
16308 : { "onpointerout", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointerout_getterinfo, genericSetter, &onpointerout_setterinfo },
16309 : { "onpointerover", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointerover_getterinfo, genericSetter, &onpointerover_setterinfo },
16310 : { "onpointerenter", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointerenter_getterinfo, genericSetter, &onpointerenter_setterinfo },
16311 : { "onpointerleave", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpointerleave_getterinfo, genericSetter, &onpointerleave_setterinfo },
16312 : { "ongotpointercapture", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ongotpointercapture_getterinfo, genericSetter, &ongotpointercapture_setterinfo },
16313 : { "onlostpointercapture", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onlostpointercapture_getterinfo, genericSetter, &onlostpointercapture_setterinfo },
16314 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16315 : { "onmozfullscreenchange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmozfullscreenchange_getterinfo, genericSetter, &onmozfullscreenchange_setterinfo },
16316 : { "onmozfullscreenerror", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmozfullscreenerror_getterinfo, genericSetter, &onmozfullscreenerror_setterinfo },
16317 : { "onanimationcancel", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onanimationcancel_getterinfo, genericSetter, &onanimationcancel_setterinfo },
16318 : { "onanimationend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onanimationend_getterinfo, genericSetter, &onanimationend_setterinfo },
16319 : { "onanimationiteration", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onanimationiteration_getterinfo, genericSetter, &onanimationiteration_setterinfo },
16320 : { "onanimationstart", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onanimationstart_getterinfo, genericSetter, &onanimationstart_setterinfo },
16321 : { "ontransitioncancel", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontransitioncancel_getterinfo, genericSetter, &ontransitioncancel_setterinfo },
16322 : { "ontransitionend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontransitionend_getterinfo, genericSetter, &ontransitionend_setterinfo },
16323 : { "ontransitionrun", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontransitionrun_getterinfo, genericSetter, &ontransitionrun_setterinfo },
16324 : { "ontransitionstart", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontransitionstart_getterinfo, genericSetter, &ontransitionstart_setterinfo },
16325 : { "onwebkitanimationend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onwebkitanimationend_getterinfo, genericSetter, &onwebkitanimationend_setterinfo },
16326 : { "onwebkitanimationiteration", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onwebkitanimationiteration_getterinfo, genericSetter, &onwebkitanimationiteration_setterinfo },
16327 : { "onwebkitanimationstart", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onwebkitanimationstart_getterinfo, genericSetter, &onwebkitanimationstart_setterinfo },
16328 : { "onwebkittransitionend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onwebkittransitionend_getterinfo, genericSetter, &onwebkittransitionend_setterinfo },
16329 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16330 : { "u2f", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &u2f_getterinfo, nullptr, nullptr },
16331 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16332 : { "onerror", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onerror_getterinfo, genericSetter, &onerror_setterinfo },
16333 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16334 : { "speechSynthesis", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &speechSynthesis_getterinfo, nullptr, nullptr },
16335 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16336 : { "ontouchstart", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontouchstart_getterinfo, genericSetter, &ontouchstart_setterinfo },
16337 : { "ontouchend", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontouchend_getterinfo, genericSetter, &ontouchend_setterinfo },
16338 : { "ontouchmove", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontouchmove_getterinfo, genericSetter, &ontouchmove_setterinfo },
16339 : { "ontouchcancel", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ontouchcancel_getterinfo, genericSetter, &ontouchcancel_setterinfo },
16340 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16341 : { "onafterprint", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onafterprint_getterinfo, genericSetter, &onafterprint_setterinfo },
16342 : { "onbeforeprint", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onbeforeprint_getterinfo, genericSetter, &onbeforeprint_setterinfo },
16343 : { "onbeforeunload", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onbeforeunload_getterinfo, genericSetter, &onbeforeunload_setterinfo },
16344 : { "onhashchange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onhashchange_getterinfo, genericSetter, &onhashchange_setterinfo },
16345 : { "onlanguagechange", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onlanguagechange_getterinfo, genericSetter, &onlanguagechange_setterinfo },
16346 : { "onmessage", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onmessage_getterinfo, genericSetter, &onmessage_setterinfo },
16347 : { "onoffline", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onoffline_getterinfo, genericSetter, &onoffline_setterinfo },
16348 : { "ononline", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &ononline_getterinfo, genericSetter, &ononline_setterinfo },
16349 : { "onpagehide", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpagehide_getterinfo, genericSetter, &onpagehide_setterinfo },
16350 : { "onpageshow", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpageshow_getterinfo, genericSetter, &onpageshow_setterinfo },
16351 : { "onpopstate", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onpopstate_getterinfo, genericSetter, &onpopstate_setterinfo },
16352 : { "onstorage", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onstorage_getterinfo, genericSetter, &onstorage_setterinfo },
16353 : { "onunload", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &onunload_getterinfo, genericSetter, &onunload_setterinfo },
16354 : { "localStorage", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &localStorage_getterinfo, nullptr, nullptr },
16355 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16356 : { "dialogArguments", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &dialogArguments_getterinfo, nullptr, nullptr },
16357 : { "returnValue", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &returnValue_getterinfo, genericSetter, &returnValue_setterinfo },
16358 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16359 : { "origin", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &origin_getterinfo, genericSetter, &origin_setterinfo },
16360 : { "isSecureContext", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &isSecureContext_getterinfo, nullptr, nullptr },
16361 : { "indexedDB", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &indexedDB_getterinfo, nullptr, nullptr },
16362 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16363 : { "caches", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &caches_getterinfo, nullptr, nullptr },
16364 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
16365 : { "sessionStorage", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &sessionStorage_getterinfo, nullptr, nullptr },
16366 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
16367 : };
16368 : #if defined(__clang__)
16369 : #pragma clang diagnostic pop
16370 : #endif
16371 :
16372 : static PrefableDisablers sAttributes_disablers4 = {
16373 : true, false, 0, &CustomElementRegistry::IsCustomElementEnabled
16374 : };
16375 :
16376 : static PrefableDisablers sAttributes_disablers22 = {
16377 : true, false, 0, nullptr
16378 : };
16379 :
16380 : static PrefableDisablers sAttributes_disablers24 = {
16381 : true, false, 0, nullptr
16382 : };
16383 :
16384 : static PrefableDisablers sAttributes_disablers54 = {
16385 : true, false, 0, nullptr
16386 : };
16387 :
16388 : static PrefableDisablers sAttributes_disablers60 = {
16389 : true, false, 0, nullptr
16390 : };
16391 :
16392 : static PrefableDisablers sAttributes_disablers62 = {
16393 : true, false, 0, nullptr
16394 : };
16395 :
16396 : static PrefableDisablers sAttributes_disablers64 = {
16397 : true, false, 0, &IsChromeOrXBL
16398 : };
16399 :
16400 : static PrefableDisablers sAttributes_disablers66 = {
16401 : true, false, 0, &nsGlobalWindow::IsPrivilegedChromeWindow
16402 : };
16403 :
16404 : static PrefableDisablers sAttributes_disablers131 = {
16405 : true, false, 0, nullptr
16406 : };
16407 :
16408 : static PrefableDisablers sAttributes_disablers135 = {
16409 : true, false, 0, nullptr
16410 : };
16411 :
16412 : static PrefableDisablers sAttributes_disablers161 = {
16413 : true, false, 0, nullptr
16414 : };
16415 :
16416 : static PrefableDisablers sAttributes_disablers165 = {
16417 : true, false, 0, nullptr
16418 : };
16419 :
16420 : static PrefableDisablers sAttributes_disablers167 = {
16421 : true, false, 0, &nsGenericHTMLElement::TouchEventsEnabled
16422 : };
16423 :
16424 : static PrefableDisablers sAttributes_disablers187 = {
16425 : true, false, 0, &nsGlobalWindow::IsModalContentWindow
16426 : };
16427 :
16428 : static PrefableDisablers sAttributes_disablers194 = {
16429 : true, false, 0, &mozilla::dom::cache::CacheStorage::PrefEnabled
16430 : };
16431 :
16432 : // Can't be const because the pref-enabled boolean needs to be writable
16433 : static Prefable<const JSPropertySpec> sAttributes[] = {
16434 : { nullptr, &sAttributes_specs[0] },
16435 : { &sAttributes_disablers4, &sAttributes_specs[4] },
16436 : { nullptr, &sAttributes_specs[6] },
16437 : { &sAttributes_disablers22, &sAttributes_specs[22] },
16438 : { &sAttributes_disablers24, &sAttributes_specs[24] },
16439 : { nullptr, &sAttributes_specs[26] },
16440 : { &sAttributes_disablers54, &sAttributes_specs[54] },
16441 : { &sAttributes_disablers60, &sAttributes_specs[60] },
16442 : { &sAttributes_disablers62, &sAttributes_specs[62] },
16443 : { &sAttributes_disablers64, &sAttributes_specs[64] },
16444 : { &sAttributes_disablers66, &sAttributes_specs[66] },
16445 : { nullptr, &sAttributes_specs[71] },
16446 : { &sAttributes_disablers131, &sAttributes_specs[131] },
16447 : { nullptr, &sAttributes_specs[133] },
16448 : { &sAttributes_disablers135, &sAttributes_specs[135] },
16449 : { nullptr, &sAttributes_specs[146] },
16450 : { &sAttributes_disablers161, &sAttributes_specs[161] },
16451 : { nullptr, &sAttributes_specs[163] },
16452 : { &sAttributes_disablers165, &sAttributes_specs[165] },
16453 : { &sAttributes_disablers167, &sAttributes_specs[167] },
16454 : { nullptr, &sAttributes_specs[172] },
16455 : { &sAttributes_disablers187, &sAttributes_specs[187] },
16456 : { nullptr, &sAttributes_specs[190] },
16457 : { &sAttributes_disablers194, &sAttributes_specs[194] },
16458 : { nullptr, &sAttributes_specs[196] },
16459 : { nullptr, nullptr }
16460 : };
16461 :
16462 : static_assert(25 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
16463 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
16464 : static_assert(59 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
16465 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
16466 :
16467 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
16468 : #if defined(__clang__)
16469 : #pragma clang diagnostic push
16470 : #pragma clang diagnostic ignored "-Wmissing-braces"
16471 : #endif
16472 : static const JSPropertySpec sChromeAttributes_specs[] = {
16473 : { "controllers", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &controllers_getterinfo, genericSetter, &controllers_setterinfo },
16474 : { "realFrameElement", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &realFrameElement_getterinfo, nullptr, nullptr },
16475 : { "scrollMinX", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &scrollMinX_getterinfo, nullptr, nullptr },
16476 : { "scrollMinY", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &scrollMinY_getterinfo, nullptr, nullptr },
16477 : { "MozSelfSupport", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &MozSelfSupport_getterinfo, nullptr, nullptr },
16478 : { "_content", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &_content_getterinfo, nullptr, nullptr },
16479 : { "windowRoot", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &windowRoot_getterinfo, nullptr, nullptr },
16480 : { "isSecureContextIfOpenerIgnored", JSPROP_SHARED | JSPROP_ENUMERATE, genericGetter, &isSecureContextIfOpenerIgnored_getterinfo, nullptr, nullptr },
16481 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
16482 : };
16483 : #if defined(__clang__)
16484 : #pragma clang diagnostic pop
16485 : #endif
16486 :
16487 :
16488 : // Can't be const because the pref-enabled boolean needs to be writable
16489 : static Prefable<const JSPropertySpec> sChromeAttributes[] = {
16490 : { nullptr, &sChromeAttributes_specs[0] },
16491 : { nullptr, nullptr }
16492 : };
16493 :
16494 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
16495 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
16496 : static_assert(8 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
16497 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
16498 :
16499 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
16500 : #if defined(__clang__)
16501 : #pragma clang diagnostic push
16502 : #pragma clang diagnostic ignored "-Wmissing-braces"
16503 : #endif
16504 : static const JSPropertySpec sUnforgeableAttributes_specs[] = {
16505 : { "window", JSPROP_SHARED | JSPROP_ENUMERATE | JSPROP_PERMANENT, genericCrossOriginGetter, &window_getterinfo, nullptr, nullptr },
16506 : { "document", JSPROP_SHARED | JSPROP_ENUMERATE | JSPROP_PERMANENT, genericGetter, &document_getterinfo, nullptr, nullptr },
16507 : { "location", JSPROP_SHARED | JSPROP_ENUMERATE | JSPROP_PERMANENT, genericCrossOriginGetter, &location_getterinfo, genericCrossOriginSetter, &location_setterinfo },
16508 : { "top", JSPROP_SHARED | JSPROP_ENUMERATE | JSPROP_PERMANENT, genericCrossOriginGetter, &top_getterinfo, nullptr, nullptr },
16509 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
16510 : };
16511 : #if defined(__clang__)
16512 : #pragma clang diagnostic pop
16513 : #endif
16514 :
16515 :
16516 : // Can't be const because the pref-enabled boolean needs to be writable
16517 : static Prefable<const JSPropertySpec> sUnforgeableAttributes[] = {
16518 : { nullptr, &sUnforgeableAttributes_specs[0] },
16519 : { nullptr, nullptr }
16520 : };
16521 :
16522 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
16523 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
16524 : static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
16525 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
16526 :
16527 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
16528 : #if defined(__clang__)
16529 : #pragma clang diagnostic push
16530 : #pragma clang diagnostic ignored "-Wmissing-braces"
16531 : #endif
16532 : static const ConstantSpec sConstants_specs[] = {
16533 : { "STATE_MAXIMIZED", JS::Int32Value(1) },
16534 : { "STATE_MINIMIZED", JS::Int32Value(2) },
16535 : { "STATE_NORMAL", JS::Int32Value(3) },
16536 : { "STATE_FULLSCREEN", JS::Int32Value(4) },
16537 : { 0, JS::UndefinedValue() }
16538 : };
16539 : #if defined(__clang__)
16540 : #pragma clang diagnostic pop
16541 : #endif
16542 :
16543 : static PrefableDisablers sConstants_disablers0 = {
16544 : true, false, 0, &nsGlobalWindow::IsPrivilegedChromeWindow
16545 : };
16546 :
16547 : // Can't be const because the pref-enabled boolean needs to be writable
16548 : static Prefable<const ConstantSpec> sConstants[] = {
16549 : { &sConstants_disablers0, &sConstants_specs[0] },
16550 : { nullptr, nullptr }
16551 : };
16552 :
16553 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
16554 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
16555 : static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
16556 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
16557 :
16558 :
16559 : static uint16_t sNativeProperties_sortedPropertyIndices[235];
16560 : static PropertyInfo sNativeProperties_propertyInfos[235];
16561 :
16562 : static const NativePropertiesN<4> sNativeProperties = {
16563 : false, 0,
16564 : false, 0,
16565 : true, 0 /* sMethods */,
16566 : true, 1 /* sAttributes */,
16567 : false, 0,
16568 : true, 2 /* sUnforgeableAttributes */,
16569 : true, 3 /* sConstants */,
16570 : -1,
16571 : 235,
16572 : sNativeProperties_sortedPropertyIndices,
16573 : {
16574 : { sMethods, &sNativeProperties_propertyInfos[0] },
16575 : { sAttributes, &sNativeProperties_propertyInfos[54] },
16576 : { sUnforgeableAttributes, &sNativeProperties_propertyInfos[227] },
16577 : { sConstants, &sNativeProperties_propertyInfos[231] }
16578 : }
16579 : };
16580 : static_assert(235 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
16581 : "We have a property info count that is oversized");
16582 :
16583 : static uint16_t sChromeOnlyNativeProperties_sortedPropertyIndices[14];
16584 : static PropertyInfo sChromeOnlyNativeProperties_propertyInfos[14];
16585 :
16586 : static const NativePropertiesN<2> sChromeOnlyNativeProperties = {
16587 : false, 0,
16588 : false, 0,
16589 : true, 0 /* sChromeMethods */,
16590 : true, 1 /* sChromeAttributes */,
16591 : false, 0,
16592 : false, 0,
16593 : false, 0,
16594 : -1,
16595 : 14,
16596 : sChromeOnlyNativeProperties_sortedPropertyIndices,
16597 : {
16598 : { sChromeMethods, &sChromeOnlyNativeProperties_propertyInfos[0] },
16599 : { sChromeAttributes, &sChromeOnlyNativeProperties_propertyInfos[6] }
16600 : }
16601 : };
16602 : static_assert(14 < 1ull << CHAR_BIT * sizeof(sChromeOnlyNativeProperties.propertyInfoCount),
16603 : "We have a property info count that is oversized");
16604 :
16605 : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
16606 : {
16607 : "Function",
16608 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
16609 : &sBoringInterfaceObjectClassClassOps,
16610 : JS_NULL_CLASS_SPEC,
16611 : JS_NULL_CLASS_EXT,
16612 : &sInterfaceObjectClassObjectOps
16613 : },
16614 : eInterface,
16615 : true,
16616 : prototypes::id::Window,
16617 : PrototypeTraits<prototypes::id::Window>::Depth,
16618 : sNativePropertyHooks,
16619 : "function Window() {\n [native code]\n}",
16620 : EventTargetBinding::GetConstructorObject
16621 : };
16622 :
16623 : static bool
16624 3099 : _resolve(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, bool* resolvedp)
16625 : {
16626 3099 : if (!ResolveGlobal(cx, obj, id, resolvedp)) {
16627 0 : return false;
16628 : }
16629 3099 : if (*resolvedp) {
16630 11 : return true;
16631 : }
16632 :
16633 3088 : nsGlobalWindow* self = UnwrapPossiblyNotInitializedDOMObject<nsGlobalWindow>(obj);
16634 6176 : JS::Rooted<JS::PropertyDescriptor> desc(cx);
16635 3088 : if (!self->DoResolve(cx, obj, id, &desc)) {
16636 0 : return false;
16637 : }
16638 3088 : if (!desc.object()) {
16639 3080 : return true;
16640 : }
16641 : // If desc.value() is undefined, then the DoResolve call
16642 : // has already defined it on the object. Don't try to also
16643 : // define it.
16644 8 : if (!desc.value().isUndefined()) {
16645 0 : desc.attributesRef() |= JSPROP_RESOLVING;
16646 0 : if (!JS_DefinePropertyById(cx, obj, id, desc)) {
16647 0 : return false;
16648 : }
16649 : }
16650 8 : *resolvedp = true;
16651 8 : return true;
16652 : }
16653 :
16654 : static bool
16655 19 : _mayResolve(const JSAtomState& names, jsid id, JSObject* maybeObj)
16656 : {
16657 19 : if (MayResolveGlobal(names, id, maybeObj)) {
16658 11 : return true;
16659 : }
16660 :
16661 8 : return nsGlobalWindow::MayResolve(id);
16662 : }
16663 :
16664 : static bool
16665 0 : _newEnumerate(JSContext* cx, JS::Handle<JSObject*> obj, JS::AutoIdVector& properties, bool enumerableOnly)
16666 : {
16667 0 : if (!EnumerateGlobal(cx, obj, properties, enumerableOnly)) {
16668 0 : return false;
16669 : }
16670 :
16671 : nsGlobalWindow* self;
16672 0 : JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
16673 : {
16674 0 : nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
16675 0 : if (NS_FAILED(rv)) {
16676 0 : return ThrowErrorMessage(cx, MSG_THIS_DOES_NOT_IMPLEMENT_INTERFACE, "Value", "Window");
16677 : }
16678 : }
16679 0 : binding_detail::FastErrorResult rv;
16680 0 : self->GetOwnPropertyNames(cx, properties, enumerableOnly, rv);
16681 0 : if (rv.MaybeSetPendingException(cx)) {
16682 0 : return false;
16683 : }
16684 0 : return true;
16685 : }
16686 :
16687 : static JSObject*
16688 8 : GetNamedPropertiesObject(JSContext* aCx)
16689 : {
16690 : /* Make sure our global is sane. Hopefully we can remove this sometime */
16691 8 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
16692 8 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
16693 0 : return nullptr;
16694 : }
16695 :
16696 : /* Check to see whether the named properties object has already been created */
16697 8 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
16698 :
16699 8 : JS::Heap<JSObject*>& namedPropertiesObject = protoAndIfaceCache.EntrySlotOrCreate(namedpropertiesobjects::id::Window);
16700 8 : if (!namedPropertiesObject) {
16701 14 : JS::Rooted<JSObject*> parentProto(aCx, EventTargetBinding::GetProtoObjectHandle(aCx));
16702 7 : if (!parentProto) {
16703 0 : return nullptr;
16704 : }
16705 7 : namedPropertiesObject = nsGlobalWindow::CreateNamedPropertiesObject(aCx, parentProto);
16706 : DebugOnly<const DOMIfaceAndProtoJSClass*> clasp =
16707 14 : DOMIfaceAndProtoJSClass::FromJSClass(js::GetObjectClass(namedPropertiesObject));
16708 7 : MOZ_ASSERT(clasp->mType == eNamedPropertiesObject,
16709 : "Expected nsGlobalWindow::CreateNamedPropertiesObject to return a named properties object");
16710 7 : MOZ_ASSERT(clasp->mNativeHooks,
16711 : "The named properties object for nsGlobalWindow should have NativePropertyHooks.");
16712 7 : MOZ_ASSERT(clasp->mNativeHooks->mResolveOwnProperty,
16713 : "Don't know how to resolve the properties of the named properties object for nsGlobalWindow.");
16714 7 : MOZ_ASSERT(clasp->mNativeHooks->mEnumerateOwnProperties,
16715 : "Don't know how to enumerate the properties of the named properties object for nsGlobalWindow.");
16716 : }
16717 8 : return namedPropertiesObject.get();
16718 : }
16719 :
16720 : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
16721 : {
16722 : "WindowPrototype",
16723 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
16724 : JS_NULL_CLASS_OPS,
16725 : JS_NULL_CLASS_SPEC,
16726 : JS_NULL_CLASS_EXT,
16727 : JS_NULL_OBJECT_OPS
16728 : },
16729 : eGlobalInterfacePrototype,
16730 : false,
16731 : prototypes::id::Window,
16732 : PrototypeTraits<prototypes::id::Window>::Depth,
16733 : sNativePropertyHooks,
16734 : "[object WindowPrototype]",
16735 : GetNamedPropertiesObject
16736 : };
16737 :
16738 : JSObject*
16739 0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
16740 : {
16741 0 : return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
16742 : }
16743 :
16744 : static const js::ClassOps sClassOps = {
16745 : nullptr, /* addProperty */
16746 : nullptr, /* delProperty */
16747 : nullptr, /* getProperty */
16748 : nullptr, /* setProperty */
16749 : nullptr, /* enumerate */
16750 : _newEnumerate, /* newEnumerate */
16751 : _resolve, /* resolve */
16752 : _mayResolve, /* mayResolve */
16753 : _finalize, /* finalize */
16754 : nullptr, /* call */
16755 : nullptr, /* hasInstance */
16756 : nullptr, /* construct */
16757 : JS_GlobalObjectTraceHook, /* trace */
16758 : };
16759 :
16760 : static const js::ClassExtension sClassExtension = {
16761 : nullptr, /* weakmapKeyDelegateOp */
16762 : _objectMoved /* objectMovedOp */
16763 : };
16764 :
16765 : static const DOMJSClass sClass = {
16766 : { "Window",
16767 : JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_DOM_GLOBAL | JSCLASS_GLOBAL_FLAGS_WITH_SLOTS(DOM_GLOBAL_SLOTS),
16768 : &sClassOps,
16769 : JS_NULL_CLASS_SPEC,
16770 : &sClassExtension,
16771 : JS_NULL_OBJECT_OPS
16772 : },
16773 : { prototypes::id::EventTarget, prototypes::id::Window, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
16774 : IsBaseOf<nsISupports, nsGlobalWindow >::value,
16775 : sNativePropertyHooks,
16776 : FindAssociatedGlobalForNative<nsGlobalWindow>::Get,
16777 : GetProtoObjectHandle,
16778 : GetCCParticipant<nsGlobalWindow>::Get()
16779 : };
16780 : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
16781 : "Must have the right minimal number of reserved slots.");
16782 : static_assert(JSCLASS_GLOBAL_APPLICATION_SLOTS >= 5,
16783 : "Must have enough reserved slots.");
16784 :
16785 : const JSClass*
16786 0 : GetJSClass()
16787 : {
16788 0 : return sClass.ToJSClass();
16789 : }
16790 :
16791 : static bool
16792 7 : UpdateMemberSlots(JSContext* aCx, JS::Handle<JSObject*> aWrapper, nsGlobalWindow* aObject)
16793 : {
16794 14 : JS::Rooted<JS::Value> temp(aCx);
16795 7 : JSJitGetterCallArgs args(&temp);
16796 :
16797 : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 2) < js::shadow::Object::MAX_FIXED_SLOTS,
16798 : "Not enough fixed slots to fit 'Window.document. Ion's visitGetDOMMemberV/visitGetDOMMemberT assume StoreInSlot things are all in fixed slots.");
16799 7 : if (!get_document(aCx, aWrapper, aObject, args)) {
16800 0 : return false;
16801 : }
16802 : // Getter handled setting our reserved slots
16803 :
16804 : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 3) < js::shadow::Object::MAX_FIXED_SLOTS,
16805 : "Not enough fixed slots to fit 'Window.performance. Ion's visitGetDOMMemberV/visitGetDOMMemberT assume StoreInSlot things are all in fixed slots.");
16806 7 : if (!get_performance(aCx, aWrapper, aObject, args)) {
16807 0 : return false;
16808 : }
16809 : // Getter handled setting our reserved slots
16810 :
16811 7 : return true;
16812 : }
16813 :
16814 : bool
16815 7 : Wrap(JSContext* aCx, nsGlobalWindow* aObject, nsWrapperCache* aCache, JS::CompartmentOptions& aOptions, JSPrincipals* aPrincipal, bool aInitStandardClasses, JS::MutableHandle<JSObject*> aReflector)
16816 : {
16817 : MOZ_ASSERT(static_cast<nsGlobalWindow*>(aObject) ==
16818 : reinterpret_cast<nsGlobalWindow*>(aObject),
16819 : "Multiple inheritance for nsGlobalWindow is broken.");
16820 : MOZ_ASSERT(static_cast<mozilla::dom::EventTarget*>(aObject) ==
16821 : reinterpret_cast<mozilla::dom::EventTarget*>(aObject),
16822 : "Multiple inheritance for mozilla::dom::EventTarget is broken.");
16823 7 : MOZ_ASSERT(ToSupportsIsCorrect(aObject));
16824 7 : MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
16825 : "nsISupports must be on our primary inheritance chain");
16826 :
16827 7 : if (!CreateGlobal<nsGlobalWindow, GetProtoObjectHandle>(aCx,
16828 : aObject,
16829 : aCache,
16830 : sClass.ToJSClass(),
16831 : aOptions,
16832 : aPrincipal,
16833 : aInitStandardClasses,
16834 : aReflector)) {
16835 0 : aCache->ReleaseWrapper(aObject);
16836 0 : aCache->ClearWrapper();
16837 0 : return false;
16838 : }
16839 :
16840 : // aReflector is a new global, so has a new compartment. Enter it
16841 : // before doing anything with it.
16842 14 : JSAutoCompartment ac(aCx, aReflector);
16843 :
16844 7 : if (!DefineProperties(aCx, aReflector, sNativeProperties.Upcast(), nsContentUtils::ThreadsafeIsSystemCaller(aCx) ? sChromeOnlyNativeProperties.Upcast() : nullptr)) {
16845 0 : aCache->ReleaseWrapper(aObject);
16846 0 : aCache->ClearWrapper();
16847 0 : return false;
16848 : }
16849 :
16850 7 : if (!DefineUnforgeableAttributes(aCx, aReflector, sUnforgeableAttributes)) {
16851 0 : aCache->ReleaseWrapper(aObject);
16852 0 : aCache->ClearWrapper();
16853 0 : return false;
16854 : }
16855 :
16856 7 : if (!UpdateMemberSlots(aCx, aReflector, aObject)) {
16857 0 : aCache->ReleaseWrapper(aObject);
16858 0 : aCache->ClearWrapper();
16859 0 : return false;
16860 : }
16861 :
16862 7 : return true;
16863 : }
16864 :
16865 : static bool
16866 31 : ResolveOwnPropertyViaResolve(JSContext* cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::MutableHandle<JS::PropertyDescriptor> desc)
16867 : {
16868 : nsGlobalWindow* self;
16869 62 : JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
16870 : {
16871 31 : nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
16872 31 : if (NS_FAILED(rv)) {
16873 0 : return ThrowErrorMessage(cx, MSG_THIS_DOES_NOT_IMPLEMENT_INTERFACE, "Value", "Window");
16874 : }
16875 : }
16876 : {
16877 : // Since we're dealing with an Xray, do the resolve on the
16878 : // underlying object first. That gives it a chance to
16879 : // define properties on the actual object as needed, and
16880 : // then use the fact that it created the objects as a flag
16881 : // to avoid re-resolving the properties if someone deletes
16882 : // them.
16883 62 : JSAutoCompartment ac(cx, obj);
16884 31 : JS_MarkCrossZoneId(cx, id);
16885 62 : JS::Rooted<JS::PropertyDescriptor> objDesc(cx);
16886 31 : if (!self->DoResolve(cx, obj, id, &objDesc)) {
16887 0 : return false;
16888 : }
16889 : // If desc.value() is undefined, then the DoResolve call
16890 : // has already defined the property on the object. Don't
16891 : // try to also define it.
16892 105 : if (objDesc.object() &&
16893 99 : !objDesc.value().isUndefined() &&
16894 31 : !JS_DefinePropertyById(cx, obj, id, objDesc)) {
16895 0 : return false;
16896 : }
16897 : }
16898 31 : return self->DoResolve(cx, wrapper, id, desc);
16899 : }
16900 :
16901 : static bool
16902 0 : EnumerateOwnPropertiesViaGetOwnPropertyNames(JSContext* cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> obj, JS::AutoIdVector& props)
16903 : {
16904 : nsGlobalWindow* self;
16905 0 : JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
16906 : {
16907 0 : nsresult rv = UnwrapObject<prototypes::id::Window, nsGlobalWindow>(&rootSelf, self);
16908 0 : if (NS_FAILED(rv)) {
16909 0 : return ThrowErrorMessage(cx, MSG_THIS_DOES_NOT_IMPLEMENT_INTERFACE, "Value", "Window");
16910 : }
16911 : }
16912 0 : binding_detail::FastErrorResult rv;
16913 : // This wants all own props, not just enumerable ones.
16914 0 : self->GetOwnPropertyNames(cx, props, false, rv);
16915 0 : if (rv.MaybeSetPendingException(cx)) {
16916 0 : return false;
16917 : }
16918 0 : return true;
16919 : }
16920 :
16921 : // This may allocate too many slots, because we only really need
16922 : // slots for our non-interface-typed members that we cache. But
16923 : // allocating slots only for those would make the slot index
16924 : // computations much more complicated, so let's do this the simple
16925 : // way for now.
16926 : DEFINE_XRAY_EXPANDO_CLASS(static, sXrayExpandoObjectClass, 4);
16927 :
16928 : const NativePropertyHooks sNativePropertyHooks[] = { {
16929 : ResolveOwnPropertyViaResolve,
16930 : EnumerateOwnPropertiesViaGetOwnPropertyNames,
16931 : nullptr,
16932 : { sNativeProperties.Upcast(), sChromeOnlyNativeProperties.Upcast() },
16933 : prototypes::id::Window,
16934 : constructors::id::Window,
16935 : EventTargetBinding::sNativePropertyHooks,
16936 : &sXrayExpandoObjectClass
16937 : } };
16938 :
16939 : bool
16940 8 : ClearCachedDocumentValue(JSContext* aCx, nsGlobalWindow* aObject)
16941 : {
16942 16 : JS::Rooted<JSObject*> obj(aCx);
16943 8 : obj = aObject->GetWrapper();
16944 8 : if (!obj) {
16945 0 : return true;
16946 : }
16947 16 : JS::Rooted<JS::Value> oldValue(aCx, js::GetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 2)));
16948 8 : js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 2), JS::UndefinedValue());
16949 8 : xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 2));
16950 16 : JS::Rooted<JS::Value> temp(aCx);
16951 8 : JSJitGetterCallArgs args(&temp);
16952 16 : JSAutoCompartment ac(aCx, obj);
16953 8 : if (!get_document(aCx, obj, aObject, args)) {
16954 0 : js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 2), oldValue);
16955 0 : return false;
16956 : }
16957 8 : return true;
16958 : }
16959 :
16960 : bool
16961 8 : ClearCachedPerformanceValue(JSContext* aCx, nsGlobalWindow* aObject)
16962 : {
16963 16 : JS::Rooted<JSObject*> obj(aCx);
16964 8 : obj = aObject->GetWrapper();
16965 8 : if (!obj) {
16966 0 : return true;
16967 : }
16968 16 : JS::Rooted<JS::Value> oldValue(aCx, js::GetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 3)));
16969 8 : js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 3), JS::UndefinedValue());
16970 8 : xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 3));
16971 16 : JS::Rooted<JS::Value> temp(aCx);
16972 8 : JSJitGetterCallArgs args(&temp);
16973 16 : JSAutoCompartment ac(aCx, obj);
16974 8 : if (!get_performance(aCx, obj, aObject, args)) {
16975 0 : js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 3), oldValue);
16976 0 : return false;
16977 : }
16978 8 : return true;
16979 : }
16980 :
16981 : void
16982 7 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
16983 : {
16984 14 : JS::Rooted<JSObject*> parentProto(aCx, GetNamedPropertiesObject(aCx));
16985 7 : if (!parentProto) {
16986 0 : return;
16987 : }
16988 :
16989 7 : JS::Handle<JSObject*> constructorProto(EventTargetBinding::GetConstructorObjectHandle(aCx));
16990 7 : if (!constructorProto) {
16991 0 : return;
16992 : }
16993 :
16994 : static bool sIdsInited = false;
16995 7 : if (!sIdsInited && NS_IsMainThread()) {
16996 2 : if (!InitIds(aCx, sNativeProperties.Upcast())) {
16997 0 : return;
16998 : }
16999 2 : if (!InitIds(aCx, sChromeOnlyNativeProperties.Upcast())) {
17000 0 : return;
17001 : }
17002 2 : sIdsInited = true;
17003 : }
17004 :
17005 : static bool sPrefCachesInited = false;
17006 7 : if (!sPrefCachesInited && NS_IsMainThread()) {
17007 2 : sPrefCachesInited = true;
17008 2 : Preferences::AddBoolVarCache(&sAttributes[3].disablers->enabled, "browser.cache.offline.enable");
17009 2 : Preferences::AddBoolVarCache(&sAttributes[4].disablers->enabled, "dom.manifest.onappinstalled");
17010 2 : Preferences::AddBoolVarCache(&sAttributes[6].disablers->enabled, "dom.vr.enabled");
17011 2 : Preferences::AddBoolVarCache(&sAttributes[7].disablers->enabled, "dom.audioWorklet.enabled");
17012 2 : Preferences::AddBoolVarCache(&sAttributes[8].disablers->enabled, "dom.paintWorklet.enabled");
17013 2 : Preferences::AddBoolVarCache(&sAttributes[12].disablers->enabled, "dom.select_events.enabled");
17014 2 : Preferences::AddBoolVarCache(&sAttributes[14].disablers->enabled, "dom.w3c_pointer_events.enabled");
17015 2 : Preferences::AddBoolVarCache(&sAttributes[16].disablers->enabled, "security.webauth.u2f");
17016 2 : Preferences::AddBoolVarCache(&sAttributes[18].disablers->enabled, "media.webspeech.synth.enabled");
17017 : }
17018 :
17019 7 : JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::Window);
17020 7 : JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::Window);
17021 21 : dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
17022 : &sPrototypeClass.mBase, protoCache,
17023 : constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
17024 : interfaceCache,
17025 : sNativeProperties.Upcast(),
17026 7 : nsContentUtils::ThreadsafeIsSystemCaller(aCx) ? sChromeOnlyNativeProperties.Upcast() : nullptr,
17027 : "Window", aDefineOnGlobal,
17028 : nullptr,
17029 7 : true);
17030 :
17031 7 : if (*&aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::Window)) {
17032 : bool succeeded;
17033 7 : JS::Handle<JSObject*> prot = GetProtoObjectHandle(aCx);
17034 7 : if (!JS_SetImmutablePrototype(aCx, prot, &succeeded)) {
17035 0 : *protoCache = nullptr;
17036 0 : if (interfaceCache) {
17037 0 : *interfaceCache = nullptr;
17038 : }
17039 0 : return;
17040 : }
17041 :
17042 7 : MOZ_ASSERT(succeeded,
17043 : "making a fresh prototype object's [[Prototype]] "
17044 : "immutable can internally fail, but it should "
17045 : "never be unsuccessful");
17046 : }
17047 : }
17048 :
17049 : JS::Handle<JSObject*>
17050 15 : GetProtoObjectHandle(JSContext* aCx)
17051 : {
17052 : /* Get the interface prototype object for this class. This will create the
17053 : object as needed. */
17054 15 : bool aDefineOnGlobal = true;
17055 :
17056 : /* Make sure our global is sane. Hopefully we can remove this sometime */
17057 15 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
17058 15 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
17059 0 : return nullptr;
17060 : }
17061 :
17062 : /* Check to see whether the interface objects are already installed */
17063 15 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
17064 15 : if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::Window)) {
17065 14 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
17066 7 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
17067 : }
17068 :
17069 : /*
17070 : * The object might _still_ be null, but that's OK.
17071 : *
17072 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
17073 : * traced by TraceProtoAndIfaceCache() and its contents are never
17074 : * changed after they have been set.
17075 : *
17076 : * Calling address() avoids the read read barrier that does gray
17077 : * unmarking, but it's not possible for the object to be gray here.
17078 : */
17079 :
17080 15 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::Window);
17081 15 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
17082 15 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
17083 : }
17084 :
17085 : JS::Handle<JSObject*>
17086 0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
17087 : {
17088 : /* Get the interface object for this class. This will create the object as
17089 : needed. */
17090 :
17091 : /* Make sure our global is sane. Hopefully we can remove this sometime */
17092 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
17093 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
17094 0 : return nullptr;
17095 : }
17096 :
17097 : /* Check to see whether the interface objects are already installed */
17098 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
17099 0 : if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::Window)) {
17100 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
17101 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
17102 : }
17103 :
17104 : /*
17105 : * The object might _still_ be null, but that's OK.
17106 : *
17107 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
17108 : * traced by TraceProtoAndIfaceCache() and its contents are never
17109 : * changed after they have been set.
17110 : *
17111 : * Calling address() avoids the read read barrier that does gray
17112 : * unmarking, but it's not possible for the object to be gray here.
17113 : */
17114 :
17115 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::Window);
17116 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
17117 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
17118 : }
17119 :
17120 : JSObject*
17121 0 : GetConstructorObject(JSContext* aCx)
17122 : {
17123 0 : return GetConstructorObjectHandle(aCx);
17124 : }
17125 :
17126 : } // namespace WindowBinding
17127 :
17128 :
17129 :
17130 : } // namespace dom
17131 : } // namespace mozilla
|