| 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" |
| 11 #include "core/frame/TopControls.h" | 11 #include "core/frame/TopControls.h" |
| 12 #include "core/html/HTMLFrameOwnerElement.h" | 12 #include "core/html/HTMLFrameOwnerElement.h" |
| 13 #include "core/input/EventHandler.h" | 13 #include "core/input/EventHandler.h" |
| 14 #include "core/layout/LayoutPart.h" | 14 #include "core/layout/LayoutPart.h" |
| 15 #include "core/loader/DocumentLoader.h" | 15 #include "core/loader/DocumentLoader.h" |
| 16 #include "core/page/AutoscrollController.h" | 16 #include "core/page/AutoscrollController.h" |
| 17 #include "core/page/Page.h" | 17 #include "core/page/Page.h" |
| 18 #include "core/page/scrolling/OverscrollController.h" | 18 #include "core/page/scrolling/OverscrollController.h" |
| 19 #include "core/page/scrolling/ScrollState.h" | 19 #include "core/page/scrolling/ScrollState.h" |
| 20 #include "core/paint/PaintLayer.h" | 20 #include "core/paint/PaintLayer.h" |
| 21 #include "platform/PlatformGestureEvent.h" | 21 #include "platform/PlatformGestureEvent.h" |
| 22 #include "wtf/PtrUtil.h" |
| 23 #include <memory> |
| 22 | 24 |
| 23 | 25 |
| 24 namespace blink { | 26 namespace blink { |
| 25 | 27 |
| 26 namespace { | 28 namespace { |
| 27 | 29 |
| 28 // TODO(bokan): This method can go away once all scrolls happen through the | 30 // TODO(bokan): This method can go away once all scrolls happen through the |
| 29 // scroll customization path. | 31 // scroll customization path. |
| 30 void computeScrollChainForSingleNode(Node& node, std::deque<int>& scrollChain) | 32 void computeScrollChainForSingleNode(Node& node, std::deque<int>& scrollChain) |
| 31 { | 33 { |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 239 if (!node || !node->isElementNode() || !toElement(node)->getApplyScroll()) { | 241 if (!node || !node->isElementNode() || !toElement(node)->getApplyScroll()) { |
| 240 *wasRootScroller = false; | 242 *wasRootScroller = false; |
| 241 return box->scroll(granularity, delta); | 243 return box->scroll(granularity, delta); |
| 242 } | 244 } |
| 243 | 245 |
| 244 // If there is an ApplyScroll callback, its because we placed one on the | 246 // If there is an ApplyScroll callback, its because we placed one on the |
| 245 // root scroller to control top controls and overscroll. Invoke a scroll | 247 // root scroller to control top controls and overscroll. Invoke a scroll |
| 246 // using parts of the scroll customization framework on just this element. | 248 // using parts of the scroll customization framework on just this element. |
| 247 computeScrollChainForSingleNode(*node, m_currentScrollChain); | 249 computeScrollChainForSingleNode(*node, m_currentScrollChain); |
| 248 | 250 |
| 249 OwnPtr<ScrollStateData> scrollStateData = adoptPtr(new ScrollStateData()); | 251 std::unique_ptr<ScrollStateData> scrollStateData = wrapUnique(new ScrollStat
eData()); |
| 250 scrollStateData->delta_x = delta.width(); | 252 scrollStateData->delta_x = delta.width(); |
| 251 scrollStateData->delta_y = delta.height(); | 253 scrollStateData->delta_y = delta.height(); |
| 252 scrollStateData->position_x = position.x(); | 254 scrollStateData->position_x = position.x(); |
| 253 scrollStateData->position_y = position.y(); | 255 scrollStateData->position_y = position.y(); |
| 254 // TODO(bokan): delta_granularity is meant to be the number of pixels per | 256 // TODO(bokan): delta_granularity is meant to be the number of pixels per |
| 255 // unit of delta but we can't determine that until we get to the area we'll | 257 // unit of delta but we can't determine that until we get to the area we'll |
| 256 // scroll. This is a hack, we stuff the enum into the double value for | 258 // scroll. This is a hack, we stuff the enum into the double value for |
| 257 // now. | 259 // now. |
| 258 scrollStateData->delta_granularity = static_cast<double>(granularity); | 260 scrollStateData->delta_granularity = static_cast<double>(granularity); |
| 259 scrollStateData->velocity_x = velocity.width(); | 261 scrollStateData->velocity_x = velocity.width(); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 if (RuntimeEnabledFeatures::scrollCustomizationEnabled()) | 321 if (RuntimeEnabledFeatures::scrollCustomizationEnabled()) |
| 320 m_scrollGestureHandlingNode = m_frame->document()->documentElement()
; | 322 m_scrollGestureHandlingNode = m_frame->document()->documentElement()
; |
| 321 else | 323 else |
| 322 return WebInputEventResult::NotHandled; | 324 return WebInputEventResult::NotHandled; |
| 323 } | 325 } |
| 324 DCHECK(m_scrollGestureHandlingNode); | 326 DCHECK(m_scrollGestureHandlingNode); |
| 325 | 327 |
| 326 passScrollGestureEventToWidget(gestureEvent, m_scrollGestureHandlingNode->la
youtObject()); | 328 passScrollGestureEventToWidget(gestureEvent, m_scrollGestureHandlingNode->la
youtObject()); |
| 327 if (RuntimeEnabledFeatures::scrollCustomizationEnabled()) { | 329 if (RuntimeEnabledFeatures::scrollCustomizationEnabled()) { |
| 328 m_currentScrollChain.clear(); | 330 m_currentScrollChain.clear(); |
| 329 OwnPtr<ScrollStateData> scrollStateData = adoptPtr(new ScrollStateData()
); | 331 std::unique_ptr<ScrollStateData> scrollStateData = wrapUnique(new Scroll
StateData()); |
| 330 scrollStateData->position_x = gestureEvent.position().x(); | 332 scrollStateData->position_x = gestureEvent.position().x(); |
| 331 scrollStateData->position_y = gestureEvent.position().y(); | 333 scrollStateData->position_y = gestureEvent.position().y(); |
| 332 scrollStateData->is_beginning = true; | 334 scrollStateData->is_beginning = true; |
| 333 scrollStateData->from_user_input = true; | 335 scrollStateData->from_user_input = true; |
| 334 scrollStateData->delta_consumed_for_scroll_sequence = m_deltaConsumedFor
ScrollSequence; | 336 scrollStateData->delta_consumed_for_scroll_sequence = m_deltaConsumedFor
ScrollSequence; |
| 335 ScrollState* scrollState = ScrollState::create(std::move(scrollStateData
)); | 337 ScrollState* scrollState = ScrollState::create(std::move(scrollStateData
)); |
| 336 customizedScroll(*m_scrollGestureHandlingNode.get(), *scrollState); | 338 customizedScroll(*m_scrollGestureHandlingNode.get(), *scrollState); |
| 337 } else { | 339 } else { |
| 338 if (m_frame->isMainFrame()) | 340 if (m_frame->isMainFrame()) |
| 339 m_frame->host()->topControls().scrollBegin(); | 341 m_frame->host()->topControls().scrollBegin(); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 // scroll customization enabled. | 375 // scroll customization enabled. |
| 374 m_previousGestureScrolledNode = m_scrollGestureHandlingNode; | 376 m_previousGestureScrolledNode = m_scrollGestureHandlingNode; |
| 375 } | 377 } |
| 376 // FIXME: we should allow simultaneous scrolling of nested | 378 // FIXME: we should allow simultaneous scrolling of nested |
| 377 // iframes along perpendicular axes. See crbug.com/466991. | 379 // iframes along perpendicular axes. See crbug.com/466991. |
| 378 m_deltaConsumedForScrollSequence = true; | 380 m_deltaConsumedForScrollSequence = true; |
| 379 return result; | 381 return result; |
| 380 } | 382 } |
| 381 | 383 |
| 382 if (handleScrollCustomization) { | 384 if (handleScrollCustomization) { |
| 383 OwnPtr<ScrollStateData> scrollStateData = adoptPtr(new ScrollStateDa
ta()); | 385 std::unique_ptr<ScrollStateData> scrollStateData = wrapUnique(new Sc
rollStateData()); |
| 384 scrollStateData->delta_x = delta.width(); | 386 scrollStateData->delta_x = delta.width(); |
| 385 scrollStateData->delta_y = delta.height(); | 387 scrollStateData->delta_y = delta.height(); |
| 386 scrollStateData->delta_granularity = ScrollByPrecisePixel; | 388 scrollStateData->delta_granularity = ScrollByPrecisePixel; |
| 387 scrollStateData->velocity_x = velocity.width(); | 389 scrollStateData->velocity_x = velocity.width(); |
| 388 scrollStateData->velocity_y = velocity.height(); | 390 scrollStateData->velocity_y = velocity.height(); |
| 389 scrollStateData->should_propagate = !gestureEvent.preventPropagation
(); | 391 scrollStateData->should_propagate = !gestureEvent.preventPropagation
(); |
| 390 scrollStateData->is_in_inertial_phase = gestureEvent.inertialPhase()
== ScrollInertialPhaseMomentum; | 392 scrollStateData->is_in_inertial_phase = gestureEvent.inertialPhase()
== ScrollInertialPhaseMomentum; |
| 391 scrollStateData->from_user_input = true; | 393 scrollStateData->from_user_input = true; |
| 392 scrollStateData->delta_consumed_for_scroll_sequence = m_deltaConsume
dForScrollSequence; | 394 scrollStateData->delta_consumed_for_scroll_sequence = m_deltaConsume
dForScrollSequence; |
| 393 ScrollState* scrollState = ScrollState::create(std::move(scrollState
Data)); | 395 ScrollState* scrollState = ScrollState::create(std::move(scrollState
Data)); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 return WebInputEventResult::NotHandled; | 440 return WebInputEventResult::NotHandled; |
| 439 } | 441 } |
| 440 | 442 |
| 441 WebInputEventResult ScrollManager::handleGestureScrollEnd(const PlatformGestureE
vent& gestureEvent) | 443 WebInputEventResult ScrollManager::handleGestureScrollEnd(const PlatformGestureE
vent& gestureEvent) |
| 442 { | 444 { |
| 443 Node* node = m_scrollGestureHandlingNode; | 445 Node* node = m_scrollGestureHandlingNode; |
| 444 | 446 |
| 445 if (node) { | 447 if (node) { |
| 446 passScrollGestureEventToWidget(gestureEvent, node->layoutObject()); | 448 passScrollGestureEventToWidget(gestureEvent, node->layoutObject()); |
| 447 if (RuntimeEnabledFeatures::scrollCustomizationEnabled()) { | 449 if (RuntimeEnabledFeatures::scrollCustomizationEnabled()) { |
| 448 OwnPtr<ScrollStateData> scrollStateData = adoptPtr(new ScrollStateDa
ta()); | 450 std::unique_ptr<ScrollStateData> scrollStateData = wrapUnique(new Sc
rollStateData()); |
| 449 scrollStateData->is_ending = true; | 451 scrollStateData->is_ending = true; |
| 450 scrollStateData->is_in_inertial_phase = gestureEvent.inertialPhase()
== ScrollInertialPhaseMomentum; | 452 scrollStateData->is_in_inertial_phase = gestureEvent.inertialPhase()
== ScrollInertialPhaseMomentum; |
| 451 scrollStateData->from_user_input = true; | 453 scrollStateData->from_user_input = true; |
| 452 scrollStateData->is_direct_manipulation = true; | 454 scrollStateData->is_direct_manipulation = true; |
| 453 scrollStateData->delta_consumed_for_scroll_sequence = m_deltaConsume
dForScrollSequence; | 455 scrollStateData->delta_consumed_for_scroll_sequence = m_deltaConsume
dForScrollSequence; |
| 454 ScrollState* scrollState = ScrollState::create(std::move(scrollState
Data)); | 456 ScrollState* scrollState = ScrollState::create(std::move(scrollState
Data)); |
| 455 customizedScroll(*node, *scrollState); | 457 customizedScroll(*node, *scrollState); |
| 456 } | 458 } |
| 457 } | 459 } |
| 458 | 460 |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 646 DEFINE_TRACE(ScrollManager) | 648 DEFINE_TRACE(ScrollManager) |
| 647 { | 649 { |
| 648 visitor->trace(m_frame); | 650 visitor->trace(m_frame); |
| 649 visitor->trace(m_scrollGestureHandlingNode); | 651 visitor->trace(m_scrollGestureHandlingNode); |
| 650 visitor->trace(m_previousGestureScrolledNode); | 652 visitor->trace(m_previousGestureScrolledNode); |
| 651 visitor->trace(m_scrollbarHandlingScrollGesture); | 653 visitor->trace(m_scrollbarHandlingScrollGesture); |
| 652 visitor->trace(m_resizeScrollableArea); | 654 visitor->trace(m_resizeScrollableArea); |
| 653 } | 655 } |
| 654 | 656 |
| 655 } // namespace blink | 657 } // namespace blink |
| OLD | NEW |