Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dist/include/mozilla/dom/MediaStreamTrackBinding.h
Line
Count
Source (jump to first uncovered line)
1
/* THIS FILE IS AUTOGENERATED FROM MediaStreamTrack.webidl BY Codegen.py - DO NOT EDIT */
2
3
#ifndef mozilla_dom_MediaStreamTrackBinding_h
4
#define mozilla_dom_MediaStreamTrackBinding_h
5
6
#include "GeckoProfiler.h"
7
#include "MediaStreamTrackBinding.h"
8
#include "MediaTrackConstraintSetBinding.h"
9
#include "js/RootingAPI.h"
10
#include "jspubtd.h"
11
#include "mozilla/ErrorResult.h"
12
#include "mozilla/dom/BindingDeclarations.h"
13
#include "mozilla/dom/FakeString.h"
14
#include "mozilla/dom/Nullable.h"
15
#include "mozilla/dom/PrototypeList.h"
16
#include "mozilla/dom/UnionMember.h"
17
18
namespace mozilla {
19
namespace dom {
20
21
class BooleanOrConstrainBooleanParameters;
22
class DoubleOrConstrainDoubleRange;
23
class LongOrConstrainLongRange;
24
class MediaStreamTrack;
25
struct MediaStreamTrackAtoms;
26
struct MediaTrackConstraintSet;
27
struct MediaTrackConstraintSetAtoms;
28
struct MediaTrackConstraintsAtoms;
29
struct NativePropertyHooks;
30
class OwningBooleanOrConstrainBooleanParameters;
31
class OwningDoubleOrConstrainDoubleRange;
32
class OwningLongOrConstrainLongRange;
33
class OwningStringOrStringSequenceOrConstrainDOMStringParameters;
34
class ProtoAndIfaceCache;
35
class StringOrStringSequenceOrConstrainDOMStringParameters;
36
37
} // namespace dom
38
} // namespace mozilla
39
40
namespace mozilla {
41
namespace dom {
42
43
enum class VideoFacingModeEnum : uint8_t {
44
  User,
45
  Environment,
46
  Left,
47
  Right,
48
  EndGuard_
49
};
50
51
namespace VideoFacingModeEnumValues {
52
extern const EnumEntry strings[5];
53
} // namespace VideoFacingModeEnumValues
54
55
bool
56
ToJSValue(JSContext* aCx, VideoFacingModeEnum aArgument, JS::MutableHandle<JS::Value> aValue);
57
58
59
enum class MediaSourceEnum : uint8_t {
60
  Camera,
61
  Screen,
62
  Application,
63
  Window,
64
  Browser,
65
  Microphone,
66
  AudioCapture,
67
  Other,
68
  EndGuard_
69
};
70
71
namespace MediaSourceEnumValues {
72
extern const EnumEntry strings[9];
73
} // namespace MediaSourceEnumValues
74
75
bool
76
ToJSValue(JSContext* aCx, MediaSourceEnum aArgument, JS::MutableHandle<JS::Value> aValue);
77
78
79
enum class MediaStreamTrackState : uint8_t {
80
  Live,
81
  Ended,
82
  EndGuard_
83
};
84
85
namespace MediaStreamTrackStateValues {
86
extern const EnumEntry strings[3];
87
} // namespace MediaStreamTrackStateValues
88
89
bool
90
ToJSValue(JSContext* aCx, MediaStreamTrackState aArgument, JS::MutableHandle<JS::Value> aValue);
91
92
93
class BooleanOrConstrainBooleanParameters
94
{
95
  friend class BooleanOrConstrainBooleanParametersArgument;
96
  enum Type
97
  {
98
    eUninitialized,
99
    eBoolean,
100
    eConstrainBooleanParameters
101
  };
102
103
  union Value
104
  {
105
    UnionMember<bool > mBoolean;
106
    UnionMember<binding_detail::FastConstrainBooleanParameters > mConstrainBooleanParameters;
107
108
  };
109
110
  Type mType;
111
  Value mValue;
112
113
  BooleanOrConstrainBooleanParameters(const BooleanOrConstrainBooleanParameters&) = delete;
114
  BooleanOrConstrainBooleanParameters& operator=(const BooleanOrConstrainBooleanParameters&) = delete;
115
public:
116
  explicit inline BooleanOrConstrainBooleanParameters()
117
    : mType(eUninitialized)
118
0
  {
119
0
  }
120
121
  inline ~BooleanOrConstrainBooleanParameters()
122
0
  {
123
0
    Uninit();
124
0
  }
125
126
  inline bool&
127
  RawSetAsBoolean()
128
0
  {
129
0
    if (mType == eBoolean) {
130
0
      return mValue.mBoolean.Value();
131
0
    }
132
0
    MOZ_ASSERT(mType == eUninitialized);
133
0
    mType = eBoolean;
134
0
    return mValue.mBoolean.SetValue();
135
0
  }
136
137
  inline bool&
138
  SetAsBoolean()
139
0
  {
140
0
    if (mType == eBoolean) {
141
0
      return mValue.mBoolean.Value();
142
0
    }
143
0
    Uninit();
144
0
    mType = eBoolean;
145
0
    return mValue.mBoolean.SetValue();
146
0
  }
147
148
  inline bool
149
  IsBoolean() const
150
0
  {
151
0
    return mType == eBoolean;
152
0
  }
153
154
  inline bool&
155
  GetAsBoolean()
156
0
  {
157
0
    MOZ_ASSERT(IsBoolean(), "Wrong type!");
158
0
    return mValue.mBoolean.Value();
159
0
  }
160
161
  inline bool
162
  GetAsBoolean() const
163
0
  {
164
0
    MOZ_ASSERT(IsBoolean(), "Wrong type!");
165
0
    return mValue.mBoolean.Value();
166
0
  }
167
168
  inline binding_detail::FastConstrainBooleanParameters&
169
  RawSetAsConstrainBooleanParameters()
170
0
  {
171
0
    if (mType == eConstrainBooleanParameters) {
172
0
      return mValue.mConstrainBooleanParameters.Value();
173
0
    }
174
0
    MOZ_ASSERT(mType == eUninitialized);
175
0
    mType = eConstrainBooleanParameters;
176
0
    return mValue.mConstrainBooleanParameters.SetValue();
177
0
  }
178
179
  inline binding_detail::FastConstrainBooleanParameters&
180
  SetAsConstrainBooleanParameters()
181
0
  {
182
0
    if (mType == eConstrainBooleanParameters) {
183
0
      return mValue.mConstrainBooleanParameters.Value();
184
0
    }
185
0
    Uninit();
186
0
    mType = eConstrainBooleanParameters;
187
0
    return mValue.mConstrainBooleanParameters.SetValue();
188
0
  }
189
190
  inline bool
191
  IsConstrainBooleanParameters() const
192
0
  {
193
0
    return mType == eConstrainBooleanParameters;
194
0
  }
195
196
  inline binding_detail::FastConstrainBooleanParameters&
197
  GetAsConstrainBooleanParameters()
198
0
  {
199
0
    MOZ_ASSERT(IsConstrainBooleanParameters(), "Wrong type!");
200
0
    return mValue.mConstrainBooleanParameters.Value();
201
0
  }
202
203
  inline const ConstrainBooleanParameters&
204
  GetAsConstrainBooleanParameters() const
205
0
  {
206
0
    MOZ_ASSERT(IsConstrainBooleanParameters(), "Wrong type!");
207
0
    return mValue.mConstrainBooleanParameters.Value();
208
0
  }
209
210
  inline void
211
  Uninit()
212
0
  {
213
0
    switch (mType) {
214
0
      case eUninitialized: {
215
0
        break;
216
0
      }
217
0
      case eBoolean: {
218
0
        DestroyBoolean();
219
0
        break;
220
0
      }
221
0
      case eConstrainBooleanParameters: {
222
0
        DestroyConstrainBooleanParameters();
223
0
        break;
224
0
      }
225
0
    }
226
0
  }
227
228
  bool
229
  ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
230
231
private:
232
  inline void
233
  DestroyBoolean()
234
0
  {
235
0
    MOZ_ASSERT(IsBoolean(), "Wrong type!");
236
0
    mValue.mBoolean.Destroy();
237
0
    mType = eUninitialized;
238
0
  }
239
240
  inline void
241
  DestroyConstrainBooleanParameters()
242
0
  {
243
0
    MOZ_ASSERT(IsConstrainBooleanParameters(), "Wrong type!");
244
0
    mValue.mConstrainBooleanParameters.Destroy();
245
0
    mType = eUninitialized;
246
0
  }
247
};
248
249
250
class OwningBooleanOrConstrainBooleanParameters : public AllOwningUnionBase
251
{
252
  friend void ImplCycleCollectionUnlink(OwningBooleanOrConstrainBooleanParameters& aUnion);
253
  enum Type
254
  {
255
    eUninitialized,
256
    eBoolean,
257
    eConstrainBooleanParameters
258
  };
259
260
  union Value
261
  {
262
    UnionMember<bool > mBoolean;
263
    UnionMember<ConstrainBooleanParameters > mConstrainBooleanParameters;
264
265
  };
266
267
  Type mType;
268
  Value mValue;
269
270
public:
271
  explicit inline OwningBooleanOrConstrainBooleanParameters()
272
    : mType(eUninitialized)
273
0
  {
274
0
  }
275
276
  explicit inline OwningBooleanOrConstrainBooleanParameters(const OwningBooleanOrConstrainBooleanParameters& aOther)
277
    : mType(eUninitialized)
278
0
  {
279
0
    *this = aOther;
280
0
  }
281
282
  inline ~OwningBooleanOrConstrainBooleanParameters()
283
0
  {
284
0
    Uninit();
285
0
  }
286
287
  bool&
288
  RawSetAsBoolean();
289
290
  bool&
291
  SetAsBoolean();
292
293
  bool
294
  TrySetToBoolean(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
295
296
  inline bool
297
  IsBoolean() const
298
0
  {
299
0
    return mType == eBoolean;
300
0
  }
301
302
  inline bool&
303
  GetAsBoolean()
304
0
  {
305
0
    MOZ_ASSERT(IsBoolean(), "Wrong type!");
306
0
    return mValue.mBoolean.Value();
307
0
  }
308
309
  inline bool const &
310
  GetAsBoolean() const
311
0
  {
312
0
    MOZ_ASSERT(IsBoolean(), "Wrong type!");
313
0
    return mValue.mBoolean.Value();
314
0
  }
315
316
  ConstrainBooleanParameters&
317
  RawSetAsConstrainBooleanParameters();
318
319
  ConstrainBooleanParameters&
320
  SetAsConstrainBooleanParameters();
321
322
  bool
323
  TrySetToConstrainBooleanParameters(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
324
325
  inline bool
326
  IsConstrainBooleanParameters() const
327
0
  {
328
0
    return mType == eConstrainBooleanParameters;
329
0
  }
330
331
  inline ConstrainBooleanParameters&
332
  GetAsConstrainBooleanParameters()
333
0
  {
334
0
    MOZ_ASSERT(IsConstrainBooleanParameters(), "Wrong type!");
335
0
    return mValue.mConstrainBooleanParameters.Value();
336
0
  }
337
338
  inline ConstrainBooleanParameters const &
339
  GetAsConstrainBooleanParameters() const
340
0
  {
341
0
    MOZ_ASSERT(IsConstrainBooleanParameters(), "Wrong type!");
342
0
    return mValue.mConstrainBooleanParameters.Value();
343
0
  }
344
345
  void
346
  Uninit();
347
348
  bool
349
  ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
350
351
  void
352
  TraceUnion(JSTracer* trc);
353
354
  OwningBooleanOrConstrainBooleanParameters&
355
  operator=(const OwningBooleanOrConstrainBooleanParameters& aOther);
356
357
private:
358
  void
359
  DestroyBoolean();
360
361
  void
362
  DestroyConstrainBooleanParameters();
363
};
364
365
366
class DoubleOrConstrainDoubleRange
367
{
368
  friend class DoubleOrConstrainDoubleRangeArgument;
369
  enum Type
370
  {
371
    eUninitialized,
372
    eDouble,
373
    eConstrainDoubleRange
374
  };
375
376
  union Value
377
  {
378
    UnionMember<double > mDouble;
379
    UnionMember<binding_detail::FastConstrainDoubleRange > mConstrainDoubleRange;
380
381
  };
382
383
  Type mType;
384
  Value mValue;
385
386
  DoubleOrConstrainDoubleRange(const DoubleOrConstrainDoubleRange&) = delete;
387
  DoubleOrConstrainDoubleRange& operator=(const DoubleOrConstrainDoubleRange&) = delete;
388
public:
389
  explicit inline DoubleOrConstrainDoubleRange()
390
    : mType(eUninitialized)
391
0
  {
392
0
  }
393
394
  inline ~DoubleOrConstrainDoubleRange()
395
0
  {
396
0
    Uninit();
397
0
  }
398
399
  inline double&
400
  RawSetAsDouble()
401
0
  {
402
0
    if (mType == eDouble) {
403
0
      return mValue.mDouble.Value();
404
0
    }
405
0
    MOZ_ASSERT(mType == eUninitialized);
406
0
    mType = eDouble;
407
0
    return mValue.mDouble.SetValue();
408
0
  }
409
410
  inline double&
411
  SetAsDouble()
412
0
  {
413
0
    if (mType == eDouble) {
414
0
      return mValue.mDouble.Value();
415
0
    }
416
0
    Uninit();
417
0
    mType = eDouble;
418
0
    return mValue.mDouble.SetValue();
419
0
  }
420
421
  inline bool
422
  IsDouble() const
423
0
  {
424
0
    return mType == eDouble;
425
0
  }
426
427
  inline double&
428
  GetAsDouble()
429
0
  {
430
0
    MOZ_ASSERT(IsDouble(), "Wrong type!");
431
0
    return mValue.mDouble.Value();
432
0
  }
433
434
  inline double
435
  GetAsDouble() const
436
0
  {
437
0
    MOZ_ASSERT(IsDouble(), "Wrong type!");
438
0
    return mValue.mDouble.Value();
439
0
  }
440
441
  inline binding_detail::FastConstrainDoubleRange&
442
  RawSetAsConstrainDoubleRange()
443
0
  {
444
0
    if (mType == eConstrainDoubleRange) {
445
0
      return mValue.mConstrainDoubleRange.Value();
446
0
    }
447
0
    MOZ_ASSERT(mType == eUninitialized);
448
0
    mType = eConstrainDoubleRange;
449
0
    return mValue.mConstrainDoubleRange.SetValue();
450
0
  }
451
452
  inline binding_detail::FastConstrainDoubleRange&
453
  SetAsConstrainDoubleRange()
454
0
  {
455
0
    if (mType == eConstrainDoubleRange) {
456
0
      return mValue.mConstrainDoubleRange.Value();
457
0
    }
458
0
    Uninit();
459
0
    mType = eConstrainDoubleRange;
460
0
    return mValue.mConstrainDoubleRange.SetValue();
461
0
  }
462
463
  inline bool
464
  IsConstrainDoubleRange() const
465
0
  {
466
0
    return mType == eConstrainDoubleRange;
467
0
  }
468
469
  inline binding_detail::FastConstrainDoubleRange&
470
  GetAsConstrainDoubleRange()
471
0
  {
472
0
    MOZ_ASSERT(IsConstrainDoubleRange(), "Wrong type!");
473
0
    return mValue.mConstrainDoubleRange.Value();
474
0
  }
475
476
  inline const ConstrainDoubleRange&
477
  GetAsConstrainDoubleRange() const
478
0
  {
479
0
    MOZ_ASSERT(IsConstrainDoubleRange(), "Wrong type!");
480
0
    return mValue.mConstrainDoubleRange.Value();
481
0
  }
482
483
  inline void
484
  Uninit()
485
0
  {
486
0
    switch (mType) {
487
0
      case eUninitialized: {
488
0
        break;
489
0
      }
490
0
      case eDouble: {
491
0
        DestroyDouble();
492
0
        break;
493
0
      }
494
0
      case eConstrainDoubleRange: {
495
0
        DestroyConstrainDoubleRange();
496
0
        break;
497
0
      }
498
0
    }
499
0
  }
500
501
  bool
502
  ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
503
504
private:
505
  inline void
506
  DestroyDouble()
507
0
  {
508
0
    MOZ_ASSERT(IsDouble(), "Wrong type!");
509
0
    mValue.mDouble.Destroy();
510
0
    mType = eUninitialized;
511
0
  }
512
513
  inline void
514
  DestroyConstrainDoubleRange()
515
0
  {
516
0
    MOZ_ASSERT(IsConstrainDoubleRange(), "Wrong type!");
517
0
    mValue.mConstrainDoubleRange.Destroy();
518
0
    mType = eUninitialized;
519
0
  }
520
};
521
522
523
class OwningDoubleOrConstrainDoubleRange : public AllOwningUnionBase
524
{
525
  friend void ImplCycleCollectionUnlink(OwningDoubleOrConstrainDoubleRange& aUnion);
526
  enum Type
527
  {
528
    eUninitialized,
529
    eDouble,
530
    eConstrainDoubleRange
531
  };
532
533
  union Value
534
  {
535
    UnionMember<double > mDouble;
536
    UnionMember<ConstrainDoubleRange > mConstrainDoubleRange;
537
538
  };
539
540
  Type mType;
541
  Value mValue;
542
543
public:
544
  explicit inline OwningDoubleOrConstrainDoubleRange()
545
    : mType(eUninitialized)
546
0
  {
547
0
  }
548
549
  explicit inline OwningDoubleOrConstrainDoubleRange(const OwningDoubleOrConstrainDoubleRange& aOther)
550
    : mType(eUninitialized)
551
0
  {
552
0
    *this = aOther;
553
0
  }
554
555
  inline ~OwningDoubleOrConstrainDoubleRange()
556
0
  {
557
0
    Uninit();
558
0
  }
559
560
  double&
561
  RawSetAsDouble();
562
563
  double&
564
  SetAsDouble();
565
566
  bool
567
  TrySetToDouble(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
568
569
  inline bool
570
  IsDouble() const
571
0
  {
572
0
    return mType == eDouble;
573
0
  }
574
575
  inline double&
576
  GetAsDouble()
577
0
  {
578
0
    MOZ_ASSERT(IsDouble(), "Wrong type!");
579
0
    return mValue.mDouble.Value();
580
0
  }
581
582
  inline double const &
583
  GetAsDouble() const
584
0
  {
585
0
    MOZ_ASSERT(IsDouble(), "Wrong type!");
586
0
    return mValue.mDouble.Value();
587
0
  }
588
589
  ConstrainDoubleRange&
590
  RawSetAsConstrainDoubleRange();
591
592
  ConstrainDoubleRange&
593
  SetAsConstrainDoubleRange();
594
595
  bool
596
  TrySetToConstrainDoubleRange(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
597
598
  inline bool
599
  IsConstrainDoubleRange() const
600
0
  {
601
0
    return mType == eConstrainDoubleRange;
602
0
  }
603
604
  inline ConstrainDoubleRange&
605
  GetAsConstrainDoubleRange()
606
0
  {
607
0
    MOZ_ASSERT(IsConstrainDoubleRange(), "Wrong type!");
608
0
    return mValue.mConstrainDoubleRange.Value();
609
0
  }
610
611
  inline ConstrainDoubleRange const &
612
  GetAsConstrainDoubleRange() const
613
0
  {
614
0
    MOZ_ASSERT(IsConstrainDoubleRange(), "Wrong type!");
615
0
    return mValue.mConstrainDoubleRange.Value();
616
0
  }
617
618
  void
619
  Uninit();
620
621
  bool
622
  ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
623
624
  void
625
  TraceUnion(JSTracer* trc);
626
627
  OwningDoubleOrConstrainDoubleRange&
628
  operator=(const OwningDoubleOrConstrainDoubleRange& aOther);
629
630
private:
631
  void
632
  DestroyDouble();
633
634
  void
635
  DestroyConstrainDoubleRange();
636
};
637
638
639
class LongOrConstrainLongRange
640
{
641
  friend class LongOrConstrainLongRangeArgument;
642
  enum Type
643
  {
644
    eUninitialized,
645
    eLong,
646
    eConstrainLongRange
647
  };
648
649
  union Value
650
  {
651
    UnionMember<int32_t > mLong;
652
    UnionMember<binding_detail::FastConstrainLongRange > mConstrainLongRange;
653
654
  };
655
656
  Type mType;
657
  Value mValue;
658
659
  LongOrConstrainLongRange(const LongOrConstrainLongRange&) = delete;
660
  LongOrConstrainLongRange& operator=(const LongOrConstrainLongRange&) = delete;
661
public:
662
  explicit inline LongOrConstrainLongRange()
663
    : mType(eUninitialized)
664
0
  {
665
0
  }
666
667
  inline ~LongOrConstrainLongRange()
668
0
  {
669
0
    Uninit();
670
0
  }
671
672
  inline int32_t&
673
  RawSetAsLong()
674
0
  {
675
0
    if (mType == eLong) {
676
0
      return mValue.mLong.Value();
677
0
    }
678
0
    MOZ_ASSERT(mType == eUninitialized);
679
0
    mType = eLong;
680
0
    return mValue.mLong.SetValue();
681
0
  }
682
683
  inline int32_t&
684
  SetAsLong()
685
0
  {
686
0
    if (mType == eLong) {
687
0
      return mValue.mLong.Value();
688
0
    }
689
0
    Uninit();
690
0
    mType = eLong;
691
0
    return mValue.mLong.SetValue();
692
0
  }
693
694
  inline bool
695
  IsLong() const
696
0
  {
697
0
    return mType == eLong;
698
0
  }
699
700
  inline int32_t&
701
  GetAsLong()
702
0
  {
703
0
    MOZ_ASSERT(IsLong(), "Wrong type!");
704
0
    return mValue.mLong.Value();
705
0
  }
706
707
  inline int32_t
708
  GetAsLong() const
709
0
  {
710
0
    MOZ_ASSERT(IsLong(), "Wrong type!");
711
0
    return mValue.mLong.Value();
712
0
  }
713
714
  inline binding_detail::FastConstrainLongRange&
715
  RawSetAsConstrainLongRange()
716
0
  {
717
0
    if (mType == eConstrainLongRange) {
718
0
      return mValue.mConstrainLongRange.Value();
719
0
    }
720
0
    MOZ_ASSERT(mType == eUninitialized);
721
0
    mType = eConstrainLongRange;
722
0
    return mValue.mConstrainLongRange.SetValue();
723
0
  }
724
725
  inline binding_detail::FastConstrainLongRange&
726
  SetAsConstrainLongRange()
727
0
  {
728
0
    if (mType == eConstrainLongRange) {
729
0
      return mValue.mConstrainLongRange.Value();
730
0
    }
731
0
    Uninit();
732
0
    mType = eConstrainLongRange;
733
0
    return mValue.mConstrainLongRange.SetValue();
734
0
  }
735
736
  inline bool
737
  IsConstrainLongRange() const
738
0
  {
739
0
    return mType == eConstrainLongRange;
740
0
  }
741
742
  inline binding_detail::FastConstrainLongRange&
743
  GetAsConstrainLongRange()
744
0
  {
745
0
    MOZ_ASSERT(IsConstrainLongRange(), "Wrong type!");
746
0
    return mValue.mConstrainLongRange.Value();
747
0
  }
748
749
  inline const ConstrainLongRange&
750
  GetAsConstrainLongRange() const
751
0
  {
752
0
    MOZ_ASSERT(IsConstrainLongRange(), "Wrong type!");
753
0
    return mValue.mConstrainLongRange.Value();
754
0
  }
755
756
  inline void
757
  Uninit()
758
0
  {
759
0
    switch (mType) {
760
0
      case eUninitialized: {
761
0
        break;
762
0
      }
763
0
      case eLong: {
764
0
        DestroyLong();
765
0
        break;
766
0
      }
767
0
      case eConstrainLongRange: {
768
0
        DestroyConstrainLongRange();
769
0
        break;
770
0
      }
771
0
    }
772
0
  }
773
774
  bool
775
  ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
776
777
private:
778
  inline void
779
  DestroyLong()
780
0
  {
781
0
    MOZ_ASSERT(IsLong(), "Wrong type!");
782
0
    mValue.mLong.Destroy();
783
0
    mType = eUninitialized;
784
0
  }
785
786
  inline void
787
  DestroyConstrainLongRange()
788
0
  {
789
0
    MOZ_ASSERT(IsConstrainLongRange(), "Wrong type!");
790
0
    mValue.mConstrainLongRange.Destroy();
791
0
    mType = eUninitialized;
792
0
  }
793
};
794
795
796
class OwningLongOrConstrainLongRange : public AllOwningUnionBase
797
{
798
  friend void ImplCycleCollectionUnlink(OwningLongOrConstrainLongRange& aUnion);
799
  enum Type
800
  {
801
    eUninitialized,
802
    eLong,
803
    eConstrainLongRange
804
  };
805
806
  union Value
807
  {
808
    UnionMember<int32_t > mLong;
809
    UnionMember<ConstrainLongRange > mConstrainLongRange;
810
811
  };
812
813
  Type mType;
814
  Value mValue;
815
816
public:
817
  explicit inline OwningLongOrConstrainLongRange()
818
    : mType(eUninitialized)
819
0
  {
820
0
  }
821
822
  explicit inline OwningLongOrConstrainLongRange(const OwningLongOrConstrainLongRange& aOther)
823
    : mType(eUninitialized)
824
0
  {
825
0
    *this = aOther;
826
0
  }
827
828
  inline ~OwningLongOrConstrainLongRange()
829
0
  {
830
0
    Uninit();
831
0
  }
832
833
  int32_t&
834
  RawSetAsLong();
835
836
  int32_t&
837
  SetAsLong();
838
839
  bool
840
  TrySetToLong(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
841
842
  inline bool
843
  IsLong() const
844
0
  {
845
0
    return mType == eLong;
846
0
  }
847
848
  inline int32_t&
849
  GetAsLong()
850
0
  {
851
0
    MOZ_ASSERT(IsLong(), "Wrong type!");
852
0
    return mValue.mLong.Value();
853
0
  }
854
855
  inline int32_t const &
856
  GetAsLong() const
857
0
  {
858
0
    MOZ_ASSERT(IsLong(), "Wrong type!");
859
0
    return mValue.mLong.Value();
860
0
  }
861
862
  ConstrainLongRange&
863
  RawSetAsConstrainLongRange();
864
865
  ConstrainLongRange&
866
  SetAsConstrainLongRange();
867
868
  bool
869
  TrySetToConstrainLongRange(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
870
871
  inline bool
872
  IsConstrainLongRange() const
873
0
  {
874
0
    return mType == eConstrainLongRange;
875
0
  }
876
877
  inline ConstrainLongRange&
878
  GetAsConstrainLongRange()
879
0
  {
880
0
    MOZ_ASSERT(IsConstrainLongRange(), "Wrong type!");
881
0
    return mValue.mConstrainLongRange.Value();
882
0
  }
883
884
  inline ConstrainLongRange const &
885
  GetAsConstrainLongRange() const
886
0
  {
887
0
    MOZ_ASSERT(IsConstrainLongRange(), "Wrong type!");
888
0
    return mValue.mConstrainLongRange.Value();
889
0
  }
890
891
  void
892
  Uninit();
893
894
  bool
895
  ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
896
897
  void
898
  TraceUnion(JSTracer* trc);
899
900
  OwningLongOrConstrainLongRange&
901
  operator=(const OwningLongOrConstrainLongRange& aOther);
902
903
private:
904
  void
905
  DestroyLong();
906
907
  void
908
  DestroyConstrainLongRange();
909
};
910
911
912
class StringOrStringSequenceOrConstrainDOMStringParameters
913
{
914
  friend class StringOrStringSequenceOrConstrainDOMStringParametersArgument;
915
  enum Type
916
  {
917
    eUninitialized,
918
    eString,
919
    eStringSequence,
920
    eConstrainDOMStringParameters
921
  };
922
923
  union Value
924
  {
925
    UnionMember<binding_detail::FakeString > mString;
926
    UnionMember<binding_detail::AutoSequence<nsString> > mStringSequence;
927
    UnionMember<binding_detail::FastConstrainDOMStringParameters > mConstrainDOMStringParameters;
928
929
  };
930
931
  Type mType;
932
  Value mValue;
933
934
  StringOrStringSequenceOrConstrainDOMStringParameters(const StringOrStringSequenceOrConstrainDOMStringParameters&) = delete;
935
  StringOrStringSequenceOrConstrainDOMStringParameters& operator=(const StringOrStringSequenceOrConstrainDOMStringParameters&) = delete;
936
public:
937
  explicit inline StringOrStringSequenceOrConstrainDOMStringParameters()
938
    : mType(eUninitialized)
939
0
  {
940
0
  }
941
942
  inline ~StringOrStringSequenceOrConstrainDOMStringParameters()
943
0
  {
944
0
    Uninit();
945
0
  }
946
947
  inline binding_detail::FakeString&
948
  RawSetAsString()
949
0
  {
950
0
    if (mType == eString) {
951
0
      return mValue.mString.Value();
952
0
    }
953
0
    MOZ_ASSERT(mType == eUninitialized);
954
0
    mType = eString;
955
0
    return mValue.mString.SetValue();
956
0
  }
957
958
  inline binding_detail::FakeString&
959
  SetAsString()
960
0
  {
961
0
    if (mType == eString) {
962
0
      return mValue.mString.Value();
963
0
    }
964
0
    Uninit();
965
0
    mType = eString;
966
0
    return mValue.mString.SetValue();
967
0
  }
968
969
  inline bool
970
  IsString() const
971
0
  {
972
0
    return mType == eString;
973
0
  }
974
975
  inline binding_detail::FakeString&
976
  GetAsString()
977
0
  {
978
0
    MOZ_ASSERT(IsString(), "Wrong type!");
979
0
    return mValue.mString.Value();
980
0
  }
981
982
  inline const nsAString&
983
  GetAsString() const
984
0
  {
985
0
    MOZ_ASSERT(IsString(), "Wrong type!");
986
0
    return mValue.mString.Value();
987
0
  }
988
989
  inline binding_detail::AutoSequence<nsString>&
990
  RawSetAsStringSequence()
991
0
  {
992
0
    if (mType == eStringSequence) {
993
0
      return mValue.mStringSequence.Value();
994
0
    }
995
0
    MOZ_ASSERT(mType == eUninitialized);
996
0
    mType = eStringSequence;
997
0
    return mValue.mStringSequence.SetValue();
998
0
  }
999
1000
  inline binding_detail::AutoSequence<nsString>&
1001
  SetAsStringSequence()
1002
0
  {
1003
0
    if (mType == eStringSequence) {
1004
0
      return mValue.mStringSequence.Value();
1005
0
    }
1006
0
    Uninit();
1007
0
    mType = eStringSequence;
1008
0
    return mValue.mStringSequence.SetValue();
1009
0
  }
1010
1011
  inline bool
1012
  IsStringSequence() const
1013
0
  {
1014
0
    return mType == eStringSequence;
1015
0
  }
1016
1017
  inline binding_detail::AutoSequence<nsString>&
1018
  GetAsStringSequence()
1019
0
  {
1020
0
    MOZ_ASSERT(IsStringSequence(), "Wrong type!");
1021
0
    return mValue.mStringSequence.Value();
1022
0
  }
1023
1024
  inline const Sequence<nsString>&
1025
  GetAsStringSequence() const
1026
0
  {
1027
0
    MOZ_ASSERT(IsStringSequence(), "Wrong type!");
1028
0
    return mValue.mStringSequence.Value();
1029
0
  }
1030
1031
  inline binding_detail::FastConstrainDOMStringParameters&
1032
  RawSetAsConstrainDOMStringParameters()
1033
0
  {
1034
0
    if (mType == eConstrainDOMStringParameters) {
1035
0
      return mValue.mConstrainDOMStringParameters.Value();
1036
0
    }
1037
0
    MOZ_ASSERT(mType == eUninitialized);
1038
0
    mType = eConstrainDOMStringParameters;
1039
0
    return mValue.mConstrainDOMStringParameters.SetValue();
1040
0
  }
1041
1042
  inline binding_detail::FastConstrainDOMStringParameters&
1043
  SetAsConstrainDOMStringParameters()
1044
0
  {
1045
0
    if (mType == eConstrainDOMStringParameters) {
1046
0
      return mValue.mConstrainDOMStringParameters.Value();
1047
0
    }
1048
0
    Uninit();
1049
0
    mType = eConstrainDOMStringParameters;
1050
0
    return mValue.mConstrainDOMStringParameters.SetValue();
1051
0
  }
1052
1053
  inline bool
1054
  IsConstrainDOMStringParameters() const
1055
0
  {
1056
0
    return mType == eConstrainDOMStringParameters;
1057
0
  }
1058
1059
  inline binding_detail::FastConstrainDOMStringParameters&
1060
  GetAsConstrainDOMStringParameters()
1061
0
  {
1062
0
    MOZ_ASSERT(IsConstrainDOMStringParameters(), "Wrong type!");
1063
0
    return mValue.mConstrainDOMStringParameters.Value();
1064
0
  }
1065
1066
  inline const ConstrainDOMStringParameters&
1067
  GetAsConstrainDOMStringParameters() const
1068
0
  {
1069
0
    MOZ_ASSERT(IsConstrainDOMStringParameters(), "Wrong type!");
1070
0
    return mValue.mConstrainDOMStringParameters.Value();
1071
0
  }
1072
1073
  inline void
1074
  Uninit()
1075
0
  {
1076
0
    switch (mType) {
1077
0
      case eUninitialized: {
1078
0
        break;
1079
0
      }
1080
0
      case eString: {
1081
0
        DestroyString();
1082
0
        break;
1083
0
      }
1084
0
      case eStringSequence: {
1085
0
        DestroyStringSequence();
1086
0
        break;
1087
0
      }
1088
0
      case eConstrainDOMStringParameters: {
1089
0
        DestroyConstrainDOMStringParameters();
1090
0
        break;
1091
0
      }
1092
0
    }
1093
0
  }
1094
1095
  bool
1096
  ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
1097
1098
private:
1099
  inline void
1100
  DestroyString()
1101
0
  {
1102
0
    MOZ_ASSERT(IsString(), "Wrong type!");
1103
0
    mValue.mString.Destroy();
1104
0
    mType = eUninitialized;
1105
0
  }
1106
1107
  inline void
1108
  DestroyStringSequence()
1109
0
  {
1110
0
    MOZ_ASSERT(IsStringSequence(), "Wrong type!");
1111
0
    mValue.mStringSequence.Destroy();
1112
0
    mType = eUninitialized;
1113
0
  }
1114
1115
  inline void
1116
  DestroyConstrainDOMStringParameters()
1117
0
  {
1118
0
    MOZ_ASSERT(IsConstrainDOMStringParameters(), "Wrong type!");
1119
0
    mValue.mConstrainDOMStringParameters.Destroy();
1120
0
    mType = eUninitialized;
1121
0
  }
1122
};
1123
1124
1125
class OwningStringOrStringSequenceOrConstrainDOMStringParameters : public AllOwningUnionBase
1126
{
1127
  friend void ImplCycleCollectionUnlink(OwningStringOrStringSequenceOrConstrainDOMStringParameters& aUnion);
1128
  enum Type
1129
  {
1130
    eUninitialized,
1131
    eString,
1132
    eStringSequence,
1133
    eConstrainDOMStringParameters
1134
  };
1135
1136
  union Value
1137
  {
1138
    UnionMember<nsString > mString;
1139
    UnionMember<Sequence<nsString> > mStringSequence;
1140
    UnionMember<ConstrainDOMStringParameters > mConstrainDOMStringParameters;
1141
1142
  };
1143
1144
  Type mType;
1145
  Value mValue;
1146
1147
public:
1148
  explicit inline OwningStringOrStringSequenceOrConstrainDOMStringParameters()
1149
    : mType(eUninitialized)
1150
0
  {
1151
0
  }
1152
1153
  explicit inline OwningStringOrStringSequenceOrConstrainDOMStringParameters(const OwningStringOrStringSequenceOrConstrainDOMStringParameters& aOther)
1154
    : mType(eUninitialized)
1155
0
  {
1156
0
    *this = aOther;
1157
0
  }
1158
1159
  inline ~OwningStringOrStringSequenceOrConstrainDOMStringParameters()
1160
0
  {
1161
0
    Uninit();
1162
0
  }
1163
1164
  nsString&
1165
  RawSetAsString();
1166
1167
  nsString&
1168
  SetAsString();
1169
1170
  bool
1171
  TrySetToString(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
1172
1173
  inline void
1174
  SetStringData(const nsString::char_type* aData, nsString::size_type aLength)
1175
0
  {
1176
0
    RawSetAsString().Assign(aData, aLength);
1177
0
  }
1178
1179
  inline bool
1180
  IsString() const
1181
0
  {
1182
0
    return mType == eString;
1183
0
  }
1184
1185
  inline nsString&
1186
  GetAsString()
1187
0
  {
1188
0
    MOZ_ASSERT(IsString(), "Wrong type!");
1189
0
    return mValue.mString.Value();
1190
0
  }
1191
1192
  inline nsString const &
1193
  GetAsString() const
1194
0
  {
1195
0
    MOZ_ASSERT(IsString(), "Wrong type!");
1196
0
    return mValue.mString.Value();
1197
0
  }
1198
1199
  Sequence<nsString>&
1200
  RawSetAsStringSequence();
1201
1202
  Sequence<nsString>&
1203
  SetAsStringSequence();
1204
1205
  bool
1206
  TrySetToStringSequence(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
1207
1208
  inline bool
1209
  IsStringSequence() const
1210
0
  {
1211
0
    return mType == eStringSequence;
1212
0
  }
1213
1214
  inline Sequence<nsString>&
1215
  GetAsStringSequence()
1216
0
  {
1217
0
    MOZ_ASSERT(IsStringSequence(), "Wrong type!");
1218
0
    return mValue.mStringSequence.Value();
1219
0
  }
1220
1221
  inline Sequence<nsString> const &
1222
  GetAsStringSequence() const
1223
0
  {
1224
0
    MOZ_ASSERT(IsStringSequence(), "Wrong type!");
1225
0
    return mValue.mStringSequence.Value();
1226
0
  }
1227
1228
  ConstrainDOMStringParameters&
1229
  RawSetAsConstrainDOMStringParameters();
1230
1231
  ConstrainDOMStringParameters&
1232
  SetAsConstrainDOMStringParameters();
1233
1234
  bool
1235
  TrySetToConstrainDOMStringParameters(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
1236
1237
  inline bool
1238
  IsConstrainDOMStringParameters() const
1239
0
  {
1240
0
    return mType == eConstrainDOMStringParameters;
1241
0
  }
1242
1243
  inline ConstrainDOMStringParameters&
1244
  GetAsConstrainDOMStringParameters()
1245
0
  {
1246
0
    MOZ_ASSERT(IsConstrainDOMStringParameters(), "Wrong type!");
1247
0
    return mValue.mConstrainDOMStringParameters.Value();
1248
0
  }
1249
1250
  inline ConstrainDOMStringParameters const &
1251
  GetAsConstrainDOMStringParameters() const
1252
0
  {
1253
0
    MOZ_ASSERT(IsConstrainDOMStringParameters(), "Wrong type!");
1254
0
    return mValue.mConstrainDOMStringParameters.Value();
1255
0
  }
1256
1257
  void
1258
  Uninit();
1259
1260
  bool
1261
  ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
1262
1263
  void
1264
  TraceUnion(JSTracer* trc);
1265
1266
  OwningStringOrStringSequenceOrConstrainDOMStringParameters&
1267
  operator=(const OwningStringOrStringSequenceOrConstrainDOMStringParameters& aOther);
1268
1269
private:
1270
  void
1271
  DestroyString();
1272
1273
  void
1274
  DestroyStringSequence();
1275
1276
  void
1277
  DestroyConstrainDOMStringParameters();
1278
};
1279
1280
1281
struct MediaTrackConstraintSet : public DictionaryBase
1282
{
1283
  MOZ_INIT_OUTSIDE_CTOR OwningBooleanOrConstrainBooleanParameters mAutoGainControl;
1284
  MOZ_INIT_OUTSIDE_CTOR Optional<int64_t> mBrowserWindow;
1285
  MOZ_INIT_OUTSIDE_CTOR OwningLongOrConstrainLongRange mChannelCount;
1286
  MOZ_INIT_OUTSIDE_CTOR OwningStringOrStringSequenceOrConstrainDOMStringParameters mDeviceId;
1287
  MOZ_INIT_OUTSIDE_CTOR OwningBooleanOrConstrainBooleanParameters mEchoCancellation;
1288
  MOZ_INIT_OUTSIDE_CTOR OwningStringOrStringSequenceOrConstrainDOMStringParameters mFacingMode;
1289
  MOZ_INIT_OUTSIDE_CTOR OwningDoubleOrConstrainDoubleRange mFrameRate;
1290
  MOZ_INIT_OUTSIDE_CTOR OwningLongOrConstrainLongRange mHeight;
1291
  MOZ_INIT_OUTSIDE_CTOR nsString mMediaSource;
1292
  MOZ_INIT_OUTSIDE_CTOR OwningBooleanOrConstrainBooleanParameters mMozAutoGainControl;
1293
  MOZ_INIT_OUTSIDE_CTOR OwningBooleanOrConstrainBooleanParameters mMozNoiseSuppression;
1294
  MOZ_INIT_OUTSIDE_CTOR OwningBooleanOrConstrainBooleanParameters mNoiseSuppression;
1295
  MOZ_INIT_OUTSIDE_CTOR Optional<bool> mScrollWithPage;
1296
  MOZ_INIT_OUTSIDE_CTOR OwningLongOrConstrainLongRange mViewportHeight;
1297
  MOZ_INIT_OUTSIDE_CTOR OwningLongOrConstrainLongRange mViewportOffsetX;
1298
  MOZ_INIT_OUTSIDE_CTOR OwningLongOrConstrainLongRange mViewportOffsetY;
1299
  MOZ_INIT_OUTSIDE_CTOR OwningLongOrConstrainLongRange mViewportWidth;
1300
  MOZ_INIT_OUTSIDE_CTOR OwningLongOrConstrainLongRange mWidth;
1301
1302
  MediaTrackConstraintSet();
1303
1304
  explicit inline MediaTrackConstraintSet(const FastDictionaryInitializer& )
1305
0
  {
1306
0
    // Do nothing here; this is used by our "Fast" subclass
1307
0
  }
1308
1309
  explicit inline MediaTrackConstraintSet(const MediaTrackConstraintSet& aOther)
1310
0
  {
1311
0
    *this = aOther;
1312
0
  }
1313
1314
  bool
1315
  Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription = "Value", bool passedToJSImpl = false);
1316
1317
  bool
1318
  Init(const nsAString& aJSON);
1319
1320
  bool
1321
  ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const;
1322
1323
  bool
1324
  ToJSON(nsAString& aJSON) const;
1325
1326
  void
1327
  TraceDictionary(JSTracer* trc);
1328
1329
  MediaTrackConstraintSet&
1330
  operator=(const MediaTrackConstraintSet& aOther);
1331
1332
private:
1333
  static bool
1334
  InitIds(JSContext* cx, MediaTrackConstraintSetAtoms* atomsCache);
1335
};
1336
1337
namespace binding_detail {
1338
struct FastMediaTrackConstraintSet : public MediaTrackConstraintSet
1339
{
1340
  inline FastMediaTrackConstraintSet()
1341
    : MediaTrackConstraintSet(FastDictionaryInitializer())
1342
0
  {
1343
0
    // Doesn't matter what int we pass to the parent constructor
1344
0
  }
1345
};
1346
} // namespace binding_detail
1347
1348
1349
struct MediaTrackConstraints : public MediaTrackConstraintSet
1350
{
1351
  MOZ_INIT_OUTSIDE_CTOR Optional<Sequence<MediaTrackConstraintSet>> mAdvanced;
1352
1353
  MediaTrackConstraints();
1354
1355
  explicit inline MediaTrackConstraints(const FastDictionaryInitializer& )
1356
    : MediaTrackConstraintSet(FastDictionaryInitializer())
1357
0
  {
1358
0
    // Do nothing here; this is used by our "Fast" subclass
1359
0
  }
1360
1361
  explicit inline MediaTrackConstraints(const MediaTrackConstraints& aOther)
1362
0
  {
1363
0
    *this = aOther;
1364
0
  }
1365
1366
  bool
1367
  Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription = "Value", bool passedToJSImpl = false);
1368
1369
  bool
1370
  Init(const nsAString& aJSON);
1371
1372
  bool
1373
  ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const;
1374
1375
  bool
1376
  ToJSON(nsAString& aJSON) const;
1377
1378
  void
1379
  TraceDictionary(JSTracer* trc);
1380
1381
  MediaTrackConstraints&
1382
  operator=(const MediaTrackConstraints& aOther);
1383
1384
private:
1385
  static bool
1386
  InitIds(JSContext* cx, MediaTrackConstraintsAtoms* atomsCache);
1387
};
1388
1389
namespace binding_detail {
1390
struct FastMediaTrackConstraints : public MediaTrackConstraints
1391
{
1392
  inline FastMediaTrackConstraints()
1393
    : MediaTrackConstraints(FastDictionaryInitializer())
1394
0
  {
1395
0
    // Doesn't matter what int we pass to the parent constructor
1396
0
  }
1397
};
1398
} // namespace binding_detail
1399
1400
1401
namespace MediaStreamTrack_Binding {
1402
1403
  typedef mozilla::dom::MediaStreamTrack NativeType;
1404
1405
  // We declare this as an array so that retrieving a pointer to this
1406
  // binding's property hooks only requires compile/link-time resolvable
1407
  // address arithmetic.  Declaring it as a pointer instead would require
1408
  // doing a run-time load to fetch a pointer to this binding's property
1409
  // hooks.  And then structures which embedded a pointer to this structure
1410
  // would require a run-time load for proper initialization, which would
1411
  // then induce static constructors.  Lots of static constructors.
1412
  extern const NativePropertyHooks sNativePropertyHooks[];
1413
1414
  void
1415
  CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal);
1416
1417
  inline JS::Handle<JSObject*> GetProtoObjectHandle(JSContext* aCx)
1418
0
  {
1419
0
    /* Get the interface prototype object for this class.  This will create the
1420
0
       object as needed. */
1421
0
    return GetPerInterfaceObjectHandle(aCx, prototypes::id::MediaStreamTrack,
1422
0
                                       &CreateInterfaceObjects,
1423
0
                                       /* aDefineOnGlobal = */ true);
1424
0
1425
0
  }
1426
1427
  JSObject*
1428
  GetProtoObject(JSContext* aCx);
1429
1430
  inline JS::Handle<JSObject*> GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal = true)
1431
0
  {
1432
0
    /* Get the interface object for this class.  This will create the object as
1433
0
       needed. */
1434
0
1435
0
    return GetPerInterfaceObjectHandle(aCx, constructors::id::MediaStreamTrack,
1436
0
                                       &CreateInterfaceObjects,
1437
0
                                       aDefineOnGlobal);
1438
0
  }
1439
1440
  JSObject*
1441
  GetConstructorObject(JSContext* aCx);
1442
1443
} // namespace MediaStreamTrack_Binding
1444
1445
1446
1447
} // namespace dom
1448
} // namespace mozilla
1449
1450
#endif // mozilla_dom_MediaStreamTrackBinding_h