OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/dom/IntersectionObserver.h" | 5 #include "core/dom/IntersectionObserver.h" |
6 | 6 |
7 #include "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
8 #include "core/css/parser/CSSParserTokenRange.h" | 8 #include "core/css/parser/CSSParserTokenRange.h" |
9 #include "core/css/parser/CSSTokenizer.h" | 9 #include "core/css/parser/CSSTokenizer.h" |
| 10 #include "core/dom/Element.h" |
10 #include "core/dom/ExceptionCode.h" | 11 #include "core/dom/ExceptionCode.h" |
11 #include "core/dom/ExecutionContext.h" | 12 #include "core/dom/ExecutionContext.h" |
12 #include "core/dom/IntersectionObserverCallback.h" | 13 #include "core/dom/IntersectionObserverCallback.h" |
13 #include "core/dom/IntersectionObserverController.h" | 14 #include "core/dom/IntersectionObserverController.h" |
14 #include "core/dom/IntersectionObserverEntry.h" | 15 #include "core/dom/IntersectionObserverEntry.h" |
15 #include "core/dom/IntersectionObserverInit.h" | 16 #include "core/dom/IntersectionObserverInit.h" |
16 #include "core/dom/NodeIntersectionObserverData.h" | 17 #include "core/dom/NodeIntersectionObserverData.h" |
17 #include "core/html/HTMLFrameOwnerElement.h" | 18 #include "core/html/HTMLFrameOwnerElement.h" |
18 #include "core/layout/LayoutView.h" | 19 #include "core/layout/LayoutView.h" |
19 #include "core/timing/DOMWindowPerformance.h" | 20 #include "core/timing/DOMWindowPerformance.h" |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 else | 109 else |
109 thresholds.append(0); | 110 thresholds.append(0); |
110 if (exceptionState.hadException()) | 111 if (exceptionState.hadException()) |
111 return nullptr; | 112 return nullptr; |
112 | 113 |
113 return new IntersectionObserver(callback, *root, rootMargin, thresholds); | 114 return new IntersectionObserver(callback, *root, rootMargin, thresholds); |
114 } | 115 } |
115 | 116 |
116 IntersectionObserver::IntersectionObserver(IntersectionObserverCallback& callbac
k, Node& root, const Vector<Length>& rootMargin, const Vector<float>& thresholds
) | 117 IntersectionObserver::IntersectionObserver(IntersectionObserverCallback& callbac
k, Node& root, const Vector<Length>& rootMargin, const Vector<float>& thresholds
) |
117 : m_callback(&callback) | 118 : m_callback(&callback) |
| 119 , m_root(&root) |
118 , m_thresholds(thresholds) | 120 , m_thresholds(thresholds) |
119 , m_topMargin(Fixed) | 121 , m_topMargin(Fixed) |
120 , m_rightMargin(Fixed) | 122 , m_rightMargin(Fixed) |
121 , m_bottomMargin(Fixed) | 123 , m_bottomMargin(Fixed) |
122 , m_leftMargin(Fixed) | 124 , m_leftMargin(Fixed) |
123 { | 125 { |
124 if (root.isDocumentNode()) | |
125 m_root = toDocument(root).ensureIntersectionObserverData().createWeakPtr
(&root); | |
126 else | |
127 m_root = toElement(root).ensureIntersectionObserverData().createWeakPtr(
&root); | |
128 switch (rootMargin.size()) { | 126 switch (rootMargin.size()) { |
129 case 0: | 127 case 0: |
130 break; | 128 break; |
131 case 1: | 129 case 1: |
132 m_topMargin = m_rightMargin = m_bottomMargin = m_leftMargin = rootMargin
[0]; | 130 m_topMargin = m_rightMargin = m_bottomMargin = m_leftMargin = rootMargin
[0]; |
133 break; | 131 break; |
134 case 2: | 132 case 2: |
135 m_topMargin = m_bottomMargin = rootMargin[0]; | 133 m_topMargin = m_bottomMargin = rootMargin[0]; |
136 m_rightMargin = m_leftMargin = rootMargin[1]; | 134 m_rightMargin = m_leftMargin = rootMargin[1]; |
137 break; | 135 break; |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 | 306 |
309 DEFINE_TRACE(IntersectionObserver) | 307 DEFINE_TRACE(IntersectionObserver) |
310 { | 308 { |
311 visitor->template registerWeakMembers<IntersectionObserver, &IntersectionObs
erver::clearWeakMembers>(this); | 309 visitor->template registerWeakMembers<IntersectionObserver, &IntersectionObs
erver::clearWeakMembers>(this); |
312 visitor->trace(m_callback); | 310 visitor->trace(m_callback); |
313 visitor->trace(m_observations); | 311 visitor->trace(m_observations); |
314 visitor->trace(m_entries); | 312 visitor->trace(m_entries); |
315 } | 313 } |
316 | 314 |
317 } // namespace blink | 315 } // namespace blink |
OLD | NEW |