OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "platform/scroll/ScrollableArea.h" | 5 #include "platform/scroll/ScrollableArea.h" |
6 | 6 |
7 #include "platform/graphics/Color.h" | 7 #include "platform/graphics/Color.h" |
8 #include "platform/graphics/GraphicsLayer.h" | 8 #include "platform/graphics/GraphicsLayer.h" |
9 #include "platform/scroll/ScrollbarTestSuite.h" | 9 #include "platform/scroll/ScrollbarTestSuite.h" |
10 #include "platform/scroll/ScrollbarTheme.h" | 10 #include "platform/scroll/ScrollbarTheme.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 | 25 |
26 class ScrollbarThemeWithMockInvalidation : public ScrollbarThemeMock { | 26 class ScrollbarThemeWithMockInvalidation : public ScrollbarThemeMock { |
27 public: | 27 public: |
28 MOCK_CONST_METHOD0(shouldRepaintAllPartsOnInvalidation, bool()); | 28 MOCK_CONST_METHOD0(shouldRepaintAllPartsOnInvalidation, bool()); |
29 MOCK_CONST_METHOD3(invalidateOnThumbPositionChange, | 29 MOCK_CONST_METHOD3(invalidateOnThumbPositionChange, |
30 ScrollbarPart(const ScrollbarThemeClient&, float, float)); | 30 ScrollbarPart(const ScrollbarThemeClient&, float, float)); |
31 }; | 31 }; |
32 | 32 |
33 } // namespace | 33 } // namespace |
34 | 34 |
35 class ScrollableAreaTest : public ScrollbarTestSuite {}; | 35 using ScrollableAreaTest = testing::Test; |
36 | 36 |
37 TEST_F(ScrollableAreaTest, ScrollAnimatorCurrentPositionShouldBeSync) { | 37 TEST_F(ScrollableAreaTest, ScrollAnimatorCurrentPositionShouldBeSync) { |
38 ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler, | 38 ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler> |
39 const TestingPlatformSupport::Config&> | 39 platform; |
40 platform(m_config); | |
41 | 40 |
42 MockScrollableArea* scrollableArea = | 41 MockScrollableArea* scrollableArea = |
43 MockScrollableArea::create(ScrollOffset(0, 100)); | 42 MockScrollableArea::create(ScrollOffset(0, 100)); |
44 scrollableArea->setScrollOffset(ScrollOffset(0, 10000), CompositorScroll); | 43 scrollableArea->setScrollOffset(ScrollOffset(0, 10000), CompositorScroll); |
45 EXPECT_EQ(100.0, scrollableArea->scrollAnimator().currentOffset().height()); | 44 EXPECT_EQ(100.0, scrollableArea->scrollAnimator().currentOffset().height()); |
46 } | 45 } |
47 | 46 |
48 TEST_F(ScrollableAreaTest, ScrollbarTrackAndThumbRepaint) { | 47 TEST_F(ScrollableAreaTest, ScrollbarTrackAndThumbRepaint) { |
49 ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler, | 48 ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler> |
50 const TestingPlatformSupport::Config&> | 49 platform; |
51 platform(m_config); | |
52 | 50 |
53 ScrollbarThemeWithMockInvalidation theme; | 51 ScrollbarThemeWithMockInvalidation theme; |
54 MockScrollableArea* scrollableArea = | 52 MockScrollableArea* scrollableArea = |
55 MockScrollableArea::create(ScrollOffset(0, 100)); | 53 MockScrollableArea::create(ScrollOffset(0, 100)); |
56 Scrollbar* scrollbar = Scrollbar::createForTesting( | 54 Scrollbar* scrollbar = Scrollbar::createForTesting( |
57 scrollableArea, HorizontalScrollbar, RegularScrollbar, &theme); | 55 scrollableArea, HorizontalScrollbar, RegularScrollbar, &theme); |
58 | 56 |
59 EXPECT_CALL(theme, shouldRepaintAllPartsOnInvalidation()) | 57 EXPECT_CALL(theme, shouldRepaintAllPartsOnInvalidation()) |
60 .WillRepeatedly(Return(true)); | 58 .WillRepeatedly(Return(true)); |
61 EXPECT_TRUE(scrollbar->trackNeedsRepaint()); | 59 EXPECT_TRUE(scrollbar->trackNeedsRepaint()); |
(...skipping 20 matching lines...) Expand all Loading... |
82 EXPECT_FALSE(scrollbar->thumbNeedsRepaint()); | 80 EXPECT_FALSE(scrollbar->thumbNeedsRepaint()); |
83 scrollbar->setNeedsPaintInvalidation(ThumbPart); | 81 scrollbar->setNeedsPaintInvalidation(ThumbPart); |
84 EXPECT_FALSE(scrollbar->trackNeedsRepaint()); | 82 EXPECT_FALSE(scrollbar->trackNeedsRepaint()); |
85 EXPECT_TRUE(scrollbar->thumbNeedsRepaint()); | 83 EXPECT_TRUE(scrollbar->thumbNeedsRepaint()); |
86 | 84 |
87 // Forced GC in order to finalize objects depending on the mock object. | 85 // Forced GC in order to finalize objects depending on the mock object. |
88 ThreadState::current()->collectAllGarbage(); | 86 ThreadState::current()->collectAllGarbage(); |
89 } | 87 } |
90 | 88 |
91 TEST_F(ScrollableAreaTest, ScrollbarGraphicsLayerInvalidation) { | 89 TEST_F(ScrollableAreaTest, ScrollbarGraphicsLayerInvalidation) { |
92 ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler, | 90 ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler> |
93 const TestingPlatformSupport::Config&> | 91 platform; |
94 platform(m_config); | |
95 | 92 |
96 ScrollbarTheme::setMockScrollbarsEnabled(true); | 93 ScrollbarTheme::setMockScrollbarsEnabled(true); |
97 MockScrollableArea* scrollableArea = | 94 MockScrollableArea* scrollableArea = |
98 MockScrollableArea::create(ScrollOffset(0, 100)); | 95 MockScrollableArea::create(ScrollOffset(0, 100)); |
99 FakeGraphicsLayerClient graphicsLayerClient; | 96 FakeGraphicsLayerClient graphicsLayerClient; |
100 graphicsLayerClient.setIsTrackingRasterInvalidations(true); | 97 graphicsLayerClient.setIsTrackingRasterInvalidations(true); |
101 FakeGraphicsLayer graphicsLayer(&graphicsLayerClient); | 98 FakeGraphicsLayer graphicsLayer(&graphicsLayerClient); |
102 graphicsLayer.setDrawsContent(true); | 99 graphicsLayer.setDrawsContent(true); |
103 graphicsLayer.setSize(FloatSize(111, 222)); | 100 graphicsLayer.setSize(FloatSize(111, 222)); |
104 | 101 |
105 EXPECT_CALL(*scrollableArea, layerForHorizontalScrollbar()) | 102 EXPECT_CALL(*scrollableArea, layerForHorizontalScrollbar()) |
106 .WillRepeatedly(Return(&graphicsLayer)); | 103 .WillRepeatedly(Return(&graphicsLayer)); |
107 | 104 |
108 Scrollbar* scrollbar = Scrollbar::create(scrollableArea, HorizontalScrollbar, | 105 Scrollbar* scrollbar = Scrollbar::create(scrollableArea, HorizontalScrollbar, |
109 RegularScrollbar, nullptr); | 106 RegularScrollbar, nullptr); |
110 graphicsLayer.resetTrackedRasterInvalidations(); | 107 graphicsLayer.resetTrackedRasterInvalidations(); |
111 scrollbar->setNeedsPaintInvalidation(NoPart); | 108 scrollbar->setNeedsPaintInvalidation(NoPart); |
112 EXPECT_TRUE(graphicsLayer.hasTrackedRasterInvalidations()); | 109 EXPECT_TRUE(graphicsLayer.hasTrackedRasterInvalidations()); |
113 | 110 |
114 // Forced GC in order to finalize objects depending on the mock object. | 111 // Forced GC in order to finalize objects depending on the mock object. |
115 ThreadState::current()->collectAllGarbage(); | 112 ThreadState::current()->collectAllGarbage(); |
116 } | 113 } |
117 | 114 |
118 TEST_F(ScrollableAreaTest, InvalidatesNonCompositedScrollbarsWhenThumbMoves) { | 115 TEST_F(ScrollableAreaTest, InvalidatesNonCompositedScrollbarsWhenThumbMoves) { |
119 ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler, | 116 ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler> |
120 const TestingPlatformSupport::Config&> | 117 platform; |
121 platform(m_config); | |
122 | 118 |
123 ScrollbarThemeWithMockInvalidation theme; | 119 ScrollbarThemeWithMockInvalidation theme; |
124 MockScrollableArea* scrollableArea = | 120 MockScrollableArea* scrollableArea = |
125 MockScrollableArea::create(ScrollOffset(100, 100)); | 121 MockScrollableArea::create(ScrollOffset(100, 100)); |
126 Scrollbar* horizontalScrollbar = Scrollbar::createForTesting( | 122 Scrollbar* horizontalScrollbar = Scrollbar::createForTesting( |
127 scrollableArea, HorizontalScrollbar, RegularScrollbar, &theme); | 123 scrollableArea, HorizontalScrollbar, RegularScrollbar, &theme); |
128 Scrollbar* verticalScrollbar = Scrollbar::createForTesting( | 124 Scrollbar* verticalScrollbar = Scrollbar::createForTesting( |
129 scrollableArea, VerticalScrollbar, RegularScrollbar, &theme); | 125 scrollableArea, VerticalScrollbar, RegularScrollbar, &theme); |
130 EXPECT_CALL(*scrollableArea, horizontalScrollbar()) | 126 EXPECT_CALL(*scrollableArea, horizontalScrollbar()) |
131 .WillRepeatedly(Return(horizontalScrollbar)); | 127 .WillRepeatedly(Return(horizontalScrollbar)); |
(...skipping 21 matching lines...) Expand all Loading... |
153 scrollableArea->setScrollOffset(ScrollOffset(50, 50), ProgrammaticScroll); | 149 scrollableArea->setScrollOffset(ScrollOffset(50, 50), ProgrammaticScroll); |
154 EXPECT_TRUE(scrollableArea->horizontalScrollbarNeedsPaintInvalidation()); | 150 EXPECT_TRUE(scrollableArea->horizontalScrollbarNeedsPaintInvalidation()); |
155 EXPECT_FALSE(scrollableArea->verticalScrollbarNeedsPaintInvalidation()); | 151 EXPECT_FALSE(scrollableArea->verticalScrollbarNeedsPaintInvalidation()); |
156 scrollableArea->clearNeedsPaintInvalidationForScrollControls(); | 152 scrollableArea->clearNeedsPaintInvalidationForScrollControls(); |
157 | 153 |
158 // Forced GC in order to finalize objects depending on the mock object. | 154 // Forced GC in order to finalize objects depending on the mock object. |
159 ThreadState::current()->collectAllGarbage(); | 155 ThreadState::current()->collectAllGarbage(); |
160 } | 156 } |
161 | 157 |
162 TEST_F(ScrollableAreaTest, InvalidatesCompositedScrollbarsIfPartsNeedRepaint) { | 158 TEST_F(ScrollableAreaTest, InvalidatesCompositedScrollbarsIfPartsNeedRepaint) { |
163 ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler, | 159 ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler> |
164 const TestingPlatformSupport::Config&> | 160 platform; |
165 platform(m_config); | |
166 | 161 |
167 ScrollbarThemeWithMockInvalidation theme; | 162 ScrollbarThemeWithMockInvalidation theme; |
168 MockScrollableArea* scrollableArea = | 163 MockScrollableArea* scrollableArea = |
169 MockScrollableArea::create(ScrollOffset(100, 100)); | 164 MockScrollableArea::create(ScrollOffset(100, 100)); |
170 Scrollbar* horizontalScrollbar = Scrollbar::createForTesting( | 165 Scrollbar* horizontalScrollbar = Scrollbar::createForTesting( |
171 scrollableArea, HorizontalScrollbar, RegularScrollbar, &theme); | 166 scrollableArea, HorizontalScrollbar, RegularScrollbar, &theme); |
172 horizontalScrollbar->clearTrackNeedsRepaint(); | 167 horizontalScrollbar->clearTrackNeedsRepaint(); |
173 horizontalScrollbar->clearThumbNeedsRepaint(); | 168 horizontalScrollbar->clearThumbNeedsRepaint(); |
174 Scrollbar* verticalScrollbar = Scrollbar::createForTesting( | 169 Scrollbar* verticalScrollbar = Scrollbar::createForTesting( |
175 scrollableArea, VerticalScrollbar, RegularScrollbar, &theme); | 170 scrollableArea, VerticalScrollbar, RegularScrollbar, &theme); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 EXPECT_FALSE(horizontalScrollbar->trackNeedsRepaint()); | 230 EXPECT_FALSE(horizontalScrollbar->trackNeedsRepaint()); |
236 EXPECT_FALSE(horizontalScrollbar->thumbNeedsRepaint()); | 231 EXPECT_FALSE(horizontalScrollbar->thumbNeedsRepaint()); |
237 EXPECT_FALSE(verticalScrollbar->trackNeedsRepaint()); | 232 EXPECT_FALSE(verticalScrollbar->trackNeedsRepaint()); |
238 EXPECT_FALSE(verticalScrollbar->thumbNeedsRepaint()); | 233 EXPECT_FALSE(verticalScrollbar->thumbNeedsRepaint()); |
239 | 234 |
240 // Forced GC in order to finalize objects depending on the mock object. | 235 // Forced GC in order to finalize objects depending on the mock object. |
241 ThreadState::current()->collectAllGarbage(); | 236 ThreadState::current()->collectAllGarbage(); |
242 } | 237 } |
243 | 238 |
244 TEST_F(ScrollableAreaTest, RecalculatesScrollbarOverlayIfBackgroundChanges) { | 239 TEST_F(ScrollableAreaTest, RecalculatesScrollbarOverlayIfBackgroundChanges) { |
245 ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler, | 240 ScopedTestingPlatformSupport<TestingPlatformSupportWithMockScheduler> |
246 const TestingPlatformSupport::Config&> | 241 platform; |
247 platform(m_config); | |
248 | 242 |
249 MockScrollableArea* scrollableArea = | 243 MockScrollableArea* scrollableArea = |
250 MockScrollableArea::create(ScrollOffset(0, 100)); | 244 MockScrollableArea::create(ScrollOffset(0, 100)); |
251 | 245 |
252 EXPECT_EQ(ScrollbarOverlayColorThemeDark, | 246 EXPECT_EQ(ScrollbarOverlayColorThemeDark, |
253 scrollableArea->getScrollbarOverlayColorTheme()); | 247 scrollableArea->getScrollbarOverlayColorTheme()); |
254 scrollableArea->recalculateScrollbarOverlayColorTheme(Color(34, 85, 51)); | 248 scrollableArea->recalculateScrollbarOverlayColorTheme(Color(34, 85, 51)); |
255 EXPECT_EQ(ScrollbarOverlayColorThemeLight, | 249 EXPECT_EQ(ScrollbarOverlayColorThemeLight, |
256 scrollableArea->getScrollbarOverlayColorTheme()); | 250 scrollableArea->getScrollbarOverlayColorTheme()); |
257 scrollableArea->recalculateScrollbarOverlayColorTheme(Color(236, 143, 185)); | 251 scrollableArea->recalculateScrollbarOverlayColorTheme(Color(236, 143, 185)); |
258 EXPECT_EQ(ScrollbarOverlayColorThemeDark, | 252 EXPECT_EQ(ScrollbarOverlayColorThemeDark, |
259 scrollableArea->getScrollbarOverlayColorTheme()); | 253 scrollableArea->getScrollbarOverlayColorTheme()); |
260 } | 254 } |
261 | 255 |
262 } // namespace blink | 256 } // namespace blink |
OLD | NEW |