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

Unified Diff: third_party/WebKit/Source/core/dom/ElementVisibilityObserver.cpp

Issue 2245613002: Revert "Simplify ElementVisibilityObserver implementation." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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
Index: third_party/WebKit/Source/core/dom/ElementVisibilityObserver.cpp
diff --git a/third_party/WebKit/Source/core/dom/ElementVisibilityObserver.cpp b/third_party/WebKit/Source/core/dom/ElementVisibilityObserver.cpp
index 6c6de435785accda2c4713e3024bdcd6dfd810d2..05f571387aa193c7b7269add45af7a5d4eb69c03 100644
--- a/third_party/WebKit/Source/core/dom/ElementVisibilityObserver.cpp
+++ b/third_party/WebKit/Source/core/dom/ElementVisibilityObserver.cpp
@@ -4,41 +4,28 @@
#include "core/dom/ElementVisibilityObserver.h"
-#include "bindings/core/v8/ExceptionState.h"
#include "core/dom/Element.h"
-#include "core/dom/IntersectionObserver.h"
#include "core/dom/IntersectionObserverEntry.h"
-#include "core/dom/IntersectionObserverInit.h"
#include "wtf/Functional.h"
namespace blink {
-ElementVisibilityObserver* ElementVisibilityObserver::create(Element* element, Client* client)
+ElementVisibilityObserver::ElementVisibilityObserver(Element* element, std::unique_ptr<VisibilityCallback> callback)
+ : m_element(element)
+ , m_callback(std::move(callback))
{
- ElementVisibilityObserver* observer = new ElementVisibilityObserver(client);
- observer->start(element);
- return observer;
-}
-
-ElementVisibilityObserver::ElementVisibilityObserver(Client* client)
- : m_client(client)
-{
- DCHECK(m_client);
}
ElementVisibilityObserver::~ElementVisibilityObserver() = default;
-void ElementVisibilityObserver::start(Element* element)
+void ElementVisibilityObserver::start()
{
- IntersectionObserverInit options;
- DoubleOrDoubleArray threshold;
- threshold.setDouble(std::numeric_limits<float>::min());
- options.setThreshold(threshold);
-
DCHECK(!m_intersectionObserver);
- m_intersectionObserver = IntersectionObserver::create(options, *this, ASSERT_NO_EXCEPTION);
+ m_intersectionObserver = IntersectionObserver::create(
+ Vector<Length>(), Vector<float>({std::numeric_limits<float>::min()}), &m_element->document(),
+ WTF::bind(&ElementVisibilityObserver::onVisibilityChanged, wrapWeakPersistent(this)));
DCHECK(m_intersectionObserver);
- m_intersectionObserver->observe(element);
+ m_intersectionObserver->observe(m_element.release());
}
void ElementVisibilityObserver::stop()
@@ -47,30 +34,18 @@ void ElementVisibilityObserver::stop()
m_intersectionObserver->disconnect();
m_intersectionObserver = nullptr;
- // Client will no longer be called upon, release.
- m_client = nullptr;
}
-void ElementVisibilityObserver::handleEvent(const HeapVector<Member<IntersectionObserverEntry>>& entries, IntersectionObserver&)
-{
- if (!m_client)
- return;
- bool isVisible = entries.last()->intersectionRatio() > 0.f;
- m_client->onVisibilityChanged(isVisible);
-}
-
-ExecutionContext* ElementVisibilityObserver::getExecutionContext() const
+DEFINE_TRACE(ElementVisibilityObserver)
{
- if (!m_client)
- return nullptr;
- return m_client->getElementVisibilityExecutionContext();
+ visitor->trace(m_element);
+ visitor->trace(m_intersectionObserver);
}
-DEFINE_TRACE(ElementVisibilityObserver)
+void ElementVisibilityObserver::onVisibilityChanged(const HeapVector<Member<IntersectionObserverEntry>>& entries)
{
- visitor->trace(m_client);
- visitor->trace(m_intersectionObserver);
- IntersectionObserverCallback::trace(visitor);
+ bool isVisible = entries.last()->intersectionRatio() > 0.f;
+ (*m_callback.get())(isVisible);
}
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698