Coverage Report

Created: 2018-09-25 14:53

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