Index: third_party/WebKit/Source/core/observer/ResizeObserverController.cpp |
diff --git a/third_party/WebKit/Source/core/observer/ResizeObserverController.cpp b/third_party/WebKit/Source/core/observer/ResizeObserverController.cpp |
index 47a50acbc5a993410db7a50784a906e8c82c60ab..c9761cc555b2953aaa04d2bf8b0b0bd33b47c7bf 100644 |
--- a/third_party/WebKit/Source/core/observer/ResizeObserverController.cpp |
+++ b/third_party/WebKit/Source/core/observer/ResizeObserverController.cpp |
@@ -10,6 +10,7 @@ |
namespace blink { |
ResizeObserverController::ResizeObserverController() |
+ : m_observersChanged(false) |
{ |
} |
@@ -18,6 +19,48 @@ void ResizeObserverController::addObserver(ResizeObserver& observer) |
m_observers.add(&observer); |
} |
+size_t ResizeObserverController::gatherObservations(size_t deeperThan) |
+{ |
+ size_t shallowest = ResizeObserverController::kDepthBottom; |
+ if (!m_observersChanged) |
+ return shallowest; |
+ for (auto& observer : m_observers) { |
+ size_t depth = observer->gatherObservations(deeperThan); |
+ if (depth < shallowest) |
+ shallowest = depth; |
+ } |
+ return shallowest; |
+} |
+ |
+bool ResizeObserverController::skippedObservations() |
+{ |
+ for (auto& observer : m_observers) { |
+ if (observer->skippedObservations()) |
+ return true; |
+ } |
+ return false; |
+} |
+ |
+void ResizeObserverController::deliverObservations() |
+{ |
+ m_observersChanged = false; |
+ // Copy is needed because m_observers might get modified during deliverObservations. |
+ HeapVector<Member<ResizeObserver>> observers; |
+ copyToVector(m_observers, observers); |
+ |
+ for (auto& observer : observers) { |
+ if (observer) { |
+ observer->deliverObservations(); |
+ m_observersChanged = m_observersChanged || observer->hasElementSizeChanged(); |
+ } |
+ } |
+} |
+ |
+void ResizeObserverController::clearObservations() |
+{ |
+ for (auto& observer : m_observers) |
+ observer->clearObservations(); |
+} |
DEFINE_TRACE(ResizeObserverController) |
{ |