| OLD | NEW |
| 1 {% from "macros.tmpl" import license -%} | 1 {% from "macros.tmpl" import license -%} |
| 2 {{ license() }} | 2 {{ license() }} |
| 3 | 3 |
| 4 #ifndef {{namespace}}ElementTypeHelpers_h | 4 #ifndef {{namespace}}ElementTypeHelpers_h |
| 5 #define {{namespace}}ElementTypeHelpers_h | 5 #define {{namespace}}ElementTypeHelpers_h |
| 6 | 6 |
| 7 #include "core/dom/ContextFeatures.h" | 7 #include "core/dom/ContextFeatures.h" |
| 8 #include "core/dom/Element.h" | 8 #include "core/dom/Element.h" |
| 9 #include "{{namespace}}Names.h" | 9 #include "{{namespace}}Names.h" |
| 10 #include "RuntimeEnabledFeatures.h" | 10 #include "RuntimeEnabledFeatures.h" |
| 11 | 11 |
| 12 namespace WebCore { | 12 namespace WebCore { |
| 13 // Type checking. | 13 // Type checking. |
| 14 {% for tag in tags|sort if not tag.multipleTagNames and not tag.noTypeHelpers %} | 14 {% for tag in tags|sort if not tag.multipleTagNames and not tag.noTypeHelpers %} |
| 15 class {{tag.interface}}; | 15 class {{tag.interface}}; |
| 16 void is{{tag.interface}}(const {{tag.interface}}&); // Catch unnecessary runtime
check of type known at compile time. | 16 void is{{tag.interface}}(const {{tag.interface}}&); // Catch unnecessary runtime
check of type known at compile time. |
| 17 void is{{tag.interface}}(const {{tag.interface}}*); // Catch unnecessary runtime
check of type known at compile time. | 17 void is{{tag.interface}}(const {{tag.interface}}*); // Catch unnecessary runtime
check of type known at compile time. |
| 18 |
| 19 {# For HTML Elements, call hasLocalName() instead of hasTagName() to avoid check
ing the namespace unnecessarily #} |
| 20 {%- if namespace == "HTML" -%} |
| 21 inline bool is{{tag.interface}}(const HTMLElement& element) { |
| 22 {%- if tag.runtimeEnabled or tag.contextConditional %} |
| 23 if (element.isHTMLUnknownElement()) |
| 24 return false; |
| 25 {%- endif %} |
| 26 return element.hasLocalName(HTMLNames::{{tag|symbol}}Tag); |
| 27 } |
| 28 inline bool is{{tag.interface}}(const Element& element) { |
| 29 return element.isHTMLElement() && is{{tag.interface}}(toHTMLElement(element)
); |
| 30 } |
| 31 inline bool is{{tag.interface}}(const HTMLElement* element) { return element &&
is{{tag.interface}}(*element); } |
| 32 {% else %} |
| 18 inline bool is{{tag.interface}}(const Element& element) { | 33 inline bool is{{tag.interface}}(const Element& element) { |
| 19 {%- if tag.contextConditional %} | 34 {%- if tag.contextConditional %} |
| 20 if (!ContextFeatures::{{tag.contextConditional}}Enabled(&element.document())
) | 35 if (!ContextFeatures::{{tag.contextConditional}}Enabled(&element.document())
) |
| 21 return false; | 36 return false; |
| 22 {%- endif %} | 37 {%- endif %} |
| 23 {%- if tag.runtimeEnabled %} | 38 {%- if tag.runtimeEnabled %} |
| 24 if (!RuntimeEnabledFeatures::{{tag.runtimeEnabled}}Enabled()) | 39 if (!RuntimeEnabledFeatures::{{tag.runtimeEnabled}}Enabled()) |
| 25 return false; | 40 return false; |
| 26 {%- endif %} | 41 {%- endif %} |
| 27 return element.hasTagName({{namespace}}Names::{{tag|symbol}}Tag); | 42 return element.hasTagName({{namespace}}Names::{{tag|symbol}}Tag); |
| 28 } | 43 } |
| 44 {%- endif -%} |
| 45 |
| 29 inline bool is{{tag.interface}}(const Element* element) { return element && is{{
tag.interface}}(*element); } | 46 inline bool is{{tag.interface}}(const Element* element) { return element && is{{
tag.interface}}(*element); } |
| 30 template<typename T> inline bool is{{tag.interface}}(const PassRefPtr<T>& node)
{ return is{{tag.interface}}(node.get()); } | 47 template<typename T> inline bool is{{tag.interface}}(const PassRefPtr<T>& node)
{ return is{{tag.interface}}(node.get()); } |
| 31 template<typename T> inline bool is{{tag.interface}}(const RefPtr<T>& node) { re
turn is{{tag.interface}}(node.get()); } | 48 template<typename T> inline bool is{{tag.interface}}(const RefPtr<T>& node) { re
turn is{{tag.interface}}(node.get()); } |
| 32 inline bool is{{tag.interface}}(const Node& node) { return node.isElementNode()
? is{{tag.interface}}(toElement(node)) : false; } | 49 inline bool is{{tag.interface}}(const Node& node) { return node.isElementNode()
? is{{tag.interface}}(toElement(node)) : false; } |
| 33 inline bool is{{tag.interface}}(const Node* node) { return node && node->isEleme
ntNode() ? is{{tag.interface}}(*toElement(node)) : false; } | 50 inline bool is{{tag.interface}}(const Node* node) { return node && node->isEleme
ntNode() ? is{{tag.interface}}(*toElement(node)) : false; } |
| 34 template <> inline bool isElementOfType<const {{tag.interface}}>(const Element&
element) { return is{{tag.interface}}(element); } | 51 template <> inline bool isElementOfType<const {{tag.interface}}>(const Element&
element) { return is{{tag.interface}}(element); } |
| 52 {%- if namespace == "HTML" %} |
| 53 template <> inline bool isElementOfType<const {{tag.interface}}>(const HTMLEleme
nt& element) { return is{{tag.interface}}(element); } |
| 54 {%- endif %} |
| 55 |
| 35 {% endfor %} | 56 {% endfor %} |
| 36 | 57 |
| 37 // Using macros because the types are forward-declared and we don't want to use
reinterpret_cast in the | 58 // Using macros because the types are forward-declared and we don't want to use
reinterpret_cast in the |
| 38 // casting functions above. reinterpret_cast would be unsafe due to multiple inh
eritence. | 59 // casting functions above. reinterpret_cast would be unsafe due to multiple inh
eritence. |
| 39 {% for tag in tags|sort if not tag.multipleTagNames and not tag.noTypeHelpers %} | 60 {% for tag in tags|sort if not tag.multipleTagNames and not tag.noTypeHelpers %} |
| 40 #define to{{tag.interface}}(x) WebCore::toElement<WebCore::{{tag.interface}}>(x) | 61 #define to{{tag.interface}}(x) WebCore::toElement<WebCore::{{tag.interface}}>(x) |
| 41 {% endfor %} | 62 {% endfor %} |
| 42 } // WebCore | 63 } // WebCore |
| 43 | 64 |
| 44 #endif | 65 #endif |
| OLD | NEW |