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