Line data Source code
1 : /* THIS FILE IS AUTOGENERATED FROM ImageBitmap.webidl BY Codegen.py - DO NOT EDIT */
2 :
3 : #ifndef mozilla_dom_ImageBitmapBinding_h
4 : #define mozilla_dom_ImageBitmapBinding_h
5 :
6 : #include "js/RootingAPI.h"
7 : #include "jsfriendapi.h"
8 : #include "jspubtd.h"
9 : #include "mozilla/ErrorResult.h"
10 : #include "mozilla/dom/BindingDeclarations.h"
11 : #include "mozilla/dom/FakeString.h"
12 : #include "mozilla/dom/Nullable.h"
13 : #include "mozilla/dom/TypedArray.h"
14 : #include "mozilla/dom/UnionMember.h"
15 :
16 : namespace mozilla {
17 : namespace dom {
18 :
19 : class Blob;
20 : class CanvasRenderingContext2D;
21 : struct ChannelPixelLayoutAtoms;
22 : class HTMLCanvasElement;
23 : class HTMLImageElement;
24 : class HTMLVideoElement;
25 : class ImageBitmap;
26 : struct ImageBitmapAtoms;
27 : class ImageData;
28 : struct NativePropertyHooks;
29 : class OwningHTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer;
30 : class ProtoAndIfaceCache;
31 :
32 : } // namespace dom
33 : } // namespace mozilla
34 :
35 : namespace mozilla {
36 : namespace dom {
37 :
38 : enum class ImageBitmapFormat : uint8_t {
39 : RGBA32,
40 : BGRA32,
41 : RGB24,
42 : BGR24,
43 : GRAY8,
44 : YUV444P,
45 : YUV422P,
46 : YUV420P,
47 : YUV420SP_NV12,
48 : YUV420SP_NV21,
49 : HSV,
50 : Lab,
51 : DEPTH,
52 : EndGuard_
53 : };
54 :
55 : namespace ImageBitmapFormatValues {
56 : extern const EnumEntry strings[14];
57 : } // namespace ImageBitmapFormatValues
58 :
59 : bool
60 : ToJSValue(JSContext* aCx, ImageBitmapFormat aArgument, JS::MutableHandle<JS::Value> aValue);
61 :
62 :
63 : enum class ChannelPixelLayoutDataType : uint8_t {
64 : Uint8,
65 : Int8,
66 : Uint16,
67 : Int16,
68 : Uint32,
69 : Int32,
70 : Float32,
71 : Float64,
72 : EndGuard_
73 : };
74 :
75 : namespace ChannelPixelLayoutDataTypeValues {
76 : extern const EnumEntry strings[9];
77 : } // namespace ChannelPixelLayoutDataTypeValues
78 :
79 : bool
80 : ToJSValue(JSContext* aCx, ChannelPixelLayoutDataType aArgument, JS::MutableHandle<JS::Value> aValue);
81 :
82 :
83 : void
84 : ImplCycleCollectionTraverse(nsCycleCollectionTraversalCallback& aCallback, OwningHTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer& aUnion, const char* aName, uint32_t aFlags = 0);
85 :
86 :
87 : void
88 : ImplCycleCollectionUnlink(OwningHTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer& aUnion);
89 :
90 :
91 : struct ChannelPixelLayout : public DictionaryBase
92 : {
93 : MOZ_INIT_OUTSIDE_CTOR ChannelPixelLayoutDataType mDataType;
94 : MOZ_INIT_OUTSIDE_CTOR uint32_t mHeight;
95 : MOZ_INIT_OUTSIDE_CTOR uint32_t mOffset;
96 : MOZ_INIT_OUTSIDE_CTOR uint32_t mSkip;
97 : MOZ_INIT_OUTSIDE_CTOR uint32_t mStride;
98 : MOZ_INIT_OUTSIDE_CTOR uint32_t mWidth;
99 :
100 : ChannelPixelLayout();
101 :
102 : explicit inline ChannelPixelLayout(const FastDictionaryInitializer& )
103 : {
104 : // Do nothing here; this is used by our "Fast" subclass
105 : }
106 :
107 0 : explicit inline ChannelPixelLayout(const ChannelPixelLayout& aOther)
108 0 : {
109 0 : *this = aOther;
110 0 : }
111 :
112 : bool
113 : Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription = "Value", bool passedToJSImpl = false);
114 :
115 : bool
116 : Init(const nsAString& aJSON);
117 :
118 : bool
119 : ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const;
120 :
121 : bool
122 : ToJSON(nsAString& aJSON) const;
123 :
124 : void
125 : TraceDictionary(JSTracer* trc);
126 :
127 : ChannelPixelLayout&
128 : operator=(const ChannelPixelLayout& aOther);
129 :
130 : private:
131 : static bool
132 : InitIds(JSContext* cx, ChannelPixelLayoutAtoms* atomsCache);
133 : };
134 :
135 : namespace binding_detail {
136 : struct FastChannelPixelLayout : public ChannelPixelLayout
137 : {
138 : inline FastChannelPixelLayout()
139 : : ChannelPixelLayout(FastDictionaryInitializer())
140 : {
141 : // Doesn't matter what int we pass to the parent constructor
142 : }
143 : };
144 : } // namespace binding_detail
145 :
146 :
147 : class HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer
148 : {
149 : friend class HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBufferArgument;
150 : enum Type
151 : {
152 : eUninitialized,
153 : eHTMLImageElement,
154 : eHTMLVideoElement,
155 : eHTMLCanvasElement,
156 : eBlob,
157 : eImageData,
158 : eCanvasRenderingContext2D,
159 : eImageBitmap,
160 : eArrayBufferView,
161 : eArrayBuffer
162 : };
163 :
164 0 : union Value
165 : {
166 : UnionMember<NonNull<mozilla::dom::HTMLImageElement> > mHTMLImageElement;
167 : UnionMember<NonNull<mozilla::dom::HTMLVideoElement> > mHTMLVideoElement;
168 : UnionMember<NonNull<mozilla::dom::HTMLCanvasElement> > mHTMLCanvasElement;
169 : UnionMember<NonNull<mozilla::dom::Blob> > mBlob;
170 : UnionMember<NonNull<mozilla::dom::ImageData> > mImageData;
171 : UnionMember<NonNull<mozilla::dom::CanvasRenderingContext2D> > mCanvasRenderingContext2D;
172 : UnionMember<NonNull<mozilla::dom::ImageBitmap> > mImageBitmap;
173 : UnionMember<RootedTypedArray<ArrayBufferView> > mArrayBufferView;
174 : UnionMember<RootedTypedArray<ArrayBuffer> > mArrayBuffer;
175 :
176 : };
177 :
178 : Type mType;
179 : Value mValue;
180 :
181 : HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer(const HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer&) = delete;
182 : HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer& operator=(const HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer&) = delete;
183 : public:
184 0 : explicit inline HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer()
185 0 : : mType(eUninitialized)
186 : {
187 0 : }
188 :
189 0 : inline ~HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer()
190 0 : {
191 0 : Uninit();
192 0 : }
193 :
194 : inline NonNull<mozilla::dom::HTMLImageElement>&
195 : RawSetAsHTMLImageElement()
196 : {
197 : if (mType == eHTMLImageElement) {
198 : return mValue.mHTMLImageElement.Value();
199 : }
200 : MOZ_ASSERT(mType == eUninitialized);
201 : mType = eHTMLImageElement;
202 : return mValue.mHTMLImageElement.SetValue();
203 : }
204 :
205 : inline NonNull<mozilla::dom::HTMLImageElement>&
206 : SetAsHTMLImageElement()
207 : {
208 : if (mType == eHTMLImageElement) {
209 : return mValue.mHTMLImageElement.Value();
210 : }
211 : Uninit();
212 : mType = eHTMLImageElement;
213 : return mValue.mHTMLImageElement.SetValue();
214 : }
215 :
216 : inline bool
217 0 : IsHTMLImageElement() const
218 : {
219 0 : return mType == eHTMLImageElement;
220 : }
221 :
222 : inline NonNull<mozilla::dom::HTMLImageElement>&
223 : GetAsHTMLImageElement()
224 : {
225 : MOZ_ASSERT(IsHTMLImageElement(), "Wrong type!");
226 : return mValue.mHTMLImageElement.Value();
227 : }
228 :
229 : inline mozilla::dom::HTMLImageElement&
230 0 : GetAsHTMLImageElement() const
231 : {
232 0 : MOZ_ASSERT(IsHTMLImageElement(), "Wrong type!");
233 0 : return mValue.mHTMLImageElement.Value();
234 : }
235 :
236 : inline NonNull<mozilla::dom::HTMLVideoElement>&
237 : RawSetAsHTMLVideoElement()
238 : {
239 : if (mType == eHTMLVideoElement) {
240 : return mValue.mHTMLVideoElement.Value();
241 : }
242 : MOZ_ASSERT(mType == eUninitialized);
243 : mType = eHTMLVideoElement;
244 : return mValue.mHTMLVideoElement.SetValue();
245 : }
246 :
247 : inline NonNull<mozilla::dom::HTMLVideoElement>&
248 : SetAsHTMLVideoElement()
249 : {
250 : if (mType == eHTMLVideoElement) {
251 : return mValue.mHTMLVideoElement.Value();
252 : }
253 : Uninit();
254 : mType = eHTMLVideoElement;
255 : return mValue.mHTMLVideoElement.SetValue();
256 : }
257 :
258 : inline bool
259 0 : IsHTMLVideoElement() const
260 : {
261 0 : return mType == eHTMLVideoElement;
262 : }
263 :
264 : inline NonNull<mozilla::dom::HTMLVideoElement>&
265 : GetAsHTMLVideoElement()
266 : {
267 : MOZ_ASSERT(IsHTMLVideoElement(), "Wrong type!");
268 : return mValue.mHTMLVideoElement.Value();
269 : }
270 :
271 : inline mozilla::dom::HTMLVideoElement&
272 0 : GetAsHTMLVideoElement() const
273 : {
274 0 : MOZ_ASSERT(IsHTMLVideoElement(), "Wrong type!");
275 0 : return mValue.mHTMLVideoElement.Value();
276 : }
277 :
278 : inline NonNull<mozilla::dom::HTMLCanvasElement>&
279 : RawSetAsHTMLCanvasElement()
280 : {
281 : if (mType == eHTMLCanvasElement) {
282 : return mValue.mHTMLCanvasElement.Value();
283 : }
284 : MOZ_ASSERT(mType == eUninitialized);
285 : mType = eHTMLCanvasElement;
286 : return mValue.mHTMLCanvasElement.SetValue();
287 : }
288 :
289 : inline NonNull<mozilla::dom::HTMLCanvasElement>&
290 : SetAsHTMLCanvasElement()
291 : {
292 : if (mType == eHTMLCanvasElement) {
293 : return mValue.mHTMLCanvasElement.Value();
294 : }
295 : Uninit();
296 : mType = eHTMLCanvasElement;
297 : return mValue.mHTMLCanvasElement.SetValue();
298 : }
299 :
300 : inline bool
301 0 : IsHTMLCanvasElement() const
302 : {
303 0 : return mType == eHTMLCanvasElement;
304 : }
305 :
306 : inline NonNull<mozilla::dom::HTMLCanvasElement>&
307 : GetAsHTMLCanvasElement()
308 : {
309 : MOZ_ASSERT(IsHTMLCanvasElement(), "Wrong type!");
310 : return mValue.mHTMLCanvasElement.Value();
311 : }
312 :
313 : inline mozilla::dom::HTMLCanvasElement&
314 0 : GetAsHTMLCanvasElement() const
315 : {
316 0 : MOZ_ASSERT(IsHTMLCanvasElement(), "Wrong type!");
317 0 : return mValue.mHTMLCanvasElement.Value();
318 : }
319 :
320 : inline NonNull<mozilla::dom::Blob>&
321 : RawSetAsBlob()
322 : {
323 : if (mType == eBlob) {
324 : return mValue.mBlob.Value();
325 : }
326 : MOZ_ASSERT(mType == eUninitialized);
327 : mType = eBlob;
328 : return mValue.mBlob.SetValue();
329 : }
330 :
331 : inline NonNull<mozilla::dom::Blob>&
332 : SetAsBlob()
333 : {
334 : if (mType == eBlob) {
335 : return mValue.mBlob.Value();
336 : }
337 : Uninit();
338 : mType = eBlob;
339 : return mValue.mBlob.SetValue();
340 : }
341 :
342 : inline bool
343 0 : IsBlob() const
344 : {
345 0 : return mType == eBlob;
346 : }
347 :
348 : inline NonNull<mozilla::dom::Blob>&
349 : GetAsBlob()
350 : {
351 : MOZ_ASSERT(IsBlob(), "Wrong type!");
352 : return mValue.mBlob.Value();
353 : }
354 :
355 : inline mozilla::dom::Blob&
356 0 : GetAsBlob() const
357 : {
358 0 : MOZ_ASSERT(IsBlob(), "Wrong type!");
359 0 : return mValue.mBlob.Value();
360 : }
361 :
362 : inline NonNull<mozilla::dom::ImageData>&
363 : RawSetAsImageData()
364 : {
365 : if (mType == eImageData) {
366 : return mValue.mImageData.Value();
367 : }
368 : MOZ_ASSERT(mType == eUninitialized);
369 : mType = eImageData;
370 : return mValue.mImageData.SetValue();
371 : }
372 :
373 : inline NonNull<mozilla::dom::ImageData>&
374 : SetAsImageData()
375 : {
376 : if (mType == eImageData) {
377 : return mValue.mImageData.Value();
378 : }
379 : Uninit();
380 : mType = eImageData;
381 : return mValue.mImageData.SetValue();
382 : }
383 :
384 : inline bool
385 0 : IsImageData() const
386 : {
387 0 : return mType == eImageData;
388 : }
389 :
390 : inline NonNull<mozilla::dom::ImageData>&
391 : GetAsImageData()
392 : {
393 : MOZ_ASSERT(IsImageData(), "Wrong type!");
394 : return mValue.mImageData.Value();
395 : }
396 :
397 : inline mozilla::dom::ImageData&
398 0 : GetAsImageData() const
399 : {
400 0 : MOZ_ASSERT(IsImageData(), "Wrong type!");
401 0 : return mValue.mImageData.Value();
402 : }
403 :
404 : inline NonNull<mozilla::dom::CanvasRenderingContext2D>&
405 : RawSetAsCanvasRenderingContext2D()
406 : {
407 : if (mType == eCanvasRenderingContext2D) {
408 : return mValue.mCanvasRenderingContext2D.Value();
409 : }
410 : MOZ_ASSERT(mType == eUninitialized);
411 : mType = eCanvasRenderingContext2D;
412 : return mValue.mCanvasRenderingContext2D.SetValue();
413 : }
414 :
415 : inline NonNull<mozilla::dom::CanvasRenderingContext2D>&
416 : SetAsCanvasRenderingContext2D()
417 : {
418 : if (mType == eCanvasRenderingContext2D) {
419 : return mValue.mCanvasRenderingContext2D.Value();
420 : }
421 : Uninit();
422 : mType = eCanvasRenderingContext2D;
423 : return mValue.mCanvasRenderingContext2D.SetValue();
424 : }
425 :
426 : inline bool
427 0 : IsCanvasRenderingContext2D() const
428 : {
429 0 : return mType == eCanvasRenderingContext2D;
430 : }
431 :
432 : inline NonNull<mozilla::dom::CanvasRenderingContext2D>&
433 : GetAsCanvasRenderingContext2D()
434 : {
435 : MOZ_ASSERT(IsCanvasRenderingContext2D(), "Wrong type!");
436 : return mValue.mCanvasRenderingContext2D.Value();
437 : }
438 :
439 : inline mozilla::dom::CanvasRenderingContext2D&
440 0 : GetAsCanvasRenderingContext2D() const
441 : {
442 0 : MOZ_ASSERT(IsCanvasRenderingContext2D(), "Wrong type!");
443 0 : return mValue.mCanvasRenderingContext2D.Value();
444 : }
445 :
446 : inline NonNull<mozilla::dom::ImageBitmap>&
447 : RawSetAsImageBitmap()
448 : {
449 : if (mType == eImageBitmap) {
450 : return mValue.mImageBitmap.Value();
451 : }
452 : MOZ_ASSERT(mType == eUninitialized);
453 : mType = eImageBitmap;
454 : return mValue.mImageBitmap.SetValue();
455 : }
456 :
457 : inline NonNull<mozilla::dom::ImageBitmap>&
458 : SetAsImageBitmap()
459 : {
460 : if (mType == eImageBitmap) {
461 : return mValue.mImageBitmap.Value();
462 : }
463 : Uninit();
464 : mType = eImageBitmap;
465 : return mValue.mImageBitmap.SetValue();
466 : }
467 :
468 : inline bool
469 0 : IsImageBitmap() const
470 : {
471 0 : return mType == eImageBitmap;
472 : }
473 :
474 : inline NonNull<mozilla::dom::ImageBitmap>&
475 : GetAsImageBitmap()
476 : {
477 : MOZ_ASSERT(IsImageBitmap(), "Wrong type!");
478 : return mValue.mImageBitmap.Value();
479 : }
480 :
481 : inline mozilla::dom::ImageBitmap&
482 0 : GetAsImageBitmap() const
483 : {
484 0 : MOZ_ASSERT(IsImageBitmap(), "Wrong type!");
485 0 : return mValue.mImageBitmap.Value();
486 : }
487 :
488 : inline RootedTypedArray<ArrayBufferView>&
489 : RawSetAsArrayBufferView(JSContext* cx)
490 : {
491 : if (mType == eArrayBufferView) {
492 : return mValue.mArrayBufferView.Value();
493 : }
494 : MOZ_ASSERT(mType == eUninitialized);
495 : mType = eArrayBufferView;
496 : return mValue.mArrayBufferView.SetValue(cx);
497 : }
498 :
499 : inline RootedTypedArray<ArrayBufferView>&
500 : SetAsArrayBufferView(JSContext* cx)
501 : {
502 : if (mType == eArrayBufferView) {
503 : return mValue.mArrayBufferView.Value();
504 : }
505 : Uninit();
506 : mType = eArrayBufferView;
507 : return mValue.mArrayBufferView.SetValue(cx);
508 : }
509 :
510 : inline bool
511 0 : IsArrayBufferView() const
512 : {
513 0 : return mType == eArrayBufferView;
514 : }
515 :
516 : inline RootedTypedArray<ArrayBufferView>&
517 : GetAsArrayBufferView()
518 : {
519 : MOZ_ASSERT(IsArrayBufferView(), "Wrong type!");
520 : return mValue.mArrayBufferView.Value();
521 : }
522 :
523 : inline ArrayBufferView const &
524 0 : GetAsArrayBufferView() const
525 : {
526 0 : MOZ_ASSERT(IsArrayBufferView(), "Wrong type!");
527 0 : return mValue.mArrayBufferView.Value();
528 : }
529 :
530 : inline RootedTypedArray<ArrayBuffer>&
531 : RawSetAsArrayBuffer(JSContext* cx)
532 : {
533 : if (mType == eArrayBuffer) {
534 : return mValue.mArrayBuffer.Value();
535 : }
536 : MOZ_ASSERT(mType == eUninitialized);
537 : mType = eArrayBuffer;
538 : return mValue.mArrayBuffer.SetValue(cx);
539 : }
540 :
541 : inline RootedTypedArray<ArrayBuffer>&
542 : SetAsArrayBuffer(JSContext* cx)
543 : {
544 : if (mType == eArrayBuffer) {
545 : return mValue.mArrayBuffer.Value();
546 : }
547 : Uninit();
548 : mType = eArrayBuffer;
549 : return mValue.mArrayBuffer.SetValue(cx);
550 : }
551 :
552 : inline bool
553 0 : IsArrayBuffer() const
554 : {
555 0 : return mType == eArrayBuffer;
556 : }
557 :
558 : inline RootedTypedArray<ArrayBuffer>&
559 : GetAsArrayBuffer()
560 : {
561 : MOZ_ASSERT(IsArrayBuffer(), "Wrong type!");
562 : return mValue.mArrayBuffer.Value();
563 : }
564 :
565 : inline ArrayBuffer const &
566 0 : GetAsArrayBuffer() const
567 : {
568 0 : MOZ_ASSERT(IsArrayBuffer(), "Wrong type!");
569 0 : return mValue.mArrayBuffer.Value();
570 : }
571 :
572 : inline void
573 0 : Uninit()
574 : {
575 0 : switch (mType) {
576 : case eUninitialized: {
577 0 : break;
578 : }
579 : case eHTMLImageElement: {
580 0 : DestroyHTMLImageElement();
581 0 : break;
582 : }
583 : case eHTMLVideoElement: {
584 0 : DestroyHTMLVideoElement();
585 0 : break;
586 : }
587 : case eHTMLCanvasElement: {
588 0 : DestroyHTMLCanvasElement();
589 0 : break;
590 : }
591 : case eBlob: {
592 0 : DestroyBlob();
593 0 : break;
594 : }
595 : case eImageData: {
596 0 : DestroyImageData();
597 0 : break;
598 : }
599 : case eCanvasRenderingContext2D: {
600 0 : DestroyCanvasRenderingContext2D();
601 0 : break;
602 : }
603 : case eImageBitmap: {
604 0 : DestroyImageBitmap();
605 0 : break;
606 : }
607 : case eArrayBufferView: {
608 0 : DestroyArrayBufferView();
609 0 : break;
610 : }
611 : case eArrayBuffer: {
612 0 : DestroyArrayBuffer();
613 0 : break;
614 : }
615 : }
616 0 : }
617 :
618 : bool
619 : ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
620 :
621 : private:
622 : inline void
623 0 : DestroyHTMLImageElement()
624 : {
625 0 : MOZ_ASSERT(IsHTMLImageElement(), "Wrong type!");
626 0 : mValue.mHTMLImageElement.Destroy();
627 0 : mType = eUninitialized;
628 0 : }
629 :
630 : inline void
631 0 : DestroyHTMLVideoElement()
632 : {
633 0 : MOZ_ASSERT(IsHTMLVideoElement(), "Wrong type!");
634 0 : mValue.mHTMLVideoElement.Destroy();
635 0 : mType = eUninitialized;
636 0 : }
637 :
638 : inline void
639 0 : DestroyHTMLCanvasElement()
640 : {
641 0 : MOZ_ASSERT(IsHTMLCanvasElement(), "Wrong type!");
642 0 : mValue.mHTMLCanvasElement.Destroy();
643 0 : mType = eUninitialized;
644 0 : }
645 :
646 : inline void
647 0 : DestroyBlob()
648 : {
649 0 : MOZ_ASSERT(IsBlob(), "Wrong type!");
650 0 : mValue.mBlob.Destroy();
651 0 : mType = eUninitialized;
652 0 : }
653 :
654 : inline void
655 0 : DestroyImageData()
656 : {
657 0 : MOZ_ASSERT(IsImageData(), "Wrong type!");
658 0 : mValue.mImageData.Destroy();
659 0 : mType = eUninitialized;
660 0 : }
661 :
662 : inline void
663 0 : DestroyCanvasRenderingContext2D()
664 : {
665 0 : MOZ_ASSERT(IsCanvasRenderingContext2D(), "Wrong type!");
666 0 : mValue.mCanvasRenderingContext2D.Destroy();
667 0 : mType = eUninitialized;
668 0 : }
669 :
670 : inline void
671 0 : DestroyImageBitmap()
672 : {
673 0 : MOZ_ASSERT(IsImageBitmap(), "Wrong type!");
674 0 : mValue.mImageBitmap.Destroy();
675 0 : mType = eUninitialized;
676 0 : }
677 :
678 : inline void
679 0 : DestroyArrayBufferView()
680 : {
681 0 : MOZ_ASSERT(IsArrayBufferView(), "Wrong type!");
682 0 : mValue.mArrayBufferView.Destroy();
683 0 : mType = eUninitialized;
684 0 : }
685 :
686 : inline void
687 0 : DestroyArrayBuffer()
688 : {
689 0 : MOZ_ASSERT(IsArrayBuffer(), "Wrong type!");
690 0 : mValue.mArrayBuffer.Destroy();
691 0 : mType = eUninitialized;
692 0 : }
693 : };
694 :
695 :
696 : class OwningHTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer : public AllOwningUnionBase
697 : {
698 : friend void ImplCycleCollectionUnlink(OwningHTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer& aUnion);
699 : enum Type
700 : {
701 : eUninitialized,
702 : eHTMLImageElement,
703 : eHTMLVideoElement,
704 : eHTMLCanvasElement,
705 : eBlob,
706 : eImageData,
707 : eCanvasRenderingContext2D,
708 : eImageBitmap,
709 : eArrayBufferView,
710 : eArrayBuffer
711 : };
712 :
713 : union Value
714 : {
715 : UnionMember<OwningNonNull<mozilla::dom::HTMLImageElement> > mHTMLImageElement;
716 : UnionMember<OwningNonNull<mozilla::dom::HTMLVideoElement> > mHTMLVideoElement;
717 : UnionMember<OwningNonNull<mozilla::dom::HTMLCanvasElement> > mHTMLCanvasElement;
718 : UnionMember<OwningNonNull<mozilla::dom::Blob> > mBlob;
719 : UnionMember<OwningNonNull<mozilla::dom::ImageData> > mImageData;
720 : UnionMember<OwningNonNull<mozilla::dom::CanvasRenderingContext2D> > mCanvasRenderingContext2D;
721 : UnionMember<OwningNonNull<mozilla::dom::ImageBitmap> > mImageBitmap;
722 : UnionMember<ArrayBufferView > mArrayBufferView;
723 : UnionMember<ArrayBuffer > mArrayBuffer;
724 :
725 : };
726 :
727 : Type mType;
728 : Value mValue;
729 :
730 : OwningHTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer(const OwningHTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer&) = delete;
731 : OwningHTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer& operator=(const OwningHTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer&) = delete;
732 : public:
733 : explicit inline OwningHTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer()
734 : : mType(eUninitialized)
735 : {
736 : }
737 :
738 : inline ~OwningHTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrCanvasRenderingContext2DOrImageBitmapOrArrayBufferViewOrArrayBuffer()
739 : {
740 : Uninit();
741 : }
742 :
743 : OwningNonNull<mozilla::dom::HTMLImageElement>&
744 : RawSetAsHTMLImageElement();
745 :
746 : OwningNonNull<mozilla::dom::HTMLImageElement>&
747 : SetAsHTMLImageElement();
748 :
749 : bool
750 : TrySetToHTMLImageElement(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
751 :
752 : inline bool
753 0 : IsHTMLImageElement() const
754 : {
755 0 : return mType == eHTMLImageElement;
756 : }
757 :
758 : inline OwningNonNull<mozilla::dom::HTMLImageElement>&
759 0 : GetAsHTMLImageElement()
760 : {
761 0 : MOZ_ASSERT(IsHTMLImageElement(), "Wrong type!");
762 0 : return mValue.mHTMLImageElement.Value();
763 : }
764 :
765 : inline OwningNonNull<mozilla::dom::HTMLImageElement> const &
766 : GetAsHTMLImageElement() const
767 : {
768 : MOZ_ASSERT(IsHTMLImageElement(), "Wrong type!");
769 : return mValue.mHTMLImageElement.Value();
770 : }
771 :
772 : OwningNonNull<mozilla::dom::HTMLVideoElement>&
773 : RawSetAsHTMLVideoElement();
774 :
775 : OwningNonNull<mozilla::dom::HTMLVideoElement>&
776 : SetAsHTMLVideoElement();
777 :
778 : bool
779 : TrySetToHTMLVideoElement(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
780 :
781 : inline bool
782 0 : IsHTMLVideoElement() const
783 : {
784 0 : return mType == eHTMLVideoElement;
785 : }
786 :
787 : inline OwningNonNull<mozilla::dom::HTMLVideoElement>&
788 0 : GetAsHTMLVideoElement()
789 : {
790 0 : MOZ_ASSERT(IsHTMLVideoElement(), "Wrong type!");
791 0 : return mValue.mHTMLVideoElement.Value();
792 : }
793 :
794 : inline OwningNonNull<mozilla::dom::HTMLVideoElement> const &
795 : GetAsHTMLVideoElement() const
796 : {
797 : MOZ_ASSERT(IsHTMLVideoElement(), "Wrong type!");
798 : return mValue.mHTMLVideoElement.Value();
799 : }
800 :
801 : OwningNonNull<mozilla::dom::HTMLCanvasElement>&
802 : RawSetAsHTMLCanvasElement();
803 :
804 : OwningNonNull<mozilla::dom::HTMLCanvasElement>&
805 : SetAsHTMLCanvasElement();
806 :
807 : bool
808 : TrySetToHTMLCanvasElement(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
809 :
810 : inline bool
811 0 : IsHTMLCanvasElement() const
812 : {
813 0 : return mType == eHTMLCanvasElement;
814 : }
815 :
816 : inline OwningNonNull<mozilla::dom::HTMLCanvasElement>&
817 0 : GetAsHTMLCanvasElement()
818 : {
819 0 : MOZ_ASSERT(IsHTMLCanvasElement(), "Wrong type!");
820 0 : return mValue.mHTMLCanvasElement.Value();
821 : }
822 :
823 : inline OwningNonNull<mozilla::dom::HTMLCanvasElement> const &
824 : GetAsHTMLCanvasElement() const
825 : {
826 : MOZ_ASSERT(IsHTMLCanvasElement(), "Wrong type!");
827 : return mValue.mHTMLCanvasElement.Value();
828 : }
829 :
830 : OwningNonNull<mozilla::dom::Blob>&
831 : RawSetAsBlob();
832 :
833 : OwningNonNull<mozilla::dom::Blob>&
834 : SetAsBlob();
835 :
836 : bool
837 : TrySetToBlob(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
838 :
839 : inline bool
840 0 : IsBlob() const
841 : {
842 0 : return mType == eBlob;
843 : }
844 :
845 : inline OwningNonNull<mozilla::dom::Blob>&
846 0 : GetAsBlob()
847 : {
848 0 : MOZ_ASSERT(IsBlob(), "Wrong type!");
849 0 : return mValue.mBlob.Value();
850 : }
851 :
852 : inline OwningNonNull<mozilla::dom::Blob> const &
853 : GetAsBlob() const
854 : {
855 : MOZ_ASSERT(IsBlob(), "Wrong type!");
856 : return mValue.mBlob.Value();
857 : }
858 :
859 : OwningNonNull<mozilla::dom::ImageData>&
860 : RawSetAsImageData();
861 :
862 : OwningNonNull<mozilla::dom::ImageData>&
863 : SetAsImageData();
864 :
865 : bool
866 : TrySetToImageData(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
867 :
868 : inline bool
869 0 : IsImageData() const
870 : {
871 0 : return mType == eImageData;
872 : }
873 :
874 : inline OwningNonNull<mozilla::dom::ImageData>&
875 0 : GetAsImageData()
876 : {
877 0 : MOZ_ASSERT(IsImageData(), "Wrong type!");
878 0 : return mValue.mImageData.Value();
879 : }
880 :
881 : inline OwningNonNull<mozilla::dom::ImageData> const &
882 : GetAsImageData() const
883 : {
884 : MOZ_ASSERT(IsImageData(), "Wrong type!");
885 : return mValue.mImageData.Value();
886 : }
887 :
888 : OwningNonNull<mozilla::dom::CanvasRenderingContext2D>&
889 : RawSetAsCanvasRenderingContext2D();
890 :
891 : OwningNonNull<mozilla::dom::CanvasRenderingContext2D>&
892 : SetAsCanvasRenderingContext2D();
893 :
894 : bool
895 : TrySetToCanvasRenderingContext2D(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
896 :
897 : inline bool
898 0 : IsCanvasRenderingContext2D() const
899 : {
900 0 : return mType == eCanvasRenderingContext2D;
901 : }
902 :
903 : inline OwningNonNull<mozilla::dom::CanvasRenderingContext2D>&
904 0 : GetAsCanvasRenderingContext2D()
905 : {
906 0 : MOZ_ASSERT(IsCanvasRenderingContext2D(), "Wrong type!");
907 0 : return mValue.mCanvasRenderingContext2D.Value();
908 : }
909 :
910 : inline OwningNonNull<mozilla::dom::CanvasRenderingContext2D> const &
911 : GetAsCanvasRenderingContext2D() const
912 : {
913 : MOZ_ASSERT(IsCanvasRenderingContext2D(), "Wrong type!");
914 : return mValue.mCanvasRenderingContext2D.Value();
915 : }
916 :
917 : OwningNonNull<mozilla::dom::ImageBitmap>&
918 : RawSetAsImageBitmap();
919 :
920 : OwningNonNull<mozilla::dom::ImageBitmap>&
921 : SetAsImageBitmap();
922 :
923 : bool
924 : TrySetToImageBitmap(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
925 :
926 : inline bool
927 0 : IsImageBitmap() const
928 : {
929 0 : return mType == eImageBitmap;
930 : }
931 :
932 : inline OwningNonNull<mozilla::dom::ImageBitmap>&
933 0 : GetAsImageBitmap()
934 : {
935 0 : MOZ_ASSERT(IsImageBitmap(), "Wrong type!");
936 0 : return mValue.mImageBitmap.Value();
937 : }
938 :
939 : inline OwningNonNull<mozilla::dom::ImageBitmap> const &
940 : GetAsImageBitmap() const
941 : {
942 : MOZ_ASSERT(IsImageBitmap(), "Wrong type!");
943 : return mValue.mImageBitmap.Value();
944 : }
945 :
946 : ArrayBufferView&
947 : RawSetAsArrayBufferView();
948 :
949 : ArrayBufferView&
950 : SetAsArrayBufferView();
951 :
952 : bool
953 : TrySetToArrayBufferView(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
954 :
955 : inline bool
956 0 : IsArrayBufferView() const
957 : {
958 0 : return mType == eArrayBufferView;
959 : }
960 :
961 : inline ArrayBufferView&
962 : GetAsArrayBufferView()
963 : {
964 : MOZ_ASSERT(IsArrayBufferView(), "Wrong type!");
965 : return mValue.mArrayBufferView.Value();
966 : }
967 :
968 : inline ArrayBufferView const &
969 : GetAsArrayBufferView() const
970 : {
971 : MOZ_ASSERT(IsArrayBufferView(), "Wrong type!");
972 : return mValue.mArrayBufferView.Value();
973 : }
974 :
975 : ArrayBuffer&
976 : RawSetAsArrayBuffer();
977 :
978 : ArrayBuffer&
979 : SetAsArrayBuffer();
980 :
981 : bool
982 : TrySetToArrayBuffer(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl = false);
983 :
984 : inline bool
985 0 : IsArrayBuffer() const
986 : {
987 0 : return mType == eArrayBuffer;
988 : }
989 :
990 : inline ArrayBuffer&
991 : GetAsArrayBuffer()
992 : {
993 : MOZ_ASSERT(IsArrayBuffer(), "Wrong type!");
994 : return mValue.mArrayBuffer.Value();
995 : }
996 :
997 : inline ArrayBuffer const &
998 : GetAsArrayBuffer() const
999 : {
1000 : MOZ_ASSERT(IsArrayBuffer(), "Wrong type!");
1001 : return mValue.mArrayBuffer.Value();
1002 : }
1003 :
1004 : void
1005 : Uninit();
1006 :
1007 : bool
1008 : ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const;
1009 :
1010 : void
1011 : TraceUnion(JSTracer* trc);
1012 :
1013 : private:
1014 : void
1015 : DestroyHTMLImageElement();
1016 :
1017 : void
1018 : DestroyHTMLVideoElement();
1019 :
1020 : void
1021 : DestroyHTMLCanvasElement();
1022 :
1023 : void
1024 : DestroyBlob();
1025 :
1026 : void
1027 : DestroyImageData();
1028 :
1029 : void
1030 : DestroyCanvasRenderingContext2D();
1031 :
1032 : void
1033 : DestroyImageBitmap();
1034 :
1035 : void
1036 : DestroyArrayBufferView();
1037 :
1038 : void
1039 : DestroyArrayBuffer();
1040 : };
1041 :
1042 :
1043 : namespace ImageBitmapBinding {
1044 :
1045 : typedef mozilla::dom::ImageBitmap NativeType;
1046 :
1047 : JSObject*
1048 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal);
1049 :
1050 : const JSClass*
1051 : GetJSClass();
1052 :
1053 : bool
1054 : Wrap(JSContext* aCx, mozilla::dom::ImageBitmap* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector);
1055 :
1056 : template <class T>
1057 0 : inline JSObject* Wrap(JSContext* aCx, T* aObject, JS::Handle<JSObject*> aGivenProto)
1058 : {
1059 0 : JS::Rooted<JSObject*> reflector(aCx);
1060 0 : return Wrap(aCx, aObject, aObject, aGivenProto, &reflector) ? reflector.get() : nullptr;
1061 : }
1062 :
1063 : // We declare this as an array so that retrieving a pointer to this
1064 : // binding's property hooks only requires compile/link-time resolvable
1065 : // address arithmetic. Declaring it as a pointer instead would require
1066 : // doing a run-time load to fetch a pointer to this binding's property
1067 : // hooks. And then structures which embedded a pointer to this structure
1068 : // would require a run-time load for proper initialization, which would
1069 : // then induce static constructors. Lots of static constructors.
1070 : extern const NativePropertyHooks sNativePropertyHooks[];
1071 :
1072 : void
1073 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal);
1074 :
1075 : JS::Handle<JSObject*>
1076 : GetProtoObjectHandle(JSContext* aCx);
1077 :
1078 : JS::Handle<JSObject*>
1079 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal = true);
1080 :
1081 : JSObject*
1082 : GetConstructorObject(JSContext* aCx);
1083 :
1084 : } // namespace ImageBitmapBinding
1085 :
1086 :
1087 :
1088 : } // namespace dom
1089 : } // namespace mozilla
1090 :
1091 : #endif // mozilla_dom_ImageBitmapBinding_h
|