Chromium Code Reviews| 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..732175d531cd03dc211b6c23e541a9697b5d7a43 100644 |
| --- a/third_party/WebKit/Source/core/dom/ElementVisibilityObserver.cpp |
| +++ b/third_party/WebKit/Source/core/dom/ElementVisibilityObserver.cpp |
| @@ -13,8 +13,10 @@ namespace blink { |
| namespace { |
| -bool isInRemoteFrame(Element* element) { |
| - Frame* mainFrame = element->document().frame()->tree().top(); |
| +bool isInRemoteFrame(Document* document) { |
|
esprehn
2016/10/11 22:06:45
reference then you don't need the DCHECK below?
|
| + DCHECK(document); |
| + DCHECK(document->frame()); |
| + Frame* mainFrame = document->frame()->tree().top(); |
| return !mainFrame || mainFrame->isRemoteFrame(); |
| } |
| @@ -28,9 +30,13 @@ ElementVisibilityObserver::ElementVisibilityObserver( |
| ElementVisibilityObserver::~ElementVisibilityObserver() = default; |
| void ElementVisibilityObserver::start() { |
| + ExecutionContext* context = m_element->getExecutionContext(); |
| + DCHECK(context->isDocument()); |
| + Document* document = toDocument(context); |
|
esprehn
2016/10/11 22:06:45
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 +44,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()); |
| } |