| Index: third_party/WebKit/Source/core/observer/ResizeObserver.cpp
|
| diff --git a/third_party/WebKit/Source/core/observer/ResizeObserver.cpp b/third_party/WebKit/Source/core/observer/ResizeObserver.cpp
|
| index 838daca88bc1dc6dca768dfbe4563b65c6920753..f285e0d3e4147e6f762f7e06f56271d36e5afa32 100644
|
| --- a/third_party/WebKit/Source/core/observer/ResizeObserver.cpp
|
| +++ b/third_party/WebKit/Source/core/observer/ResizeObserver.cpp
|
| @@ -5,9 +5,11 @@
|
| #include "core/observer/ResizeObserver.h"
|
|
|
| #include "core/dom/Element.h"
|
| +#include "core/frame/FrameView.h"
|
| #include "core/observer/ResizeObservation.h"
|
| #include "core/observer/ResizeObserverCallback.h"
|
| #include "core/observer/ResizeObserverController.h"
|
| +#include "core/observer/ResizeObserverEntry.h"
|
|
|
| namespace blink {
|
|
|
| @@ -25,14 +27,40 @@ ResizeObserver::ResizeObserver(ResizeObserverCallback* callback, Document& docum
|
|
|
| void ResizeObserver::observe(Element* target)
|
| {
|
| + auto& observerMap = target->ensureResizeObserverData();
|
| + if (observerMap.contains(this))
|
| + return; // Already registered.
|
| +
|
| + auto observation = new ResizeObservation(target, this);
|
| + m_observations.add(observation);
|
| + observerMap.set(this, observation);
|
| +
|
| + if (FrameView* frameView = target->document().view())
|
| + frameView->scheduleAnimation();
|
| }
|
|
|
| void ResizeObserver::unobserve(Element* target)
|
| {
|
| + auto observerMap = target ? target->resizeObserverData() : nullptr;
|
| + if (!observerMap)
|
| + return;
|
| + auto observation = observerMap->find(this);
|
| + if (observation != observerMap->end()) {
|
| + m_observations.remove((*observation).value);
|
| + observerMap->remove(observation);
|
| + }
|
| }
|
|
|
| void ResizeObserver::disconnect()
|
| {
|
| + ObservationList observations;
|
| + m_observations.swap(observations);
|
| +
|
| + for (auto observation : observations) {
|
| + Element* target = (*observation).target();
|
| + if (target)
|
| + target->ensureResizeObserverData().remove(this);
|
| + }
|
| }
|
|
|
| DEFINE_TRACE(ResizeObserver)
|
|
|