LCOV - code coverage report
Current view: top level - obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom - CanvasRenderingContext2DBinding.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 195 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 61 0.0 %
Legend: Lines: hit not hit

          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

Generated by: LCOV version 1.13