Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(715)

Unified Diff: third_party/WebKit/Source/core/observer/ResizeObserver.cpp

Issue 2185533004: ResizeObserver pt4: IDL methods (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/observer/ResizeObserverEntry.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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)
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/observer/ResizeObserverEntry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698