Index: third_party/WebKit/Source/core/dom/ElementRareData.h |
diff --git a/third_party/WebKit/Source/core/dom/ElementRareData.h b/third_party/WebKit/Source/core/dom/ElementRareData.h |
index 5e27cfe6ef0a797ef74015199dba900aba584b20..43b2488011009a958deaf874eac610bd81c19895 100644 |
--- a/third_party/WebKit/Source/core/dom/ElementRareData.h |
+++ b/third_party/WebKit/Source/core/dom/ElementRareData.h |
@@ -25,6 +25,8 @@ |
#include "core/animation/ElementAnimations.h" |
#include "core/dom/Attr.h" |
#include "core/dom/DatasetDOMStringMap.h" |
+#include "core/dom/IntersectionObservation.h" |
+#include "core/dom/IntersectionObserver.h" |
#include "core/dom/NamedNodeMap.h" |
#include "core/dom/NodeRareData.h" |
#include "core/dom/PseudoElement.h" |
@@ -33,7 +35,9 @@ |
#include "core/html/ClassList.h" |
#include "core/style/StyleInheritedData.h" |
#include "platform/heap/Handle.h" |
+#include "wtf/HashSet.h" |
#include "wtf/OwnPtr.h" |
+#include "wtf/WeakPtr.h" |
namespace blink { |
@@ -107,6 +111,55 @@ public: |
m_elementAnimations = elementAnimations; |
} |
+ bool hasIntersectionObserver() const |
+ { |
+ return m_intersectionObservers && m_intersectionObservers->size(); |
+ } |
+ |
+ IntersectionObserver::WeakHashSet& intersectionObservers() |
+ { |
+ if (!m_intersectionObservers) |
+ m_intersectionObservers = new IntersectionObserver::WeakHashSet(); |
+ return *m_intersectionObservers; |
+ } |
+ |
+ bool hasIntersectionObservation() const |
+ { |
+ return m_intersectionObservations && m_intersectionObservations->size(); |
+ } |
+ |
+ IntersectionObservation::HashSet& intersectionObservations() |
+ { |
+ if (!m_intersectionObservations) |
+ m_intersectionObservations = new IntersectionObservation::HashSet(); |
+ return *m_intersectionObservations; |
+ } |
+ |
+ void deactivateAllIntersectionObservers() |
+ { |
+ if (!m_intersectionObservers) |
+ return; |
+ for (auto& observer: *m_intersectionObservers) |
+ observer->setActive(false); |
+ } |
+ |
+ void deactivateAllIntersectionObservations() |
+ { |
+ if (!m_intersectionObservations) |
+ return; |
+ for (auto& observation: *m_intersectionObservations) |
+ observation->setActive(false); |
+ } |
+ |
+#if !ENABLE(OILPAN) |
+ WeakPtr<Element> createWeakPtr(Element* element) |
+ { |
+ if (!m_weakPointerFactory) |
+ m_weakPointerFactory = adoptPtrWillBeNoop(new WeakPtrFactory<Element>(element)); |
+ return m_weakPointerFactory->createWeakPtr(); |
+ } |
+#endif |
+ |
bool hasPseudoElements() const; |
void clearPseudoElements(); |
@@ -141,9 +194,16 @@ private: |
OwnPtrWillBeMember<ElementShadow> m_shadow; |
OwnPtrWillBeMember<NamedNodeMap> m_attributeMap; |
OwnPtrWillBeMember<AttrNodeList> m_attrNodeList; |
- PersistentWillBeMember<ElementAnimations> m_elementAnimations; |
OwnPtrWillBeMember<InlineCSSStyleDeclaration> m_cssomWrapper; |
+#if !ENABLE(OILPAN) |
+ OwnPtrWillBeMember<WeakPtrFactory<Element>> m_weakPointerFactory; |
+#endif |
+ |
+ PersistentWillBeMember<ElementAnimations> m_elementAnimations; |
+ // Note that m_intersectionObservers will contain both observers for which this element is target, |
+ // and observers for which this element is root. To tell them apart, check (observer->root() == element). |
+ |
RefPtr<ComputedStyle> m_computedStyle; |
RefPtrWillBeMember<CustomElementDefinition> m_customElementDefinition; |
@@ -152,6 +212,11 @@ private: |
RefPtrWillBeMember<PseudoElement> m_generatedFirstLetter; |
RefPtrWillBeMember<PseudoElement> m_backdrop; |
+ // IntersectionObservers for which this element is root. |
+ PersistentWillBeMember<IntersectionObserver::WeakHashSet> m_intersectionObservers; |
+ // IntersectionObservations for which this element is target. |
+ PersistentWillBeMember<IntersectionObservation::HashSet> m_intersectionObservations; |
+ |
explicit ElementRareData(LayoutObject*); |
}; |