<https://webkit.org/b/121087>
Reviewed by Antti Koivisto.
reinterpret_cast is not safe for downcasting with multiple inheritance.
Add a ELEMENT_TYPE_CASTS(classname) macro that goes after class definitions.
It expands into the following methods:
- FooElement* toFooElement(Node*)
- const FooElement* toFooElement(const Node*)
- FooElement& toFooElement(Node&)
- const FooElement& toFooElement(const Node&)
As a bonus, it also adds these to catch unnecessary casting:
- void toFooElement(const Node*)
- void toFooElement(const Node&)
There might be a more clever way of doing this, but this gets us to a
correct place so we can think in peace.
* bridge/qt/qt_pixmapruntime.cpp:
(JSC::Bindings::assignToHTMLImageElement):
(JSC::Bindings::QtPixmapRuntime::toQt):
* dom/Element.h:
(WebCore::isElement):
* dom/make_names.pl:
(printTypeHelpers):
* html/HTMLAnchorElement.h:
* html/HTMLAreaElement.h:
* html/HTMLAudioElement.h:
* html/HTMLBaseElement.h:
* html/HTMLCanvasElement.h:
* html/HTMLElement.h:
(WebCore::isHTMLElement):
* html/HTMLFieldSetElement.h:
* html/HTMLFormElement.h:
* html/HTMLFrameSetElement.h:
* html/HTMLImageElement.h:
* html/HTMLInputElement.h:
* html/HTMLLabelElement.h:
* html/HTMLLegendElement.h:
* html/HTMLMapElement.h:
* html/HTMLMeterElement.h:
* html/HTMLOptGroupElement.h:
* html/HTMLOptionElement.h:
* html/HTMLParamElement.h:
* html/HTMLProgressElement.h:
* html/HTMLScriptElement.h:
* html/HTMLSourceElement.h:
* html/HTMLStyleElement.h:
* html/HTMLTableElement.h:
* html/HTMLTableRowElement.h:
* html/HTMLTextAreaElement.h:
* html/HTMLTitleElement.h:
* html/HTMLTrackElement.h:
* svg/SVGAltGlyphDefElement.h:
* svg/SVGAltGlyphElement.h:
* svg/SVGAltGlyphItemElement.h:
* svg/SVGAnimateMotionElement.h:
* svg/SVGAnimateTransformElement.h:
* svg/SVGCircleElement.h:
* svg/SVGClipPathElement.h:
* svg/SVGCursorElement.h:
* svg/SVGEllipseElement.h:
* svg/SVGFEDistantLightElement.h:
* svg/SVGFEFuncAElement.h:
* svg/SVGFEFuncBElement.h:
* svg/SVGFEFuncGElement.h:
* svg/SVGFEFuncRElement.h:
* svg/SVGFEMergeNodeElement.h:
* svg/SVGFEPointLightElement.h:
* svg/SVGFESpotLightElement.h:
* svg/SVGFilterElement.h:
* svg/SVGFontElement.h:
* svg/SVGFontFaceElement.h:
* svg/SVGFontFaceNameElement.h:
* svg/SVGFontFaceSrcElement.h:
* svg/SVGFontFaceUriElement.h:
* svg/SVGForeignObjectElement.h:
* svg/SVGGlyphElement.h:
* svg/SVGGlyphRefElement.h:
* svg/SVGHKernElement.h:
* svg/SVGImageElement.h:
* svg/SVGLineElement.h:
* svg/SVGLinearGradientElement.h:
* svg/SVGMPathElement.h:
* svg/SVGMarkerElement.h:
* svg/SVGMaskElement.h:
* svg/SVGMissingGlyphElement.h:
* svg/SVGPathElement.h:
* svg/SVGPatternElement.h:
* svg/SVGRadialGradientElement.h:
* svg/SVGRectElement.h:
* svg/SVGSVGElement.h:
* svg/SVGScriptElement.h:
* svg/SVGStyleElement.h:
* svg/SVGTextElement.h:
* svg/SVGTextPathElement.h:
* svg/SVGTitleElement.h:
* svg/SVGUseElement.h:
* svg/SVGVKernElement.h:
* svg/SVGViewElement.h:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@155429
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2013-09-10 Andreas Kling <akling@apple.com>
+
+ toFooElement() should use static_cast, not reinterpret_cast.
+ <https://webkit.org/b/121087>
+
+ Reviewed by Antti Koivisto.
+
+ reinterpret_cast is not safe for downcasting with multiple inheritance.
+ Add a ELEMENT_TYPE_CASTS(classname) macro that goes after class definitions.
+ It expands into the following methods:
+
+ - FooElement* toFooElement(Node*)
+ - const FooElement* toFooElement(const Node*)
+ - FooElement& toFooElement(Node&)
+ - const FooElement& toFooElement(const Node&)
+
+ As a bonus, it also adds these to catch unnecessary casting:
+
+ - void toFooElement(const Node*)
+ - void toFooElement(const Node&)
+
+ There might be a more clever way of doing this, but this gets us to a
+ correct place so we can think in peace.
+
+ * bridge/qt/qt_pixmapruntime.cpp:
+ (JSC::Bindings::assignToHTMLImageElement):
+ (JSC::Bindings::QtPixmapRuntime::toQt):
+ * dom/Element.h:
+ (WebCore::isElement):
+ * dom/make_names.pl:
+ (printTypeHelpers):
+ * html/HTMLAnchorElement.h:
+ * html/HTMLAreaElement.h:
+ * html/HTMLAudioElement.h:
+ * html/HTMLBaseElement.h:
+ * html/HTMLCanvasElement.h:
+ * html/HTMLElement.h:
+ (WebCore::isHTMLElement):
+ * html/HTMLFieldSetElement.h:
+ * html/HTMLFormElement.h:
+ * html/HTMLFrameSetElement.h:
+ * html/HTMLImageElement.h:
+ * html/HTMLInputElement.h:
+ * html/HTMLLabelElement.h:
+ * html/HTMLLegendElement.h:
+ * html/HTMLMapElement.h:
+ * html/HTMLMeterElement.h:
+ * html/HTMLOptGroupElement.h:
+ * html/HTMLOptionElement.h:
+ * html/HTMLParamElement.h:
+ * html/HTMLProgressElement.h:
+ * html/HTMLScriptElement.h:
+ * html/HTMLSourceElement.h:
+ * html/HTMLStyleElement.h:
+ * html/HTMLTableElement.h:
+ * html/HTMLTableRowElement.h:
+ * html/HTMLTextAreaElement.h:
+ * html/HTMLTitleElement.h:
+ * html/HTMLTrackElement.h:
+ * svg/SVGAltGlyphDefElement.h:
+ * svg/SVGAltGlyphElement.h:
+ * svg/SVGAltGlyphItemElement.h:
+ * svg/SVGAnimateMotionElement.h:
+ * svg/SVGAnimateTransformElement.h:
+ * svg/SVGCircleElement.h:
+ * svg/SVGClipPathElement.h:
+ * svg/SVGCursorElement.h:
+ * svg/SVGEllipseElement.h:
+ * svg/SVGFEDistantLightElement.h:
+ * svg/SVGFEFuncAElement.h:
+ * svg/SVGFEFuncBElement.h:
+ * svg/SVGFEFuncGElement.h:
+ * svg/SVGFEFuncRElement.h:
+ * svg/SVGFEMergeNodeElement.h:
+ * svg/SVGFEPointLightElement.h:
+ * svg/SVGFESpotLightElement.h:
+ * svg/SVGFilterElement.h:
+ * svg/SVGFontElement.h:
+ * svg/SVGFontFaceElement.h:
+ * svg/SVGFontFaceNameElement.h:
+ * svg/SVGFontFaceSrcElement.h:
+ * svg/SVGFontFaceUriElement.h:
+ * svg/SVGForeignObjectElement.h:
+ * svg/SVGGlyphElement.h:
+ * svg/SVGGlyphRefElement.h:
+ * svg/SVGHKernElement.h:
+ * svg/SVGImageElement.h:
+ * svg/SVGLineElement.h:
+ * svg/SVGLinearGradientElement.h:
+ * svg/SVGMPathElement.h:
+ * svg/SVGMarkerElement.h:
+ * svg/SVGMaskElement.h:
+ * svg/SVGMissingGlyphElement.h:
+ * svg/SVGPathElement.h:
+ * svg/SVGPatternElement.h:
+ * svg/SVGRadialGradientElement.h:
+ * svg/SVGRectElement.h:
+ * svg/SVGSVGElement.h:
+ * svg/SVGScriptElement.h:
+ * svg/SVGStyleElement.h:
+ * svg/SVGTextElement.h:
+ * svg/SVGTextPathElement.h:
+ * svg/SVGTitleElement.h:
+ * svg/SVGUseElement.h:
+ * svg/SVGVKernElement.h:
+ * svg/SVGViewElement.h:
+
2013-09-10 Mario Sanchez Prada <mario.prada@samsung.com>
[GTK] Test /webkit/atk/getTextInParagraphAndBodyModerate fails
// We now know that we have a valid <img> element as the argument, we can attach the pixmap to it.
RefPtr<StillImage> stillImage = WebCore::StillImage::create(toPixmap(data));
- HTMLImageElement* imageElement = toHTMLImageElement(static_cast<JSHTMLImageElement*>(jsObject)->impl());
+ HTMLImageElement* imageElement = static_cast<JSHTMLImageElement*>(jsObject)->impl();
imageElement->setCachedImage(new CachedImage(stillImage.get()));
return JSValueMakeUndefined(context);
}
return emptyVariantForHint(hint);
JSHTMLImageElement* elementJSWrapper = static_cast<JSHTMLImageElement*>(jsObject);
- HTMLImageElement* imageElement = toHTMLImageElement(elementJSWrapper->impl());
+ HTMLImageElement* imageElement = elementJSWrapper->impl();
if (!imageElement)
return emptyVariantForHint(hint);
RefPtr<ElementData> m_elementData;
};
-inline Element* toElement(Node* node)
-{
- ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isElementNode());
- return static_cast<Element*>(node);
-}
-
-inline const Element* toElement(const Node* node)
-{
- ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isElementNode());
- return static_cast<const Element*>(node);
-}
-
-// This will catch anyone doing an unnecessary cast.
-void toElement(const Element*);
+inline bool isElement(const Node& node) { return node.isElementNode(); }
+
+
+#define ELEMENT_TYPE_CASTS(ElementClassName) \
+inline const ElementClassName* to##ElementClassName(const Node* node) \
+{ \
+ ASSERT_WITH_SECURITY_IMPLICATION(!node || is##ElementClassName(*node)); \
+ return static_cast<const ElementClassName*>(node); \
+} \
+inline ElementClassName* to##ElementClassName(Node* node) \
+{ \
+ ASSERT_WITH_SECURITY_IMPLICATION(!node || is##ElementClassName(*node)); \
+ return static_cast<ElementClassName*>(node); \
+} \
+inline const ElementClassName& to##ElementClassName(const Node& node) \
+{ \
+ ASSERT_WITH_SECURITY_IMPLICATION(is##ElementClassName(node)); \
+ return static_cast<const ElementClassName&>(node); \
+} \
+inline ElementClassName& to##ElementClassName(Node& node) \
+{ \
+ ASSERT_WITH_SECURITY_IMPLICATION(is##ElementClassName(node)); \
+ return static_cast<ElementClassName&>(node); \
+} \
+void to##ElementClassName(const ElementClassName*); \
+void to##ElementClassName(const ElementClassName&);
+
+ELEMENT_TYPE_CASTS(Element)
template <typename Type> bool isElementOfType(const Element*);
template <typename Type> bool isElementOfType(const Node* node) { return node->isElementNode() && isElementOfType<Type>(toElement(node)); }
my $class = $parsedTags{$name}{interfaceName};
my $checkHelper = "is$class";
- my $castingHelper = "to$class";
print F "class $class;\n";
print F "inline bool $checkHelper(const Element& element) { return element.hasTagName(".$parameters{namespace}."Names::".$name."Tag); }\n";
print F "inline bool $checkHelper(const Element* element) { ASSERT(element); return $checkHelper(*element); }\n";
print F "inline bool $checkHelper(const Node* node) { ASSERT(node); return node->isElementNode() && $checkHelper(toElement(node)); }\n";
+ print F "inline bool $checkHelper(const Node& node) { return node.isElementNode() && $checkHelper(toElement(node)); }\n";
print F "template <> inline bool isElementOfType<$class>(const Element* element) { return $checkHelper(element); }\n";
- print F "inline $class* $castingHelper(Node* node) { ASSERT_WITH_SECURITY_IMPLICATION(!node || $checkHelper(node)); return reinterpret_cast<".$class."*>(node); }\n";
- print F "inline $class* $castingHelper(Element* element) { ASSERT_WITH_SECURITY_IMPLICATION(!element || $checkHelper(element)); return reinterpret_cast<".$class."*>(element); }\n";
- print F "inline const $class* $castingHelper(const Node* node) { ASSERT_WITH_SECURITY_IMPLICATION(!node || $checkHelper(node)); return reinterpret_cast<const ".$class."*>(node); }\n";
- print F "inline const $class* $castingHelper(const Element* element) { ASSERT_WITH_SECURITY_IMPLICATION(!element || $checkHelper(element)); return reinterpret_cast<const ".$class."*>(element); }\n";
print F "\n";
}
bool isLinkClick(Event*);
bool shouldProhibitLinks(Element*);
+ELEMENT_TYPE_CASTS(HTMLAnchorElement)
+
} // namespace WebCore
#endif // HTMLAnchorElement_h
Shape m_shape;
};
+ELEMENT_TYPE_CASTS(HTMLAreaElement)
+
} //namespace
#endif
HTMLAudioElement(const QualifiedName&, Document*, bool);
};
+ELEMENT_TYPE_CASTS(HTMLAudioElement)
+
} //namespace
#endif
virtual void removedFrom(ContainerNode*) OVERRIDE;
};
+ELEMENT_TYPE_CASTS(HTMLBaseElement)
+
} // namespace
#endif
mutable RefPtr<Image> m_copiedImage; // FIXME: This is temporary for platforms that have to copy the image buffer to render (and for CSSCanvasValue).
};
-// This will catch anyone doing an unnecessary cast.
-void toHTMLCanvasElement(const HTMLCanvasElement*);
+ELEMENT_TYPE_CASTS(HTMLCanvasElement)
} //namespace
AtomicString eventNameForAttributeName(const QualifiedName& attrName) const;
};
-inline HTMLElement* toHTMLElement(Node* node)
-{
- ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isHTMLElement());
- return static_cast<HTMLElement*>(node);
-}
-
-inline const HTMLElement* toHTMLElement(const Node* node)
-{
- ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isHTMLElement());
- return static_cast<const HTMLElement*>(node);
-}
-
-// This will catch anyone doing an unnecessary cast.
-void toHTMLElement(const HTMLElement*);
-
inline HTMLElement::HTMLElement(const QualifiedName& tagName, Document* document, ConstructionType type = CreateHTMLElement)
: StyledElement(tagName, document, type)
{
ASSERT(tagName.localName().impl());
}
+inline bool isHTMLElement(const Node& node) { return node.isHTMLElement(); }
template <> inline bool isElementOfType<HTMLElement>(const Element* element) { return element->isHTMLElement(); }
+ELEMENT_TYPE_CASTS(HTMLElement)
+
} // namespace WebCore
#endif // HTMLElement_h
mutable uint64_t m_documentVersion;
};
+ELEMENT_TYPE_CASTS(HTMLFieldSetElement)
+
} // namespace
#endif
bool m_wasDemoted;
};
+ELEMENT_TYPE_CASTS(HTMLFormElement)
+
} // namespace WebCore
#endif // HTMLFormElement_h
bool m_noresize;
};
+ELEMENT_TYPE_CASTS(HTMLFrameSetElement)
+
} // namespace WebCore
#endif // HTMLFrameSetElement_h
AtomicString m_bestFitImageURL;
};
+ELEMENT_TYPE_CASTS(HTMLImageElement)
+
} //namespace
#endif
#endif
};
+ELEMENT_TYPE_CASTS(HTMLInputElement)
+
} //namespace
#endif
virtual void focus(bool restorePreviousSelection, FocusDirection) OVERRIDE;
};
+ELEMENT_TYPE_CASTS(HTMLLabelElement)
+
} //namespace
#endif
virtual HTMLFormElement* virtualForm() const OVERRIDE;
};
+ELEMENT_TYPE_CASTS(HTMLLegendElement)
+
} //namespace
#endif
AtomicString m_name;
};
+ELEMENT_TYPE_CASTS(HTMLMapElement)
+
} // namespaces
#endif
RefPtr<MeterValueElement> m_value;
};
+ELEMENT_TYPE_CASTS(HTMLMeterElement)
+
} // namespace
#endif
RefPtr<RenderStyle> m_style;
};
+ELEMENT_TYPE_CASTS(HTMLOptGroupElement)
+
} //namespace
#endif
RefPtr<RenderStyle> m_style;
};
+ELEMENT_TYPE_CASTS(HTMLOptionElement)
+
} // namespace
#endif
virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const;
};
+ELEMENT_TYPE_CASTS(HTMLParamElement)
+
} // namespace WebCore
#endif
ProgressValueElement* m_value;
};
+ELEMENT_TYPE_CASTS(HTMLProgressElement)
+
} // namespace
#endif
virtual PassRefPtr<Element> cloneElementWithoutAttributesAndChildren();
};
+ELEMENT_TYPE_CASTS(HTMLScriptElement)
+
} //namespace
#endif
Timer<HTMLSourceElement> m_errorEventTimer;
};
+ELEMENT_TYPE_CASTS(HTMLSourceElement)
+
} //namespace
#endif
ScopedStyleRegistrationState m_scopedStyleRegistrationState;
};
+ELEMENT_TYPE_CASTS(HTMLStyleElement)
+
} //namespace
#endif
RefPtr<StylePropertySet> m_sharedCellStyle;
};
+ELEMENT_TYPE_CASTS(HTMLTableElement)
+
} //namespace
#endif
HTMLTableRowElement(const QualifiedName&, Document*);
};
+ELEMENT_TYPE_CASTS(HTMLTableRowElement)
+
} // namespace
#endif
mutable bool m_wasModifiedByUser;
};
+ELEMENT_TYPE_CASTS(HTMLTextAreaElement)
+
} //namespace
#endif
StringWithDirection m_title;
};
+ELEMENT_TYPE_CASTS(HTMLTitleElement)
+
} //namespace
#endif
Timer<HTMLTrackElement> m_loadTimer;
};
+ELEMENT_TYPE_CASTS(HTMLTrackElement)
+
}
#endif
virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE { return false; }
};
+ELEMENT_TYPE_CASTS(SVGAltGlyphDefElement)
+
}
#endif
END_DECLARE_ANIMATED_PROPERTIES
};
+ELEMENT_TYPE_CASTS(SVGAltGlyphElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE { return false; }
};
+ELEMENT_TYPE_CASTS(SVGAltGlyphItemElement)
+
}
#endif
Path m_path;
Path m_animationPath;
};
+
+ELEMENT_TYPE_CASTS(SVGAnimateMotionElement)
} // namespace WebCore
SVGTransform::SVGTransformType m_type;
};
+ELEMENT_TYPE_CASTS(SVGAnimateTransformElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
END_DECLARE_ANIMATED_PROPERTIES
};
+ELEMENT_TYPE_CASTS(SVGCircleElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
END_DECLARE_ANIMATED_PROPERTIES
};
+ELEMENT_TYPE_CASTS(SVGClipPathElement)
+
}
#endif
HashSet<SVGElement*> m_clients;
};
+ELEMENT_TYPE_CASTS(SVGCursorElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
END_DECLARE_ANIMATED_PROPERTIES
};
+ELEMENT_TYPE_CASTS(SVGEllipseElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
virtual PassRefPtr<LightSource> lightSource() const;
};
+ELEMENT_TYPE_CASTS(SVGFEDistantLightElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
SVGFEFuncAElement(const QualifiedName&, Document*);
};
+ELEMENT_TYPE_CASTS(SVGFEFuncAElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
SVGFEFuncBElement(const QualifiedName&, Document*);
};
+ELEMENT_TYPE_CASTS(SVGFEFuncBElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
SVGFEFuncGElement(const QualifiedName&, Document*);
};
+ELEMENT_TYPE_CASTS(SVGFEFuncGElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
SVGFEFuncRElement(const QualifiedName&, Document*);
};
+ELEMENT_TYPE_CASTS(SVGFEFuncRElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
END_DECLARE_ANIMATED_PROPERTIES
};
+ELEMENT_TYPE_CASTS(SVGFEMergeNodeElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
virtual PassRefPtr<LightSource> lightSource() const;
};
+ELEMENT_TYPE_CASTS(SVGFEPointLightElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
virtual PassRefPtr<LightSource> lightSource() const;
};
+ELEMENT_TYPE_CASTS(SVGFESpotLightElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
END_DECLARE_ANIMATED_PROPERTIES
};
+ELEMENT_TYPE_CASTS(SVGFilterElement)
+
}
#endif
bool m_isGlyphCacheValid;
};
+ELEMENT_TYPE_CASTS(SVGFontElement)
+
} // namespace WebCore
#endif // ENABLE(SVG_FONTS)
SVGFontElement* m_fontElement;
};
+ELEMENT_TYPE_CASTS(SVGFontFaceElement)
+
} // namespace WebCore
#endif // ENABLE(SVG_FONTS)
virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE { return false; }
};
+ELEMENT_TYPE_CASTS(SVGFontFaceNameElement)
+
} // namespace WebCore
#endif // ENABLE(SVG_FONTS)
virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE { return false; }
};
+ELEMENT_TYPE_CASTS(SVGFontFaceSrcElement)
+
} // namespace WebCore
#endif // ENABLE(SVG_FONTS)
CachedResourceHandle<CachedFont> m_cachedFont;
};
+ELEMENT_TYPE_CASTS(SVGFontFaceUriElement)
+
} // namespace WebCore
#endif // ENABLE(SVG_FONTS)
END_DECLARE_ANIMATED_PROPERTIES
};
+ELEMENT_TYPE_CASTS(SVGForeignObjectElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
void invalidateGlyphCache();
};
+ELEMENT_TYPE_CASTS(SVGGlyphElement)
+
} // namespace WebCore
#endif // ENABLE(SVG_FONTS)
float m_dy;
};
+ELEMENT_TYPE_CASTS(SVGGlyphRefElement)
+
}
#endif
virtual bool rendererIsNeeded(const RenderStyle&) { return false; }
};
+ELEMENT_TYPE_CASTS(SVGHKernElement)
+
} // namespace WebCore
#endif // ENABLE(SVG_FONTS)
SVGImageLoader m_imageLoader;
};
+ELEMENT_TYPE_CASTS(SVGImageElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
END_DECLARE_ANIMATED_PROPERTIES
};
+ELEMENT_TYPE_CASTS(SVGLineElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
END_DECLARE_ANIMATED_PROPERTIES
};
+ELEMENT_TYPE_CASTS(SVGLinearGradientElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
END_DECLARE_ANIMATED_PROPERTIES
};
+ELEMENT_TYPE_CASTS(SVGMPathElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
mutable SVGSynchronizableAnimatedProperty<SVGMarkerOrientType> m_orientType;
};
+ELEMENT_TYPE_CASTS(SVGMarkerElement)
+
}
#endif
virtual void synchronizeSystemLanguage() { SVGTests::synchronizeSystemLanguage(this); }
};
+ELEMENT_TYPE_CASTS(SVGMaskElement)
+
}
#endif
virtual bool rendererIsNeeded(const RenderStyle&) { return false; }
};
+ELEMENT_TYPE_CASTS(SVGMissingGlyphElement)
+
} // namespace WebCore
#endif // ENABLE(SVG_FONTS)
bool m_isAnimValObserved;
};
+ELEMENT_TYPE_CASTS(SVGPathElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
virtual void synchronizeSystemLanguage() { SVGTests::synchronizeSystemLanguage(this); }
};
+ELEMENT_TYPE_CASTS(SVGPatternElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
END_DECLARE_ANIMATED_PROPERTIES
};
+ELEMENT_TYPE_CASTS(SVGRadialGradientElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
END_DECLARE_ANIMATED_PROPERTIES
};
+ELEMENT_TYPE_CASTS(SVGRectElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
RefPtr<SVGViewSpec> m_viewSpec;
};
+ELEMENT_TYPE_CASTS(SVGSVGElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
Timer<SVGElement> m_svgLoadEventTimer;
};
+ELEMENT_TYPE_CASTS(SVGScriptElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
Timer<SVGElement> m_svgLoadEventTimer;
};
+ELEMENT_TYPE_CASTS(SVGStyleElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
virtual bool childShouldCreateRenderer(const Node*) const;
};
+ELEMENT_TYPE_CASTS(SVGTextElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
END_DECLARE_ANIMATED_PROPERTIES
};
+ELEMENT_TYPE_CASTS(SVGTextPathElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
virtual bool rendererIsNeeded(const RenderStyle&) { return false; }
};
+ELEMENT_TYPE_CASTS(SVGTitleElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)
Timer<SVGElement> m_svgLoadEventTimer;
};
+ELEMENT_TYPE_CASTS(SVGUseElement)
+
}
#endif
virtual bool rendererIsNeeded(const RenderStyle&) { return false; }
};
+ELEMENT_TYPE_CASTS(SVGVKernElement)
+
} // namespace WebCore
#endif // ENABLE(SVG_FONTS)
SVGStringList m_viewTarget;
};
+ELEMENT_TYPE_CASTS(SVGViewElement)
+
} // namespace WebCore
#endif // ENABLE(SVG)