Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/svg/nsSVGElement.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
3
/* This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#ifndef __NS_SVGELEMENT_H__
8
#define __NS_SVGELEMENT_H__
9
10
/*
11
  nsSVGElement is the base class for all SVG content elements.
12
  It implements all the common DOM interfaces and handles attributes.
13
*/
14
15
#include "mozilla/Attributes.h"
16
#include "nsAutoPtr.h"
17
#include "nsChangeHint.h"
18
#include "nsCOMPtr.h"
19
#include "nsCycleCollectionParticipant.h"
20
#include "nsError.h"
21
#include "mozilla/dom/DOMRect.h"
22
#include "mozilla/dom/Element.h"
23
#include "mozilla/gfx/MatrixFwd.h"
24
#include "nsISupportsImpl.h"
25
#include "nsStyledElement.h"
26
#include "nsSVGClass.h"
27
#include "SVGContentUtils.h"
28
#include "gfxMatrix.h"
29
30
class nsSVGAngle;
31
class nsSVGBoolean;
32
class nsSVGEnum;
33
class nsSVGInteger;
34
class nsSVGIntegerPair;
35
class nsSVGLength2;
36
class nsSVGNumber2;
37
class nsSVGNumberPair;
38
class nsSVGString;
39
class nsSVGViewBox;
40
41
namespace mozilla {
42
class DeclarationBlock;
43
44
namespace dom {
45
class SVGSVGElement;
46
class SVGViewportElement;
47
48
} // namespace dom
49
50
class SVGAnimatedNumberList;
51
class SVGNumberList;
52
class SVGAnimatedLengthList;
53
class SVGUserUnitList;
54
class SVGAnimatedPointList;
55
class SVGAnimatedPathSegList;
56
class SVGAnimatedPreserveAspectRatio;
57
class nsSVGAnimatedTransformList;
58
class SVGStringList;
59
class DOMSVGStringList;
60
61
} // namespace mozilla
62
63
struct nsSVGEnumMapping;
64
65
typedef nsStyledElement nsSVGElementBase;
66
67
class nsSVGElement : public nsSVGElementBase    // nsIContent
68
{
69
protected:
70
  explicit nsSVGElement(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
71
  friend nsresult NS_NewSVGElement(mozilla::dom::Element **aResult,
72
                                   already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo);
73
  nsresult Init();
74
  virtual ~nsSVGElement();
75
76
public:
77
78
  virtual nsresult Clone(mozilla::dom::NodeInfo*, nsINode** aResult) const
79
    MOZ_MUST_OVERRIDE override;
80
81
  typedef mozilla::SVGNumberList SVGNumberList;
82
  typedef mozilla::SVGAnimatedNumberList SVGAnimatedNumberList;
83
  typedef mozilla::SVGUserUnitList SVGUserUnitList;
84
  typedef mozilla::SVGAnimatedLengthList SVGAnimatedLengthList;
85
  typedef mozilla::SVGAnimatedPointList SVGAnimatedPointList;
86
  typedef mozilla::SVGAnimatedPathSegList SVGAnimatedPathSegList;
87
  typedef mozilla::SVGAnimatedPreserveAspectRatio SVGAnimatedPreserveAspectRatio;
88
  typedef mozilla::nsSVGAnimatedTransformList nsSVGAnimatedTransformList;
89
  typedef mozilla::SVGStringList SVGStringList;
90
91
  // nsISupports
92
  NS_INLINE_DECL_REFCOUNTING_INHERITED(nsSVGElement, nsSVGElementBase)
93
94
  void DidAnimateClass();
95
96
  // nsIContent interface methods
97
98
  virtual nsresult BindToTree(nsIDocument* aDocument,
99
                              nsIContent* aParent,
100
                              nsIContent* aBindingParent) override;
101
102
  virtual nsChangeHint GetAttributeChangeHint(const nsAtom* aAttribute,
103
                                              int32_t aModType) const override;
104
105
  virtual bool IsNodeOfType(uint32_t aFlags) const override;
106
107
  /**
108
   * We override the default to unschedule computation of Servo declaration blocks
109
   * when adopted across documents.
110
   */
111
  virtual void NodeInfoChanged(nsIDocument* aOldDoc) override;
112
113
114
  NS_IMETHOD_(bool) IsAttributeMapped(const nsAtom* aAttribute) const override;
115
116
  static const MappedAttributeEntry sFillStrokeMap[];
117
  static const MappedAttributeEntry sGraphicsMap[];
118
  static const MappedAttributeEntry sTextContentElementsMap[];
119
  static const MappedAttributeEntry sFontSpecificationMap[];
120
  static const MappedAttributeEntry sGradientStopMap[];
121
  static const MappedAttributeEntry sViewportsMap[];
122
  static const MappedAttributeEntry sMarkersMap[];
123
  static const MappedAttributeEntry sColorMap[];
124
  static const MappedAttributeEntry sFiltersMap[];
125
  static const MappedAttributeEntry sFEFloodMap[];
126
  static const MappedAttributeEntry sLightingEffectsMap[];
127
  static const MappedAttributeEntry sMaskMap[];
128
129
  NS_IMPL_FROMNODE(nsSVGElement, kNameSpaceID_SVG)
130
131
  // Gets the element that establishes the rectangular viewport against which
132
  // we should resolve percentage lengths (our "coordinate context"). Returns
133
  // nullptr for outer <svg> or SVG without an <svg> parent (invalid SVG).
134
  mozilla::dom::SVGViewportElement* GetCtx() const;
135
136
  /**
137
   * Returns aMatrix pre-multiplied by (explicit or implicit) transforms that
138
   * are introduced by attributes on this element.
139
   *
140
   * If aWhich is eAllTransforms, then all the transforms from the coordinate
141
   * space established by this element for its children to the coordinate
142
   * space established by this element's parent element for this element, are
143
   * included.
144
   *
145
   * If aWhich is eUserSpaceToParent, then only the transforms from this
146
   * element's userspace to the coordinate space established by its parent is
147
   * included. This includes any transforms introduced by the 'transform'
148
   * attribute, transform animations and animateMotion, but not any offsets
149
   * due to e.g. 'x'/'y' attributes, or any transform due to a 'viewBox'
150
   * attribute. (SVG userspace is defined to be the coordinate space in which
151
   * coordinates on an element apply.)
152
   *
153
   * If aWhich is eChildToUserSpace, then only the transforms from the
154
   * coordinate space established by this element for its childre to this
155
   * elements userspace are included. This includes any offsets due to e.g.
156
   * 'x'/'y' attributes, and any transform due to a 'viewBox' attribute, but
157
   * does not include any transforms due to the 'transform' attribute.
158
   */
159
  virtual gfxMatrix PrependLocalTransformsTo(
160
    const gfxMatrix &aMatrix, SVGTransformTypes aWhich = eAllTransforms) const;
161
162
  // Setter for to set the current <animateMotion> transformation
163
  // Only visible for nsSVGGraphicElement, so it's a no-op here, and that
164
  // subclass has the useful implementation.
165
0
  virtual void SetAnimateMotionTransform(const mozilla::gfx::Matrix* aMatrix) {/*no-op*/}
166
0
  virtual const mozilla::gfx::Matrix* GetAnimateMotionTransform() const { return nullptr; }
167
168
0
  bool IsStringAnimatable(uint8_t aAttrEnum) {
169
0
    return GetStringInfo().mStringInfo[aAttrEnum].mIsAnimatable;
170
0
  }
171
0
  bool NumberAttrAllowsPercentage(uint8_t aAttrEnum) {
172
0
    return GetNumberInfo().mNumberInfo[aAttrEnum].mPercentagesAllowed;
173
0
  }
174
0
  virtual bool HasValidDimensions() const {
175
0
    return true;
176
0
  }
177
  void SetLength(nsAtom* aName, const nsSVGLength2 &aLength);
178
179
  nsAttrValue WillChangeLength(uint8_t aAttrEnum);
180
  nsAttrValue WillChangeNumberPair(uint8_t aAttrEnum);
181
  nsAttrValue WillChangeIntegerPair(uint8_t aAttrEnum);
182
  nsAttrValue WillChangeAngle(uint8_t aAttrEnum);
183
  nsAttrValue WillChangeViewBox();
184
  nsAttrValue WillChangePreserveAspectRatio();
185
  nsAttrValue WillChangeNumberList(uint8_t aAttrEnum);
186
  nsAttrValue WillChangeLengthList(uint8_t aAttrEnum);
187
  nsAttrValue WillChangePointList();
188
  nsAttrValue WillChangePathSegList();
189
  nsAttrValue WillChangeTransformList();
190
  nsAttrValue WillChangeStringList(bool aIsConditionalProcessingAttribute,
191
                                   uint8_t aAttrEnum);
192
193
  void DidChangeLength(uint8_t aAttrEnum, const nsAttrValue& aEmptyOrOldValue);
194
  void DidChangeNumber(uint8_t aAttrEnum);
195
  void DidChangeNumberPair(uint8_t aAttrEnum,
196
                           const nsAttrValue& aEmptyOrOldValue);
197
  void DidChangeInteger(uint8_t aAttrEnum);
198
  void DidChangeIntegerPair(uint8_t aAttrEnum,
199
                            const nsAttrValue& aEmptyOrOldValue);
200
  void DidChangeAngle(uint8_t aAttrEnum, const nsAttrValue& aEmptyOrOldValue);
201
  void DidChangeBoolean(uint8_t aAttrEnum);
202
  void DidChangeEnum(uint8_t aAttrEnum);
203
  void DidChangeViewBox(const nsAttrValue& aEmptyOrOldValue);
204
  void DidChangePreserveAspectRatio(const nsAttrValue& aEmptyOrOldValue);
205
  void DidChangeNumberList(uint8_t aAttrEnum,
206
                           const nsAttrValue& aEmptyOrOldValue);
207
  void DidChangeLengthList(uint8_t aAttrEnum,
208
                           const nsAttrValue& aEmptyOrOldValue);
209
  void DidChangePointList(const nsAttrValue& aEmptyOrOldValue);
210
  void DidChangePathSegList(const nsAttrValue& aEmptyOrOldValue);
211
  void DidChangeTransformList(const nsAttrValue& aEmptyOrOldValue);
212
0
  void DidChangeString(uint8_t aAttrEnum) {}
213
  void DidChangeStringList(bool aIsConditionalProcessingAttribute,
214
                           uint8_t aAttrEnum,
215
                           const nsAttrValue& aEmptyOrOldValue);
216
217
  void DidAnimateLength(uint8_t aAttrEnum);
218
  void DidAnimateNumber(uint8_t aAttrEnum);
219
  void DidAnimateNumberPair(uint8_t aAttrEnum);
220
  void DidAnimateInteger(uint8_t aAttrEnum);
221
  void DidAnimateIntegerPair(uint8_t aAttrEnum);
222
  void DidAnimateAngle(uint8_t aAttrEnum);
223
  void DidAnimateBoolean(uint8_t aAttrEnum);
224
  void DidAnimateEnum(uint8_t aAttrEnum);
225
  void DidAnimateViewBox();
226
  void DidAnimatePreserveAspectRatio();
227
  void DidAnimateNumberList(uint8_t aAttrEnum);
228
  void DidAnimateLengthList(uint8_t aAttrEnum);
229
  void DidAnimatePointList();
230
  void DidAnimatePathSegList();
231
  void DidAnimateTransformList(int32_t aModType);
232
  void DidAnimateString(uint8_t aAttrEnum);
233
234
  enum {
235
    /**
236
     * Flag to indicate to GetAnimatedXxx() methods that the object being
237
     * requested should be allocated if it hasn't already been allocated, and
238
     * that the method should not return null. Only applicable to methods that
239
     * need to allocate the object that they return.
240
     */
241
    DO_ALLOCATE = 0x1
242
  };
243
244
  nsSVGLength2* GetAnimatedLength(const nsAtom *aAttrName);
245
  void GetAnimatedLengthValues(float *aFirst, ...);
246
  void GetAnimatedNumberValues(float *aFirst, ...);
247
  void GetAnimatedIntegerValues(int32_t *aFirst, ...);
248
  SVGAnimatedNumberList* GetAnimatedNumberList(uint8_t aAttrEnum);
249
  SVGAnimatedNumberList* GetAnimatedNumberList(nsAtom *aAttrName);
250
  void GetAnimatedLengthListValues(SVGUserUnitList *aFirst, ...);
251
  SVGAnimatedLengthList* GetAnimatedLengthList(uint8_t aAttrEnum);
252
0
  virtual SVGAnimatedPointList* GetAnimatedPointList() {
253
0
    return nullptr;
254
0
  }
255
0
  virtual SVGAnimatedPathSegList* GetAnimPathSegList() {
256
0
    // DOM interface 'SVGAnimatedPathData' (*inherited* by nsSVGPathElement)
257
0
    // has a member called 'animatedPathSegList' member, so we have a shorter
258
0
    // name so we don't get hidden by the GetAnimatedPathSegList declared by
259
0
    // NS_DECL_NSIDOMSVGANIMATEDPATHDATA.
260
0
    return nullptr;
261
0
  }
262
  /**
263
   * Get the nsSVGAnimatedTransformList for this element.
264
   *
265
   * Despite the fact that animated transform lists are used for a variety of
266
   * attributes, no SVG element uses more than one.
267
   *
268
   * It's relatively uncommon for elements to have their transform attribute
269
   * set, so to save memory the nsSVGAnimatedTransformList is not allocated until
270
   * the attribute is set/animated or its DOM wrapper is created. Callers that
271
   * require the nsSVGAnimatedTransformList to be allocated and for this method
272
   * to return non-null must pass the DO_ALLOCATE flag.
273
   */
274
  virtual nsSVGAnimatedTransformList* GetAnimatedTransformList(
275
0
                                                        uint32_t aFlags = 0) {
276
0
    return nullptr;
277
0
  }
278
279
  mozilla::UniquePtr<nsISMILAttr> GetAnimatedAttr(int32_t aNamespaceID,
280
                                                  nsAtom* aName) override;
281
  void AnimationNeedsResample();
282
  void FlushAnimations();
283
284
  virtual void RecompileScriptEventListeners() override;
285
286
  void GetStringBaseValue(uint8_t aAttrEnum, nsAString& aResult) const;
287
  void SetStringBaseValue(uint8_t aAttrEnum, const nsAString& aValue);
288
289
0
  virtual nsAtom* GetPointListAttrName() const {
290
0
    return nullptr;
291
0
  }
292
0
  virtual nsAtom* GetPathDataAttrName() const {
293
0
    return nullptr;
294
0
  }
295
0
  virtual nsAtom* GetTransformListAttrName() const {
296
0
    return nullptr;
297
0
  }
298
  const nsAttrValue* GetAnimatedClassName() const
299
0
  {
300
0
    if (!mClassAttribute.IsAnimated()) {
301
0
      return nullptr;
302
0
    }
303
0
    return mClassAnimAttr;
304
0
  }
305
306
0
  virtual void ClearAnyCachedPath() {}
307
0
  virtual bool IsTransformable() { return false; }
308
309
  // WebIDL
310
  mozilla::dom::SVGSVGElement* GetOwnerSVGElement();
311
  nsSVGElement* GetViewportElement();
312
  already_AddRefed<mozilla::dom::SVGAnimatedString> ClassName();
313
314
  virtual bool IsSVGFocusable(bool* aIsFocusable, int32_t* aTabIndex);
315
  virtual bool IsFocusableInternal(int32_t* aTabIndex, bool aWithMouse) override;
316
317
  void UpdateContentDeclarationBlock();
318
  const mozilla::DeclarationBlock* GetContentDeclarationBlock() const;
319
320
protected:
321
  virtual JSObject* WrapNode(JSContext *cx, JS::Handle<JSObject*> aGivenProto) override;
322
323
  // We define BeforeSetAttr here and mark it final to ensure it is NOT used
324
  // by SVG elements.
325
  // This is because we're not currently passing the correct value for aValue to
326
  // BeforeSetAttr since it would involve allocating extra SVG value types.
327
  // See the comment in nsSVGElement::WillChangeValue.
328
  nsresult BeforeSetAttr(int32_t aNamespaceID, nsAtom* aName,
329
                         const nsAttrValueOrString* aValue,
330
                         bool aNotify) final;
331
  virtual nsresult AfterSetAttr(int32_t aNamespaceID, nsAtom* aName,
332
                                const nsAttrValue* aValue,
333
                                const nsAttrValue* aOldValue,
334
                                nsIPrincipal* aSubjectPrincipal,
335
                                bool aNotify) override;
336
  virtual bool ParseAttribute(int32_t aNamespaceID, nsAtom* aAttribute,
337
                                const nsAString& aValue,
338
                                nsIPrincipal* aMaybeScriptedPrincipal,
339
                                nsAttrValue& aResult) override;
340
  static nsresult ReportAttributeParseFailure(nsIDocument* aDocument,
341
                                              nsAtom* aAttribute,
342
                                              const nsAString& aValue);
343
344
  nsAttrValue WillChangeValue(nsAtom* aName);
345
  // aNewValue is set to the old value. This value may be invalid if
346
  // !StoresOwnData.
347
  void DidChangeValue(nsAtom* aName, const nsAttrValue& aEmptyOrOldValue,
348
                      nsAttrValue& aNewValue);
349
  void MaybeSerializeAttrBeforeRemoval(nsAtom* aName, bool aNotify);
350
351
  static nsAtom* GetEventNameForAttr(nsAtom* aAttr);
352
353
  struct LengthInfo {
354
    nsStaticAtom** mName;
355
    float     mDefaultValue;
356
    uint8_t   mDefaultUnitType;
357
    uint8_t   mCtxType;
358
  };
359
360
  struct LengthAttributesInfo {
361
    nsSVGLength2* mLengths;
362
    LengthInfo*   mLengthInfo;
363
    uint32_t      mLengthCount;
364
365
    LengthAttributesInfo(nsSVGLength2 *aLengths,
366
                         LengthInfo *aLengthInfo,
367
                         uint32_t aLengthCount) :
368
      mLengths(aLengths), mLengthInfo(aLengthInfo), mLengthCount(aLengthCount)
369
0
      {}
370
371
    void Reset(uint8_t aAttrEnum);
372
  };
373
374
  struct NumberInfo {
375
    nsStaticAtom** mName;
376
    float     mDefaultValue;
377
    bool mPercentagesAllowed;
378
  };
379
380
  struct NumberAttributesInfo {
381
    nsSVGNumber2* mNumbers;
382
    NumberInfo*   mNumberInfo;
383
    uint32_t      mNumberCount;
384
385
    NumberAttributesInfo(nsSVGNumber2 *aNumbers,
386
                         NumberInfo *aNumberInfo,
387
                         uint32_t aNumberCount) :
388
      mNumbers(aNumbers), mNumberInfo(aNumberInfo), mNumberCount(aNumberCount)
389
0
      {}
390
391
    void Reset(uint8_t aAttrEnum);
392
  };
393
394
  struct NumberPairInfo {
395
    nsStaticAtom** mName;
396
    float     mDefaultValue1;
397
    float     mDefaultValue2;
398
  };
399
400
  struct NumberPairAttributesInfo {
401
    nsSVGNumberPair* mNumberPairs;
402
    NumberPairInfo*  mNumberPairInfo;
403
    uint32_t         mNumberPairCount;
404
405
    NumberPairAttributesInfo(nsSVGNumberPair *aNumberPairs,
406
                             NumberPairInfo *aNumberPairInfo,
407
                             uint32_t aNumberPairCount) :
408
      mNumberPairs(aNumberPairs), mNumberPairInfo(aNumberPairInfo),
409
      mNumberPairCount(aNumberPairCount)
410
0
      {}
411
412
    void Reset(uint8_t aAttrEnum);
413
  };
414
415
  struct IntegerInfo {
416
    nsStaticAtom** mName;
417
    int32_t   mDefaultValue;
418
  };
419
420
  struct IntegerAttributesInfo {
421
    nsSVGInteger* mIntegers;
422
    IntegerInfo*  mIntegerInfo;
423
    uint32_t      mIntegerCount;
424
425
    IntegerAttributesInfo(nsSVGInteger *aIntegers,
426
                          IntegerInfo *aIntegerInfo,
427
                          uint32_t aIntegerCount) :
428
      mIntegers(aIntegers), mIntegerInfo(aIntegerInfo), mIntegerCount(aIntegerCount)
429
0
      {}
430
431
    void Reset(uint8_t aAttrEnum);
432
  };
433
434
  struct IntegerPairInfo {
435
    nsStaticAtom** mName;
436
    int32_t   mDefaultValue1;
437
    int32_t   mDefaultValue2;
438
  };
439
440
  struct IntegerPairAttributesInfo {
441
    nsSVGIntegerPair* mIntegerPairs;
442
    IntegerPairInfo*  mIntegerPairInfo;
443
    uint32_t          mIntegerPairCount;
444
445
    IntegerPairAttributesInfo(nsSVGIntegerPair *aIntegerPairs,
446
                              IntegerPairInfo *aIntegerPairInfo,
447
                              uint32_t aIntegerPairCount) :
448
      mIntegerPairs(aIntegerPairs), mIntegerPairInfo(aIntegerPairInfo),
449
      mIntegerPairCount(aIntegerPairCount)
450
0
      {}
451
452
    void Reset(uint8_t aAttrEnum);
453
  };
454
455
  struct AngleInfo {
456
    nsStaticAtom** mName;
457
    float     mDefaultValue;
458
    uint8_t   mDefaultUnitType;
459
  };
460
461
  struct AngleAttributesInfo {
462
    nsSVGAngle* mAngles;
463
    AngleInfo*  mAngleInfo;
464
    uint32_t    mAngleCount;
465
466
    AngleAttributesInfo(nsSVGAngle *aAngles,
467
                        AngleInfo *aAngleInfo,
468
                        uint32_t aAngleCount) :
469
      mAngles(aAngles), mAngleInfo(aAngleInfo), mAngleCount(aAngleCount)
470
0
      {}
471
472
    void Reset(uint8_t aAttrEnum);
473
  };
474
475
  struct BooleanInfo {
476
    nsStaticAtom** mName;
477
    bool mDefaultValue;
478
  };
479
480
  struct BooleanAttributesInfo {
481
    nsSVGBoolean* mBooleans;
482
    BooleanInfo*  mBooleanInfo;
483
    uint32_t      mBooleanCount;
484
485
    BooleanAttributesInfo(nsSVGBoolean *aBooleans,
486
                          BooleanInfo *aBooleanInfo,
487
                          uint32_t aBooleanCount) :
488
      mBooleans(aBooleans), mBooleanInfo(aBooleanInfo), mBooleanCount(aBooleanCount)
489
0
      {}
490
491
    void Reset(uint8_t aAttrEnum);
492
  };
493
494
  friend class nsSVGEnum;
495
496
  struct EnumInfo {
497
    nsStaticAtom**    mName;
498
    nsSVGEnumMapping* mMapping;
499
    uint16_t          mDefaultValue;
500
  };
501
502
  struct EnumAttributesInfo {
503
    nsSVGEnum* mEnums;
504
    EnumInfo*  mEnumInfo;
505
    uint32_t   mEnumCount;
506
507
    EnumAttributesInfo(nsSVGEnum *aEnums,
508
                       EnumInfo *aEnumInfo,
509
                       uint32_t aEnumCount) :
510
      mEnums(aEnums), mEnumInfo(aEnumInfo), mEnumCount(aEnumCount)
511
0
      {}
512
513
    void Reset(uint8_t aAttrEnum);
514
    void SetUnknownValue(uint8_t aAttrEnum);
515
  };
516
517
  struct NumberListInfo {
518
    nsStaticAtom** mName;
519
  };
520
521
  struct NumberListAttributesInfo {
522
    SVGAnimatedNumberList* mNumberLists;
523
    NumberListInfo*        mNumberListInfo;
524
    uint32_t               mNumberListCount;
525
526
    NumberListAttributesInfo(SVGAnimatedNumberList *aNumberLists,
527
                             NumberListInfo *aNumberListInfo,
528
                             uint32_t aNumberListCount)
529
      : mNumberLists(aNumberLists)
530
      , mNumberListInfo(aNumberListInfo)
531
      , mNumberListCount(aNumberListCount)
532
0
    {}
533
534
    void Reset(uint8_t aAttrEnum);
535
  };
536
537
  struct LengthListInfo {
538
    nsStaticAtom** mName;
539
    uint8_t   mAxis;
540
    /**
541
     * Flag to indicate whether appending zeros to the end of the list would
542
     * change the rendering of the SVG for the attribute in question. For x and
543
     * y on the <text> element this is true, but for dx and dy on <text> this
544
     * is false. This flag is fed down to SVGLengthListSMILType so it can
545
     * determine if it can sensibly animate from-to lists of different lengths,
546
     * which is desirable in the case of dx and dy.
547
     */
548
    bool mCouldZeroPadList;
549
  };
550
551
  struct LengthListAttributesInfo {
552
    SVGAnimatedLengthList* mLengthLists;
553
    LengthListInfo*        mLengthListInfo;
554
    uint32_t               mLengthListCount;
555
556
    LengthListAttributesInfo(SVGAnimatedLengthList *aLengthLists,
557
                             LengthListInfo *aLengthListInfo,
558
                             uint32_t aLengthListCount)
559
      : mLengthLists(aLengthLists)
560
      , mLengthListInfo(aLengthListInfo)
561
      , mLengthListCount(aLengthListCount)
562
0
    {}
563
564
    void Reset(uint8_t aAttrEnum);
565
  };
566
567
  struct StringInfo {
568
    nsStaticAtom** mName;
569
    int32_t      mNamespaceID;
570
    bool mIsAnimatable;
571
  };
572
573
  struct StringAttributesInfo {
574
    nsSVGString*  mStrings;
575
    StringInfo*   mStringInfo;
576
    uint32_t      mStringCount;
577
578
    StringAttributesInfo(nsSVGString *aStrings,
579
                         StringInfo *aStringInfo,
580
                         uint32_t aStringCount) :
581
      mStrings(aStrings), mStringInfo(aStringInfo), mStringCount(aStringCount)
582
0
      {}
583
584
    void Reset(uint8_t aAttrEnum);
585
  };
586
587
  friend class mozilla::DOMSVGStringList;
588
589
  struct StringListInfo {
590
    nsStaticAtom** mName;
591
  };
592
593
  struct StringListAttributesInfo {
594
    SVGStringList*    mStringLists;
595
    StringListInfo*   mStringListInfo;
596
    uint32_t          mStringListCount;
597
598
    StringListAttributesInfo(SVGStringList  *aStringLists,
599
                             StringListInfo *aStringListInfo,
600
                             uint32_t aStringListCount) :
601
      mStringLists(aStringLists), mStringListInfo(aStringListInfo),
602
      mStringListCount(aStringListCount)
603
0
      {}
604
605
    void Reset(uint8_t aAttrEnum);
606
  };
607
608
  virtual LengthAttributesInfo GetLengthInfo();
609
  virtual NumberAttributesInfo GetNumberInfo();
610
  virtual NumberPairAttributesInfo GetNumberPairInfo();
611
  virtual IntegerAttributesInfo GetIntegerInfo();
612
  virtual IntegerPairAttributesInfo GetIntegerPairInfo();
613
  virtual AngleAttributesInfo GetAngleInfo();
614
  virtual BooleanAttributesInfo GetBooleanInfo();
615
  virtual EnumAttributesInfo GetEnumInfo();
616
  // We assume all viewboxes and preserveAspectRatios are alike
617
  // so we don't need to wrap the class
618
  virtual nsSVGViewBox *GetViewBox();
619
  virtual SVGAnimatedPreserveAspectRatio *GetPreserveAspectRatio();
620
  virtual NumberListAttributesInfo GetNumberListInfo();
621
  virtual LengthListAttributesInfo GetLengthListInfo();
622
  virtual StringAttributesInfo GetStringInfo();
623
  virtual StringListAttributesInfo GetStringListInfo();
624
625
  static nsSVGEnumMapping sSVGUnitTypesMap[];
626
627
private:
628
  void UnsetAttrInternal(int32_t aNameSpaceID, nsAtom* aAttribute,
629
                         bool aNotify);
630
631
  nsSVGClass mClassAttribute;
632
  nsAutoPtr<nsAttrValue> mClassAnimAttr;
633
  RefPtr<mozilla::DeclarationBlock> mContentDeclarationBlock;
634
};
635
636
/**
637
 * A macro to implement the NS_NewSVGXXXElement() functions.
638
 */
639
#define NS_IMPL_NS_NEW_SVG_ELEMENT(_elementName)                             \
640
nsresult                                                                     \
641
NS_NewSVG##_elementName##Element(nsIContent **aResult,                       \
642
                                 already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo)  \
643
{                                                                            \
644
  RefPtr<nsSVG##_elementName##Element> it =                                  \
645
    new nsSVG##_elementName##Element(std::move(aNodeInfo));                  \
646
                                                                             \
647
  nsresult rv = it->Init();                                                  \
648
                                                                             \
649
  if (NS_FAILED(rv)) {                                                       \
650
    return rv;                                                               \
651
  }                                                                          \
652
                                                                             \
653
  it.forget(aResult);                                                        \
654
                                                                             \
655
  return rv;                                                                 \
656
}
657
658
#define NS_IMPL_NS_NEW_NAMESPACED_SVG_ELEMENT(_elementName)                  \
659
nsresult                                                                     \
660
NS_NewSVG##_elementName##Element(nsIContent **aResult,                       \
661
0
                                 already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo)  \
662
0
{                                                                            \
663
0
  RefPtr<mozilla::dom::SVG##_elementName##Element> it =                      \
664
0
    new mozilla::dom::SVG##_elementName##Element(std::move(aNodeInfo));      \
665
0
                                                                             \
666
0
  nsresult rv = it->Init();                                                  \
667
0
                                                                             \
668
0
  if (NS_FAILED(rv)) {                                                       \
669
0
    return rv;                                                               \
670
0
  }                                                                          \
671
0
                                                                             \
672
0
  it.forget(aResult);                                                        \
673
0
                                                                             \
674
0
  return rv;                                                                 \
675
0
}
Unexecuted instantiation: NS_NewSVGAElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGAnimateElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGAnimateMotionElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGAnimateTransformElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGCircleElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGClipPathElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGDefsElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGDescElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGEllipseElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEBlendElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEColorMatrixElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEComponentTransferElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFECompositeElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEConvolveMatrixElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEDiffuseLightingElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEDisplacementMapElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEDistantLightElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEDropShadowElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEFloodElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEGaussianBlurElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEImageElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEMergeElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEMergeNodeElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEMorphologyElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEOffsetElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEPointLightElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFESpecularLightingElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFESpotLightElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFETileElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFETurbulenceElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFilterElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGForeignObjectElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGGElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGLinearGradientElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGRadialGradientElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGImageElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGLineElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGMPathElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGMarkerElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGMaskElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGMetadataElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGPathElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGPatternElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGPolygonElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGPolylineElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGRectElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGSetElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGStopElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGStyleElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGSwitchElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGSymbolElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGTSpanElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGTextElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGTextPathElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGTitleElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGUseElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGViewElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEFuncRElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEFuncGElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEFuncBElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
Unexecuted instantiation: NS_NewSVGFEFuncAElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&)
676
677
#define NS_IMPL_NS_NEW_NAMESPACED_SVG_ELEMENT_CHECK_PARSER(_elementName)     \
678
nsresult                                                                     \
679
NS_NewSVG##_elementName##Element(nsIContent **aResult,                       \
680
                                 already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo,  \
681
0
                                 mozilla::dom::FromParser aFromParser)       \
682
0
{                                                                            \
683
0
  RefPtr<mozilla::dom::SVG##_elementName##Element> it =                      \
684
0
    new mozilla::dom::SVG##_elementName##Element(std::move(aNodeInfo),       \
685
0
                                                 aFromParser);               \
686
0
                                                                             \
687
0
  nsresult rv = it->Init();                                                  \
688
0
                                                                             \
689
0
  if (NS_FAILED(rv)) {                                                       \
690
0
    return rv;                                                               \
691
0
  }                                                                          \
692
0
                                                                             \
693
0
  it.forget(aResult);                                                        \
694
0
                                                                             \
695
0
  return rv;                                                                 \
696
0
}
Unexecuted instantiation: NS_NewSVGSVGElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&, mozilla::dom::FromParser)
Unexecuted instantiation: NS_NewSVGScriptElement(nsIContent**, already_AddRefed<mozilla::dom::NodeInfo>&&, mozilla::dom::FromParser)
697
698
// No unlinking, we'd need to null out the value pointer (the object it
699
// points to is held by the element) and null-check it everywhere.
700
#define NS_SVG_VAL_IMPL_CYCLE_COLLECTION(_val, _element)                     \
701
NS_IMPL_CYCLE_COLLECTION_CLASS(_val)                                         \
702
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_val)                                \
703
  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_element) \
704
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END                                        \
705
NS_IMPL_CYCLE_COLLECTION_UNLINK_0(_val)
706
707
#define NS_SVG_VAL_IMPL_CYCLE_COLLECTION_WRAPPERCACHED(_val, _element)       \
708
0
NS_IMPL_CYCLE_COLLECTION_CLASS(_val)                                         \
709
0
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_val)                                  \
710
0
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER                            \
711
0
NS_IMPL_CYCLE_COLLECTION_UNLINK_END                                          \
Unexecuted instantiation: mozilla::DOMSVGAnimatedLengthList::cycleCollection::Unlink(void*)
Unexecuted instantiation: mozilla::DOMSVGAnimatedNumberList::cycleCollection::Unlink(void*)
Unexecuted instantiation: mozilla::DOMSVGStringList::cycleCollection::Unlink(void*)
Unexecuted instantiation: mozilla::dom::SVGAngle::cycleCollection::Unlink(void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedAngle::cycleCollection::Unlink(void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedBoolean::cycleCollection::Unlink(void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedEnumeration::cycleCollection::Unlink(void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedInteger::cycleCollection::Unlink(void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedLength::cycleCollection::Unlink(void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedNumber::cycleCollection::Unlink(void*)
Unexecuted instantiation: mozilla::dom::DOMSVGAnimatedPreserveAspectRatio::cycleCollection::Unlink(void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedRect::cycleCollection::Unlink(void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedTransformList::cycleCollection::Unlink(void*)
Unexecuted instantiation: mozilla::dom::DOMSVGPreserveAspectRatio::cycleCollection::Unlink(void*)
Unexecuted instantiation: DOMAnimatedString::cycleCollection::Unlink(void*)
Unexecuted instantiation: nsSVGString::DOMAnimatedString::cycleCollection::Unlink(void*)
Unexecuted instantiation: nsSVGViewBox::DOMBaseVal::cycleCollection::Unlink(void*)
Unexecuted instantiation: nsSVGViewBox::DOMAnimVal::cycleCollection::Unlink(void*)
712
0
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_val)                                \
713
0
  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(_element)                                \
714
0
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END                                        \
Unexecuted instantiation: mozilla::DOMSVGAnimatedLengthList::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: mozilla::DOMSVGAnimatedNumberList::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: mozilla::DOMSVGStringList::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: mozilla::dom::SVGAngle::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: mozilla::dom::SVGAnimatedAngle::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: mozilla::dom::SVGAnimatedBoolean::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: mozilla::dom::SVGAnimatedEnumeration::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: mozilla::dom::SVGAnimatedInteger::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: mozilla::dom::SVGAnimatedLength::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: mozilla::dom::SVGAnimatedNumber::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: mozilla::dom::DOMSVGAnimatedPreserveAspectRatio::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: mozilla::dom::SVGAnimatedRect::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: mozilla::dom::SVGAnimatedTransformList::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: mozilla::dom::DOMSVGPreserveAspectRatio::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: DOMAnimatedString::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: nsSVGString::DOMAnimatedString::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: nsSVGViewBox::DOMBaseVal::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
Unexecuted instantiation: nsSVGViewBox::DOMAnimVal::cycleCollection::TraverseNative(void*, nsCycleCollectionTraversalCallback&)
715
0
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(_val)                                   \
716
0
NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER                             \
717
0
NS_IMPL_CYCLE_COLLECTION_TRACE_END
Unexecuted instantiation: mozilla::DOMSVGAnimatedLengthList::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: mozilla::DOMSVGAnimatedNumberList::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: mozilla::DOMSVGStringList::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: mozilla::dom::SVGAngle::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedAngle::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedBoolean::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedEnumeration::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedInteger::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedLength::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedNumber::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: mozilla::dom::DOMSVGAnimatedPreserveAspectRatio::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedRect::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: mozilla::dom::SVGAnimatedTransformList::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: mozilla::dom::DOMSVGPreserveAspectRatio::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: DOMAnimatedString::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: nsSVGString::DOMAnimatedString::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: nsSVGViewBox::DOMBaseVal::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
Unexecuted instantiation: nsSVGViewBox::DOMAnimVal::cycleCollection::Trace(void*, TraceCallbacks const&, void*)
718
719
#endif // __NS_SVGELEMENT_H__