Line data Source code
1 : /* THIS FILE IS AUTOGENERATED FROM HTMLMediaElement.webidl BY Codegen.py - DO NOT EDIT */
2 :
3 : #include "DOMMediaStream.h"
4 : #include "EventHandlerBinding.h"
5 : #include "HTMLElementBinding.h"
6 : #include "HTMLMediaElementBinding.h"
7 : #include "WrapperFactory.h"
8 : #include "mozilla/FloatingPoint.h"
9 : #include "mozilla/OwningNonNull.h"
10 : #include "mozilla/Preferences.h"
11 : #include "mozilla/dom/AudioTrackList.h"
12 : #include "mozilla/dom/BindingUtils.h"
13 : #include "mozilla/dom/CustomElementRegistry.h"
14 : #include "mozilla/dom/DOMJSClass.h"
15 : #include "mozilla/dom/HTMLMediaElement.h"
16 : #include "mozilla/dom/MediaError.h"
17 : #include "mozilla/dom/MediaKeys.h"
18 : #include "mozilla/dom/MediaSource.h"
19 : #include "mozilla/dom/NonRefcountedDOMObject.h"
20 : #include "mozilla/dom/Nullable.h"
21 : #include "mozilla/dom/PrimitiveConversions.h"
22 : #include "mozilla/dom/Promise.h"
23 : #include "mozilla/dom/TextTrack.h"
24 : #include "mozilla/dom/TextTrackList.h"
25 : #include "mozilla/dom/TimeRanges.h"
26 : #include "mozilla/dom/ToJSValue.h"
27 : #include "mozilla/dom/VideoTrackList.h"
28 : #include "mozilla/dom/XrayExpandoClass.h"
29 : #include "nsContentUtils.h"
30 :
31 : namespace mozilla {
32 : namespace dom {
33 :
34 : namespace HTMLMediaElementBinding {
35 :
36 : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<HTMLElementBinding::NativeType>::value,
37 : "Can't inherit from an interface with a different ownership model.");
38 :
39 : static bool
40 0 : get_error(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
41 : {
42 0 : auto result(StrongOrRawPtr<mozilla::dom::MediaError>(self->GetError()));
43 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
44 0 : if (!result) {
45 0 : args.rval().setNull();
46 0 : return true;
47 : }
48 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
49 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
50 0 : return false;
51 : }
52 0 : return true;
53 : }
54 :
55 : static const JSJitInfo error_getterinfo = {
56 : { (JSJitGetterOp)get_error },
57 : { prototypes::id::HTMLMediaElement },
58 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
59 : JSJitInfo::Getter,
60 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
61 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
62 : false, /* isInfallible. False in setters. */
63 : false, /* isMovable. Not relevant for setters. */
64 : false, /* isEliminatable. Not relevant for setters. */
65 : false, /* isAlwaysInSlot. Only relevant for getters. */
66 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
67 : false, /* isTypedMethod. Only relevant for methods. */
68 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
69 : };
70 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
71 : static_assert(0 < 1, "There is no slot for us");
72 :
73 : static bool
74 0 : get_src(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
75 : {
76 0 : DOMString result;
77 0 : self->GetSrc(result);
78 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
79 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
80 0 : return false;
81 : }
82 0 : return true;
83 : }
84 :
85 : static bool
86 0 : set_src(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
87 : {
88 0 : binding_detail::FakeString arg0;
89 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
90 0 : return false;
91 : }
92 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
93 0 : Maybe<AutoCEReaction> ceReaction;
94 0 : if (reactionsStack) {
95 0 : ceReaction.emplace(reactionsStack);
96 : }
97 0 : binding_detail::FastErrorResult rv;
98 0 : self->SetSrc(NonNullHelper(Constify(arg0)), rv);
99 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
100 0 : return false;
101 : }
102 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
103 :
104 0 : return true;
105 : }
106 :
107 : static const JSJitInfo src_getterinfo = {
108 : { (JSJitGetterOp)get_src },
109 : { prototypes::id::HTMLMediaElement },
110 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
111 : JSJitInfo::Getter,
112 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
113 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
114 : false, /* isInfallible. False in setters. */
115 : false, /* isMovable. Not relevant for setters. */
116 : false, /* isEliminatable. Not relevant for setters. */
117 : false, /* isAlwaysInSlot. Only relevant for getters. */
118 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
119 : false, /* isTypedMethod. Only relevant for methods. */
120 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
121 : };
122 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
123 : static_assert(0 < 1, "There is no slot for us");
124 : static const JSJitInfo src_setterinfo = {
125 : { (JSJitGetterOp)set_src },
126 : { prototypes::id::HTMLMediaElement },
127 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
128 : JSJitInfo::Setter,
129 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
130 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
131 : false, /* isInfallible. False in setters. */
132 : false, /* isMovable. Not relevant for setters. */
133 : false, /* isEliminatable. Not relevant for setters. */
134 : false, /* isAlwaysInSlot. Only relevant for getters. */
135 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
136 : false, /* isTypedMethod. Only relevant for methods. */
137 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
138 : };
139 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
140 : static_assert(0 < 1, "There is no slot for us");
141 :
142 : static bool
143 0 : get_currentSrc(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
144 : {
145 0 : DOMString result;
146 0 : self->GetCurrentSrc(result);
147 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
148 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
149 0 : return false;
150 : }
151 0 : return true;
152 : }
153 :
154 : static const JSJitInfo currentSrc_getterinfo = {
155 : { (JSJitGetterOp)get_currentSrc },
156 : { prototypes::id::HTMLMediaElement },
157 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
158 : JSJitInfo::Getter,
159 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
160 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
161 : false, /* isInfallible. False in setters. */
162 : false, /* isMovable. Not relevant for setters. */
163 : false, /* isEliminatable. Not relevant for setters. */
164 : false, /* isAlwaysInSlot. Only relevant for getters. */
165 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
166 : false, /* isTypedMethod. Only relevant for methods. */
167 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
168 : };
169 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
170 : static_assert(0 < 1, "There is no slot for us");
171 :
172 : static bool
173 0 : get_crossOrigin(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
174 : {
175 0 : DOMString result;
176 0 : self->GetCrossOrigin(result);
177 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
178 0 : if (!xpc::StringToJsval(cx, result, args.rval())) {
179 0 : return false;
180 : }
181 0 : return true;
182 : }
183 :
184 : static bool
185 0 : set_crossOrigin(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
186 : {
187 0 : binding_detail::FakeString arg0;
188 0 : if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
189 0 : return false;
190 : }
191 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
192 0 : Maybe<AutoCEReaction> ceReaction;
193 0 : if (reactionsStack) {
194 0 : ceReaction.emplace(reactionsStack);
195 : }
196 0 : binding_detail::FastErrorResult rv;
197 0 : self->SetCrossOrigin(NonNullHelper(Constify(arg0)), rv);
198 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
199 0 : return false;
200 : }
201 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
202 :
203 0 : return true;
204 : }
205 :
206 : static const JSJitInfo crossOrigin_getterinfo = {
207 : { (JSJitGetterOp)get_crossOrigin },
208 : { prototypes::id::HTMLMediaElement },
209 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
210 : JSJitInfo::Getter,
211 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
212 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
213 : false, /* isInfallible. False in setters. */
214 : false, /* isMovable. Not relevant for setters. */
215 : false, /* isEliminatable. Not relevant for setters. */
216 : false, /* isAlwaysInSlot. Only relevant for getters. */
217 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
218 : false, /* isTypedMethod. Only relevant for methods. */
219 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
220 : };
221 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
222 : static_assert(0 < 1, "There is no slot for us");
223 : static const JSJitInfo crossOrigin_setterinfo = {
224 : { (JSJitGetterOp)set_crossOrigin },
225 : { prototypes::id::HTMLMediaElement },
226 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
227 : JSJitInfo::Setter,
228 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
229 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
230 : false, /* isInfallible. False in setters. */
231 : false, /* isMovable. Not relevant for setters. */
232 : false, /* isEliminatable. Not relevant for setters. */
233 : false, /* isAlwaysInSlot. Only relevant for getters. */
234 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
235 : false, /* isTypedMethod. Only relevant for methods. */
236 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
237 : };
238 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
239 : static_assert(0 < 1, "There is no slot for us");
240 :
241 : static bool
242 0 : get_networkState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
243 : {
244 0 : uint16_t result(self->NetworkState());
245 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
246 0 : args.rval().setInt32(int32_t(result));
247 0 : return true;
248 : }
249 :
250 : static const JSJitInfo networkState_getterinfo = {
251 : { (JSJitGetterOp)get_networkState },
252 : { prototypes::id::HTMLMediaElement },
253 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
254 : JSJitInfo::Getter,
255 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
256 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
257 : true, /* isInfallible. False in setters. */
258 : false, /* isMovable. Not relevant for setters. */
259 : false, /* isEliminatable. Not relevant for setters. */
260 : false, /* isAlwaysInSlot. Only relevant for getters. */
261 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
262 : false, /* isTypedMethod. Only relevant for methods. */
263 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
264 : };
265 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
266 : static_assert(0 < 1, "There is no slot for us");
267 :
268 : static bool
269 0 : get_preload(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
270 : {
271 0 : DOMString result;
272 0 : self->GetPreload(result);
273 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
274 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
275 0 : return false;
276 : }
277 0 : return true;
278 : }
279 :
280 : static bool
281 0 : set_preload(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
282 : {
283 0 : binding_detail::FakeString arg0;
284 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
285 0 : return false;
286 : }
287 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
288 0 : Maybe<AutoCEReaction> ceReaction;
289 0 : if (reactionsStack) {
290 0 : ceReaction.emplace(reactionsStack);
291 : }
292 0 : binding_detail::FastErrorResult rv;
293 0 : self->SetPreload(NonNullHelper(Constify(arg0)), rv);
294 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
295 0 : return false;
296 : }
297 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
298 :
299 0 : return true;
300 : }
301 :
302 : static const JSJitInfo preload_getterinfo = {
303 : { (JSJitGetterOp)get_preload },
304 : { prototypes::id::HTMLMediaElement },
305 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
306 : JSJitInfo::Getter,
307 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
308 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
309 : false, /* isInfallible. False in setters. */
310 : false, /* isMovable. Not relevant for setters. */
311 : false, /* isEliminatable. Not relevant for setters. */
312 : false, /* isAlwaysInSlot. Only relevant for getters. */
313 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
314 : false, /* isTypedMethod. Only relevant for methods. */
315 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
316 : };
317 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
318 : static_assert(0 < 1, "There is no slot for us");
319 : static const JSJitInfo preload_setterinfo = {
320 : { (JSJitGetterOp)set_preload },
321 : { prototypes::id::HTMLMediaElement },
322 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
323 : JSJitInfo::Setter,
324 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
325 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
326 : false, /* isInfallible. False in setters. */
327 : false, /* isMovable. Not relevant for setters. */
328 : false, /* isEliminatable. Not relevant for setters. */
329 : false, /* isAlwaysInSlot. Only relevant for getters. */
330 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
331 : false, /* isTypedMethod. Only relevant for methods. */
332 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
333 : };
334 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
335 : static_assert(0 < 1, "There is no slot for us");
336 :
337 : static bool
338 0 : get_buffered(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
339 : {
340 0 : auto result(StrongOrRawPtr<mozilla::dom::TimeRanges>(self->Buffered()));
341 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
342 : static_assert(!IsPointer<decltype(result)>::value,
343 : "NewObject implies that we need to keep the object alive with a strong reference.");
344 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
345 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
346 0 : return false;
347 : }
348 0 : return true;
349 : }
350 :
351 : static const JSJitInfo buffered_getterinfo = {
352 : { (JSJitGetterOp)get_buffered },
353 : { prototypes::id::HTMLMediaElement },
354 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
355 : JSJitInfo::Getter,
356 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
357 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
358 : false, /* isInfallible. False in setters. */
359 : false, /* isMovable. Not relevant for setters. */
360 : false, /* isEliminatable. Not relevant for setters. */
361 : false, /* isAlwaysInSlot. Only relevant for getters. */
362 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
363 : false, /* isTypedMethod. Only relevant for methods. */
364 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
365 : };
366 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
367 : static_assert(0 < 1, "There is no slot for us");
368 :
369 : static bool
370 0 : load(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
371 : {
372 0 : self->Load();
373 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
374 0 : args.rval().setUndefined();
375 0 : return true;
376 : }
377 :
378 : static const JSJitInfo load_methodinfo = {
379 : { (JSJitGetterOp)load },
380 : { prototypes::id::HTMLMediaElement },
381 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
382 : JSJitInfo::Method,
383 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
384 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
385 : true, /* isInfallible. False in setters. */
386 : false, /* isMovable. Not relevant for setters. */
387 : false, /* isEliminatable. Not relevant for setters. */
388 : false, /* isAlwaysInSlot. Only relevant for getters. */
389 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
390 : false, /* isTypedMethod. Only relevant for methods. */
391 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
392 : };
393 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
394 : static_assert(0 < 1, "There is no slot for us");
395 :
396 : static bool
397 0 : canPlayType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
398 : {
399 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
400 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLMediaElement.canPlayType");
401 : }
402 0 : binding_detail::FakeString arg0;
403 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
404 0 : return false;
405 : }
406 0 : DOMString result;
407 0 : self->CanPlayType(NonNullHelper(Constify(arg0)), result);
408 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
409 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
410 0 : return false;
411 : }
412 0 : return true;
413 : }
414 :
415 : static const JSJitInfo canPlayType_methodinfo = {
416 : { (JSJitGetterOp)canPlayType },
417 : { prototypes::id::HTMLMediaElement },
418 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
419 : JSJitInfo::Method,
420 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
421 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
422 : false, /* isInfallible. False in setters. */
423 : false, /* isMovable. Not relevant for setters. */
424 : false, /* isEliminatable. Not relevant for setters. */
425 : false, /* isAlwaysInSlot. Only relevant for getters. */
426 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
427 : false, /* isTypedMethod. Only relevant for methods. */
428 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
429 : };
430 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
431 : static_assert(0 < 1, "There is no slot for us");
432 :
433 : static bool
434 0 : get_readyState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
435 : {
436 0 : uint16_t result(self->ReadyState());
437 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
438 0 : args.rval().setInt32(int32_t(result));
439 0 : return true;
440 : }
441 :
442 : static const JSJitInfo readyState_getterinfo = {
443 : { (JSJitGetterOp)get_readyState },
444 : { prototypes::id::HTMLMediaElement },
445 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
446 : JSJitInfo::Getter,
447 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
448 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
449 : true, /* isInfallible. False in setters. */
450 : false, /* isMovable. Not relevant for setters. */
451 : false, /* isEliminatable. Not relevant for setters. */
452 : false, /* isAlwaysInSlot. Only relevant for getters. */
453 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
454 : false, /* isTypedMethod. Only relevant for methods. */
455 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
456 : };
457 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
458 : static_assert(0 < 1, "There is no slot for us");
459 :
460 : static bool
461 0 : get_seeking(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
462 : {
463 0 : bool result(self->Seeking());
464 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
465 0 : args.rval().setBoolean(result);
466 0 : return true;
467 : }
468 :
469 : static const JSJitInfo seeking_getterinfo = {
470 : { (JSJitGetterOp)get_seeking },
471 : { prototypes::id::HTMLMediaElement },
472 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
473 : JSJitInfo::Getter,
474 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
475 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
476 : true, /* isInfallible. False in setters. */
477 : false, /* isMovable. Not relevant for setters. */
478 : false, /* isEliminatable. Not relevant for setters. */
479 : false, /* isAlwaysInSlot. Only relevant for getters. */
480 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
481 : false, /* isTypedMethod. Only relevant for methods. */
482 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
483 : };
484 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
485 : static_assert(0 < 1, "There is no slot for us");
486 :
487 : static bool
488 0 : get_currentTime(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
489 : {
490 0 : double result(self->CurrentTime());
491 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
492 0 : args.rval().set(JS_NumberValue(double(result)));
493 0 : return true;
494 : }
495 :
496 : static bool
497 0 : set_currentTime(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
498 : {
499 : double arg0;
500 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
501 0 : return false;
502 0 : } else if (!mozilla::IsFinite(arg0)) {
503 0 : ThrowErrorMessage(cx, MSG_NOT_FINITE, "Value being assigned to HTMLMediaElement.currentTime");
504 0 : return false;
505 : }
506 0 : binding_detail::FastErrorResult rv;
507 0 : self->SetCurrentTime(arg0, rv);
508 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
509 0 : return false;
510 : }
511 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
512 :
513 0 : return true;
514 : }
515 :
516 : static const JSJitInfo currentTime_getterinfo = {
517 : { (JSJitGetterOp)get_currentTime },
518 : { prototypes::id::HTMLMediaElement },
519 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
520 : JSJitInfo::Getter,
521 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
522 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
523 : true, /* isInfallible. False in setters. */
524 : false, /* isMovable. Not relevant for setters. */
525 : false, /* isEliminatable. Not relevant for setters. */
526 : false, /* isAlwaysInSlot. Only relevant for getters. */
527 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
528 : false, /* isTypedMethod. Only relevant for methods. */
529 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
530 : };
531 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
532 : static_assert(0 < 1, "There is no slot for us");
533 : static const JSJitInfo currentTime_setterinfo = {
534 : { (JSJitGetterOp)set_currentTime },
535 : { prototypes::id::HTMLMediaElement },
536 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
537 : JSJitInfo::Setter,
538 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
539 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
540 : false, /* isInfallible. False in setters. */
541 : false, /* isMovable. Not relevant for setters. */
542 : false, /* isEliminatable. Not relevant for setters. */
543 : false, /* isAlwaysInSlot. Only relevant for getters. */
544 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
545 : false, /* isTypedMethod. Only relevant for methods. */
546 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
547 : };
548 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
549 : static_assert(0 < 1, "There is no slot for us");
550 :
551 : static bool
552 0 : fastSeek(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
553 : {
554 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
555 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLMediaElement.fastSeek");
556 : }
557 : double arg0;
558 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
559 0 : return false;
560 0 : } else if (!mozilla::IsFinite(arg0)) {
561 0 : ThrowErrorMessage(cx, MSG_NOT_FINITE, "Argument 1 of HTMLMediaElement.fastSeek");
562 0 : return false;
563 : }
564 0 : binding_detail::FastErrorResult rv;
565 0 : self->FastSeek(arg0, rv);
566 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
567 0 : return false;
568 : }
569 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
570 0 : args.rval().setUndefined();
571 0 : return true;
572 : }
573 :
574 : static const JSJitInfo fastSeek_methodinfo = {
575 : { (JSJitGetterOp)fastSeek },
576 : { prototypes::id::HTMLMediaElement },
577 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
578 : JSJitInfo::Method,
579 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
580 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
581 : false, /* isInfallible. False in setters. */
582 : false, /* isMovable. Not relevant for setters. */
583 : false, /* isEliminatable. Not relevant for setters. */
584 : false, /* isAlwaysInSlot. Only relevant for getters. */
585 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
586 : false, /* isTypedMethod. Only relevant for methods. */
587 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
588 : };
589 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
590 : static_assert(0 < 1, "There is no slot for us");
591 :
592 : static bool
593 0 : get_duration(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
594 : {
595 0 : double result(self->Duration());
596 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
597 0 : args.rval().set(JS_NumberValue(double(result)));
598 0 : return true;
599 : }
600 :
601 : static const JSJitInfo duration_getterinfo = {
602 : { (JSJitGetterOp)get_duration },
603 : { prototypes::id::HTMLMediaElement },
604 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
605 : JSJitInfo::Getter,
606 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
607 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
608 : true, /* isInfallible. False in setters. */
609 : false, /* isMovable. Not relevant for setters. */
610 : false, /* isEliminatable. Not relevant for setters. */
611 : false, /* isAlwaysInSlot. Only relevant for getters. */
612 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
613 : false, /* isTypedMethod. Only relevant for methods. */
614 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
615 : };
616 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
617 : static_assert(0 < 1, "There is no slot for us");
618 :
619 : static bool
620 0 : get_isEncrypted(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
621 : {
622 0 : bool result(self->IsEncrypted());
623 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
624 0 : args.rval().setBoolean(result);
625 0 : return true;
626 : }
627 :
628 : static const JSJitInfo isEncrypted_getterinfo = {
629 : { (JSJitGetterOp)get_isEncrypted },
630 : { prototypes::id::HTMLMediaElement },
631 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
632 : JSJitInfo::Getter,
633 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
634 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
635 : true, /* isInfallible. False in setters. */
636 : false, /* isMovable. Not relevant for setters. */
637 : false, /* isEliminatable. Not relevant for setters. */
638 : false, /* isAlwaysInSlot. Only relevant for getters. */
639 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
640 : false, /* isTypedMethod. Only relevant for methods. */
641 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
642 : };
643 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
644 : static_assert(0 < 1, "There is no slot for us");
645 :
646 : static bool
647 0 : get_paused(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
648 : {
649 0 : bool result(self->Paused());
650 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
651 0 : args.rval().setBoolean(result);
652 0 : return true;
653 : }
654 :
655 : static const JSJitInfo paused_getterinfo = {
656 : { (JSJitGetterOp)get_paused },
657 : { prototypes::id::HTMLMediaElement },
658 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
659 : JSJitInfo::Getter,
660 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
661 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
662 : true, /* isInfallible. False in setters. */
663 : false, /* isMovable. Not relevant for setters. */
664 : false, /* isEliminatable. Not relevant for setters. */
665 : false, /* isAlwaysInSlot. Only relevant for getters. */
666 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
667 : false, /* isTypedMethod. Only relevant for methods. */
668 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
669 : };
670 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
671 : static_assert(0 < 1, "There is no slot for us");
672 :
673 : static bool
674 0 : get_defaultPlaybackRate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
675 : {
676 0 : double result(self->DefaultPlaybackRate());
677 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
678 0 : args.rval().set(JS_NumberValue(double(result)));
679 0 : return true;
680 : }
681 :
682 : static bool
683 0 : set_defaultPlaybackRate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
684 : {
685 : double arg0;
686 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
687 0 : return false;
688 0 : } else if (!mozilla::IsFinite(arg0)) {
689 0 : ThrowErrorMessage(cx, MSG_NOT_FINITE, "Value being assigned to HTMLMediaElement.defaultPlaybackRate");
690 0 : return false;
691 : }
692 0 : binding_detail::FastErrorResult rv;
693 0 : self->SetDefaultPlaybackRate(arg0, rv);
694 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
695 0 : return false;
696 : }
697 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
698 :
699 0 : return true;
700 : }
701 :
702 : static const JSJitInfo defaultPlaybackRate_getterinfo = {
703 : { (JSJitGetterOp)get_defaultPlaybackRate },
704 : { prototypes::id::HTMLMediaElement },
705 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
706 : JSJitInfo::Getter,
707 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
708 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
709 : true, /* isInfallible. False in setters. */
710 : false, /* isMovable. Not relevant for setters. */
711 : false, /* isEliminatable. Not relevant for setters. */
712 : false, /* isAlwaysInSlot. Only relevant for getters. */
713 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
714 : false, /* isTypedMethod. Only relevant for methods. */
715 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
716 : };
717 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
718 : static_assert(0 < 1, "There is no slot for us");
719 : static const JSJitInfo defaultPlaybackRate_setterinfo = {
720 : { (JSJitGetterOp)set_defaultPlaybackRate },
721 : { prototypes::id::HTMLMediaElement },
722 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
723 : JSJitInfo::Setter,
724 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
725 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
726 : false, /* isInfallible. False in setters. */
727 : false, /* isMovable. Not relevant for setters. */
728 : false, /* isEliminatable. Not relevant for setters. */
729 : false, /* isAlwaysInSlot. Only relevant for getters. */
730 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
731 : false, /* isTypedMethod. Only relevant for methods. */
732 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
733 : };
734 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
735 : static_assert(0 < 1, "There is no slot for us");
736 :
737 : static bool
738 0 : get_playbackRate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
739 : {
740 0 : double result(self->PlaybackRate());
741 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
742 0 : args.rval().set(JS_NumberValue(double(result)));
743 0 : return true;
744 : }
745 :
746 : static bool
747 0 : set_playbackRate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
748 : {
749 : double arg0;
750 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
751 0 : return false;
752 0 : } else if (!mozilla::IsFinite(arg0)) {
753 0 : ThrowErrorMessage(cx, MSG_NOT_FINITE, "Value being assigned to HTMLMediaElement.playbackRate");
754 0 : return false;
755 : }
756 0 : binding_detail::FastErrorResult rv;
757 0 : self->SetPlaybackRate(arg0, rv);
758 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
759 0 : return false;
760 : }
761 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
762 :
763 0 : return true;
764 : }
765 :
766 : static const JSJitInfo playbackRate_getterinfo = {
767 : { (JSJitGetterOp)get_playbackRate },
768 : { prototypes::id::HTMLMediaElement },
769 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
770 : JSJitInfo::Getter,
771 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
772 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
773 : true, /* isInfallible. False in setters. */
774 : false, /* isMovable. Not relevant for setters. */
775 : false, /* isEliminatable. Not relevant for setters. */
776 : false, /* isAlwaysInSlot. Only relevant for getters. */
777 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
778 : false, /* isTypedMethod. Only relevant for methods. */
779 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
780 : };
781 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
782 : static_assert(0 < 1, "There is no slot for us");
783 : static const JSJitInfo playbackRate_setterinfo = {
784 : { (JSJitGetterOp)set_playbackRate },
785 : { prototypes::id::HTMLMediaElement },
786 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
787 : JSJitInfo::Setter,
788 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
789 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
790 : false, /* isInfallible. False in setters. */
791 : false, /* isMovable. Not relevant for setters. */
792 : false, /* isEliminatable. Not relevant for setters. */
793 : false, /* isAlwaysInSlot. Only relevant for getters. */
794 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
795 : false, /* isTypedMethod. Only relevant for methods. */
796 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
797 : };
798 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
799 : static_assert(0 < 1, "There is no slot for us");
800 :
801 : static bool
802 0 : get_played(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
803 : {
804 0 : auto result(StrongOrRawPtr<mozilla::dom::TimeRanges>(self->Played()));
805 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
806 : static_assert(!IsPointer<decltype(result)>::value,
807 : "NewObject implies that we need to keep the object alive with a strong reference.");
808 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
809 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
810 0 : return false;
811 : }
812 0 : return true;
813 : }
814 :
815 : static const JSJitInfo played_getterinfo = {
816 : { (JSJitGetterOp)get_played },
817 : { prototypes::id::HTMLMediaElement },
818 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
819 : JSJitInfo::Getter,
820 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
821 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
822 : false, /* isInfallible. False in setters. */
823 : false, /* isMovable. Not relevant for setters. */
824 : false, /* isEliminatable. Not relevant for setters. */
825 : false, /* isAlwaysInSlot. Only relevant for getters. */
826 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
827 : false, /* isTypedMethod. Only relevant for methods. */
828 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
829 : };
830 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
831 : static_assert(0 < 1, "There is no slot for us");
832 :
833 : static bool
834 0 : get_seekable(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
835 : {
836 0 : auto result(StrongOrRawPtr<mozilla::dom::TimeRanges>(self->Seekable()));
837 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
838 : static_assert(!IsPointer<decltype(result)>::value,
839 : "NewObject implies that we need to keep the object alive with a strong reference.");
840 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
841 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
842 0 : return false;
843 : }
844 0 : return true;
845 : }
846 :
847 : static const JSJitInfo seekable_getterinfo = {
848 : { (JSJitGetterOp)get_seekable },
849 : { prototypes::id::HTMLMediaElement },
850 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
851 : JSJitInfo::Getter,
852 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
853 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
854 : false, /* isInfallible. False in setters. */
855 : false, /* isMovable. Not relevant for setters. */
856 : false, /* isEliminatable. Not relevant for setters. */
857 : false, /* isAlwaysInSlot. Only relevant for getters. */
858 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
859 : false, /* isTypedMethod. Only relevant for methods. */
860 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
861 : };
862 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
863 : static_assert(0 < 1, "There is no slot for us");
864 :
865 : static bool
866 0 : get_ended(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
867 : {
868 0 : bool result(self->Ended());
869 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
870 0 : args.rval().setBoolean(result);
871 0 : return true;
872 : }
873 :
874 : static const JSJitInfo ended_getterinfo = {
875 : { (JSJitGetterOp)get_ended },
876 : { prototypes::id::HTMLMediaElement },
877 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
878 : JSJitInfo::Getter,
879 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
880 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
881 : true, /* isInfallible. False in setters. */
882 : false, /* isMovable. Not relevant for setters. */
883 : false, /* isEliminatable. Not relevant for setters. */
884 : false, /* isAlwaysInSlot. Only relevant for getters. */
885 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
886 : false, /* isTypedMethod. Only relevant for methods. */
887 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
888 : };
889 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
890 : static_assert(0 < 1, "There is no slot for us");
891 :
892 : static bool
893 0 : get_autoplay(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
894 : {
895 0 : bool result(self->Autoplay());
896 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
897 0 : args.rval().setBoolean(result);
898 0 : return true;
899 : }
900 :
901 : static bool
902 0 : set_autoplay(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
903 : {
904 : bool arg0;
905 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
906 0 : return false;
907 : }
908 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
909 0 : Maybe<AutoCEReaction> ceReaction;
910 0 : if (reactionsStack) {
911 0 : ceReaction.emplace(reactionsStack);
912 : }
913 0 : binding_detail::FastErrorResult rv;
914 0 : self->SetAutoplay(arg0, rv);
915 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
916 0 : return false;
917 : }
918 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
919 :
920 0 : return true;
921 : }
922 :
923 : static const JSJitInfo autoplay_getterinfo = {
924 : { (JSJitGetterOp)get_autoplay },
925 : { prototypes::id::HTMLMediaElement },
926 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
927 : JSJitInfo::Getter,
928 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
929 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
930 : true, /* isInfallible. False in setters. */
931 : false, /* isMovable. Not relevant for setters. */
932 : false, /* isEliminatable. Not relevant for setters. */
933 : false, /* isAlwaysInSlot. Only relevant for getters. */
934 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
935 : false, /* isTypedMethod. Only relevant for methods. */
936 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
937 : };
938 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
939 : static_assert(0 < 1, "There is no slot for us");
940 : static const JSJitInfo autoplay_setterinfo = {
941 : { (JSJitGetterOp)set_autoplay },
942 : { prototypes::id::HTMLMediaElement },
943 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
944 : JSJitInfo::Setter,
945 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
946 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
947 : false, /* isInfallible. False in setters. */
948 : false, /* isMovable. Not relevant for setters. */
949 : false, /* isEliminatable. Not relevant for setters. */
950 : false, /* isAlwaysInSlot. Only relevant for getters. */
951 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
952 : false, /* isTypedMethod. Only relevant for methods. */
953 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
954 : };
955 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
956 : static_assert(0 < 1, "There is no slot for us");
957 :
958 : static bool
959 0 : get_loop(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
960 : {
961 0 : bool result(self->Loop());
962 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
963 0 : args.rval().setBoolean(result);
964 0 : return true;
965 : }
966 :
967 : static bool
968 0 : set_loop(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
969 : {
970 : bool arg0;
971 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
972 0 : return false;
973 : }
974 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
975 0 : Maybe<AutoCEReaction> ceReaction;
976 0 : if (reactionsStack) {
977 0 : ceReaction.emplace(reactionsStack);
978 : }
979 0 : binding_detail::FastErrorResult rv;
980 0 : self->SetLoop(arg0, rv);
981 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
982 0 : return false;
983 : }
984 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
985 :
986 0 : return true;
987 : }
988 :
989 : static const JSJitInfo loop_getterinfo = {
990 : { (JSJitGetterOp)get_loop },
991 : { prototypes::id::HTMLMediaElement },
992 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
993 : JSJitInfo::Getter,
994 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
995 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
996 : true, /* isInfallible. False in setters. */
997 : false, /* isMovable. Not relevant for setters. */
998 : false, /* isEliminatable. Not relevant for setters. */
999 : false, /* isAlwaysInSlot. Only relevant for getters. */
1000 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1001 : false, /* isTypedMethod. Only relevant for methods. */
1002 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1003 : };
1004 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1005 : static_assert(0 < 1, "There is no slot for us");
1006 : static const JSJitInfo loop_setterinfo = {
1007 : { (JSJitGetterOp)set_loop },
1008 : { prototypes::id::HTMLMediaElement },
1009 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1010 : JSJitInfo::Setter,
1011 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1012 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1013 : false, /* isInfallible. False in setters. */
1014 : false, /* isMovable. Not relevant for setters. */
1015 : false, /* isEliminatable. Not relevant for setters. */
1016 : false, /* isAlwaysInSlot. Only relevant for getters. */
1017 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1018 : false, /* isTypedMethod. Only relevant for methods. */
1019 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1020 : };
1021 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1022 : static_assert(0 < 1, "There is no slot for us");
1023 :
1024 : static bool
1025 0 : play(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
1026 : {
1027 0 : binding_detail::FastErrorResult rv;
1028 0 : auto result(StrongOrRawPtr<Promise>(self->Play(rv)));
1029 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1030 0 : return false;
1031 : }
1032 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1033 0 : if (!ToJSValue(cx, result, args.rval())) {
1034 0 : return false;
1035 : }
1036 0 : return true;
1037 : }
1038 :
1039 : static bool
1040 0 : play_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
1041 : {
1042 : // Make sure to save the callee before someone maybe messes
1043 : // with rval().
1044 0 : JS::Rooted<JSObject*> callee(cx, &args.callee());
1045 0 : bool ok = play(cx, obj, self, args);
1046 0 : if (ok) {
1047 0 : return true;
1048 : }
1049 0 : return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
1050 0 : args.rval());
1051 : }
1052 :
1053 : static const JSJitInfo play_methodinfo = {
1054 : { (JSJitGetterOp)play_promiseWrapper },
1055 : { prototypes::id::HTMLMediaElement },
1056 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1057 : JSJitInfo::Method,
1058 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1059 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1060 : false, /* isInfallible. False in setters. */
1061 : false, /* isMovable. Not relevant for setters. */
1062 : false, /* isEliminatable. Not relevant for setters. */
1063 : false, /* isAlwaysInSlot. Only relevant for getters. */
1064 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1065 : false, /* isTypedMethod. Only relevant for methods. */
1066 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1067 : };
1068 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1069 : static_assert(0 < 1, "There is no slot for us");
1070 :
1071 : static bool
1072 0 : pause(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
1073 : {
1074 0 : binding_detail::FastErrorResult rv;
1075 0 : self->Pause(rv);
1076 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1077 0 : return false;
1078 : }
1079 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1080 0 : args.rval().setUndefined();
1081 0 : return true;
1082 : }
1083 :
1084 : static const JSJitInfo pause_methodinfo = {
1085 : { (JSJitGetterOp)pause },
1086 : { prototypes::id::HTMLMediaElement },
1087 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1088 : JSJitInfo::Method,
1089 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1090 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1091 : false, /* isInfallible. False in setters. */
1092 : false, /* isMovable. Not relevant for setters. */
1093 : false, /* isEliminatable. Not relevant for setters. */
1094 : false, /* isAlwaysInSlot. Only relevant for getters. */
1095 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1096 : false, /* isTypedMethod. Only relevant for methods. */
1097 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1098 : };
1099 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1100 : static_assert(0 < 1, "There is no slot for us");
1101 :
1102 : static bool
1103 0 : get_controls(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1104 : {
1105 0 : bool result(self->Controls());
1106 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1107 0 : args.rval().setBoolean(result);
1108 0 : return true;
1109 : }
1110 :
1111 : static bool
1112 0 : set_controls(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
1113 : {
1114 : bool arg0;
1115 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
1116 0 : return false;
1117 : }
1118 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1119 0 : Maybe<AutoCEReaction> ceReaction;
1120 0 : if (reactionsStack) {
1121 0 : ceReaction.emplace(reactionsStack);
1122 : }
1123 0 : binding_detail::FastErrorResult rv;
1124 0 : self->SetControls(arg0, rv);
1125 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1126 0 : return false;
1127 : }
1128 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1129 :
1130 0 : return true;
1131 : }
1132 :
1133 : static const JSJitInfo controls_getterinfo = {
1134 : { (JSJitGetterOp)get_controls },
1135 : { prototypes::id::HTMLMediaElement },
1136 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1137 : JSJitInfo::Getter,
1138 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1139 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1140 : true, /* isInfallible. False in setters. */
1141 : false, /* isMovable. Not relevant for setters. */
1142 : false, /* isEliminatable. Not relevant for setters. */
1143 : false, /* isAlwaysInSlot. Only relevant for getters. */
1144 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1145 : false, /* isTypedMethod. Only relevant for methods. */
1146 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1147 : };
1148 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1149 : static_assert(0 < 1, "There is no slot for us");
1150 : static const JSJitInfo controls_setterinfo = {
1151 : { (JSJitGetterOp)set_controls },
1152 : { prototypes::id::HTMLMediaElement },
1153 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1154 : JSJitInfo::Setter,
1155 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1156 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1157 : false, /* isInfallible. False in setters. */
1158 : false, /* isMovable. Not relevant for setters. */
1159 : false, /* isEliminatable. Not relevant for setters. */
1160 : false, /* isAlwaysInSlot. Only relevant for getters. */
1161 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1162 : false, /* isTypedMethod. Only relevant for methods. */
1163 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1164 : };
1165 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1166 : static_assert(0 < 1, "There is no slot for us");
1167 :
1168 : static bool
1169 0 : get_volume(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1170 : {
1171 0 : double result(self->Volume());
1172 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1173 0 : args.rval().set(JS_NumberValue(double(result)));
1174 0 : return true;
1175 : }
1176 :
1177 : static bool
1178 0 : set_volume(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
1179 : {
1180 : double arg0;
1181 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
1182 0 : return false;
1183 0 : } else if (!mozilla::IsFinite(arg0)) {
1184 0 : ThrowErrorMessage(cx, MSG_NOT_FINITE, "Value being assigned to HTMLMediaElement.volume");
1185 0 : return false;
1186 : }
1187 0 : binding_detail::FastErrorResult rv;
1188 0 : self->SetVolume(arg0, rv);
1189 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1190 0 : return false;
1191 : }
1192 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1193 :
1194 0 : return true;
1195 : }
1196 :
1197 : static const JSJitInfo volume_getterinfo = {
1198 : { (JSJitGetterOp)get_volume },
1199 : { prototypes::id::HTMLMediaElement },
1200 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1201 : JSJitInfo::Getter,
1202 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1203 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
1204 : true, /* isInfallible. False in setters. */
1205 : false, /* isMovable. Not relevant for setters. */
1206 : false, /* isEliminatable. Not relevant for setters. */
1207 : false, /* isAlwaysInSlot. Only relevant for getters. */
1208 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1209 : false, /* isTypedMethod. Only relevant for methods. */
1210 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1211 : };
1212 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1213 : static_assert(0 < 1, "There is no slot for us");
1214 : static const JSJitInfo volume_setterinfo = {
1215 : { (JSJitGetterOp)set_volume },
1216 : { prototypes::id::HTMLMediaElement },
1217 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1218 : JSJitInfo::Setter,
1219 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1220 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1221 : false, /* isInfallible. False in setters. */
1222 : false, /* isMovable. Not relevant for setters. */
1223 : false, /* isEliminatable. Not relevant for setters. */
1224 : false, /* isAlwaysInSlot. Only relevant for getters. */
1225 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1226 : false, /* isTypedMethod. Only relevant for methods. */
1227 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1228 : };
1229 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1230 : static_assert(0 < 1, "There is no slot for us");
1231 :
1232 : static bool
1233 0 : get_muted(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1234 : {
1235 0 : bool result(self->Muted());
1236 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1237 0 : args.rval().setBoolean(result);
1238 0 : return true;
1239 : }
1240 :
1241 : static bool
1242 0 : set_muted(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
1243 : {
1244 : bool arg0;
1245 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
1246 0 : return false;
1247 : }
1248 0 : self->SetMuted(arg0);
1249 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1250 :
1251 0 : return true;
1252 : }
1253 :
1254 : static const JSJitInfo muted_getterinfo = {
1255 : { (JSJitGetterOp)get_muted },
1256 : { prototypes::id::HTMLMediaElement },
1257 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1258 : JSJitInfo::Getter,
1259 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1260 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1261 : true, /* isInfallible. False in setters. */
1262 : false, /* isMovable. Not relevant for setters. */
1263 : false, /* isEliminatable. Not relevant for setters. */
1264 : false, /* isAlwaysInSlot. Only relevant for getters. */
1265 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1266 : false, /* isTypedMethod. Only relevant for methods. */
1267 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1268 : };
1269 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1270 : static_assert(0 < 1, "There is no slot for us");
1271 : static const JSJitInfo muted_setterinfo = {
1272 : { (JSJitGetterOp)set_muted },
1273 : { prototypes::id::HTMLMediaElement },
1274 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1275 : JSJitInfo::Setter,
1276 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1277 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1278 : false, /* isInfallible. False in setters. */
1279 : false, /* isMovable. Not relevant for setters. */
1280 : false, /* isEliminatable. Not relevant for setters. */
1281 : false, /* isAlwaysInSlot. Only relevant for getters. */
1282 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1283 : false, /* isTypedMethod. Only relevant for methods. */
1284 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1285 : };
1286 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1287 : static_assert(0 < 1, "There is no slot for us");
1288 :
1289 : static bool
1290 0 : get_defaultMuted(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1291 : {
1292 0 : bool result(self->DefaultMuted());
1293 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1294 0 : args.rval().setBoolean(result);
1295 0 : return true;
1296 : }
1297 :
1298 : static bool
1299 0 : set_defaultMuted(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
1300 : {
1301 : bool arg0;
1302 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
1303 0 : return false;
1304 : }
1305 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
1306 0 : Maybe<AutoCEReaction> ceReaction;
1307 0 : if (reactionsStack) {
1308 0 : ceReaction.emplace(reactionsStack);
1309 : }
1310 0 : binding_detail::FastErrorResult rv;
1311 0 : self->SetDefaultMuted(arg0, rv);
1312 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1313 0 : return false;
1314 : }
1315 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1316 :
1317 0 : return true;
1318 : }
1319 :
1320 : static const JSJitInfo defaultMuted_getterinfo = {
1321 : { (JSJitGetterOp)get_defaultMuted },
1322 : { prototypes::id::HTMLMediaElement },
1323 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1324 : JSJitInfo::Getter,
1325 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1326 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1327 : true, /* isInfallible. False in setters. */
1328 : false, /* isMovable. Not relevant for setters. */
1329 : false, /* isEliminatable. Not relevant for setters. */
1330 : false, /* isAlwaysInSlot. Only relevant for getters. */
1331 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1332 : false, /* isTypedMethod. Only relevant for methods. */
1333 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1334 : };
1335 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1336 : static_assert(0 < 1, "There is no slot for us");
1337 : static const JSJitInfo defaultMuted_setterinfo = {
1338 : { (JSJitGetterOp)set_defaultMuted },
1339 : { prototypes::id::HTMLMediaElement },
1340 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1341 : JSJitInfo::Setter,
1342 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1343 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1344 : false, /* isInfallible. False in setters. */
1345 : false, /* isMovable. Not relevant for setters. */
1346 : false, /* isEliminatable. Not relevant for setters. */
1347 : false, /* isAlwaysInSlot. Only relevant for getters. */
1348 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1349 : false, /* isTypedMethod. Only relevant for methods. */
1350 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1351 : };
1352 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1353 : static_assert(0 < 1, "There is no slot for us");
1354 :
1355 : static bool
1356 0 : get_audioTracks(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1357 : {
1358 0 : auto result(StrongOrRawPtr<mozilla::dom::AudioTrackList>(self->AudioTracks()));
1359 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1360 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1361 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1362 0 : return false;
1363 : }
1364 0 : return true;
1365 : }
1366 :
1367 : static const JSJitInfo audioTracks_getterinfo = {
1368 : { (JSJitGetterOp)get_audioTracks },
1369 : { prototypes::id::HTMLMediaElement },
1370 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1371 : JSJitInfo::Getter,
1372 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1373 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1374 : false, /* isInfallible. False in setters. */
1375 : false, /* isMovable. Not relevant for setters. */
1376 : false, /* isEliminatable. Not relevant for setters. */
1377 : false, /* isAlwaysInSlot. Only relevant for getters. */
1378 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1379 : false, /* isTypedMethod. Only relevant for methods. */
1380 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1381 : };
1382 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1383 : static_assert(0 < 1, "There is no slot for us");
1384 :
1385 : static bool
1386 0 : get_videoTracks(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1387 : {
1388 0 : auto result(StrongOrRawPtr<mozilla::dom::VideoTrackList>(self->VideoTracks()));
1389 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1390 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1391 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1392 0 : return false;
1393 : }
1394 0 : return true;
1395 : }
1396 :
1397 : static const JSJitInfo videoTracks_getterinfo = {
1398 : { (JSJitGetterOp)get_videoTracks },
1399 : { prototypes::id::HTMLMediaElement },
1400 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1401 : JSJitInfo::Getter,
1402 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1403 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1404 : false, /* isInfallible. False in setters. */
1405 : false, /* isMovable. Not relevant for setters. */
1406 : false, /* isEliminatable. Not relevant for setters. */
1407 : false, /* isAlwaysInSlot. Only relevant for getters. */
1408 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1409 : false, /* isTypedMethod. Only relevant for methods. */
1410 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1411 : };
1412 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1413 : static_assert(0 < 1, "There is no slot for us");
1414 :
1415 : static bool
1416 0 : get_textTracks(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1417 : {
1418 0 : auto result(StrongOrRawPtr<mozilla::dom::TextTrackList>(self->GetTextTracks()));
1419 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1420 0 : if (!result) {
1421 0 : args.rval().setNull();
1422 0 : return true;
1423 : }
1424 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1425 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1426 0 : return false;
1427 : }
1428 0 : return true;
1429 : }
1430 :
1431 : static const JSJitInfo textTracks_getterinfo = {
1432 : { (JSJitGetterOp)get_textTracks },
1433 : { prototypes::id::HTMLMediaElement },
1434 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1435 : JSJitInfo::Getter,
1436 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1437 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
1438 : false, /* isInfallible. False in setters. */
1439 : false, /* isMovable. Not relevant for setters. */
1440 : false, /* isEliminatable. Not relevant for setters. */
1441 : false, /* isAlwaysInSlot. Only relevant for getters. */
1442 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1443 : false, /* isTypedMethod. Only relevant for methods. */
1444 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1445 : };
1446 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1447 : static_assert(0 < 1, "There is no slot for us");
1448 :
1449 : static bool
1450 0 : addTextTrack(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
1451 : {
1452 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
1453 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLMediaElement.addTextTrack");
1454 : }
1455 : TextTrackKind arg0;
1456 : {
1457 : int index;
1458 0 : if (!FindEnumStringIndex<true>(cx, args[0], TextTrackKindValues::strings, "TextTrackKind", "Argument 1 of HTMLMediaElement.addTextTrack", &index)) {
1459 0 : return false;
1460 : }
1461 0 : MOZ_ASSERT(index >= 0);
1462 0 : arg0 = static_cast<TextTrackKind>(index);
1463 : }
1464 0 : binding_detail::FakeString arg1;
1465 0 : if (args.hasDefined(1)) {
1466 0 : if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
1467 0 : return false;
1468 : }
1469 : } else {
1470 : static const char16_t data[] = { 0 };
1471 0 : arg1.Rebind(data, ArrayLength(data) - 1);
1472 : }
1473 0 : binding_detail::FakeString arg2;
1474 0 : if (args.hasDefined(2)) {
1475 0 : if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2)) {
1476 0 : return false;
1477 : }
1478 : } else {
1479 : static const char16_t data[] = { 0 };
1480 0 : arg2.Rebind(data, ArrayLength(data) - 1);
1481 : }
1482 0 : auto result(StrongOrRawPtr<mozilla::dom::TextTrack>(self->AddTextTrack(arg0, NonNullHelper(Constify(arg1)), NonNullHelper(Constify(arg2)))));
1483 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1484 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1485 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1486 0 : return false;
1487 : }
1488 0 : return true;
1489 : }
1490 :
1491 : static const JSJitInfo addTextTrack_methodinfo = {
1492 : { (JSJitGetterOp)addTextTrack },
1493 : { prototypes::id::HTMLMediaElement },
1494 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1495 : JSJitInfo::Method,
1496 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1497 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1498 : false, /* isInfallible. False in setters. */
1499 : false, /* isMovable. Not relevant for setters. */
1500 : false, /* isEliminatable. Not relevant for setters. */
1501 : false, /* isAlwaysInSlot. Only relevant for getters. */
1502 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1503 : false, /* isTypedMethod. Only relevant for methods. */
1504 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1505 : };
1506 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1507 : static_assert(0 < 1, "There is no slot for us");
1508 :
1509 : static bool
1510 0 : get_mozMediaSourceObject(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1511 : {
1512 0 : auto result(StrongOrRawPtr<mozilla::dom::MediaSource>(self->GetMozMediaSourceObject()));
1513 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1514 0 : if (!result) {
1515 0 : args.rval().setNull();
1516 0 : return true;
1517 : }
1518 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1519 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1520 0 : return false;
1521 : }
1522 0 : return true;
1523 : }
1524 :
1525 : static const JSJitInfo mozMediaSourceObject_getterinfo = {
1526 : { (JSJitGetterOp)get_mozMediaSourceObject },
1527 : { prototypes::id::HTMLMediaElement },
1528 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1529 : JSJitInfo::Getter,
1530 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1531 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
1532 : false, /* isInfallible. False in setters. */
1533 : false, /* isMovable. Not relevant for setters. */
1534 : false, /* isEliminatable. Not relevant for setters. */
1535 : false, /* isAlwaysInSlot. Only relevant for getters. */
1536 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1537 : false, /* isTypedMethod. Only relevant for methods. */
1538 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1539 : };
1540 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1541 : static_assert(0 < 1, "There is no slot for us");
1542 :
1543 : static bool
1544 0 : get_mozDebugReaderData(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1545 : {
1546 0 : DOMString result;
1547 0 : self->GetMozDebugReaderData(result);
1548 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1549 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
1550 0 : return false;
1551 : }
1552 0 : return true;
1553 : }
1554 :
1555 : static const JSJitInfo mozDebugReaderData_getterinfo = {
1556 : { (JSJitGetterOp)get_mozDebugReaderData },
1557 : { prototypes::id::HTMLMediaElement },
1558 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1559 : JSJitInfo::Getter,
1560 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1561 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1562 : false, /* isInfallible. False in setters. */
1563 : false, /* isMovable. Not relevant for setters. */
1564 : false, /* isEliminatable. Not relevant for setters. */
1565 : false, /* isAlwaysInSlot. Only relevant for getters. */
1566 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1567 : false, /* isTypedMethod. Only relevant for methods. */
1568 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1569 : };
1570 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1571 : static_assert(0 < 1, "There is no slot for us");
1572 :
1573 : static bool
1574 0 : mozRequestDebugInfo(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
1575 : {
1576 0 : binding_detail::FastErrorResult rv;
1577 0 : auto result(StrongOrRawPtr<Promise>(self->MozRequestDebugInfo(rv)));
1578 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1579 0 : return false;
1580 : }
1581 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1582 : static_assert(!IsPointer<decltype(result)>::value,
1583 : "NewObject implies that we need to keep the object alive with a strong reference.");
1584 0 : if (!ToJSValue(cx, result, args.rval())) {
1585 0 : return false;
1586 : }
1587 0 : return true;
1588 : }
1589 :
1590 : static bool
1591 0 : mozRequestDebugInfo_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
1592 : {
1593 : // Make sure to save the callee before someone maybe messes
1594 : // with rval().
1595 0 : JS::Rooted<JSObject*> callee(cx, &args.callee());
1596 0 : bool ok = mozRequestDebugInfo(cx, obj, self, args);
1597 0 : if (ok) {
1598 0 : return true;
1599 : }
1600 0 : return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
1601 0 : args.rval());
1602 : }
1603 :
1604 : static const JSJitInfo mozRequestDebugInfo_methodinfo = {
1605 : { (JSJitGetterOp)mozRequestDebugInfo_promiseWrapper },
1606 : { prototypes::id::HTMLMediaElement },
1607 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1608 : JSJitInfo::Method,
1609 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1610 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1611 : false, /* isInfallible. False in setters. */
1612 : false, /* isMovable. Not relevant for setters. */
1613 : false, /* isEliminatable. Not relevant for setters. */
1614 : false, /* isAlwaysInSlot. Only relevant for getters. */
1615 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1616 : false, /* isTypedMethod. Only relevant for methods. */
1617 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1618 : };
1619 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1620 : static_assert(0 < 1, "There is no slot for us");
1621 :
1622 : static bool
1623 0 : mozDumpDebugInfo(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
1624 : {
1625 0 : self->MozDumpDebugInfo();
1626 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1627 0 : args.rval().setUndefined();
1628 0 : return true;
1629 : }
1630 :
1631 : static const JSJitInfo mozDumpDebugInfo_methodinfo = {
1632 : { (JSJitGetterOp)mozDumpDebugInfo },
1633 : { prototypes::id::HTMLMediaElement },
1634 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1635 : JSJitInfo::Method,
1636 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1637 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1638 : true, /* isInfallible. False in setters. */
1639 : false, /* isMovable. Not relevant for setters. */
1640 : false, /* isEliminatable. Not relevant for setters. */
1641 : false, /* isAlwaysInSlot. Only relevant for getters. */
1642 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1643 : false, /* isTypedMethod. Only relevant for methods. */
1644 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1645 : };
1646 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1647 : static_assert(0 < 1, "There is no slot for us");
1648 :
1649 : static bool
1650 0 : get_srcObject(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1651 : {
1652 0 : auto result(StrongOrRawPtr<mozilla::DOMMediaStream>(self->GetSrcObject()));
1653 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1654 0 : if (!result) {
1655 0 : args.rval().setNull();
1656 0 : return true;
1657 : }
1658 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1659 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1660 0 : return false;
1661 : }
1662 0 : return true;
1663 : }
1664 :
1665 : static bool
1666 0 : set_srcObject(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
1667 : {
1668 : mozilla::DOMMediaStream* arg0;
1669 0 : if (args[0].isObject()) {
1670 : {
1671 0 : nsresult rv = UnwrapObject<prototypes::id::MediaStream, mozilla::DOMMediaStream>(args[0], arg0);
1672 0 : if (NS_FAILED(rv)) {
1673 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Value being assigned to HTMLMediaElement.srcObject", "MediaStream");
1674 0 : return false;
1675 : }
1676 : }
1677 0 : } else if (args[0].isNullOrUndefined()) {
1678 0 : arg0 = nullptr;
1679 : } else {
1680 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Value being assigned to HTMLMediaElement.srcObject");
1681 0 : return false;
1682 : }
1683 0 : self->SetSrcObject(Constify(arg0));
1684 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1685 :
1686 0 : return true;
1687 : }
1688 :
1689 : static const JSJitInfo srcObject_getterinfo = {
1690 : { (JSJitGetterOp)get_srcObject },
1691 : { prototypes::id::HTMLMediaElement },
1692 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1693 : JSJitInfo::Getter,
1694 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1695 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
1696 : false, /* isInfallible. False in setters. */
1697 : false, /* isMovable. Not relevant for setters. */
1698 : false, /* isEliminatable. Not relevant for setters. */
1699 : false, /* isAlwaysInSlot. Only relevant for getters. */
1700 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1701 : false, /* isTypedMethod. Only relevant for methods. */
1702 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1703 : };
1704 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1705 : static_assert(0 < 1, "There is no slot for us");
1706 : static const JSJitInfo srcObject_setterinfo = {
1707 : { (JSJitGetterOp)set_srcObject },
1708 : { prototypes::id::HTMLMediaElement },
1709 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1710 : JSJitInfo::Setter,
1711 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1712 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1713 : false, /* isInfallible. False in setters. */
1714 : false, /* isMovable. Not relevant for setters. */
1715 : false, /* isEliminatable. Not relevant for setters. */
1716 : false, /* isAlwaysInSlot. Only relevant for getters. */
1717 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1718 : false, /* isTypedMethod. Only relevant for methods. */
1719 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1720 : };
1721 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1722 : static_assert(0 < 1, "There is no slot for us");
1723 :
1724 : static bool
1725 0 : get_mozSrcObject(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1726 : {
1727 0 : auto result(StrongOrRawPtr<mozilla::DOMMediaStream>(self->GetMozSrcObject()));
1728 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1729 0 : if (!result) {
1730 0 : args.rval().setNull();
1731 0 : return true;
1732 : }
1733 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1734 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1735 0 : return false;
1736 : }
1737 0 : return true;
1738 : }
1739 :
1740 : static bool
1741 0 : set_mozSrcObject(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
1742 : {
1743 : mozilla::DOMMediaStream* arg0;
1744 0 : if (args[0].isObject()) {
1745 : {
1746 0 : nsresult rv = UnwrapObject<prototypes::id::MediaStream, mozilla::DOMMediaStream>(args[0], arg0);
1747 0 : if (NS_FAILED(rv)) {
1748 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Value being assigned to HTMLMediaElement.mozSrcObject", "MediaStream");
1749 0 : return false;
1750 : }
1751 : }
1752 0 : } else if (args[0].isNullOrUndefined()) {
1753 0 : arg0 = nullptr;
1754 : } else {
1755 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Value being assigned to HTMLMediaElement.mozSrcObject");
1756 0 : return false;
1757 : }
1758 0 : self->SetMozSrcObject(Constify(arg0));
1759 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1760 :
1761 0 : return true;
1762 : }
1763 :
1764 : static const JSJitInfo mozSrcObject_getterinfo = {
1765 : { (JSJitGetterOp)get_mozSrcObject },
1766 : { prototypes::id::HTMLMediaElement },
1767 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1768 : JSJitInfo::Getter,
1769 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1770 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
1771 : false, /* isInfallible. False in setters. */
1772 : false, /* isMovable. Not relevant for setters. */
1773 : false, /* isEliminatable. Not relevant for setters. */
1774 : false, /* isAlwaysInSlot. Only relevant for getters. */
1775 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1776 : false, /* isTypedMethod. Only relevant for methods. */
1777 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1778 : };
1779 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1780 : static_assert(0 < 1, "There is no slot for us");
1781 : static const JSJitInfo mozSrcObject_setterinfo = {
1782 : { (JSJitGetterOp)set_mozSrcObject },
1783 : { prototypes::id::HTMLMediaElement },
1784 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1785 : JSJitInfo::Setter,
1786 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1787 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1788 : false, /* isInfallible. False in setters. */
1789 : false, /* isMovable. Not relevant for setters. */
1790 : false, /* isEliminatable. Not relevant for setters. */
1791 : false, /* isAlwaysInSlot. Only relevant for getters. */
1792 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1793 : false, /* isTypedMethod. Only relevant for methods. */
1794 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1795 : };
1796 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1797 : static_assert(0 < 1, "There is no slot for us");
1798 :
1799 : static bool
1800 0 : get_mozPreservesPitch(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1801 : {
1802 0 : bool result(self->MozPreservesPitch());
1803 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1804 0 : args.rval().setBoolean(result);
1805 0 : return true;
1806 : }
1807 :
1808 : static bool
1809 0 : set_mozPreservesPitch(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
1810 : {
1811 : bool arg0;
1812 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
1813 0 : return false;
1814 : }
1815 0 : self->SetMozPreservesPitch(arg0);
1816 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1817 :
1818 0 : return true;
1819 : }
1820 :
1821 : static const JSJitInfo mozPreservesPitch_getterinfo = {
1822 : { (JSJitGetterOp)get_mozPreservesPitch },
1823 : { prototypes::id::HTMLMediaElement },
1824 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1825 : JSJitInfo::Getter,
1826 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1827 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1828 : true, /* isInfallible. False in setters. */
1829 : false, /* isMovable. Not relevant for setters. */
1830 : false, /* isEliminatable. Not relevant for setters. */
1831 : false, /* isAlwaysInSlot. Only relevant for getters. */
1832 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1833 : false, /* isTypedMethod. Only relevant for methods. */
1834 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1835 : };
1836 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1837 : static_assert(0 < 1, "There is no slot for us");
1838 : static const JSJitInfo mozPreservesPitch_setterinfo = {
1839 : { (JSJitGetterOp)set_mozPreservesPitch },
1840 : { prototypes::id::HTMLMediaElement },
1841 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1842 : JSJitInfo::Setter,
1843 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1844 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1845 : false, /* isInfallible. False in setters. */
1846 : false, /* isMovable. Not relevant for setters. */
1847 : false, /* isEliminatable. Not relevant for setters. */
1848 : false, /* isAlwaysInSlot. Only relevant for getters. */
1849 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1850 : false, /* isTypedMethod. Only relevant for methods. */
1851 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1852 : };
1853 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1854 : static_assert(0 < 1, "There is no slot for us");
1855 :
1856 : static bool
1857 0 : get_mozAutoplayEnabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1858 : {
1859 0 : bool result(self->MozAutoplayEnabled());
1860 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1861 0 : args.rval().setBoolean(result);
1862 0 : return true;
1863 : }
1864 :
1865 : static const JSJitInfo mozAutoplayEnabled_getterinfo = {
1866 : { (JSJitGetterOp)get_mozAutoplayEnabled },
1867 : { prototypes::id::HTMLMediaElement },
1868 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1869 : JSJitInfo::Getter,
1870 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1871 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1872 : true, /* isInfallible. False in setters. */
1873 : false, /* isMovable. Not relevant for setters. */
1874 : false, /* isEliminatable. Not relevant for setters. */
1875 : false, /* isAlwaysInSlot. Only relevant for getters. */
1876 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1877 : false, /* isTypedMethod. Only relevant for methods. */
1878 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1879 : };
1880 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1881 : static_assert(0 < 1, "There is no slot for us");
1882 :
1883 : static bool
1884 0 : get_mozAllowCasting(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1885 : {
1886 0 : bool result(self->MozAllowCasting());
1887 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1888 0 : args.rval().setBoolean(result);
1889 0 : return true;
1890 : }
1891 :
1892 : static bool
1893 0 : set_mozAllowCasting(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
1894 : {
1895 : bool arg0;
1896 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
1897 0 : return false;
1898 : }
1899 0 : self->SetMozAllowCasting(arg0);
1900 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1901 :
1902 0 : return true;
1903 : }
1904 :
1905 : static const JSJitInfo mozAllowCasting_getterinfo = {
1906 : { (JSJitGetterOp)get_mozAllowCasting },
1907 : { prototypes::id::HTMLMediaElement },
1908 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1909 : JSJitInfo::Getter,
1910 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1911 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1912 : true, /* isInfallible. False in setters. */
1913 : false, /* isMovable. Not relevant for setters. */
1914 : false, /* isEliminatable. Not relevant for setters. */
1915 : false, /* isAlwaysInSlot. Only relevant for getters. */
1916 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1917 : false, /* isTypedMethod. Only relevant for methods. */
1918 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1919 : };
1920 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1921 : static_assert(0 < 1, "There is no slot for us");
1922 : static const JSJitInfo mozAllowCasting_setterinfo = {
1923 : { (JSJitGetterOp)set_mozAllowCasting },
1924 : { prototypes::id::HTMLMediaElement },
1925 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1926 : JSJitInfo::Setter,
1927 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1928 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1929 : false, /* isInfallible. False in setters. */
1930 : false, /* isMovable. Not relevant for setters. */
1931 : false, /* isEliminatable. Not relevant for setters. */
1932 : false, /* isAlwaysInSlot. Only relevant for getters. */
1933 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1934 : false, /* isTypedMethod. Only relevant for methods. */
1935 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1936 : };
1937 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1938 : static_assert(0 < 1, "There is no slot for us");
1939 :
1940 : static bool
1941 0 : get_mozIsCasting(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
1942 : {
1943 0 : bool result(self->MozIsCasting());
1944 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1945 0 : args.rval().setBoolean(result);
1946 0 : return true;
1947 : }
1948 :
1949 : static bool
1950 0 : set_mozIsCasting(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
1951 : {
1952 : bool arg0;
1953 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
1954 0 : return false;
1955 : }
1956 0 : self->SetMozIsCasting(arg0);
1957 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1958 :
1959 0 : return true;
1960 : }
1961 :
1962 : static const JSJitInfo mozIsCasting_getterinfo = {
1963 : { (JSJitGetterOp)get_mozIsCasting },
1964 : { prototypes::id::HTMLMediaElement },
1965 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1966 : JSJitInfo::Getter,
1967 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1968 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1969 : true, /* isInfallible. False in setters. */
1970 : false, /* isMovable. Not relevant for setters. */
1971 : false, /* isEliminatable. Not relevant for setters. */
1972 : false, /* isAlwaysInSlot. Only relevant for getters. */
1973 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1974 : false, /* isTypedMethod. Only relevant for methods. */
1975 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1976 : };
1977 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1978 : static_assert(0 < 1, "There is no slot for us");
1979 : static const JSJitInfo mozIsCasting_setterinfo = {
1980 : { (JSJitGetterOp)set_mozIsCasting },
1981 : { prototypes::id::HTMLMediaElement },
1982 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
1983 : JSJitInfo::Setter,
1984 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1985 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1986 : false, /* isInfallible. False in setters. */
1987 : false, /* isMovable. Not relevant for setters. */
1988 : false, /* isEliminatable. Not relevant for setters. */
1989 : false, /* isAlwaysInSlot. Only relevant for getters. */
1990 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1991 : false, /* isTypedMethod. Only relevant for methods. */
1992 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1993 : };
1994 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1995 : static_assert(0 < 1, "There is no slot for us");
1996 :
1997 : static bool
1998 0 : mozCaptureStream(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
1999 : {
2000 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
2001 : // Return false from the JSNative in order to trigger
2002 : // an uncatchable exception.
2003 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2004 0 : return false;
2005 : }
2006 0 : binding_detail::FastErrorResult rv;
2007 0 : auto result(StrongOrRawPtr<mozilla::DOMMediaStream>(self->MozCaptureStream(rv)));
2008 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2009 0 : return false;
2010 : }
2011 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2012 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
2013 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
2014 0 : return false;
2015 : }
2016 0 : return true;
2017 : }
2018 :
2019 : static const JSJitInfo mozCaptureStream_methodinfo = {
2020 : { (JSJitGetterOp)mozCaptureStream },
2021 : { prototypes::id::HTMLMediaElement },
2022 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2023 : JSJitInfo::Method,
2024 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2025 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
2026 : false, /* isInfallible. False in setters. */
2027 : false, /* isMovable. Not relevant for setters. */
2028 : false, /* isEliminatable. Not relevant for setters. */
2029 : false, /* isAlwaysInSlot. Only relevant for getters. */
2030 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2031 : false, /* isTypedMethod. Only relevant for methods. */
2032 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2033 : };
2034 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2035 : static_assert(0 < 1, "There is no slot for us");
2036 :
2037 : static bool
2038 0 : mozCaptureStreamUntilEnded(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
2039 : {
2040 0 : if (!mozilla::dom::EnforceNotInPrerendering(cx, obj)) {
2041 : // Return false from the JSNative in order to trigger
2042 : // an uncatchable exception.
2043 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2044 0 : return false;
2045 : }
2046 0 : binding_detail::FastErrorResult rv;
2047 0 : auto result(StrongOrRawPtr<mozilla::DOMMediaStream>(self->MozCaptureStreamUntilEnded(rv)));
2048 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2049 0 : return false;
2050 : }
2051 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2052 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
2053 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
2054 0 : return false;
2055 : }
2056 0 : return true;
2057 : }
2058 :
2059 : static const JSJitInfo mozCaptureStreamUntilEnded_methodinfo = {
2060 : { (JSJitGetterOp)mozCaptureStreamUntilEnded },
2061 : { prototypes::id::HTMLMediaElement },
2062 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2063 : JSJitInfo::Method,
2064 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2065 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
2066 : false, /* isInfallible. False in setters. */
2067 : false, /* isMovable. Not relevant for setters. */
2068 : false, /* isEliminatable. Not relevant for setters. */
2069 : false, /* isAlwaysInSlot. Only relevant for getters. */
2070 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2071 : false, /* isTypedMethod. Only relevant for methods. */
2072 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2073 : };
2074 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2075 : static_assert(0 < 1, "There is no slot for us");
2076 :
2077 : static bool
2078 0 : get_mozAudioCaptured(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
2079 : {
2080 0 : bool result(self->MozAudioCaptured());
2081 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2082 0 : args.rval().setBoolean(result);
2083 0 : return true;
2084 : }
2085 :
2086 : static const JSJitInfo mozAudioCaptured_getterinfo = {
2087 : { (JSJitGetterOp)get_mozAudioCaptured },
2088 : { prototypes::id::HTMLMediaElement },
2089 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2090 : JSJitInfo::Getter,
2091 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2092 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
2093 : true, /* isInfallible. False in setters. */
2094 : false, /* isMovable. Not relevant for setters. */
2095 : false, /* isEliminatable. Not relevant for setters. */
2096 : false, /* isAlwaysInSlot. Only relevant for getters. */
2097 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2098 : false, /* isTypedMethod. Only relevant for methods. */
2099 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2100 : };
2101 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2102 : static_assert(0 < 1, "There is no slot for us");
2103 :
2104 : static bool
2105 0 : mozGetMetadata(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
2106 : {
2107 0 : binding_detail::FastErrorResult rv;
2108 0 : JS::Rooted<JSObject*> result(cx);
2109 0 : self->MozGetMetadata(cx, &result, rv);
2110 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2111 0 : return false;
2112 : }
2113 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2114 0 : if (result) {
2115 0 : JS::ExposeObjectToActiveJS(result);
2116 : }
2117 0 : args.rval().setObjectOrNull(result);
2118 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
2119 0 : return false;
2120 : }
2121 0 : return true;
2122 : }
2123 :
2124 : static const JSJitInfo mozGetMetadata_methodinfo = {
2125 : { (JSJitGetterOp)mozGetMetadata },
2126 : { prototypes::id::HTMLMediaElement },
2127 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2128 : JSJitInfo::Method,
2129 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2130 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
2131 : false, /* isInfallible. False in setters. */
2132 : false, /* isMovable. Not relevant for setters. */
2133 : false, /* isEliminatable. Not relevant for setters. */
2134 : false, /* isAlwaysInSlot. Only relevant for getters. */
2135 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2136 : false, /* isTypedMethod. Only relevant for methods. */
2137 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2138 : };
2139 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2140 : static_assert(0 < 1, "There is no slot for us");
2141 :
2142 : static bool
2143 0 : get_mozFragmentEnd(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
2144 : {
2145 0 : double result(self->MozFragmentEnd());
2146 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2147 0 : args.rval().set(JS_NumberValue(double(result)));
2148 0 : return true;
2149 : }
2150 :
2151 : static const JSJitInfo mozFragmentEnd_getterinfo = {
2152 : { (JSJitGetterOp)get_mozFragmentEnd },
2153 : { prototypes::id::HTMLMediaElement },
2154 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2155 : JSJitInfo::Getter,
2156 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2157 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
2158 : true, /* isInfallible. False in setters. */
2159 : false, /* isMovable. Not relevant for setters. */
2160 : false, /* isEliminatable. Not relevant for setters. */
2161 : false, /* isAlwaysInSlot. Only relevant for getters. */
2162 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2163 : false, /* isTypedMethod. Only relevant for methods. */
2164 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2165 : };
2166 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2167 : static_assert(0 < 1, "There is no slot for us");
2168 :
2169 : static bool
2170 0 : reportCanPlayTelemetry(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
2171 : {
2172 0 : self->ReportCanPlayTelemetry();
2173 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2174 0 : args.rval().setUndefined();
2175 0 : return true;
2176 : }
2177 :
2178 : static const JSJitInfo reportCanPlayTelemetry_methodinfo = {
2179 : { (JSJitGetterOp)reportCanPlayTelemetry },
2180 : { prototypes::id::HTMLMediaElement },
2181 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2182 : JSJitInfo::Method,
2183 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2184 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2185 : true, /* isInfallible. False in setters. */
2186 : false, /* isMovable. Not relevant for setters. */
2187 : false, /* isEliminatable. Not relevant for setters. */
2188 : false, /* isAlwaysInSlot. Only relevant for getters. */
2189 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2190 : false, /* isTypedMethod. Only relevant for methods. */
2191 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2192 : };
2193 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2194 : static_assert(0 < 1, "There is no slot for us");
2195 :
2196 : static bool
2197 0 : get_mediaKeys(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
2198 : {
2199 0 : auto result(StrongOrRawPtr<mozilla::dom::MediaKeys>(self->GetMediaKeys()));
2200 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2201 0 : if (!result) {
2202 0 : args.rval().setNull();
2203 0 : return true;
2204 : }
2205 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
2206 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
2207 0 : return false;
2208 : }
2209 0 : return true;
2210 : }
2211 :
2212 : static const JSJitInfo mediaKeys_getterinfo = {
2213 : { (JSJitGetterOp)get_mediaKeys },
2214 : { prototypes::id::HTMLMediaElement },
2215 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2216 : JSJitInfo::Getter,
2217 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2218 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
2219 : false, /* isInfallible. False in setters. */
2220 : false, /* isMovable. Not relevant for setters. */
2221 : false, /* isEliminatable. Not relevant for setters. */
2222 : false, /* isAlwaysInSlot. Only relevant for getters. */
2223 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2224 : false, /* isTypedMethod. Only relevant for methods. */
2225 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2226 : };
2227 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2228 : static_assert(0 < 1, "There is no slot for us");
2229 :
2230 : static bool
2231 0 : setMediaKeys(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
2232 : {
2233 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
2234 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLMediaElement.setMediaKeys");
2235 : }
2236 : mozilla::dom::MediaKeys* arg0;
2237 0 : if (args[0].isObject()) {
2238 : {
2239 0 : nsresult rv = UnwrapObject<prototypes::id::MediaKeys, mozilla::dom::MediaKeys>(args[0], arg0);
2240 0 : if (NS_FAILED(rv)) {
2241 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLMediaElement.setMediaKeys", "MediaKeys");
2242 0 : return false;
2243 : }
2244 : }
2245 0 : } else if (args[0].isNullOrUndefined()) {
2246 0 : arg0 = nullptr;
2247 : } else {
2248 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLMediaElement.setMediaKeys");
2249 0 : return false;
2250 : }
2251 0 : binding_detail::FastErrorResult rv;
2252 0 : auto result(StrongOrRawPtr<Promise>(self->SetMediaKeys(Constify(arg0), rv)));
2253 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2254 0 : return false;
2255 : }
2256 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2257 : static_assert(!IsPointer<decltype(result)>::value,
2258 : "NewObject implies that we need to keep the object alive with a strong reference.");
2259 0 : if (!ToJSValue(cx, result, args.rval())) {
2260 0 : return false;
2261 : }
2262 0 : return true;
2263 : }
2264 :
2265 : static bool
2266 0 : setMediaKeys_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
2267 : {
2268 : // Make sure to save the callee before someone maybe messes
2269 : // with rval().
2270 0 : JS::Rooted<JSObject*> callee(cx, &args.callee());
2271 0 : bool ok = setMediaKeys(cx, obj, self, args);
2272 0 : if (ok) {
2273 0 : return true;
2274 : }
2275 0 : return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
2276 0 : args.rval());
2277 : }
2278 :
2279 : static const JSJitInfo setMediaKeys_methodinfo = {
2280 : { (JSJitGetterOp)setMediaKeys_promiseWrapper },
2281 : { prototypes::id::HTMLMediaElement },
2282 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2283 : JSJitInfo::Method,
2284 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2285 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
2286 : false, /* isInfallible. False in setters. */
2287 : false, /* isMovable. Not relevant for setters. */
2288 : false, /* isEliminatable. Not relevant for setters. */
2289 : false, /* isAlwaysInSlot. Only relevant for getters. */
2290 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2291 : false, /* isTypedMethod. Only relevant for methods. */
2292 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2293 : };
2294 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2295 : static_assert(0 < 1, "There is no slot for us");
2296 :
2297 : static bool
2298 0 : get_onencrypted(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
2299 : {
2300 0 : RefPtr<EventHandlerNonNull> result(self->GetOnencrypted());
2301 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2302 0 : if (result) {
2303 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
2304 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
2305 0 : return false;
2306 : }
2307 0 : return true;
2308 : } else {
2309 0 : args.rval().setNull();
2310 0 : return true;
2311 : }
2312 : }
2313 :
2314 : static bool
2315 0 : set_onencrypted(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
2316 : {
2317 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
2318 0 : if (args[0].isObject()) {
2319 : { // scope for tempRoot
2320 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
2321 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
2322 : }
2323 : } else {
2324 0 : arg0 = nullptr;
2325 : }
2326 0 : self->SetOnencrypted(Constify(arg0));
2327 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2328 :
2329 0 : return true;
2330 : }
2331 :
2332 : static const JSJitInfo onencrypted_getterinfo = {
2333 : { (JSJitGetterOp)get_onencrypted },
2334 : { prototypes::id::HTMLMediaElement },
2335 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2336 : JSJitInfo::Getter,
2337 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2338 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
2339 : false, /* isInfallible. False in setters. */
2340 : false, /* isMovable. Not relevant for setters. */
2341 : false, /* isEliminatable. Not relevant for setters. */
2342 : false, /* isAlwaysInSlot. Only relevant for getters. */
2343 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2344 : false, /* isTypedMethod. Only relevant for methods. */
2345 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2346 : };
2347 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2348 : static_assert(0 < 1, "There is no slot for us");
2349 : static const JSJitInfo onencrypted_setterinfo = {
2350 : { (JSJitGetterOp)set_onencrypted },
2351 : { prototypes::id::HTMLMediaElement },
2352 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2353 : JSJitInfo::Setter,
2354 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2355 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2356 : false, /* isInfallible. False in setters. */
2357 : false, /* isMovable. Not relevant for setters. */
2358 : false, /* isEliminatable. Not relevant for setters. */
2359 : false, /* isAlwaysInSlot. Only relevant for getters. */
2360 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2361 : false, /* isTypedMethod. Only relevant for methods. */
2362 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2363 : };
2364 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2365 : static_assert(0 < 1, "There is no slot for us");
2366 :
2367 : static bool
2368 0 : get_onwaitingforkey(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
2369 : {
2370 0 : RefPtr<EventHandlerNonNull> result(self->GetOnwaitingforkey());
2371 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2372 0 : if (result) {
2373 0 : args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
2374 0 : if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
2375 0 : return false;
2376 : }
2377 0 : return true;
2378 : } else {
2379 0 : args.rval().setNull();
2380 0 : return true;
2381 : }
2382 : }
2383 :
2384 : static bool
2385 0 : set_onwaitingforkey(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitSetterCallArgs args)
2386 : {
2387 0 : RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
2388 0 : if (args[0].isObject()) {
2389 : { // scope for tempRoot
2390 0 : JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
2391 0 : arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
2392 : }
2393 : } else {
2394 0 : arg0 = nullptr;
2395 : }
2396 0 : self->SetOnwaitingforkey(Constify(arg0));
2397 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2398 :
2399 0 : return true;
2400 : }
2401 :
2402 : static const JSJitInfo onwaitingforkey_getterinfo = {
2403 : { (JSJitGetterOp)get_onwaitingforkey },
2404 : { prototypes::id::HTMLMediaElement },
2405 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2406 : JSJitInfo::Getter,
2407 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2408 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
2409 : false, /* isInfallible. False in setters. */
2410 : false, /* isMovable. Not relevant for setters. */
2411 : false, /* isEliminatable. Not relevant for setters. */
2412 : false, /* isAlwaysInSlot. Only relevant for getters. */
2413 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2414 : false, /* isTypedMethod. Only relevant for methods. */
2415 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2416 : };
2417 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2418 : static_assert(0 < 1, "There is no slot for us");
2419 : static const JSJitInfo onwaitingforkey_setterinfo = {
2420 : { (JSJitGetterOp)set_onwaitingforkey },
2421 : { prototypes::id::HTMLMediaElement },
2422 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2423 : JSJitInfo::Setter,
2424 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2425 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2426 : false, /* isInfallible. False in setters. */
2427 : false, /* isMovable. Not relevant for setters. */
2428 : false, /* isEliminatable. Not relevant for setters. */
2429 : false, /* isAlwaysInSlot. Only relevant for getters. */
2430 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2431 : false, /* isTypedMethod. Only relevant for methods. */
2432 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2433 : };
2434 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2435 : static_assert(0 < 1, "There is no slot for us");
2436 :
2437 : static bool
2438 0 : get_computedVolume(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
2439 : {
2440 0 : double result(self->ComputedVolume());
2441 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2442 0 : args.rval().set(JS_NumberValue(double(result)));
2443 0 : return true;
2444 : }
2445 :
2446 : static const JSJitInfo computedVolume_getterinfo = {
2447 : { (JSJitGetterOp)get_computedVolume },
2448 : { prototypes::id::HTMLMediaElement },
2449 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2450 : JSJitInfo::Getter,
2451 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2452 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
2453 : true, /* isInfallible. False in setters. */
2454 : false, /* isMovable. Not relevant for setters. */
2455 : false, /* isEliminatable. Not relevant for setters. */
2456 : false, /* isAlwaysInSlot. Only relevant for getters. */
2457 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2458 : false, /* isTypedMethod. Only relevant for methods. */
2459 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2460 : };
2461 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2462 : static_assert(0 < 1, "There is no slot for us");
2463 :
2464 : static bool
2465 0 : get_computedMuted(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
2466 : {
2467 0 : bool result(self->ComputedMuted());
2468 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2469 0 : args.rval().setBoolean(result);
2470 0 : return true;
2471 : }
2472 :
2473 : static const JSJitInfo computedMuted_getterinfo = {
2474 : { (JSJitGetterOp)get_computedMuted },
2475 : { prototypes::id::HTMLMediaElement },
2476 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2477 : JSJitInfo::Getter,
2478 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2479 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
2480 : true, /* isInfallible. False in setters. */
2481 : false, /* isMovable. Not relevant for setters. */
2482 : false, /* isEliminatable. Not relevant for setters. */
2483 : false, /* isAlwaysInSlot. Only relevant for getters. */
2484 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2485 : false, /* isTypedMethod. Only relevant for methods. */
2486 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2487 : };
2488 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2489 : static_assert(0 < 1, "There is no slot for us");
2490 :
2491 : static bool
2492 0 : get_computedSuspended(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, JSJitGetterCallArgs args)
2493 : {
2494 0 : uint32_t result(self->ComputedSuspended());
2495 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2496 0 : args.rval().setNumber(result);
2497 0 : return true;
2498 : }
2499 :
2500 : static const JSJitInfo computedSuspended_getterinfo = {
2501 : { (JSJitGetterOp)get_computedSuspended },
2502 : { prototypes::id::HTMLMediaElement },
2503 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2504 : JSJitInfo::Getter,
2505 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2506 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
2507 : true, /* isInfallible. False in setters. */
2508 : false, /* isMovable. Not relevant for setters. */
2509 : false, /* isEliminatable. Not relevant for setters. */
2510 : false, /* isAlwaysInSlot. Only relevant for getters. */
2511 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2512 : false, /* isTypedMethod. Only relevant for methods. */
2513 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2514 : };
2515 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2516 : static_assert(0 < 1, "There is no slot for us");
2517 :
2518 : static bool
2519 0 : seekToNextFrame(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
2520 : {
2521 0 : binding_detail::FastErrorResult rv;
2522 0 : auto result(StrongOrRawPtr<Promise>(self->SeekToNextFrame(rv)));
2523 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
2524 0 : return false;
2525 : }
2526 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2527 0 : if (!ToJSValue(cx, result, args.rval())) {
2528 0 : return false;
2529 : }
2530 0 : return true;
2531 : }
2532 :
2533 : static bool
2534 0 : seekToNextFrame_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
2535 : {
2536 : // Make sure to save the callee before someone maybe messes
2537 : // with rval().
2538 0 : JS::Rooted<JSObject*> callee(cx, &args.callee());
2539 0 : bool ok = seekToNextFrame(cx, obj, self, args);
2540 0 : if (ok) {
2541 0 : return true;
2542 : }
2543 0 : return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
2544 0 : args.rval());
2545 : }
2546 :
2547 : static const JSJitInfo seekToNextFrame_methodinfo = {
2548 : { (JSJitGetterOp)seekToNextFrame_promiseWrapper },
2549 : { prototypes::id::HTMLMediaElement },
2550 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2551 : JSJitInfo::Method,
2552 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2553 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
2554 : false, /* isInfallible. False in setters. */
2555 : false, /* isMovable. Not relevant for setters. */
2556 : false, /* isEliminatable. Not relevant for setters. */
2557 : false, /* isAlwaysInSlot. Only relevant for getters. */
2558 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2559 : false, /* isTypedMethod. Only relevant for methods. */
2560 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2561 : };
2562 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2563 : static_assert(0 < 1, "There is no slot for us");
2564 :
2565 : static bool
2566 0 : setVisible(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
2567 : {
2568 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
2569 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLMediaElement.setVisible");
2570 : }
2571 : bool arg0;
2572 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
2573 0 : return false;
2574 : }
2575 0 : self->SetVisible(arg0);
2576 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2577 0 : args.rval().setUndefined();
2578 0 : return true;
2579 : }
2580 :
2581 : static const JSJitInfo setVisible_methodinfo = {
2582 : { (JSJitGetterOp)setVisible },
2583 : { prototypes::id::HTMLMediaElement },
2584 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2585 : JSJitInfo::Method,
2586 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2587 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
2588 : false, /* isInfallible. False in setters. */
2589 : false, /* isMovable. Not relevant for setters. */
2590 : false, /* isEliminatable. Not relevant for setters. */
2591 : false, /* isAlwaysInSlot. Only relevant for getters. */
2592 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2593 : false, /* isTypedMethod. Only relevant for methods. */
2594 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2595 : };
2596 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2597 : static_assert(0 < 1, "There is no slot for us");
2598 :
2599 : static bool
2600 0 : hasSuspendTaint(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLMediaElement* self, const JSJitMethodCallArgs& args)
2601 : {
2602 0 : bool result(self->HasSuspendTaint());
2603 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
2604 0 : args.rval().setBoolean(result);
2605 0 : return true;
2606 : }
2607 :
2608 : static const JSJitInfo hasSuspendTaint_methodinfo = {
2609 : { (JSJitGetterOp)hasSuspendTaint },
2610 : { prototypes::id::HTMLMediaElement },
2611 : { PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth },
2612 : JSJitInfo::Method,
2613 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
2614 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
2615 : true, /* isInfallible. False in setters. */
2616 : false, /* isMovable. Not relevant for setters. */
2617 : false, /* isEliminatable. Not relevant for setters. */
2618 : false, /* isAlwaysInSlot. Only relevant for getters. */
2619 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
2620 : false, /* isTypedMethod. Only relevant for methods. */
2621 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
2622 : };
2623 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2624 : static_assert(0 < 1, "There is no slot for us");
2625 :
2626 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
2627 : #if defined(__clang__)
2628 : #pragma clang diagnostic push
2629 : #pragma clang diagnostic ignored "-Wmissing-braces"
2630 : #endif
2631 : static const JSFunctionSpec sMethods_specs[] = {
2632 : JS_FNSPEC("load", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&load_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2633 : JS_FNSPEC("canPlayType", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&canPlayType_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2634 : JS_FNSPEC("fastSeek", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&fastSeek_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2635 : JS_FNSPEC("play", GenericPromiseReturningBindingMethod, reinterpret_cast<const JSJitInfo*>(&play_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2636 : JS_FNSPEC("pause", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&pause_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2637 : JS_FNSPEC("addTextTrack", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&addTextTrack_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2638 : JS_FS_END,
2639 : JS_FNSPEC("mozRequestDebugInfo", GenericPromiseReturningBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozRequestDebugInfo_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2640 : JS_FS_END,
2641 : JS_FNSPEC("mozDumpDebugInfo", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozDumpDebugInfo_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2642 : JS_FS_END,
2643 : JS_FNSPEC("mozCaptureStream", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozCaptureStream_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2644 : JS_FNSPEC("mozCaptureStreamUntilEnded", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozCaptureStreamUntilEnded_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2645 : JS_FNSPEC("mozGetMetadata", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozGetMetadata_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2646 : JS_FNSPEC("setMediaKeys", GenericPromiseReturningBindingMethod, reinterpret_cast<const JSJitInfo*>(&setMediaKeys_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2647 : JS_FS_END,
2648 : JS_FNSPEC("seekToNextFrame", GenericPromiseReturningBindingMethod, reinterpret_cast<const JSJitInfo*>(&seekToNextFrame_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2649 : JS_FS_END,
2650 : JS_FNSPEC("setVisible", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setVisible_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
2651 : JS_FNSPEC("hasSuspendTaint", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&hasSuspendTaint_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2652 : JS_FS_END
2653 : };
2654 : #if defined(__clang__)
2655 : #pragma clang diagnostic pop
2656 : #endif
2657 :
2658 : static PrefableDisablers sMethods_disablers7 = {
2659 : true, false, 0, &HasDebuggerPrivilege
2660 : };
2661 :
2662 : static PrefableDisablers sMethods_disablers9 = {
2663 : true, false, 0, nullptr
2664 : };
2665 :
2666 : static PrefableDisablers sMethods_disablers16 = {
2667 : true, false, 0, nullptr
2668 : };
2669 :
2670 : static PrefableDisablers sMethods_disablers18 = {
2671 : true, false, 0, nullptr
2672 : };
2673 :
2674 : // Can't be const because the pref-enabled boolean needs to be writable
2675 : static Prefable<const JSFunctionSpec> sMethods[] = {
2676 : { nullptr, &sMethods_specs[0] },
2677 : { &sMethods_disablers7, &sMethods_specs[7] },
2678 : { &sMethods_disablers9, &sMethods_specs[9] },
2679 : { nullptr, &sMethods_specs[11] },
2680 : { &sMethods_disablers16, &sMethods_specs[16] },
2681 : { &sMethods_disablers18, &sMethods_specs[18] },
2682 : { nullptr, nullptr }
2683 : };
2684 :
2685 : static_assert(6 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
2686 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
2687 : static_assert(6 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
2688 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
2689 :
2690 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
2691 : #if defined(__clang__)
2692 : #pragma clang diagnostic push
2693 : #pragma clang diagnostic ignored "-Wmissing-braces"
2694 : #endif
2695 : static const JSFunctionSpec sChromeMethods_specs[] = {
2696 : JS_FNSPEC("reportCanPlayTelemetry", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&reportCanPlayTelemetry_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
2697 : JS_FS_END
2698 : };
2699 : #if defined(__clang__)
2700 : #pragma clang diagnostic pop
2701 : #endif
2702 :
2703 :
2704 : // Can't be const because the pref-enabled boolean needs to be writable
2705 : static Prefable<const JSFunctionSpec> sChromeMethods[] = {
2706 : { nullptr, &sChromeMethods_specs[0] },
2707 : { nullptr, nullptr }
2708 : };
2709 :
2710 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
2711 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
2712 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
2713 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
2714 :
2715 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
2716 : #if defined(__clang__)
2717 : #pragma clang diagnostic push
2718 : #pragma clang diagnostic ignored "-Wmissing-braces"
2719 : #endif
2720 : static const JSPropertySpec sAttributes_specs[] = {
2721 : { "error", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &error_getterinfo, nullptr, nullptr },
2722 : { "src", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &src_getterinfo, GenericBindingSetter, &src_setterinfo },
2723 : { "currentSrc", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, ¤tSrc_getterinfo, nullptr, nullptr },
2724 : { "crossOrigin", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &crossOrigin_getterinfo, GenericBindingSetter, &crossOrigin_setterinfo },
2725 : { "networkState", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &networkState_getterinfo, nullptr, nullptr },
2726 : { "preload", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &preload_getterinfo, GenericBindingSetter, &preload_setterinfo },
2727 : { "buffered", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &buffered_getterinfo, nullptr, nullptr },
2728 : { "readyState", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &readyState_getterinfo, nullptr, nullptr },
2729 : { "seeking", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &seeking_getterinfo, nullptr, nullptr },
2730 : { "currentTime", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, ¤tTime_getterinfo, GenericBindingSetter, ¤tTime_setterinfo },
2731 : { "duration", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &duration_getterinfo, nullptr, nullptr },
2732 : { "paused", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &paused_getterinfo, nullptr, nullptr },
2733 : { "defaultPlaybackRate", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &defaultPlaybackRate_getterinfo, GenericBindingSetter, &defaultPlaybackRate_setterinfo },
2734 : { "playbackRate", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &playbackRate_getterinfo, GenericBindingSetter, &playbackRate_setterinfo },
2735 : { "played", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &played_getterinfo, nullptr, nullptr },
2736 : { "seekable", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &seekable_getterinfo, nullptr, nullptr },
2737 : { "ended", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ended_getterinfo, nullptr, nullptr },
2738 : { "autoplay", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &autoplay_getterinfo, GenericBindingSetter, &autoplay_setterinfo },
2739 : { "loop", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &loop_getterinfo, GenericBindingSetter, &loop_setterinfo },
2740 : { "controls", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &controls_getterinfo, GenericBindingSetter, &controls_setterinfo },
2741 : { "volume", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &volume_getterinfo, GenericBindingSetter, &volume_setterinfo },
2742 : { "muted", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &muted_getterinfo, GenericBindingSetter, &muted_setterinfo },
2743 : { "defaultMuted", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &defaultMuted_getterinfo, GenericBindingSetter, &defaultMuted_setterinfo },
2744 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
2745 : { "audioTracks", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &audioTracks_getterinfo, nullptr, nullptr },
2746 : { "videoTracks", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &videoTracks_getterinfo, nullptr, nullptr },
2747 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
2748 : { "textTracks", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &textTracks_getterinfo, nullptr, nullptr },
2749 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
2750 : { "mozMediaSourceObject", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mozMediaSourceObject_getterinfo, nullptr, nullptr },
2751 : { "mozDebugReaderData", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mozDebugReaderData_getterinfo, nullptr, nullptr },
2752 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
2753 : { "srcObject", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &srcObject_getterinfo, GenericBindingSetter, &srcObject_setterinfo },
2754 : { "mozSrcObject", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mozSrcObject_getterinfo, GenericBindingSetter, &mozSrcObject_setterinfo },
2755 : { "mozPreservesPitch", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mozPreservesPitch_getterinfo, GenericBindingSetter, &mozPreservesPitch_setterinfo },
2756 : { "mozAutoplayEnabled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mozAutoplayEnabled_getterinfo, nullptr, nullptr },
2757 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
2758 : { "mozAllowCasting", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mozAllowCasting_getterinfo, GenericBindingSetter, &mozAllowCasting_setterinfo },
2759 : { "mozIsCasting", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mozIsCasting_getterinfo, GenericBindingSetter, &mozIsCasting_setterinfo },
2760 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
2761 : { "mozAudioCaptured", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mozAudioCaptured_getterinfo, nullptr, nullptr },
2762 : { "mozFragmentEnd", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mozFragmentEnd_getterinfo, nullptr, nullptr },
2763 : { "mediaKeys", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &mediaKeys_getterinfo, nullptr, nullptr },
2764 : { "onencrypted", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onencrypted_getterinfo, GenericBindingSetter, &onencrypted_setterinfo },
2765 : { "onwaitingforkey", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwaitingforkey_getterinfo, GenericBindingSetter, &onwaitingforkey_setterinfo },
2766 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
2767 : { "computedVolume", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &computedVolume_getterinfo, nullptr, nullptr },
2768 : { "computedMuted", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &computedMuted_getterinfo, nullptr, nullptr },
2769 : { "computedSuspended", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &computedSuspended_getterinfo, nullptr, nullptr },
2770 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
2771 : };
2772 : #if defined(__clang__)
2773 : #pragma clang diagnostic pop
2774 : #endif
2775 :
2776 : static PrefableDisablers sAttributes_disablers24 = {
2777 : true, false, 0, nullptr
2778 : };
2779 :
2780 : static PrefableDisablers sAttributes_disablers29 = {
2781 : true, false, 0, &HasDebuggerPrivilege
2782 : };
2783 :
2784 : static PrefableDisablers sAttributes_disablers37 = {
2785 : true, false, 0, &IsChromeOrXBL
2786 : };
2787 :
2788 : static PrefableDisablers sAttributes_disablers46 = {
2789 : true, false, 0, nullptr
2790 : };
2791 :
2792 : // Can't be const because the pref-enabled boolean needs to be writable
2793 : static Prefable<const JSPropertySpec> sAttributes[] = {
2794 : { nullptr, &sAttributes_specs[0] },
2795 : { &sAttributes_disablers24, &sAttributes_specs[24] },
2796 : { nullptr, &sAttributes_specs[27] },
2797 : { &sAttributes_disablers29, &sAttributes_specs[29] },
2798 : { nullptr, &sAttributes_specs[32] },
2799 : { &sAttributes_disablers37, &sAttributes_specs[37] },
2800 : { nullptr, &sAttributes_specs[40] },
2801 : { &sAttributes_disablers46, &sAttributes_specs[46] },
2802 : { nullptr, nullptr }
2803 : };
2804 :
2805 : static_assert(8 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
2806 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
2807 : static_assert(23 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
2808 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
2809 :
2810 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
2811 : #if defined(__clang__)
2812 : #pragma clang diagnostic push
2813 : #pragma clang diagnostic ignored "-Wmissing-braces"
2814 : #endif
2815 : static const JSPropertySpec sChromeAttributes_specs[] = {
2816 : { "isEncrypted", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &isEncrypted_getterinfo, nullptr, nullptr },
2817 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
2818 : };
2819 : #if defined(__clang__)
2820 : #pragma clang diagnostic pop
2821 : #endif
2822 :
2823 :
2824 : // Can't be const because the pref-enabled boolean needs to be writable
2825 : static Prefable<const JSPropertySpec> sChromeAttributes[] = {
2826 : { nullptr, &sChromeAttributes_specs[0] },
2827 : { nullptr, nullptr }
2828 : };
2829 :
2830 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
2831 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
2832 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
2833 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
2834 :
2835 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
2836 : #if defined(__clang__)
2837 : #pragma clang diagnostic push
2838 : #pragma clang diagnostic ignored "-Wmissing-braces"
2839 : #endif
2840 : static const ConstantSpec sConstants_specs[] = {
2841 : { "NETWORK_EMPTY", JS::Int32Value(0) },
2842 : { "NETWORK_IDLE", JS::Int32Value(1) },
2843 : { "NETWORK_LOADING", JS::Int32Value(2) },
2844 : { "NETWORK_NO_SOURCE", JS::Int32Value(3) },
2845 : { "HAVE_NOTHING", JS::Int32Value(0) },
2846 : { "HAVE_METADATA", JS::Int32Value(1) },
2847 : { "HAVE_CURRENT_DATA", JS::Int32Value(2) },
2848 : { "HAVE_FUTURE_DATA", JS::Int32Value(3) },
2849 : { "HAVE_ENOUGH_DATA", JS::Int32Value(4) },
2850 : { 0, JS::UndefinedValue() }
2851 : };
2852 : #if defined(__clang__)
2853 : #pragma clang diagnostic pop
2854 : #endif
2855 :
2856 :
2857 : // Can't be const because the pref-enabled boolean needs to be writable
2858 : static Prefable<const ConstantSpec> sConstants[] = {
2859 : { nullptr, &sConstants_specs[0] },
2860 : { nullptr, nullptr }
2861 : };
2862 :
2863 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
2864 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
2865 : static_assert(9 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
2866 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
2867 :
2868 :
2869 : static uint16_t sNativeProperties_sortedPropertyIndices[66];
2870 : static PropertyInfo sNativeProperties_propertyInfos[66];
2871 :
2872 : static const NativePropertiesN<3> sNativeProperties = {
2873 : false, 0,
2874 : false, 0,
2875 : true, 0 /* sMethods */,
2876 : true, 1 /* sAttributes */,
2877 : false, 0,
2878 : false, 0,
2879 : true, 2 /* sConstants */,
2880 : -1,
2881 : 66,
2882 : sNativeProperties_sortedPropertyIndices,
2883 : {
2884 : { sMethods, &sNativeProperties_propertyInfos[0] },
2885 : { sAttributes, &sNativeProperties_propertyInfos[15] },
2886 : { sConstants, &sNativeProperties_propertyInfos[57] }
2887 : }
2888 : };
2889 : static_assert(66 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
2890 : "We have a property info count that is oversized");
2891 :
2892 : static uint16_t sChromeOnlyNativeProperties_sortedPropertyIndices[2];
2893 : static PropertyInfo sChromeOnlyNativeProperties_propertyInfos[2];
2894 :
2895 : static const NativePropertiesN<2> sChromeOnlyNativeProperties = {
2896 : false, 0,
2897 : false, 0,
2898 : true, 0 /* sChromeMethods */,
2899 : true, 1 /* sChromeAttributes */,
2900 : false, 0,
2901 : false, 0,
2902 : false, 0,
2903 : -1,
2904 : 2,
2905 : sChromeOnlyNativeProperties_sortedPropertyIndices,
2906 : {
2907 : { sChromeMethods, &sChromeOnlyNativeProperties_propertyInfos[0] },
2908 : { sChromeAttributes, &sChromeOnlyNativeProperties_propertyInfos[1] }
2909 : }
2910 : };
2911 : static_assert(2 < 1ull << CHAR_BIT * sizeof(sChromeOnlyNativeProperties.propertyInfoCount),
2912 : "We have a property info count that is oversized");
2913 :
2914 : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
2915 : {
2916 : "Function",
2917 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
2918 : &sBoringInterfaceObjectClassClassOps,
2919 : JS_NULL_CLASS_SPEC,
2920 : JS_NULL_CLASS_EXT,
2921 : &sInterfaceObjectClassObjectOps
2922 : },
2923 : eInterface,
2924 : true,
2925 : prototypes::id::HTMLMediaElement,
2926 : PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth,
2927 : sNativePropertyHooks,
2928 : "function HTMLMediaElement() {\n [native code]\n}",
2929 : HTMLElementBinding::GetConstructorObject
2930 : };
2931 :
2932 : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
2933 : {
2934 : "HTMLMediaElementPrototype",
2935 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
2936 : JS_NULL_CLASS_OPS,
2937 : JS_NULL_CLASS_SPEC,
2938 : JS_NULL_CLASS_EXT,
2939 : JS_NULL_OBJECT_OPS
2940 : },
2941 : eInterfacePrototype,
2942 : false,
2943 : prototypes::id::HTMLMediaElement,
2944 : PrototypeTraits<prototypes::id::HTMLMediaElement>::Depth,
2945 : sNativePropertyHooks,
2946 : "[object HTMLMediaElementPrototype]",
2947 : HTMLElementBinding::GetProtoObject
2948 : };
2949 :
2950 : JSObject*
2951 0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
2952 : {
2953 0 : return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
2954 : }
2955 :
2956 : const NativePropertyHooks sNativePropertyHooks[] = { {
2957 : nullptr,
2958 : nullptr,
2959 : nullptr,
2960 : { sNativeProperties.Upcast(), sChromeOnlyNativeProperties.Upcast() },
2961 : prototypes::id::HTMLMediaElement,
2962 : constructors::id::HTMLMediaElement,
2963 : HTMLElementBinding::sNativePropertyHooks,
2964 : &DefaultXrayExpandoObjectClass
2965 : } };
2966 :
2967 : void
2968 0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
2969 : {
2970 0 : JS::Handle<JSObject*> parentProto(HTMLElementBinding::GetProtoObjectHandle(aCx));
2971 0 : if (!parentProto) {
2972 0 : return;
2973 : }
2974 :
2975 0 : JS::Handle<JSObject*> constructorProto(HTMLElementBinding::GetConstructorObjectHandle(aCx));
2976 0 : if (!constructorProto) {
2977 0 : return;
2978 : }
2979 :
2980 : static bool sIdsInited = false;
2981 0 : if (!sIdsInited && NS_IsMainThread()) {
2982 0 : if (!InitIds(aCx, sNativeProperties.Upcast())) {
2983 0 : return;
2984 : }
2985 0 : if (!InitIds(aCx, sChromeOnlyNativeProperties.Upcast())) {
2986 0 : return;
2987 : }
2988 0 : sIdsInited = true;
2989 : }
2990 :
2991 : static bool sPrefCachesInited = false;
2992 0 : if (!sPrefCachesInited && NS_IsMainThread()) {
2993 0 : sPrefCachesInited = true;
2994 0 : Preferences::AddBoolVarCache(&sMethods[2].disablers->enabled, "media.test.dumpDebugInfo");
2995 0 : Preferences::AddBoolVarCache(&sMethods[4].disablers->enabled, "media.seekToNextFrame.enabled");
2996 0 : Preferences::AddBoolVarCache(&sMethods[5].disablers->enabled, "media.test.video-suspend");
2997 0 : Preferences::AddBoolVarCache(&sAttributes[1].disablers->enabled, "media.track.enabled");
2998 0 : Preferences::AddBoolVarCache(&sAttributes[7].disablers->enabled, "media.useAudioChannelService.testing");
2999 : }
3000 :
3001 0 : JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::HTMLMediaElement);
3002 0 : JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::HTMLMediaElement);
3003 0 : dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
3004 : &sPrototypeClass.mBase, protoCache,
3005 : constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
3006 : interfaceCache,
3007 : sNativeProperties.Upcast(),
3008 0 : nsContentUtils::ThreadsafeIsSystemCaller(aCx) ? sChromeOnlyNativeProperties.Upcast() : nullptr,
3009 : "HTMLMediaElement", aDefineOnGlobal,
3010 : nullptr,
3011 0 : false);
3012 : }
3013 :
3014 : JS::Handle<JSObject*>
3015 0 : GetProtoObjectHandle(JSContext* aCx)
3016 : {
3017 : /* Get the interface prototype object for this class. This will create the
3018 : object as needed. */
3019 0 : bool aDefineOnGlobal = true;
3020 :
3021 : /* Make sure our global is sane. Hopefully we can remove this sometime */
3022 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
3023 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
3024 0 : return nullptr;
3025 : }
3026 :
3027 : /* Check to see whether the interface objects are already installed */
3028 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
3029 0 : if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::HTMLMediaElement)) {
3030 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
3031 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
3032 : }
3033 :
3034 : /*
3035 : * The object might _still_ be null, but that's OK.
3036 : *
3037 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
3038 : * traced by TraceProtoAndIfaceCache() and its contents are never
3039 : * changed after they have been set.
3040 : *
3041 : * Calling address() avoids the read read barrier that does gray
3042 : * unmarking, but it's not possible for the object to be gray here.
3043 : */
3044 :
3045 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::HTMLMediaElement);
3046 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
3047 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
3048 : }
3049 :
3050 : JSObject*
3051 0 : GetProtoObject(JSContext* aCx)
3052 : {
3053 0 : return GetProtoObjectHandle(aCx);
3054 : }
3055 :
3056 : JS::Handle<JSObject*>
3057 0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
3058 : {
3059 : /* Get the interface object for this class. This will create the object as
3060 : needed. */
3061 :
3062 : /* Make sure our global is sane. Hopefully we can remove this sometime */
3063 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
3064 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
3065 0 : return nullptr;
3066 : }
3067 :
3068 : /* Check to see whether the interface objects are already installed */
3069 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
3070 0 : if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::HTMLMediaElement)) {
3071 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
3072 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
3073 : }
3074 :
3075 : /*
3076 : * The object might _still_ be null, but that's OK.
3077 : *
3078 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
3079 : * traced by TraceProtoAndIfaceCache() and its contents are never
3080 : * changed after they have been set.
3081 : *
3082 : * Calling address() avoids the read read barrier that does gray
3083 : * unmarking, but it's not possible for the object to be gray here.
3084 : */
3085 :
3086 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::HTMLMediaElement);
3087 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
3088 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
3089 : }
3090 :
3091 : JSObject*
3092 0 : GetConstructorObject(JSContext* aCx)
3093 : {
3094 0 : return GetConstructorObjectHandle(aCx);
3095 : }
3096 :
3097 : } // namespace HTMLMediaElementBinding
3098 :
3099 :
3100 :
3101 : } // namespace dom
3102 : } // namespace mozilla
|