Index: third_party/WebKit/Source/core/page/scrolling/ViewportScrollCallback.h |
diff --git a/third_party/WebKit/Source/core/page/scrolling/ViewportScrollCallback.h b/third_party/WebKit/Source/core/page/scrolling/ViewportScrollCallback.h |
index a27c0d48426b34865f77519f929ee03407f63a24..bd974df88c3d685d26cb0586bff82d52a20ed970 100644 |
--- a/third_party/WebKit/Source/core/page/scrolling/ViewportScrollCallback.h |
+++ b/third_party/WebKit/Source/core/page/scrolling/ViewportScrollCallback.h |
@@ -11,34 +11,58 @@ |
namespace blink { |
+class FloatSize; |
class ScrollableArea; |
class ScrollState; |
+class TopControls; |
+class OverscrollController; |
+class RootFrameViewport; |
-// ViewportScrollCallback is an interface that's used by the |
-// RootScrollerController to apply scrolls to the designated rootScroller |
-// element. It is a ScrollStateCallback, meaning that it's applied during the |
-// applyScroll step of ScrollCustomization and child classes must implement |
-// handleEvent in order to actually do the scrolling as well as any possible |
-// associated actions. |
+// ViewportScrollCallback is a ScrollStateCallback, meaning that it's applied |
+// during the applyScroll step of ScrollCustomization. It implements viewport |
+// actions like moving top controls and showing overscroll glow as well as |
+// scrolling the Element. |
// |
// ScrollCustomization generally relies on using the nativeApplyScroll to |
// scroll the element; however, the rootScroller may need to execute actions |
// both before and after the native scroll which is currently unsupported. |
// Because of this, the ViewportScrollCallback can scroll the Element directly. |
-// This is accomplished by descendant classes implementing the setScroller |
-// method which RootScrollerController will call to fill the callback with the |
-// appropriate ScrollableArea to use. |
+// This is accomplished by passing the ScrollableArea directly using |
+// setScroller() which RootScrollerController will call to set the appropriate |
+// ScrollableArea to use. |
class ViewportScrollCallback : public ScrollStateCallback { |
public: |
- virtual ~ViewportScrollCallback() {} |
+ // The TopControls and OverscrollController are given to the |
+ // ViewportScrollCallback but are not owned or kept alive by it. |
+ static ViewportScrollCallback* create( |
+ TopControls* topControls, |
+ OverscrollController* overscrollController, |
+ RootFrameViewport& rootFrameViewport) |
+ { |
+ return new ViewportScrollCallback( |
+ topControls, overscrollController, rootFrameViewport); |
+ } |
- virtual void setScroller(ScrollableArea*) = 0; |
+ virtual ~ViewportScrollCallback(); |
- DEFINE_INLINE_VIRTUAL_TRACE() { |
- ScrollStateCallback::trace(visitor); |
- } |
-protected: |
- ScrollResult performNativeScroll(ScrollState&, ScrollableArea&); |
+ void handleEvent(ScrollState*) override; |
+ void setScroller(ScrollableArea*); |
+ |
+ DECLARE_VIRTUAL_TRACE(); |
+ |
+private: |
+ // ViewportScrollCallback does not assume ownership of TopControls or of |
+ // OverscrollController. |
+ ViewportScrollCallback(TopControls*, OverscrollController*, RootFrameViewport&); |
+ |
+ bool shouldScrollTopControls(const FloatSize&, ScrollGranularity) const; |
+ bool scrollTopControls(ScrollState&); |
+ |
+ ScrollResult performNativeScroll(ScrollState&); |
+ |
+ WeakMember<TopControls> m_topControls; |
+ WeakMember<OverscrollController> m_overscrollController; |
+ WeakMember<RootFrameViewport> m_rootFrameViewport; |
}; |
} // namespace blink |