Line data Source code
1 : /* THIS FILE IS AUTOGENERATED FROM VTTCue.webidl BY Codegen.py - DO NOT EDIT */
2 :
3 : #include "TextTrackCueBinding.h"
4 : #include "VTTCueBinding.h"
5 : #include "WrapperFactory.h"
6 : #include "jsapi.h"
7 : #include "mozilla/FloatingPoint.h"
8 : #include "mozilla/OwningNonNull.h"
9 : #include "mozilla/Preferences.h"
10 : #include "mozilla/dom/BindingUtils.h"
11 : #include "mozilla/dom/DOMJSClass.h"
12 : #include "mozilla/dom/DocumentFragment.h"
13 : #include "mozilla/dom/HTMLDivElement.h"
14 : #include "mozilla/dom/NonRefcountedDOMObject.h"
15 : #include "mozilla/dom/Nullable.h"
16 : #include "mozilla/dom/PrimitiveConversions.h"
17 : #include "mozilla/dom/TextTrackCue.h"
18 : #include "mozilla/dom/TextTrackRegion.h"
19 : #include "mozilla/dom/UnionConversions.h"
20 : #include "mozilla/dom/XrayExpandoClass.h"
21 : #include "nsContentUtils.h"
22 :
23 : namespace mozilla {
24 : namespace dom {
25 :
26 : namespace AutoKeywordValues {
27 : extern const EnumEntry strings[2] = {
28 : {"auto", 4},
29 : { nullptr, 0 }
30 : };
31 : } // namespace AutoKeywordValues
32 :
33 : bool
34 0 : ToJSValue(JSContext* aCx, AutoKeyword aArgument, JS::MutableHandle<JS::Value> aValue)
35 : {
36 0 : MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(AutoKeywordValues::strings));
37 : JSString* resultStr =
38 0 : JS_NewStringCopyN(aCx, AutoKeywordValues::strings[uint32_t(aArgument)].value,
39 0 : AutoKeywordValues::strings[uint32_t(aArgument)].length);
40 0 : if (!resultStr) {
41 0 : return false;
42 : }
43 0 : aValue.setString(resultStr);
44 0 : return true;
45 : }
46 :
47 :
48 : namespace LineAlignSettingValues {
49 : extern const EnumEntry strings[4] = {
50 : {"start", 5},
51 : {"center", 6},
52 : {"end", 3},
53 : { nullptr, 0 }
54 : };
55 : } // namespace LineAlignSettingValues
56 :
57 : bool
58 0 : ToJSValue(JSContext* aCx, LineAlignSetting aArgument, JS::MutableHandle<JS::Value> aValue)
59 : {
60 0 : MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(LineAlignSettingValues::strings));
61 : JSString* resultStr =
62 0 : JS_NewStringCopyN(aCx, LineAlignSettingValues::strings[uint32_t(aArgument)].value,
63 0 : LineAlignSettingValues::strings[uint32_t(aArgument)].length);
64 0 : if (!resultStr) {
65 0 : return false;
66 : }
67 0 : aValue.setString(resultStr);
68 0 : return true;
69 : }
70 :
71 :
72 : namespace PositionAlignSettingValues {
73 : extern const EnumEntry strings[5] = {
74 : {"line-left", 9},
75 : {"center", 6},
76 : {"line-right", 10},
77 : {"auto", 4},
78 : { nullptr, 0 }
79 : };
80 : } // namespace PositionAlignSettingValues
81 :
82 : bool
83 0 : ToJSValue(JSContext* aCx, PositionAlignSetting aArgument, JS::MutableHandle<JS::Value> aValue)
84 : {
85 0 : MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(PositionAlignSettingValues::strings));
86 : JSString* resultStr =
87 0 : JS_NewStringCopyN(aCx, PositionAlignSettingValues::strings[uint32_t(aArgument)].value,
88 0 : PositionAlignSettingValues::strings[uint32_t(aArgument)].length);
89 0 : if (!resultStr) {
90 0 : return false;
91 : }
92 0 : aValue.setString(resultStr);
93 0 : return true;
94 : }
95 :
96 :
97 : namespace AlignSettingValues {
98 : extern const EnumEntry strings[6] = {
99 : {"start", 5},
100 : {"center", 6},
101 : {"end", 3},
102 : {"left", 4},
103 : {"right", 5},
104 : { nullptr, 0 }
105 : };
106 : } // namespace AlignSettingValues
107 :
108 : bool
109 0 : ToJSValue(JSContext* aCx, AlignSetting aArgument, JS::MutableHandle<JS::Value> aValue)
110 : {
111 0 : MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(AlignSettingValues::strings));
112 : JSString* resultStr =
113 0 : JS_NewStringCopyN(aCx, AlignSettingValues::strings[uint32_t(aArgument)].value,
114 0 : AlignSettingValues::strings[uint32_t(aArgument)].length);
115 0 : if (!resultStr) {
116 0 : return false;
117 : }
118 0 : aValue.setString(resultStr);
119 0 : return true;
120 : }
121 :
122 :
123 : namespace DirectionSettingValues {
124 : extern const EnumEntry strings[4] = {
125 : {"", 0},
126 : {"rl", 2},
127 : {"lr", 2},
128 : { nullptr, 0 }
129 : };
130 : } // namespace DirectionSettingValues
131 :
132 : bool
133 0 : ToJSValue(JSContext* aCx, DirectionSetting aArgument, JS::MutableHandle<JS::Value> aValue)
134 : {
135 0 : MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(DirectionSettingValues::strings));
136 : JSString* resultStr =
137 0 : JS_NewStringCopyN(aCx, DirectionSettingValues::strings[uint32_t(aArgument)].value,
138 0 : DirectionSettingValues::strings[uint32_t(aArgument)].length);
139 0 : if (!resultStr) {
140 0 : return false;
141 : }
142 0 : aValue.setString(resultStr);
143 0 : return true;
144 : }
145 :
146 :
147 : bool
148 0 : DoubleOrAutoKeyword::ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const
149 : {
150 0 : switch (mType) {
151 : case eUninitialized: {
152 0 : return false;
153 : break;
154 : }
155 : case eDouble: {
156 0 : rval.set(JS_NumberValue(double(mValue.mDouble.Value())));
157 0 : return true;
158 : break;
159 : }
160 : case eAutoKeyword: {
161 0 : if (!ToJSValue(cx, mValue.mAutoKeyword.Value(), rval)) {
162 0 : return false;
163 : }
164 0 : return true;
165 : break;
166 : }
167 : default: {
168 0 : return false;
169 : break;
170 : }
171 : }
172 :
173 : return false;
174 : }
175 :
176 :
177 : double&
178 0 : OwningDoubleOrAutoKeyword::RawSetAsDouble()
179 : {
180 0 : if (mType == eDouble) {
181 0 : return mValue.mDouble.Value();
182 : }
183 0 : MOZ_ASSERT(mType == eUninitialized);
184 0 : mType = eDouble;
185 0 : return mValue.mDouble.SetValue();
186 : }
187 :
188 : double&
189 0 : OwningDoubleOrAutoKeyword::SetAsDouble()
190 : {
191 0 : if (mType == eDouble) {
192 0 : return mValue.mDouble.Value();
193 : }
194 0 : Uninit();
195 0 : mType = eDouble;
196 0 : return mValue.mDouble.SetValue();
197 : }
198 :
199 : bool
200 0 : OwningDoubleOrAutoKeyword::TrySetToDouble(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl)
201 : {
202 0 : tryNext = false;
203 : { // scope for memberSlot
204 0 : double& memberSlot = RawSetAsDouble();
205 0 : if (!ValueToPrimitive<double, eDefault>(cx, value, &memberSlot)) {
206 0 : return false;
207 0 : } else if (!mozilla::IsFinite(memberSlot)) {
208 0 : ThrowErrorMessage(cx, MSG_NOT_FINITE, "Member of DoubleOrAutoKeyword");
209 0 : return false;
210 : }
211 : }
212 0 : return true;
213 : }
214 :
215 : void
216 0 : OwningDoubleOrAutoKeyword::DestroyDouble()
217 : {
218 0 : MOZ_ASSERT(IsDouble(), "Wrong type!");
219 0 : mValue.mDouble.Destroy();
220 0 : mType = eUninitialized;
221 0 : }
222 :
223 :
224 :
225 :
226 : AutoKeyword&
227 0 : OwningDoubleOrAutoKeyword::RawSetAsAutoKeyword()
228 : {
229 0 : if (mType == eAutoKeyword) {
230 0 : return mValue.mAutoKeyword.Value();
231 : }
232 0 : MOZ_ASSERT(mType == eUninitialized);
233 0 : mType = eAutoKeyword;
234 0 : return mValue.mAutoKeyword.SetValue();
235 : }
236 :
237 : AutoKeyword&
238 0 : OwningDoubleOrAutoKeyword::SetAsAutoKeyword()
239 : {
240 0 : if (mType == eAutoKeyword) {
241 0 : return mValue.mAutoKeyword.Value();
242 : }
243 0 : Uninit();
244 0 : mType = eAutoKeyword;
245 0 : return mValue.mAutoKeyword.SetValue();
246 : }
247 :
248 : bool
249 0 : OwningDoubleOrAutoKeyword::TrySetToAutoKeyword(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl)
250 : {
251 0 : tryNext = false;
252 : { // scope for memberSlot
253 0 : AutoKeyword& memberSlot = RawSetAsAutoKeyword();
254 : {
255 : int index;
256 0 : if (!FindEnumStringIndex<true>(cx, value, AutoKeywordValues::strings, "AutoKeyword", "Member of DoubleOrAutoKeyword", &index)) {
257 0 : return false;
258 : }
259 0 : MOZ_ASSERT(index >= 0);
260 0 : memberSlot = static_cast<AutoKeyword>(index);
261 : }
262 : }
263 0 : return true;
264 : }
265 :
266 : void
267 0 : OwningDoubleOrAutoKeyword::DestroyAutoKeyword()
268 : {
269 0 : MOZ_ASSERT(IsAutoKeyword(), "Wrong type!");
270 0 : mValue.mAutoKeyword.Destroy();
271 0 : mType = eUninitialized;
272 0 : }
273 :
274 :
275 :
276 :
277 : void
278 0 : OwningDoubleOrAutoKeyword::Uninit()
279 : {
280 0 : switch (mType) {
281 : case eUninitialized: {
282 0 : break;
283 : }
284 : case eDouble: {
285 0 : DestroyDouble();
286 0 : break;
287 : }
288 : case eAutoKeyword: {
289 0 : DestroyAutoKeyword();
290 0 : break;
291 : }
292 : }
293 0 : }
294 :
295 : bool
296 0 : OwningDoubleOrAutoKeyword::ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const
297 : {
298 0 : switch (mType) {
299 : case eUninitialized: {
300 0 : return false;
301 : break;
302 : }
303 : case eDouble: {
304 0 : rval.set(JS_NumberValue(double(mValue.mDouble.Value())));
305 0 : return true;
306 : break;
307 : }
308 : case eAutoKeyword: {
309 0 : if (!ToJSValue(cx, mValue.mAutoKeyword.Value(), rval)) {
310 0 : return false;
311 : }
312 0 : return true;
313 : break;
314 : }
315 : default: {
316 0 : return false;
317 : break;
318 : }
319 : }
320 :
321 : return false;
322 : }
323 :
324 : void
325 0 : OwningDoubleOrAutoKeyword::TraceUnion(JSTracer* trc)
326 : {
327 0 : }
328 :
329 : OwningDoubleOrAutoKeyword&
330 0 : OwningDoubleOrAutoKeyword::operator=(const OwningDoubleOrAutoKeyword& aOther)
331 : {
332 0 : switch (aOther.mType) {
333 : case eUninitialized: {
334 0 : MOZ_ASSERT(mType == eUninitialized,
335 : "We need to destroy ourselves?");
336 0 : break;
337 : }
338 : case eDouble: {
339 0 : SetAsDouble() = aOther.GetAsDouble();
340 0 : break;
341 : }
342 : case eAutoKeyword: {
343 0 : SetAsAutoKeyword() = aOther.GetAsAutoKeyword();
344 0 : break;
345 : }
346 : }
347 0 : return *this;
348 : }
349 :
350 :
351 : namespace VTTCueBinding {
352 :
353 : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<TextTrackCueBinding::NativeType>::value,
354 : "Can't inherit from an interface with a different ownership model.");
355 :
356 : static bool
357 0 : get_region(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
358 : {
359 0 : auto result(StrongOrRawPtr<mozilla::dom::TextTrackRegion>(self->GetRegion()));
360 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
361 0 : if (!result) {
362 0 : args.rval().setNull();
363 0 : return true;
364 : }
365 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
366 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
367 0 : return false;
368 : }
369 0 : return true;
370 : }
371 :
372 : static bool
373 0 : set_region(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
374 : {
375 : mozilla::dom::TextTrackRegion* arg0;
376 0 : if (args[0].isObject()) {
377 : {
378 0 : nsresult rv = UnwrapObject<prototypes::id::VTTRegion, mozilla::dom::TextTrackRegion>(args[0], arg0);
379 0 : if (NS_FAILED(rv)) {
380 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Value being assigned to VTTCue.region", "VTTRegion");
381 0 : return false;
382 : }
383 : }
384 0 : } else if (args[0].isNullOrUndefined()) {
385 0 : arg0 = nullptr;
386 : } else {
387 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Value being assigned to VTTCue.region");
388 0 : return false;
389 : }
390 0 : self->SetRegion(Constify(arg0));
391 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
392 :
393 0 : return true;
394 : }
395 :
396 : static const JSJitInfo region_getterinfo = {
397 : { (JSJitGetterOp)get_region },
398 : { prototypes::id::VTTCue },
399 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
400 : JSJitInfo::Getter,
401 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
402 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
403 : false, /* isInfallible. False in setters. */
404 : false, /* isMovable. Not relevant for setters. */
405 : false, /* isEliminatable. Not relevant for setters. */
406 : false, /* isAlwaysInSlot. Only relevant for getters. */
407 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
408 : false, /* isTypedMethod. Only relevant for methods. */
409 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
410 : };
411 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
412 : static_assert(0 < 1, "There is no slot for us");
413 : static const JSJitInfo region_setterinfo = {
414 : { (JSJitGetterOp)set_region },
415 : { prototypes::id::VTTCue },
416 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
417 : JSJitInfo::Setter,
418 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
419 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
420 : false, /* isInfallible. False in setters. */
421 : false, /* isMovable. Not relevant for setters. */
422 : false, /* isEliminatable. Not relevant for setters. */
423 : false, /* isAlwaysInSlot. Only relevant for getters. */
424 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
425 : false, /* isTypedMethod. Only relevant for methods. */
426 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
427 : };
428 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
429 : static_assert(0 < 1, "There is no slot for us");
430 :
431 : static bool
432 0 : get_vertical(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
433 : {
434 0 : DirectionSetting result(self->Vertical());
435 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
436 0 : if (!ToJSValue(cx, result, args.rval())) {
437 0 : return false;
438 : }
439 0 : return true;
440 : }
441 :
442 : static bool
443 0 : set_vertical(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
444 : {
445 : DirectionSetting arg0;
446 : {
447 : int index;
448 0 : if (!FindEnumStringIndex<false>(cx, args[0], DirectionSettingValues::strings, "DirectionSetting", "Value being assigned to VTTCue.vertical", &index)) {
449 0 : return false;
450 : }
451 0 : if (index < 0) {
452 0 : return true;
453 : }
454 0 : arg0 = static_cast<DirectionSetting>(index);
455 : }
456 0 : self->SetVertical(arg0);
457 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
458 :
459 0 : return true;
460 : }
461 :
462 : static const JSJitInfo vertical_getterinfo = {
463 : { (JSJitGetterOp)get_vertical },
464 : { prototypes::id::VTTCue },
465 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
466 : JSJitInfo::Getter,
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 : static const JSJitInfo vertical_setterinfo = {
480 : { (JSJitGetterOp)set_vertical },
481 : { prototypes::id::VTTCue },
482 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
483 : JSJitInfo::Setter,
484 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
485 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
486 : false, /* isInfallible. False in setters. */
487 : false, /* isMovable. Not relevant for setters. */
488 : false, /* isEliminatable. Not relevant for setters. */
489 : false, /* isAlwaysInSlot. Only relevant for getters. */
490 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
491 : false, /* isTypedMethod. Only relevant for methods. */
492 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
493 : };
494 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
495 : static_assert(0 < 1, "There is no slot for us");
496 :
497 : static bool
498 0 : get_snapToLines(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
499 : {
500 0 : bool result(self->SnapToLines());
501 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
502 0 : args.rval().setBoolean(result);
503 0 : return true;
504 : }
505 :
506 : static bool
507 0 : set_snapToLines(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
508 : {
509 : bool arg0;
510 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
511 0 : return false;
512 : }
513 0 : self->SetSnapToLines(arg0);
514 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
515 :
516 0 : return true;
517 : }
518 :
519 : static const JSJitInfo snapToLines_getterinfo = {
520 : { (JSJitGetterOp)get_snapToLines },
521 : { prototypes::id::VTTCue },
522 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
523 : JSJitInfo::Getter,
524 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
525 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
526 : true, /* isInfallible. False in setters. */
527 : false, /* isMovable. Not relevant for setters. */
528 : false, /* isEliminatable. Not relevant for setters. */
529 : false, /* isAlwaysInSlot. Only relevant for getters. */
530 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
531 : false, /* isTypedMethod. Only relevant for methods. */
532 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
533 : };
534 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
535 : static_assert(0 < 1, "There is no slot for us");
536 : static const JSJitInfo snapToLines_setterinfo = {
537 : { (JSJitGetterOp)set_snapToLines },
538 : { prototypes::id::VTTCue },
539 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
540 : JSJitInfo::Setter,
541 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
542 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
543 : false, /* isInfallible. False in setters. */
544 : false, /* isMovable. Not relevant for setters. */
545 : false, /* isEliminatable. Not relevant for setters. */
546 : false, /* isAlwaysInSlot. Only relevant for getters. */
547 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
548 : false, /* isTypedMethod. Only relevant for methods. */
549 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
550 : };
551 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
552 : static_assert(0 < 1, "There is no slot for us");
553 :
554 : static bool
555 0 : get_line(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
556 : {
557 0 : OwningDoubleOrAutoKeyword result;
558 0 : self->GetLine(result);
559 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
560 0 : if (!result.ToJSVal(cx, obj, args.rval())) {
561 0 : return false;
562 : }
563 0 : return true;
564 : }
565 :
566 : static bool
567 0 : set_line(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
568 : {
569 0 : DoubleOrAutoKeyword arg0;
570 0 : DoubleOrAutoKeywordArgument arg0_holder(arg0);
571 : {
572 0 : bool done = false, failed = false, tryNext;
573 : do {
574 0 : if (args[0].isNumber()) {
575 0 : done = (failed = !arg0_holder.TrySetToDouble(cx, args[0], tryNext)) || !tryNext;
576 0 : break;
577 : }
578 0 : done = (failed = !arg0_holder.TrySetToAutoKeyword(cx, args[0], tryNext)) || !tryNext;
579 0 : break;
580 : } while (0);
581 0 : if (failed) {
582 0 : return false;
583 : }
584 0 : if (!done) {
585 0 : ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Value being assigned to VTTCue.line", "");
586 0 : return false;
587 : }
588 : }
589 0 : self->SetLine(Constify(arg0));
590 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
591 :
592 0 : return true;
593 : }
594 :
595 : static const JSJitInfo line_getterinfo = {
596 : { (JSJitGetterOp)get_line },
597 : { prototypes::id::VTTCue },
598 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
599 : JSJitInfo::Getter,
600 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
601 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
602 : false, /* isInfallible. False in setters. */
603 : false, /* isMovable. Not relevant for setters. */
604 : false, /* isEliminatable. Not relevant for setters. */
605 : false, /* isAlwaysInSlot. Only relevant for getters. */
606 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
607 : false, /* isTypedMethod. Only relevant for methods. */
608 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
609 : };
610 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
611 : static_assert(0 < 1, "There is no slot for us");
612 : static const JSJitInfo line_setterinfo = {
613 : { (JSJitGetterOp)set_line },
614 : { prototypes::id::VTTCue },
615 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
616 : JSJitInfo::Setter,
617 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
618 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
619 : false, /* isInfallible. False in setters. */
620 : false, /* isMovable. Not relevant for setters. */
621 : false, /* isEliminatable. Not relevant for setters. */
622 : false, /* isAlwaysInSlot. Only relevant for getters. */
623 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
624 : false, /* isTypedMethod. Only relevant for methods. */
625 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
626 : };
627 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
628 : static_assert(0 < 1, "There is no slot for us");
629 :
630 : static bool
631 0 : get_lineAlign(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
632 : {
633 0 : LineAlignSetting result(self->LineAlign());
634 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
635 0 : if (!ToJSValue(cx, result, args.rval())) {
636 0 : return false;
637 : }
638 0 : return true;
639 : }
640 :
641 : static bool
642 0 : set_lineAlign(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
643 : {
644 : LineAlignSetting arg0;
645 : {
646 : int index;
647 0 : if (!FindEnumStringIndex<false>(cx, args[0], LineAlignSettingValues::strings, "LineAlignSetting", "Value being assigned to VTTCue.lineAlign", &index)) {
648 0 : return false;
649 : }
650 0 : if (index < 0) {
651 0 : return true;
652 : }
653 0 : arg0 = static_cast<LineAlignSetting>(index);
654 : }
655 0 : binding_detail::FastErrorResult rv;
656 0 : self->SetLineAlign(arg0, rv);
657 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
658 0 : return false;
659 : }
660 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
661 :
662 0 : return true;
663 : }
664 :
665 : static const JSJitInfo lineAlign_getterinfo = {
666 : { (JSJitGetterOp)get_lineAlign },
667 : { prototypes::id::VTTCue },
668 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
669 : JSJitInfo::Getter,
670 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
671 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
672 : false, /* isInfallible. False in setters. */
673 : false, /* isMovable. Not relevant for setters. */
674 : false, /* isEliminatable. Not relevant for setters. */
675 : false, /* isAlwaysInSlot. Only relevant for getters. */
676 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
677 : false, /* isTypedMethod. Only relevant for methods. */
678 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
679 : };
680 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
681 : static_assert(0 < 1, "There is no slot for us");
682 : static const JSJitInfo lineAlign_setterinfo = {
683 : { (JSJitGetterOp)set_lineAlign },
684 : { prototypes::id::VTTCue },
685 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
686 : JSJitInfo::Setter,
687 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
688 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
689 : false, /* isInfallible. False in setters. */
690 : false, /* isMovable. Not relevant for setters. */
691 : false, /* isEliminatable. Not relevant for setters. */
692 : false, /* isAlwaysInSlot. Only relevant for getters. */
693 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
694 : false, /* isTypedMethod. Only relevant for methods. */
695 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
696 : };
697 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
698 : static_assert(0 < 1, "There is no slot for us");
699 :
700 : static bool
701 0 : get_position(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
702 : {
703 0 : OwningDoubleOrAutoKeyword result;
704 0 : self->GetPosition(result);
705 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
706 0 : if (!result.ToJSVal(cx, obj, args.rval())) {
707 0 : return false;
708 : }
709 0 : return true;
710 : }
711 :
712 : static bool
713 0 : set_position(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
714 : {
715 0 : DoubleOrAutoKeyword arg0;
716 0 : DoubleOrAutoKeywordArgument arg0_holder(arg0);
717 : {
718 0 : bool done = false, failed = false, tryNext;
719 : do {
720 0 : if (args[0].isNumber()) {
721 0 : done = (failed = !arg0_holder.TrySetToDouble(cx, args[0], tryNext)) || !tryNext;
722 0 : break;
723 : }
724 0 : done = (failed = !arg0_holder.TrySetToAutoKeyword(cx, args[0], tryNext)) || !tryNext;
725 0 : break;
726 : } while (0);
727 0 : if (failed) {
728 0 : return false;
729 : }
730 0 : if (!done) {
731 0 : ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Value being assigned to VTTCue.position", "");
732 0 : return false;
733 : }
734 : }
735 0 : binding_detail::FastErrorResult rv;
736 0 : self->SetPosition(Constify(arg0), rv);
737 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
738 0 : return false;
739 : }
740 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
741 :
742 0 : return true;
743 : }
744 :
745 : static const JSJitInfo position_getterinfo = {
746 : { (JSJitGetterOp)get_position },
747 : { prototypes::id::VTTCue },
748 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
749 : JSJitInfo::Getter,
750 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
751 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
752 : false, /* isInfallible. False in setters. */
753 : false, /* isMovable. Not relevant for setters. */
754 : false, /* isEliminatable. Not relevant for setters. */
755 : false, /* isAlwaysInSlot. Only relevant for getters. */
756 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
757 : false, /* isTypedMethod. Only relevant for methods. */
758 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
759 : };
760 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
761 : static_assert(0 < 1, "There is no slot for us");
762 : static const JSJitInfo position_setterinfo = {
763 : { (JSJitGetterOp)set_position },
764 : { prototypes::id::VTTCue },
765 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
766 : JSJitInfo::Setter,
767 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
768 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
769 : false, /* isInfallible. False in setters. */
770 : false, /* isMovable. Not relevant for setters. */
771 : false, /* isEliminatable. Not relevant for setters. */
772 : false, /* isAlwaysInSlot. Only relevant for getters. */
773 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
774 : false, /* isTypedMethod. Only relevant for methods. */
775 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
776 : };
777 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
778 : static_assert(0 < 1, "There is no slot for us");
779 :
780 : static bool
781 0 : get_positionAlign(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
782 : {
783 0 : PositionAlignSetting result(self->PositionAlign());
784 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
785 0 : if (!ToJSValue(cx, result, args.rval())) {
786 0 : return false;
787 : }
788 0 : return true;
789 : }
790 :
791 : static bool
792 0 : set_positionAlign(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
793 : {
794 : PositionAlignSetting arg0;
795 : {
796 : int index;
797 0 : if (!FindEnumStringIndex<false>(cx, args[0], PositionAlignSettingValues::strings, "PositionAlignSetting", "Value being assigned to VTTCue.positionAlign", &index)) {
798 0 : return false;
799 : }
800 0 : if (index < 0) {
801 0 : return true;
802 : }
803 0 : arg0 = static_cast<PositionAlignSetting>(index);
804 : }
805 0 : binding_detail::FastErrorResult rv;
806 0 : self->SetPositionAlign(arg0, rv);
807 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
808 0 : return false;
809 : }
810 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
811 :
812 0 : return true;
813 : }
814 :
815 : static const JSJitInfo positionAlign_getterinfo = {
816 : { (JSJitGetterOp)get_positionAlign },
817 : { prototypes::id::VTTCue },
818 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
819 : JSJitInfo::Getter,
820 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
821 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
822 : false, /* isInfallible. False in setters. */
823 : false, /* isMovable. Not relevant for setters. */
824 : false, /* isEliminatable. Not relevant for setters. */
825 : false, /* isAlwaysInSlot. Only relevant for getters. */
826 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
827 : false, /* isTypedMethod. Only relevant for methods. */
828 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
829 : };
830 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
831 : static_assert(0 < 1, "There is no slot for us");
832 : static const JSJitInfo positionAlign_setterinfo = {
833 : { (JSJitGetterOp)set_positionAlign },
834 : { prototypes::id::VTTCue },
835 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
836 : JSJitInfo::Setter,
837 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
838 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
839 : false, /* isInfallible. False in setters. */
840 : false, /* isMovable. Not relevant for setters. */
841 : false, /* isEliminatable. Not relevant for setters. */
842 : false, /* isAlwaysInSlot. Only relevant for getters. */
843 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
844 : false, /* isTypedMethod. Only relevant for methods. */
845 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
846 : };
847 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
848 : static_assert(0 < 1, "There is no slot for us");
849 :
850 : static bool
851 0 : get_size(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
852 : {
853 0 : double result(self->Size());
854 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
855 0 : args.rval().set(JS_NumberValue(double(result)));
856 0 : return true;
857 : }
858 :
859 : static bool
860 0 : set_size(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
861 : {
862 : double arg0;
863 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
864 0 : return false;
865 0 : } else if (!mozilla::IsFinite(arg0)) {
866 0 : ThrowErrorMessage(cx, MSG_NOT_FINITE, "Value being assigned to VTTCue.size");
867 0 : return false;
868 : }
869 0 : binding_detail::FastErrorResult rv;
870 0 : self->SetSize(arg0, rv);
871 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
872 0 : return false;
873 : }
874 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
875 :
876 0 : return true;
877 : }
878 :
879 : static const JSJitInfo size_getterinfo = {
880 : { (JSJitGetterOp)get_size },
881 : { prototypes::id::VTTCue },
882 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
883 : JSJitInfo::Getter,
884 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
885 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
886 : true, /* isInfallible. False in setters. */
887 : false, /* isMovable. Not relevant for setters. */
888 : false, /* isEliminatable. Not relevant for setters. */
889 : false, /* isAlwaysInSlot. Only relevant for getters. */
890 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
891 : false, /* isTypedMethod. Only relevant for methods. */
892 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
893 : };
894 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
895 : static_assert(0 < 1, "There is no slot for us");
896 : static const JSJitInfo size_setterinfo = {
897 : { (JSJitGetterOp)set_size },
898 : { prototypes::id::VTTCue },
899 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
900 : JSJitInfo::Setter,
901 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
902 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
903 : false, /* isInfallible. False in setters. */
904 : false, /* isMovable. Not relevant for setters. */
905 : false, /* isEliminatable. Not relevant for setters. */
906 : false, /* isAlwaysInSlot. Only relevant for getters. */
907 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
908 : false, /* isTypedMethod. Only relevant for methods. */
909 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
910 : };
911 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
912 : static_assert(0 < 1, "There is no slot for us");
913 :
914 : static bool
915 0 : get_align(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
916 : {
917 0 : AlignSetting result(self->Align());
918 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
919 0 : if (!ToJSValue(cx, result, args.rval())) {
920 0 : return false;
921 : }
922 0 : return true;
923 : }
924 :
925 : static bool
926 0 : set_align(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
927 : {
928 : AlignSetting arg0;
929 : {
930 : int index;
931 0 : if (!FindEnumStringIndex<false>(cx, args[0], AlignSettingValues::strings, "AlignSetting", "Value being assigned to VTTCue.align", &index)) {
932 0 : return false;
933 : }
934 0 : if (index < 0) {
935 0 : return true;
936 : }
937 0 : arg0 = static_cast<AlignSetting>(index);
938 : }
939 0 : self->SetAlign(arg0);
940 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
941 :
942 0 : return true;
943 : }
944 :
945 : static const JSJitInfo align_getterinfo = {
946 : { (JSJitGetterOp)get_align },
947 : { prototypes::id::VTTCue },
948 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
949 : JSJitInfo::Getter,
950 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
951 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
952 : false, /* isInfallible. False in setters. */
953 : false, /* isMovable. Not relevant for setters. */
954 : false, /* isEliminatable. Not relevant for setters. */
955 : false, /* isAlwaysInSlot. Only relevant for getters. */
956 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
957 : false, /* isTypedMethod. Only relevant for methods. */
958 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
959 : };
960 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
961 : static_assert(0 < 1, "There is no slot for us");
962 : static const JSJitInfo align_setterinfo = {
963 : { (JSJitGetterOp)set_align },
964 : { prototypes::id::VTTCue },
965 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
966 : JSJitInfo::Setter,
967 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
968 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
969 : false, /* isInfallible. False in setters. */
970 : false, /* isMovable. Not relevant for setters. */
971 : false, /* isEliminatable. Not relevant for setters. */
972 : false, /* isAlwaysInSlot. Only relevant for getters. */
973 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
974 : false, /* isTypedMethod. Only relevant for methods. */
975 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
976 : };
977 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
978 : static_assert(0 < 1, "There is no slot for us");
979 :
980 : static bool
981 0 : get_text(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
982 : {
983 0 : DOMString result;
984 0 : self->GetText(result);
985 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
986 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
987 0 : return false;
988 : }
989 0 : return true;
990 : }
991 :
992 : static bool
993 0 : set_text(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
994 : {
995 0 : binding_detail::FakeString arg0;
996 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
997 0 : return false;
998 : }
999 0 : self->SetText(NonNullHelper(Constify(arg0)));
1000 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1001 :
1002 0 : return true;
1003 : }
1004 :
1005 : static const JSJitInfo text_getterinfo = {
1006 : { (JSJitGetterOp)get_text },
1007 : { prototypes::id::VTTCue },
1008 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
1009 : JSJitInfo::Getter,
1010 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1011 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1012 : false, /* isInfallible. False in setters. */
1013 : false, /* isMovable. Not relevant for setters. */
1014 : false, /* isEliminatable. Not relevant for setters. */
1015 : false, /* isAlwaysInSlot. Only relevant for getters. */
1016 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1017 : false, /* isTypedMethod. Only relevant for methods. */
1018 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1019 : };
1020 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1021 : static_assert(0 < 1, "There is no slot for us");
1022 : static const JSJitInfo text_setterinfo = {
1023 : { (JSJitGetterOp)set_text },
1024 : { prototypes::id::VTTCue },
1025 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
1026 : JSJitInfo::Setter,
1027 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1028 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1029 : false, /* isInfallible. False in setters. */
1030 : false, /* isMovable. Not relevant for setters. */
1031 : false, /* isEliminatable. Not relevant for setters. */
1032 : false, /* isAlwaysInSlot. Only relevant for getters. */
1033 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1034 : false, /* isTypedMethod. Only relevant for methods. */
1035 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1036 : };
1037 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1038 : static_assert(0 < 1, "There is no slot for us");
1039 :
1040 : static bool
1041 0 : getCueAsHTML(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, const JSJitMethodCallArgs& args)
1042 : {
1043 0 : auto result(StrongOrRawPtr<mozilla::dom::DocumentFragment>(self->GetCueAsHTML()));
1044 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1045 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1046 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1047 0 : return false;
1048 : }
1049 0 : return true;
1050 : }
1051 :
1052 : static const JSJitInfo getCueAsHTML_methodinfo = {
1053 : { (JSJitGetterOp)getCueAsHTML },
1054 : { prototypes::id::VTTCue },
1055 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
1056 : JSJitInfo::Method,
1057 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1058 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
1059 : false, /* isInfallible. False in setters. */
1060 : false, /* isMovable. Not relevant for setters. */
1061 : false, /* isEliminatable. Not relevant for setters. */
1062 : false, /* isAlwaysInSlot. Only relevant for getters. */
1063 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1064 : false, /* isTypedMethod. Only relevant for methods. */
1065 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1066 : };
1067 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1068 : static_assert(0 < 1, "There is no slot for us");
1069 :
1070 : static bool
1071 0 : get_displayState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
1072 : {
1073 0 : auto result(StrongOrRawPtr<mozilla::dom::HTMLDivElement>(self->GetDisplayState()));
1074 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1075 0 : if (!result) {
1076 0 : args.rval().setNull();
1077 0 : return true;
1078 : }
1079 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
1080 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1081 0 : return false;
1082 : }
1083 0 : return true;
1084 : }
1085 :
1086 : static bool
1087 0 : set_displayState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitSetterCallArgs args)
1088 : {
1089 : mozilla::dom::HTMLDivElement* arg0;
1090 0 : if (args[0].isObject()) {
1091 : {
1092 0 : nsresult rv = UnwrapObject<prototypes::id::HTMLDivElement, mozilla::dom::HTMLDivElement>(args[0], arg0);
1093 0 : if (NS_FAILED(rv)) {
1094 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Value being assigned to VTTCue.displayState", "HTMLDivElement");
1095 0 : return false;
1096 : }
1097 : }
1098 0 : } else if (args[0].isNullOrUndefined()) {
1099 0 : arg0 = nullptr;
1100 : } else {
1101 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Value being assigned to VTTCue.displayState");
1102 0 : return false;
1103 : }
1104 0 : self->SetDisplayState(Constify(arg0));
1105 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1106 :
1107 0 : return true;
1108 : }
1109 :
1110 : static const JSJitInfo displayState_getterinfo = {
1111 : { (JSJitGetterOp)get_displayState },
1112 : { prototypes::id::VTTCue },
1113 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
1114 : JSJitInfo::Getter,
1115 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1116 : JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */
1117 : false, /* isInfallible. False in setters. */
1118 : false, /* isMovable. Not relevant for setters. */
1119 : false, /* isEliminatable. Not relevant for setters. */
1120 : false, /* isAlwaysInSlot. Only relevant for getters. */
1121 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1122 : false, /* isTypedMethod. Only relevant for methods. */
1123 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1124 : };
1125 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1126 : static_assert(0 < 1, "There is no slot for us");
1127 : static const JSJitInfo displayState_setterinfo = {
1128 : { (JSJitGetterOp)set_displayState },
1129 : { prototypes::id::VTTCue },
1130 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
1131 : JSJitInfo::Setter,
1132 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1133 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
1134 : false, /* isInfallible. False in setters. */
1135 : false, /* isMovable. Not relevant for setters. */
1136 : false, /* isEliminatable. Not relevant for setters. */
1137 : false, /* isAlwaysInSlot. Only relevant for getters. */
1138 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1139 : false, /* isTypedMethod. Only relevant for methods. */
1140 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1141 : };
1142 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1143 : static_assert(0 < 1, "There is no slot for us");
1144 :
1145 : static bool
1146 0 : get_hasBeenReset(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
1147 : {
1148 0 : bool result(self->HasBeenReset());
1149 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1150 0 : args.rval().setBoolean(result);
1151 0 : return true;
1152 : }
1153 :
1154 : static const JSJitInfo hasBeenReset_getterinfo = {
1155 : { (JSJitGetterOp)get_hasBeenReset },
1156 : { prototypes::id::VTTCue },
1157 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
1158 : JSJitInfo::Getter,
1159 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1160 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1161 : true, /* isInfallible. False in setters. */
1162 : false, /* isMovable. Not relevant for setters. */
1163 : false, /* isEliminatable. Not relevant for setters. */
1164 : false, /* isAlwaysInSlot. Only relevant for getters. */
1165 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1166 : false, /* isTypedMethod. Only relevant for methods. */
1167 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1168 : };
1169 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1170 : static_assert(0 < 1, "There is no slot for us");
1171 :
1172 : static bool
1173 0 : get_computedLine(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
1174 : {
1175 0 : double result(self->ComputedLine());
1176 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1177 0 : args.rval().set(JS_NumberValue(double(result)));
1178 0 : return true;
1179 : }
1180 :
1181 : static const JSJitInfo computedLine_getterinfo = {
1182 : { (JSJitGetterOp)get_computedLine },
1183 : { prototypes::id::VTTCue },
1184 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
1185 : JSJitInfo::Getter,
1186 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1187 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
1188 : true, /* isInfallible. False in setters. */
1189 : false, /* isMovable. Not relevant for setters. */
1190 : false, /* isEliminatable. Not relevant for setters. */
1191 : false, /* isAlwaysInSlot. Only relevant for getters. */
1192 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1193 : false, /* isTypedMethod. Only relevant for methods. */
1194 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1195 : };
1196 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1197 : static_assert(0 < 1, "There is no slot for us");
1198 :
1199 : static bool
1200 0 : get_computedPosition(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
1201 : {
1202 0 : double result(self->ComputedPosition());
1203 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1204 0 : args.rval().set(JS_NumberValue(double(result)));
1205 0 : return true;
1206 : }
1207 :
1208 : static const JSJitInfo computedPosition_getterinfo = {
1209 : { (JSJitGetterOp)get_computedPosition },
1210 : { prototypes::id::VTTCue },
1211 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
1212 : JSJitInfo::Getter,
1213 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1214 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
1215 : true, /* isInfallible. False in setters. */
1216 : false, /* isMovable. Not relevant for setters. */
1217 : false, /* isEliminatable. Not relevant for setters. */
1218 : false, /* isAlwaysInSlot. Only relevant for getters. */
1219 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1220 : false, /* isTypedMethod. Only relevant for methods. */
1221 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1222 : };
1223 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1224 : static_assert(0 < 1, "There is no slot for us");
1225 :
1226 : static bool
1227 0 : get_computedPositionAlign(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
1228 : {
1229 0 : PositionAlignSetting result(self->ComputedPositionAlign());
1230 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1231 0 : if (!ToJSValue(cx, result, args.rval())) {
1232 0 : return false;
1233 : }
1234 0 : return true;
1235 : }
1236 :
1237 : static const JSJitInfo computedPositionAlign_getterinfo = {
1238 : { (JSJitGetterOp)get_computedPositionAlign },
1239 : { prototypes::id::VTTCue },
1240 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
1241 : JSJitInfo::Getter,
1242 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1243 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
1244 : false, /* isInfallible. False in setters. */
1245 : false, /* isMovable. Not relevant for setters. */
1246 : false, /* isEliminatable. Not relevant for setters. */
1247 : false, /* isAlwaysInSlot. Only relevant for getters. */
1248 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1249 : false, /* isTypedMethod. Only relevant for methods. */
1250 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1251 : };
1252 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1253 : static_assert(0 < 1, "There is no slot for us");
1254 :
1255 : static bool
1256 0 : get_getActive(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TextTrackCue* self, JSJitGetterCallArgs args)
1257 : {
1258 0 : bool result(self->GetActive());
1259 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1260 0 : args.rval().setBoolean(result);
1261 0 : return true;
1262 : }
1263 :
1264 : static const JSJitInfo getActive_getterinfo = {
1265 : { (JSJitGetterOp)get_getActive },
1266 : { prototypes::id::VTTCue },
1267 : { PrototypeTraits<prototypes::id::VTTCue>::Depth },
1268 : JSJitInfo::Getter,
1269 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
1270 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
1271 : true, /* isInfallible. False in setters. */
1272 : false, /* isMovable. Not relevant for setters. */
1273 : false, /* isEliminatable. Not relevant for setters. */
1274 : false, /* isAlwaysInSlot. Only relevant for getters. */
1275 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1276 : false, /* isTypedMethod. Only relevant for methods. */
1277 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1278 : };
1279 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1280 : static_assert(0 < 1, "There is no slot for us");
1281 :
1282 : static bool
1283 0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
1284 : {
1285 0 : mozilla::dom::TextTrackCue* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TextTrackCue>(obj);
1286 : // We don't want to preserve if we don't have a wrapper, and we
1287 : // obviously can't preserve if we're not initialized.
1288 0 : if (self && self->GetWrapperPreserveColor()) {
1289 0 : PreserveWrapper(self);
1290 : }
1291 0 : return true;
1292 : }
1293 :
1294 : static void
1295 0 : _finalize(js::FreeOp* fop, JSObject* obj)
1296 : {
1297 0 : mozilla::dom::TextTrackCue* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TextTrackCue>(obj);
1298 0 : if (self) {
1299 0 : ClearWrapper(self, self, obj);
1300 0 : AddForDeferredFinalization<mozilla::dom::TextTrackCue>(self);
1301 : }
1302 0 : }
1303 :
1304 : static void
1305 0 : _objectMoved(JSObject* obj, const JSObject* old)
1306 : {
1307 0 : mozilla::dom::TextTrackCue* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TextTrackCue>(obj);
1308 0 : if (self) {
1309 0 : UpdateWrapper(self, self, obj, old);
1310 : }
1311 0 : }
1312 :
1313 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
1314 : #if defined(__clang__)
1315 : #pragma clang diagnostic push
1316 : #pragma clang diagnostic ignored "-Wmissing-braces"
1317 : #endif
1318 : static const JSFunctionSpec sMethods_specs[] = {
1319 : JS_FNSPEC("getCueAsHTML", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getCueAsHTML_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
1320 : JS_FS_END
1321 : };
1322 : #if defined(__clang__)
1323 : #pragma clang diagnostic pop
1324 : #endif
1325 :
1326 :
1327 : // Can't be const because the pref-enabled boolean needs to be writable
1328 : static Prefable<const JSFunctionSpec> sMethods[] = {
1329 : { nullptr, &sMethods_specs[0] },
1330 : { nullptr, nullptr }
1331 : };
1332 :
1333 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
1334 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
1335 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
1336 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
1337 :
1338 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
1339 : #if defined(__clang__)
1340 : #pragma clang diagnostic push
1341 : #pragma clang diagnostic ignored "-Wmissing-braces"
1342 : #endif
1343 : static const JSPropertySpec sAttributes_specs[] = {
1344 : { "region", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, ®ion_getterinfo, GenericBindingSetter, ®ion_setterinfo },
1345 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
1346 : { "vertical", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &vertical_getterinfo, GenericBindingSetter, &vertical_setterinfo },
1347 : { "snapToLines", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &snapToLines_getterinfo, GenericBindingSetter, &snapToLines_setterinfo },
1348 : { "line", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &line_getterinfo, GenericBindingSetter, &line_setterinfo },
1349 : { "lineAlign", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &lineAlign_getterinfo, GenericBindingSetter, &lineAlign_setterinfo },
1350 : { "position", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &position_getterinfo, GenericBindingSetter, &position_setterinfo },
1351 : { "positionAlign", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &positionAlign_getterinfo, GenericBindingSetter, &positionAlign_setterinfo },
1352 : { "size", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &size_getterinfo, GenericBindingSetter, &size_setterinfo },
1353 : { "align", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &align_getterinfo, GenericBindingSetter, &align_setterinfo },
1354 : { "text", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &text_getterinfo, GenericBindingSetter, &text_setterinfo },
1355 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
1356 : };
1357 : #if defined(__clang__)
1358 : #pragma clang diagnostic pop
1359 : #endif
1360 :
1361 : static PrefableDisablers sAttributes_disablers0 = {
1362 : true, false, 0, nullptr
1363 : };
1364 :
1365 : // Can't be const because the pref-enabled boolean needs to be writable
1366 : static Prefable<const JSPropertySpec> sAttributes[] = {
1367 : { &sAttributes_disablers0, &sAttributes_specs[0] },
1368 : { nullptr, &sAttributes_specs[2] },
1369 : { nullptr, nullptr }
1370 : };
1371 :
1372 : static_assert(2 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
1373 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
1374 : static_assert(9 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
1375 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
1376 :
1377 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
1378 : #if defined(__clang__)
1379 : #pragma clang diagnostic push
1380 : #pragma clang diagnostic ignored "-Wmissing-braces"
1381 : #endif
1382 : static const JSPropertySpec sChromeAttributes_specs[] = {
1383 : { "displayState", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &displayState_getterinfo, GenericBindingSetter, &displayState_setterinfo },
1384 : { "hasBeenReset", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &hasBeenReset_getterinfo, nullptr, nullptr },
1385 : { "computedLine", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &computedLine_getterinfo, nullptr, nullptr },
1386 : { "computedPosition", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &computedPosition_getterinfo, nullptr, nullptr },
1387 : { "computedPositionAlign", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &computedPositionAlign_getterinfo, nullptr, nullptr },
1388 : { "getActive", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &getActive_getterinfo, nullptr, nullptr },
1389 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
1390 : };
1391 : #if defined(__clang__)
1392 : #pragma clang diagnostic pop
1393 : #endif
1394 :
1395 :
1396 : // Can't be const because the pref-enabled boolean needs to be writable
1397 : static Prefable<const JSPropertySpec> sChromeAttributes[] = {
1398 : { nullptr, &sChromeAttributes_specs[0] },
1399 : { nullptr, nullptr }
1400 : };
1401 :
1402 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
1403 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
1404 : static_assert(6 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
1405 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
1406 :
1407 :
1408 : static uint16_t sNativeProperties_sortedPropertyIndices[11];
1409 : static PropertyInfo sNativeProperties_propertyInfos[11];
1410 :
1411 : static const NativePropertiesN<2> sNativeProperties = {
1412 : false, 0,
1413 : false, 0,
1414 : true, 0 /* sMethods */,
1415 : true, 1 /* sAttributes */,
1416 : false, 0,
1417 : false, 0,
1418 : false, 0,
1419 : -1,
1420 : 11,
1421 : sNativeProperties_sortedPropertyIndices,
1422 : {
1423 : { sMethods, &sNativeProperties_propertyInfos[0] },
1424 : { sAttributes, &sNativeProperties_propertyInfos[1] }
1425 : }
1426 : };
1427 : static_assert(11 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
1428 : "We have a property info count that is oversized");
1429 :
1430 : static uint16_t sChromeOnlyNativeProperties_sortedPropertyIndices[6];
1431 : static PropertyInfo sChromeOnlyNativeProperties_propertyInfos[6];
1432 :
1433 : static const NativePropertiesN<1> sChromeOnlyNativeProperties = {
1434 : false, 0,
1435 : false, 0,
1436 : false, 0,
1437 : true, 0 /* sChromeAttributes */,
1438 : false, 0,
1439 : false, 0,
1440 : false, 0,
1441 : -1,
1442 : 6,
1443 : sChromeOnlyNativeProperties_sortedPropertyIndices,
1444 : {
1445 : { sChromeAttributes, &sChromeOnlyNativeProperties_propertyInfos[0] }
1446 : }
1447 : };
1448 : static_assert(6 < 1ull << CHAR_BIT * sizeof(sChromeOnlyNativeProperties.propertyInfoCount),
1449 : "We have a property info count that is oversized");
1450 :
1451 : static bool
1452 0 : _constructor(JSContext* cx, unsigned argc, JS::Value* vp)
1453 : {
1454 0 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
1455 0 : JS::Rooted<JSObject*> obj(cx, &args.callee());
1456 0 : if (!args.isConstructing()) {
1457 : // XXXbz wish I could get the name from the callee instead of
1458 : // Adding more relocations
1459 0 : return ThrowConstructorWithoutNew(cx, "VTTCue");
1460 : }
1461 :
1462 0 : GlobalObject global(cx, obj);
1463 0 : if (global.Failed()) {
1464 0 : return false;
1465 : }
1466 :
1467 0 : JS::Rooted<JSObject*> desiredProto(cx);
1468 0 : if (!GetDesiredProto(cx, args, &desiredProto)) {
1469 0 : return false;
1470 : }
1471 :
1472 0 : if (MOZ_UNLIKELY(args.length() < 3)) {
1473 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "VTTCue");
1474 : }
1475 0 : bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
1476 : double arg0;
1477 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
1478 0 : return false;
1479 0 : } else if (!mozilla::IsFinite(arg0)) {
1480 0 : ThrowErrorMessage(cx, MSG_NOT_FINITE, "Argument 1 of VTTCue.constructor");
1481 0 : return false;
1482 : }
1483 : double arg1;
1484 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
1485 0 : return false;
1486 0 : } else if (!mozilla::IsFinite(arg1)) {
1487 0 : ThrowErrorMessage(cx, MSG_NOT_FINITE, "Argument 2 of VTTCue.constructor");
1488 0 : return false;
1489 : }
1490 0 : binding_detail::FakeString arg2;
1491 0 : if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2)) {
1492 0 : return false;
1493 : }
1494 0 : Maybe<JSAutoCompartment> ac;
1495 0 : if (objIsXray) {
1496 0 : obj = js::CheckedUnwrap(obj);
1497 0 : if (!obj) {
1498 0 : return false;
1499 : }
1500 0 : ac.emplace(cx, obj);
1501 0 : if (!JS_WrapObject(cx, &desiredProto)) {
1502 0 : return false;
1503 : }
1504 : }
1505 0 : binding_detail::FastErrorResult rv;
1506 0 : auto result(StrongOrRawPtr<mozilla::dom::TextTrackCue>(mozilla::dom::TextTrackCue::Constructor(global, arg0, arg1, NonNullHelper(Constify(arg2)), rv)));
1507 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1508 0 : return false;
1509 : }
1510 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1511 : static_assert(!IsPointer<decltype(result)>::value,
1512 : "NewObject implies that we need to keep the object alive with a strong reference.");
1513 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
1514 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1515 0 : return false;
1516 : }
1517 0 : return true;
1518 : }
1519 :
1520 : static const js::ClassOps sInterfaceObjectClassOps = {
1521 : nullptr, /* addProperty */
1522 : nullptr, /* delProperty */
1523 : nullptr, /* getProperty */
1524 : nullptr, /* setProperty */
1525 : nullptr, /* enumerate */
1526 : nullptr, /* newEnumerate */
1527 : nullptr, /* resolve */
1528 : nullptr, /* mayResolve */
1529 : nullptr, /* finalize */
1530 : _constructor, /* call */
1531 : nullptr, /* hasInstance */
1532 : _constructor, /* construct */
1533 : nullptr, /* trace */
1534 : };
1535 :
1536 : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
1537 : {
1538 : "Function",
1539 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
1540 : &sInterfaceObjectClassOps,
1541 : JS_NULL_CLASS_SPEC,
1542 : JS_NULL_CLASS_EXT,
1543 : &sInterfaceObjectClassObjectOps
1544 : },
1545 : eInterface,
1546 : true,
1547 : prototypes::id::VTTCue,
1548 : PrototypeTraits<prototypes::id::VTTCue>::Depth,
1549 : sNativePropertyHooks,
1550 : "function VTTCue() {\n [native code]\n}",
1551 : TextTrackCueBinding::GetConstructorObject
1552 : };
1553 :
1554 : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
1555 : {
1556 : "VTTCuePrototype",
1557 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
1558 : JS_NULL_CLASS_OPS,
1559 : JS_NULL_CLASS_SPEC,
1560 : JS_NULL_CLASS_EXT,
1561 : JS_NULL_OBJECT_OPS
1562 : },
1563 : eInterfacePrototype,
1564 : false,
1565 : prototypes::id::VTTCue,
1566 : PrototypeTraits<prototypes::id::VTTCue>::Depth,
1567 : sNativePropertyHooks,
1568 : "[object VTTCuePrototype]",
1569 : TextTrackCueBinding::GetProtoObject
1570 : };
1571 :
1572 : JSObject*
1573 0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
1574 : {
1575 0 : return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
1576 : }
1577 :
1578 : static const js::ClassOps sClassOps = {
1579 : _addProperty, /* addProperty */
1580 : nullptr, /* delProperty */
1581 : nullptr, /* getProperty */
1582 : nullptr, /* setProperty */
1583 : nullptr, /* enumerate */
1584 : nullptr, /* newEnumerate */
1585 : nullptr, /* resolve */
1586 : nullptr, /* mayResolve */
1587 : _finalize, /* finalize */
1588 : nullptr, /* call */
1589 : nullptr, /* hasInstance */
1590 : nullptr, /* construct */
1591 : nullptr, /* trace */
1592 : };
1593 :
1594 : static const js::ClassExtension sClassExtension = {
1595 : nullptr, /* weakmapKeyDelegateOp */
1596 : _objectMoved /* objectMovedOp */
1597 : };
1598 :
1599 : static const DOMJSClass sClass = {
1600 : { "VTTCue",
1601 : JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
1602 : &sClassOps,
1603 : JS_NULL_CLASS_SPEC,
1604 : &sClassExtension,
1605 : JS_NULL_OBJECT_OPS
1606 : },
1607 : { prototypes::id::EventTarget, prototypes::id::TextTrackCue, prototypes::id::VTTCue, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
1608 : IsBaseOf<nsISupports, mozilla::dom::TextTrackCue >::value,
1609 : sNativePropertyHooks,
1610 : FindAssociatedGlobalForNative<mozilla::dom::TextTrackCue>::Get,
1611 : GetProtoObjectHandle,
1612 : GetCCParticipant<mozilla::dom::TextTrackCue>::Get()
1613 : };
1614 : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
1615 : "Must have the right minimal number of reserved slots.");
1616 : static_assert(1 >= 1,
1617 : "Must have enough reserved slots.");
1618 :
1619 : const JSClass*
1620 0 : GetJSClass()
1621 : {
1622 0 : return sClass.ToJSClass();
1623 : }
1624 :
1625 : bool
1626 0 : Wrap(JSContext* aCx, mozilla::dom::TextTrackCue* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
1627 : {
1628 : MOZ_ASSERT(static_cast<mozilla::dom::TextTrackCue*>(aObject) ==
1629 : reinterpret_cast<mozilla::dom::TextTrackCue*>(aObject),
1630 : "Multiple inheritance for mozilla::dom::TextTrackCue is broken.");
1631 : MOZ_ASSERT(static_cast<mozilla::dom::TextTrackCue*>(aObject) ==
1632 : reinterpret_cast<mozilla::dom::TextTrackCue*>(aObject),
1633 : "Multiple inheritance for mozilla::dom::TextTrackCue is broken.");
1634 : MOZ_ASSERT(static_cast<mozilla::dom::EventTarget*>(aObject) ==
1635 : reinterpret_cast<mozilla::dom::EventTarget*>(aObject),
1636 : "Multiple inheritance for mozilla::dom::EventTarget is broken.");
1637 0 : MOZ_ASSERT(ToSupportsIsCorrect(aObject));
1638 0 : MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
1639 0 : MOZ_ASSERT(!aCache->GetWrapper(),
1640 : "You should probably not be using Wrap() directly; use "
1641 : "GetOrCreateDOMReflector instead");
1642 :
1643 0 : MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
1644 : "nsISupports must be on our primary inheritance chain");
1645 :
1646 0 : JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
1647 0 : if (!global) {
1648 0 : return false;
1649 : }
1650 0 : MOZ_ASSERT(JS_IsGlobalObject(global));
1651 0 : MOZ_ASSERT(JS::ObjectIsNotGray(global));
1652 :
1653 : // That might have ended up wrapping us already, due to the wonders
1654 : // of XBL. Check for that, and bail out as needed.
1655 0 : aReflector.set(aCache->GetWrapper());
1656 0 : if (aReflector) {
1657 : #ifdef DEBUG
1658 0 : binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
1659 : #endif // DEBUG
1660 0 : return true;
1661 : }
1662 :
1663 0 : JSAutoCompartment ac(aCx, global);
1664 0 : JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
1665 0 : if (!canonicalProto) {
1666 0 : return false;
1667 : }
1668 0 : JS::Rooted<JSObject*> proto(aCx);
1669 0 : if (aGivenProto) {
1670 0 : proto = aGivenProto;
1671 : // Unfortunately, while aGivenProto was in the compartment of aCx
1672 : // coming in, we changed compartments to that of "parent" so may need
1673 : // to wrap the proto here.
1674 0 : if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
1675 0 : if (!JS_WrapObject(aCx, &proto)) {
1676 0 : return false;
1677 : }
1678 : }
1679 : } else {
1680 0 : proto = canonicalProto;
1681 : }
1682 :
1683 0 : BindingJSObjectCreator<mozilla::dom::TextTrackCue> creator(aCx);
1684 0 : creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
1685 0 : if (!aReflector) {
1686 0 : return false;
1687 : }
1688 :
1689 0 : aCache->SetWrapper(aReflector);
1690 0 : creator.InitializationSucceeded();
1691 :
1692 0 : MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
1693 : aCache->GetWrapperPreserveColor() == aReflector);
1694 : // If proto != canonicalProto, we have to preserve our wrapper;
1695 : // otherwise we won't be able to properly recreate it later, since
1696 : // we won't know what proto to use. Note that we don't check
1697 : // aGivenProto here, since it's entirely possible (and even
1698 : // somewhat common) to have a non-null aGivenProto which is the
1699 : // same as canonicalProto.
1700 0 : if (proto != canonicalProto) {
1701 0 : PreserveWrapper(aObject);
1702 : }
1703 :
1704 0 : return true;
1705 : }
1706 :
1707 : const NativePropertyHooks sNativePropertyHooks[] = { {
1708 : nullptr,
1709 : nullptr,
1710 : nullptr,
1711 : { sNativeProperties.Upcast(), sChromeOnlyNativeProperties.Upcast() },
1712 : prototypes::id::VTTCue,
1713 : constructors::id::VTTCue,
1714 : TextTrackCueBinding::sNativePropertyHooks,
1715 : &DefaultXrayExpandoObjectClass
1716 : } };
1717 :
1718 : void
1719 0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
1720 : {
1721 0 : JS::Handle<JSObject*> parentProto(TextTrackCueBinding::GetProtoObjectHandle(aCx));
1722 0 : if (!parentProto) {
1723 0 : return;
1724 : }
1725 :
1726 0 : JS::Handle<JSObject*> constructorProto(TextTrackCueBinding::GetConstructorObjectHandle(aCx));
1727 0 : if (!constructorProto) {
1728 0 : return;
1729 : }
1730 :
1731 : static bool sIdsInited = false;
1732 0 : if (!sIdsInited && NS_IsMainThread()) {
1733 0 : if (!InitIds(aCx, sNativeProperties.Upcast())) {
1734 0 : return;
1735 : }
1736 0 : if (!InitIds(aCx, sChromeOnlyNativeProperties.Upcast())) {
1737 0 : return;
1738 : }
1739 0 : sIdsInited = true;
1740 : }
1741 :
1742 : static bool sPrefCachesInited = false;
1743 0 : if (!sPrefCachesInited && NS_IsMainThread()) {
1744 0 : sPrefCachesInited = true;
1745 0 : Preferences::AddBoolVarCache(&sAttributes[0].disablers->enabled, "media.webvtt.regions.enabled");
1746 : }
1747 :
1748 0 : JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::VTTCue);
1749 0 : JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::VTTCue);
1750 0 : dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
1751 : &sPrototypeClass.mBase, protoCache,
1752 : constructorProto, &sInterfaceObjectClass.mBase, 3, nullptr,
1753 : interfaceCache,
1754 : sNativeProperties.Upcast(),
1755 0 : nsContentUtils::ThreadsafeIsSystemCaller(aCx) ? sChromeOnlyNativeProperties.Upcast() : nullptr,
1756 : "VTTCue", aDefineOnGlobal,
1757 : nullptr,
1758 0 : false);
1759 : }
1760 :
1761 : JS::Handle<JSObject*>
1762 0 : GetProtoObjectHandle(JSContext* aCx)
1763 : {
1764 : /* Get the interface prototype object for this class. This will create the
1765 : object as needed. */
1766 0 : bool aDefineOnGlobal = true;
1767 :
1768 : /* Make sure our global is sane. Hopefully we can remove this sometime */
1769 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
1770 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
1771 0 : return nullptr;
1772 : }
1773 :
1774 : /* Check to see whether the interface objects are already installed */
1775 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
1776 0 : if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::VTTCue)) {
1777 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
1778 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
1779 : }
1780 :
1781 : /*
1782 : * The object might _still_ be null, but that's OK.
1783 : *
1784 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
1785 : * traced by TraceProtoAndIfaceCache() and its contents are never
1786 : * changed after they have been set.
1787 : *
1788 : * Calling address() avoids the read read barrier that does gray
1789 : * unmarking, but it's not possible for the object to be gray here.
1790 : */
1791 :
1792 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::VTTCue);
1793 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
1794 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
1795 : }
1796 :
1797 : JS::Handle<JSObject*>
1798 0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
1799 : {
1800 : /* Get the interface object for this class. This will create the object as
1801 : needed. */
1802 :
1803 : /* Make sure our global is sane. Hopefully we can remove this sometime */
1804 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
1805 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
1806 0 : return nullptr;
1807 : }
1808 :
1809 : /* Check to see whether the interface objects are already installed */
1810 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
1811 0 : if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::VTTCue)) {
1812 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
1813 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
1814 : }
1815 :
1816 : /*
1817 : * The object might _still_ be null, but that's OK.
1818 : *
1819 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
1820 : * traced by TraceProtoAndIfaceCache() and its contents are never
1821 : * changed after they have been set.
1822 : *
1823 : * Calling address() avoids the read read barrier that does gray
1824 : * unmarking, but it's not possible for the object to be gray here.
1825 : */
1826 :
1827 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::VTTCue);
1828 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
1829 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
1830 : }
1831 :
1832 : JSObject*
1833 0 : GetConstructorObject(JSContext* aCx)
1834 : {
1835 0 : return GetConstructorObjectHandle(aCx);
1836 : }
1837 :
1838 : } // namespace VTTCueBinding
1839 :
1840 :
1841 :
1842 : } // namespace dom
1843 : } // namespace mozilla
|