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 3 // found in the LICENSE file. 4 5 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_SCROLL_SCROLLBAR_TEST_SUITE_H_ 6 #define THIRD_PARTY_BLINK_RENDERER_CORE_SCROLL_SCROLLBAR_TEST_SUITE_H_ 7 8 #include <memory> 9 #include "base/single_thread_task_runner.h" 10 #include "testing/gmock/include/gmock/gmock.h" 11 #include "third_party/blink/public/platform/platform.h" 12 #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h" 13 #include "third_party/blink/renderer/core/loader/empty_clients.h" 14 #include "third_party/blink/renderer/core/scroll/scrollable_area.h" 15 #include "third_party/blink/renderer/core/scroll/scrollbar.h" 16 #include "third_party/blink/renderer/core/scroll/scrollbar_theme.h" 17 #include "third_party/blink/renderer/platform/heap/garbage_collected.h" 18 #include "third_party/blink/renderer/platform/scheduler/public/thread.h" 19 #include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h" 20 21 namespace blink { 22 23 class MockPlatformChromeClient : public EmptyChromeClient { 24 public: MockPlatformChromeClient()25 MockPlatformChromeClient() : is_popup_(false) {} 26 IsPopup()27 bool IsPopup() override { return is_popup_; } 28 SetIsPopup(bool is_popup)29 void SetIsPopup(bool is_popup) { is_popup_ = is_popup; } 30 WindowToViewportScalar(LocalFrame *,const float)31 float WindowToViewportScalar(LocalFrame*, const float) const override { 32 return 0; 33 } 34 35 private: 36 bool is_popup_; 37 }; 38 39 class MockScrollableArea : public GarbageCollected<MockScrollableArea>, 40 public ScrollableArea { 41 public: Create()42 static MockScrollableArea* Create() { 43 return MakeGarbageCollected<MockScrollableArea>(); 44 } 45 Create(const ScrollOffset & maximum_scroll_offset)46 static MockScrollableArea* Create(const ScrollOffset& maximum_scroll_offset) { 47 MockScrollableArea* mock = Create(); 48 mock->SetMaximumScrollOffset(maximum_scroll_offset); 49 return mock; 50 } 51 MockScrollableArea()52 explicit MockScrollableArea() 53 : maximum_scroll_offset_(ScrollOffset(0, 100)), 54 chrome_client_(MakeGarbageCollected<MockPlatformChromeClient>()) {} MockScrollableArea(const ScrollOffset & offset)55 explicit MockScrollableArea(const ScrollOffset& offset) 56 : maximum_scroll_offset_(offset), 57 chrome_client_(MakeGarbageCollected<MockPlatformChromeClient>()) {} 58 59 MOCK_CONST_METHOD0(VisualRectForScrollbarParts, LayoutRect()); 60 MOCK_CONST_METHOD0(IsActive, bool()); 61 MOCK_CONST_METHOD0(IsThrottled, bool()); 62 MOCK_CONST_METHOD1(ScrollSize, int(ScrollbarOrientation)); 63 MOCK_CONST_METHOD0(IsScrollCornerVisible, bool()); 64 MOCK_CONST_METHOD0(ScrollCornerRect, IntRect()); 65 MOCK_CONST_METHOD0(EnclosingScrollableArea, ScrollableArea*()); 66 MOCK_CONST_METHOD1(VisibleContentRect, IntRect(IncludeScrollbarsInRect)); 67 MOCK_CONST_METHOD0(ContentsSize, IntSize()); 68 MOCK_CONST_METHOD0(LayerForHorizontalScrollbar, cc::Layer*()); 69 MOCK_CONST_METHOD0(LayerForVerticalScrollbar, cc::Layer*()); 70 MOCK_CONST_METHOD0(HorizontalScrollbar, Scrollbar*()); 71 MOCK_CONST_METHOD0(VerticalScrollbar, Scrollbar*()); 72 MOCK_CONST_METHOD0(ScrollbarsHiddenIfOverlay, bool()); 73 MOCK_METHOD0(ScheduleAnimation, bool()); 74 MOCK_CONST_METHOD0(UsedColorScheme, mojom::blink::ColorScheme()); 75 UserInputScrollable(ScrollbarOrientation)76 bool UserInputScrollable(ScrollbarOrientation) const override { return true; } ScrollbarsCanBeActive()77 bool ScrollbarsCanBeActive() const override { return true; } ShouldPlaceVerticalScrollbarOnLeft()78 bool ShouldPlaceVerticalScrollbarOnLeft() const override { return false; } UpdateScrollOffset(const ScrollOffset & offset,mojom::blink::ScrollType)79 void UpdateScrollOffset(const ScrollOffset& offset, 80 mojom::blink::ScrollType) override { 81 scroll_offset_ = offset.ShrunkTo(maximum_scroll_offset_); 82 } ScrollOffsetInt()83 IntSize ScrollOffsetInt() const override { 84 return FlooredIntSize(scroll_offset_); 85 } MinimumScrollOffsetInt()86 IntSize MinimumScrollOffsetInt() const override { return IntSize(); } MaximumScrollOffsetInt()87 IntSize MaximumScrollOffsetInt() const override { 88 return ExpandedIntSize(maximum_scroll_offset_); 89 } VisibleHeight()90 int VisibleHeight() const override { return 768; } VisibleWidth()91 int VisibleWidth() const override { return 1024; } GetScrollElementId()92 CompositorElementId GetScrollElementId() const override { 93 return CompositorElementId(); 94 } ScrollAnimatorEnabled()95 bool ScrollAnimatorEnabled() const override { return true; } PageStep(ScrollbarOrientation)96 int PageStep(ScrollbarOrientation) const override { return 0; } ScrollControlWasSetNeedsPaintInvalidation()97 void ScrollControlWasSetNeedsPaintInvalidation() override {} ConvertFromRootFrame(const IntPoint & point_in_root_frame)98 IntPoint ConvertFromRootFrame(const IntPoint& point_in_root_frame) const { 99 return point_in_root_frame; 100 } ConvertFromContainingEmbeddedContentViewToScrollbar(const Scrollbar & scrollbar,const IntPoint & parent_point)101 IntPoint ConvertFromContainingEmbeddedContentViewToScrollbar( 102 const Scrollbar& scrollbar, 103 const IntPoint& parent_point) const { 104 return parent_point; 105 } 106 GetTimerTaskRunner()107 scoped_refptr<base::SingleThreadTaskRunner> GetTimerTaskRunner() const final { 108 return blink::scheduler::GetSingleThreadTaskRunnerForTesting(); 109 } 110 GetChromeClient()111 ChromeClient* GetChromeClient() const override { 112 return chrome_client_.Get(); 113 } 114 SetIsPopup()115 void SetIsPopup() { chrome_client_->SetIsPopup(true); } 116 GetPageScrollbarTheme()117 ScrollbarTheme& GetPageScrollbarTheme() const override { 118 return ScrollbarTheme::GetTheme(); 119 } 120 121 using ScrollableArea::ClearNeedsPaintInvalidationForScrollControls; 122 using ScrollableArea::HorizontalScrollbarNeedsPaintInvalidation; 123 using ScrollableArea::ShowNonMacOverlayScrollbars; 124 using ScrollableArea::VerticalScrollbarNeedsPaintInvalidation; 125 Trace(Visitor * visitor)126 void Trace(Visitor* visitor) const override { 127 visitor->Trace(chrome_client_); 128 ScrollableArea::Trace(visitor); 129 } 130 131 protected: SetMaximumScrollOffset(const ScrollOffset & maximum_scroll_offset)132 void SetMaximumScrollOffset(const ScrollOffset& maximum_scroll_offset) { 133 maximum_scroll_offset_ = maximum_scroll_offset; 134 } 135 136 private: 137 ScrollOffset scroll_offset_; 138 ScrollOffset maximum_scroll_offset_; 139 Member<MockPlatformChromeClient> chrome_client_; 140 }; 141 142 } // namespace blink 143 144 #endif 145