Index: third_party/WebKit/Source/core/dom/PseudoElement.h |
diff --git a/third_party/WebKit/Source/core/dom/PseudoElement.h b/third_party/WebKit/Source/core/dom/PseudoElement.h |
index eb05f72bf15e56176273a4f52098fcc69cf8d4a4..6cedaf4c253e960b707e652b1b50862f90537d83 100644 |
--- a/third_party/WebKit/Source/core/dom/PseudoElement.h |
+++ b/third_party/WebKit/Source/core/dom/PseudoElement.h |
@@ -30,6 +30,7 @@ |
#include "core/CoreExport.h" |
#include "core/dom/Element.h" |
#include "core/style/ComputedStyle.h" |
+#include "platform/heap/Handle.h" |
namespace blink { |
@@ -60,6 +61,104 @@ private: |
PseudoId m_pseudoId; |
}; |
+class PseudoElementData : public GarbageCollectedFinalized<PseudoElementData> { |
Timothy Loh
2016/05/05 06:39:32
This should be in a separate file.
ramya.v
2016/05/05 08:57:09
Done.
|
+ WTF_MAKE_NONCOPYABLE(PseudoElementData); |
+public: |
+ static PseudoElementData* create(); |
+ ~PseudoElementData(); |
+ void setPseudoElement(PseudoId, PseudoElement*); |
+ PseudoElement* pseudoElement(PseudoId) const; |
+ bool hasPseudoElements() const; |
+ void clearPseudoElements(); |
+ DEFINE_INLINE_TRACE() |
+ { |
+ visitor->trace(m_generatedBefore); |
+ visitor->trace(m_generatedAfter); |
+ visitor->trace(m_generatedFirstLetter); |
+ visitor->trace(m_backdrop); |
+ } |
+private: |
+ PseudoElementData(); |
Timothy Loh
2016/05/05 06:39:33
You could write "PseudoElementData() = default;" i
ramya.v
2016/05/05 08:57:09
Done.
|
+ Member<PseudoElement> m_generatedBefore; |
+ Member<PseudoElement> m_generatedAfter; |
+ Member<PseudoElement> m_generatedFirstLetter; |
+ Member<PseudoElement> m_backdrop; |
+}; |
+ |
+inline PseudoElementData* PseudoElementData::create() |
+{ |
+ return new PseudoElementData(); |
+} |
+ |
+inline PseudoElementData::PseudoElementData() |
+{ |
+} |
+ |
+inline PseudoElementData::~PseudoElementData() |
+{ |
+ DCHECK(!m_generatedBefore); |
+ DCHECK(!m_generatedAfter); |
+ DCHECK(!m_generatedFirstLetter); |
+ DCHECK(!m_backdrop); |
+} |
+ |
+inline bool PseudoElementData::hasPseudoElements() const |
+{ |
+ return m_generatedBefore || m_generatedAfter || m_backdrop || m_generatedFirstLetter; |
+} |
+ |
+inline void PseudoElementData::clearPseudoElements() |
+{ |
+ setPseudoElement(PseudoIdBefore, nullptr); |
+ setPseudoElement(PseudoIdAfter, nullptr); |
+ setPseudoElement(PseudoIdBackdrop, nullptr); |
+ setPseudoElement(PseudoIdFirstLetter, nullptr); |
+} |
+ |
+inline void PseudoElementData::setPseudoElement(PseudoId pseudoId, PseudoElement* element) |
+{ |
+ switch (pseudoId) { |
+ case PseudoIdBefore: |
+ if (m_generatedBefore) |
+ m_generatedBefore->dispose(); |
+ m_generatedBefore = element; |
+ break; |
+ case PseudoIdAfter: |
+ if (m_generatedAfter) |
+ m_generatedAfter->dispose(); |
+ m_generatedAfter = element; |
+ break; |
+ case PseudoIdBackdrop: |
+ if (m_backdrop) |
+ m_backdrop->dispose(); |
+ m_backdrop = element; |
+ break; |
+ case PseudoIdFirstLetter: |
+ if (m_generatedFirstLetter) |
+ m_generatedFirstLetter->dispose(); |
+ m_generatedFirstLetter = element; |
+ break; |
+ default: |
+ ASSERT_NOT_REACHED(); |
+ } |
+} |
+ |
+inline PseudoElement* PseudoElementData::pseudoElement(PseudoId pseudoId) const |
+{ |
+ switch (pseudoId) { |
+ case PseudoIdBefore: |
+ return m_generatedBefore.get(); |
+ case PseudoIdAfter: |
+ return m_generatedAfter.get(); |
+ case PseudoIdBackdrop: |
+ return m_backdrop.get(); |
+ case PseudoIdFirstLetter: |
+ return m_generatedFirstLetter.get(); |
+ default: |
+ return 0; |
Timothy Loh
2016/05/05 06:39:33
nullptr
ramya.v
2016/05/05 08:57:09
Done.
|
+ } |
+} |
+ |
const QualifiedName& pseudoElementTagName(); |
inline bool pseudoElementLayoutObjectIsNeeded(const ComputedStyle* style) |