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

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

Issue 2401303002: ElementVisibilityObserver: use ExecutionContext's document. (Closed)
Patch Set: review comments Created 4 years, 2 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 bc89685625512349292d08598c43475682674874..06769a487de85306bb853729c2cf2f6163d92347 100644
--- a/third_party/WebKit/Source/core/dom/ElementVisibilityObserver.cpp
+++ b/third_party/WebKit/Source/core/dom/ElementVisibilityObserver.cpp
@@ -13,8 +13,9 @@ namespace blink {
namespace {
-bool isInRemoteFrame(Element* element) {
- Frame* mainFrame = element->document().frame()->tree().top();
+bool isInRemoteFrame(const Document& document) {
+ DCHECK(document.frame());
+ Frame* mainFrame = document.frame()->tree().top();
return !mainFrame || mainFrame->isRemoteFrame();
}
@@ -28,9 +29,13 @@ ElementVisibilityObserver::ElementVisibilityObserver(
ElementVisibilityObserver::~ElementVisibilityObserver() = default;
void ElementVisibilityObserver::start() {
+ ExecutionContext* context = m_element->getExecutionContext();
+ DCHECK(context->isDocument());
+ Document& document = toDocument(*context);
+
// TODO(zqzhang): IntersectionObserver does not work for RemoteFrame.
// Remove this early return when it's fixed. See https://crbug.com/615156
- if (isInRemoteFrame(m_element)) {
+ if (isInRemoteFrame(document)) {
m_element.release();
return;
}
@@ -38,9 +43,8 @@ void ElementVisibilityObserver::start() {
DCHECK(!m_intersectionObserver);
m_intersectionObserver = IntersectionObserver::create(
Vector<Length>(), Vector<float>({std::numeric_limits<float>::min()}),
- &m_element->document(),
- WTF::bind(&ElementVisibilityObserver::onVisibilityChanged,
- wrapWeakPersistent(this)));
+ &document, WTF::bind(&ElementVisibilityObserver::onVisibilityChanged,
+ wrapWeakPersistent(this)));
DCHECK(m_intersectionObserver);
m_intersectionObserver->observe(m_element.release());
}

Powered by Google App Engine
This is Rietveld 408576698