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/input/ScrollManager.h" | 5 #include "core/input/ScrollManager.h" |
6 | 6 |
7 #include "core/dom/DOMNodeIds.h" | 7 #include "core/dom/DOMNodeIds.h" |
8 #include "core/events/GestureEvent.h" | 8 #include "core/events/GestureEvent.h" |
9 #include "core/frame/FrameHost.h" | 9 #include "core/frame/FrameHost.h" |
10 #include "core/frame/FrameView.h" | 10 #include "core/frame/FrameView.h" |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 DCHECK(box); | 235 DCHECK(box); |
236 Node* node = box->node(); | 236 Node* node = box->node(); |
237 | 237 |
238 // If there's no ApplyScroll callback on the element, scroll as usuall in | 238 // If there's no ApplyScroll callback on the element, scroll as usuall in |
239 // the non-scroll-customization case. | 239 // the non-scroll-customization case. |
240 if (!node || !node->isElementNode() || !toElement(node)->getApplyScroll()) { | 240 if (!node || !node->isElementNode() || !toElement(node)->getApplyScroll()) { |
241 *wasRootScroller = false; | 241 *wasRootScroller = false; |
242 return box->scroll(granularity, delta); | 242 return box->scroll(granularity, delta); |
243 } | 243 } |
244 | 244 |
245 // Viewport actions should only happen when scrolling an element in the | |
246 // main frame. | |
247 DCHECK(m_frame->isMainFrame()); | |
248 | |
249 // If there is an ApplyScroll callback, its because we placed one on the | 245 // If there is an ApplyScroll callback, its because we placed one on the |
250 // root scroller to control top controls and overscroll. Invoke a scroll | 246 // root scroller to control top controls and overscroll. Invoke a scroll |
251 // using parts of the scroll customization framework on just this element. | 247 // using parts of the scroll customization framework on just this element. |
252 computeScrollChainForSingleNode(*node, m_currentScrollChain); | 248 computeScrollChainForSingleNode(*node, m_currentScrollChain); |
253 | 249 |
254 OwnPtr<ScrollStateData> scrollStateData = adoptPtr(new ScrollStateData()); | 250 OwnPtr<ScrollStateData> scrollStateData = adoptPtr(new ScrollStateData()); |
255 scrollStateData->delta_x = delta.width(); | 251 scrollStateData->delta_x = delta.width(); |
256 scrollStateData->delta_y = delta.height(); | 252 scrollStateData->delta_y = delta.height(); |
257 scrollStateData->position_x = position.x(); | 253 scrollStateData->position_x = position.x(); |
258 scrollStateData->position_y = position.y(); | 254 scrollStateData->position_y = position.y(); |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
485 if (!widget || !widget->isFrameView()) | 481 if (!widget || !widget->isFrameView()) |
486 return WebInputEventResult::NotHandled; | 482 return WebInputEventResult::NotHandled; |
487 | 483 |
488 return toFrameView(widget)->frame().eventHandler().handleGestureScrollEvent(
gestureEvent); | 484 return toFrameView(widget)->frame().eventHandler().handleGestureScrollEvent(
gestureEvent); |
489 } | 485 } |
490 | 486 |
491 bool ScrollManager::isRootScroller(const Node& node) const | 487 bool ScrollManager::isRootScroller(const Node& node) const |
492 { | 488 { |
493 // The root scroller is the one Element on the page designated to perform | 489 // The root scroller is the one Element on the page designated to perform |
494 // "viewport actions" like top controls movement and overscroll glow. | 490 // "viewport actions" like top controls movement and overscroll glow. |
495 if (!frameHost() || !frameHost()->rootScroller()) | 491 if (!m_frame->document()) |
496 return false; | 492 return false; |
497 | 493 |
498 return frameHost()->rootScroller()->get() == &node; | 494 if (!node.isElementNode()) |
| 495 return false; |
| 496 |
| 497 return m_frame->document()->topDocument().isEffectiveRootScroller(toElement(
node)); |
499 } | 498 } |
500 | 499 |
501 | 500 |
502 WebInputEventResult ScrollManager::handleGestureScrollEvent(const PlatformGestur
eEvent& gestureEvent) | 501 WebInputEventResult ScrollManager::handleGestureScrollEvent(const PlatformGestur
eEvent& gestureEvent) |
503 { | 502 { |
504 Node* eventTarget = nullptr; | 503 Node* eventTarget = nullptr; |
505 Scrollbar* scrollbar = nullptr; | 504 Scrollbar* scrollbar = nullptr; |
506 if (gestureEvent.type() != PlatformEvent::GestureScrollBegin) { | 505 if (gestureEvent.type() != PlatformEvent::GestureScrollBegin) { |
507 scrollbar = m_scrollbarHandlingScrollGesture.get(); | 506 scrollbar = m_scrollbarHandlingScrollGesture.get(); |
508 eventTarget = m_scrollGestureHandlingNode.get(); | 507 eventTarget = m_scrollGestureHandlingNode.get(); |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
648 DEFINE_TRACE(ScrollManager) | 647 DEFINE_TRACE(ScrollManager) |
649 { | 648 { |
650 visitor->trace(m_frame); | 649 visitor->trace(m_frame); |
651 visitor->trace(m_scrollGestureHandlingNode); | 650 visitor->trace(m_scrollGestureHandlingNode); |
652 visitor->trace(m_previousGestureScrolledNode); | 651 visitor->trace(m_previousGestureScrolledNode); |
653 visitor->trace(m_scrollbarHandlingScrollGesture); | 652 visitor->trace(m_scrollbarHandlingScrollGesture); |
654 visitor->trace(m_resizeScrollableArea); | 653 visitor->trace(m_resizeScrollableArea); |
655 } | 654 } |
656 | 655 |
657 } // namespace blink | 656 } // namespace blink |
OLD | NEW |