Index: third_party/WebKit/Source/core/dom/PseudoElementData.h |
diff --git a/third_party/WebKit/Source/core/dom/PseudoElementData.h b/third_party/WebKit/Source/core/dom/PseudoElementData.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0f7d1808302630a5404e866a9da055bf29e223a6 |
--- /dev/null |
+++ b/third_party/WebKit/Source/core/dom/PseudoElementData.h |
@@ -0,0 +1,99 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef PseudoElementData_h |
+#define PseudoElementData_h |
+ |
+#include "platform/heap/Handle.h" |
+ |
+namespace blink { |
+ |
+class PseudoElementData final : public GarbageCollected<PseudoElementData> { |
+ WTF_MAKE_NONCOPYABLE(PseudoElementData); |
+public: |
+ static PseudoElementData* create(); |
+ 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() = default; |
+ Member<PseudoElement> m_generatedBefore; |
+ Member<PseudoElement> m_generatedAfter; |
+ Member<PseudoElement> m_generatedFirstLetter; |
+ Member<PseudoElement> m_backdrop; |
+}; |
+ |
+inline PseudoElementData* PseudoElementData::create() |
+{ |
+ return new PseudoElementData(); |
+} |
+ |
+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; |
+ case PseudoIdAfter: |
+ return m_generatedAfter; |
+ case PseudoIdBackdrop: |
+ return m_backdrop; |
+ case PseudoIdFirstLetter: |
+ return m_generatedFirstLetter; |
+ default: |
+ return nullptr; |
+ } |
+} |
+ |
+} // namespace blink |
+ |
+#endif // PseudoElementData_h |