Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: content/browser/android/overscroll_controller_android_unittest.cc

Issue 2884423003: Use scroll-boundary-behavior to control overscroll-refresh/glow on android. (Closed)
Patch Set: rebase and update comments Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2017 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 #include "content/browser/android/overscroll_controller_android.h"
6 #include <memory>
7 #include "base/macros.h"
8 #include "base/memory/ptr_util.h"
9 #include "cc/layers/layer.h"
10 #include "testing/gmock/include/gmock/gmock.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/android/overscroll_glow.h"
13 #include "ui/android/overscroll_refresh.h"
14 #include "ui/events/blink/did_overscroll_params.h"
15
16 using ui::OverscrollGlow;
17 using ui::OverscrollRefresh;
18 using ::testing::_;
19 using ::testing::Return;
20
21 namespace content {
22
23 namespace {
24
25 class MockGlow : public OverscrollGlow {
26 public:
27 MockGlow() : OverscrollGlow(nullptr) {}
28 MOCK_METHOD5(OnOverscrolled,
29 bool(base::TimeTicks,
30 const gfx::Vector2dF&,
31 gfx::Vector2dF,
32 gfx::Vector2dF,
33 const gfx::Vector2dF&));
34 };
35
36 class MockRefresh : public OverscrollRefresh {
37 public:
38 MockRefresh() : OverscrollRefresh(nullptr) {}
39 MOCK_METHOD1(OnOverscrolled, void(bool));
40 MOCK_CONST_METHOD0(IsActive, bool());
41 MOCK_CONST_METHOD0(IsAwaitingScrollUpdateAck, bool());
42 };
43
44 class OverscrollControllerAndroidUnitTest : public testing::Test {
45 public:
46 OverscrollControllerAndroidUnitTest() {
47 std::unique_ptr<MockGlow> glow_ptr = base::MakeUnique<MockGlow>();
48 std::unique_ptr<MockRefresh> refresh_ptr = base::MakeUnique<MockRefresh>();
49 glow = glow_ptr.get();
50 refresh = refresh_ptr.get();
51 controller = new OverscrollControllerAndroid(
52 nullptr, 560, std::move(glow_ptr), std::move(refresh_ptr));
53 }
54
55 ui::DidOverscrollParams CreateVerticalOverscrollParams() {
56 ui::DidOverscrollParams params;
57 params.accumulated_overscroll = gfx::Vector2dF(0, 1);
58 params.latest_overscroll_delta = gfx::Vector2dF(0, 1);
59 params.current_fling_velocity = gfx::Vector2dF(0, 1);
60 params.causal_event_viewport_point = gfx::PointF(100, 100);
61 return params;
62 }
63
64 MockGlow* glow;
65 MockRefresh* refresh;
66 OverscrollControllerAndroid* controller;
67 };
68
69 TEST_F(OverscrollControllerAndroidUnitTest,
70 ScrollBoundaryBehaviorAutoAllowsGlowAndNavigation) {
71 ui::DidOverscrollParams params = CreateVerticalOverscrollParams();
72 params.scroll_boundary_behavior.y = cc::ScrollBoundaryBehavior::
73 ScrollBoundaryBehaviorType::kScrollBoundaryBehaviorTypeAuto;
74
75 EXPECT_CALL(*refresh, OnOverscrolled(true));
76 EXPECT_CALL(*refresh, IsActive()).WillOnce(Return(true));
77 EXPECT_CALL(*refresh, IsAwaitingScrollUpdateAck()).Times(0);
78 EXPECT_CALL(*glow, OnOverscrolled(_, _, _, _, _)).Times(0);
79
80 controller->OnOverscrolled(params);
81 testing::Mock::VerifyAndClearExpectations(&refresh);
82 }
83
84 TEST_F(OverscrollControllerAndroidUnitTest,
85 ScrollBoundaryBehaviorContainPreventsNavigation) {
86 ui::DidOverscrollParams params = CreateVerticalOverscrollParams();
87 params.scroll_boundary_behavior.y = cc::ScrollBoundaryBehavior::
88 ScrollBoundaryBehaviorType::kScrollBoundaryBehaviorTypeContain;
89
90 EXPECT_CALL(*refresh, OnOverscrolled(false));
91 EXPECT_CALL(*refresh, IsActive()).WillOnce(Return(false));
92 EXPECT_CALL(*refresh, IsAwaitingScrollUpdateAck()).WillOnce(Return(false));
93 EXPECT_CALL(*glow,
94 OnOverscrolled(_, gfx::Vector2dF(0, 560), gfx::Vector2dF(0, 560),
95 gfx::Vector2dF(0, 560), _));
96
97 controller->OnOverscrolled(params);
98 testing::Mock::VerifyAndClearExpectations(refresh);
99 testing::Mock::VerifyAndClearExpectations(glow);
100
101 // Test that the "contain" set on x-axis would not affect navigation.
102 params.scroll_boundary_behavior.y = cc::ScrollBoundaryBehavior::
103 ScrollBoundaryBehaviorType::kScrollBoundaryBehaviorTypeAuto;
104 params.scroll_boundary_behavior.x = cc::ScrollBoundaryBehavior::
105 ScrollBoundaryBehaviorType::kScrollBoundaryBehaviorTypeContain;
106
107 EXPECT_CALL(*refresh, OnOverscrolled(true));
108 EXPECT_CALL(*refresh, IsActive()).WillOnce(Return(true));
109 EXPECT_CALL(*refresh, IsAwaitingScrollUpdateAck()).Times(0);
110 EXPECT_CALL(*glow, OnOverscrolled(_, _, _, _, _)).Times(0);
111
112 controller->OnOverscrolled(params);
113 testing::Mock::VerifyAndClearExpectations(refresh);
114 testing::Mock::VerifyAndClearExpectations(glow);
115 }
116
117 TEST_F(OverscrollControllerAndroidUnitTest,
118 ScrollBoundaryBehaviorNonePreventsNavigationAndGlow) {
119 ui::DidOverscrollParams params = CreateVerticalOverscrollParams();
120 params.scroll_boundary_behavior.y = cc::ScrollBoundaryBehavior::
121 ScrollBoundaryBehaviorType::kScrollBoundaryBehaviorTypeNone;
122
123 EXPECT_CALL(*refresh, OnOverscrolled(false));
124 EXPECT_CALL(*refresh, IsActive()).WillOnce(Return(false));
125 EXPECT_CALL(*refresh, IsAwaitingScrollUpdateAck()).WillOnce(Return(false));
126 EXPECT_CALL(*glow, OnOverscrolled(_, gfx::Vector2dF(), gfx::Vector2dF(),
127 gfx::Vector2dF(), _));
128
129 controller->OnOverscrolled(params);
130 testing::Mock::VerifyAndClearExpectations(refresh);
131 testing::Mock::VerifyAndClearExpectations(glow);
132
133 // Test that the "none" set on y-axis would not affect glow on x-axis.
134 params.accumulated_overscroll = gfx::Vector2dF(1, 1);
135 params.latest_overscroll_delta = gfx::Vector2dF(1, 1);
136 params.current_fling_velocity = gfx::Vector2dF(1, 1);
137
138 EXPECT_CALL(*refresh, OnOverscrolled(false));
139 EXPECT_CALL(*refresh, IsActive()).WillOnce(Return(false));
140 EXPECT_CALL(*refresh, IsAwaitingScrollUpdateAck()).WillOnce(Return(false));
141 EXPECT_CALL(*glow,
142 OnOverscrolled(_, gfx::Vector2dF(560, 0), gfx::Vector2dF(560, 0),
143 gfx::Vector2dF(560, 0), _));
144
145 controller->OnOverscrolled(params);
146 testing::Mock::VerifyAndClearExpectations(refresh);
147 testing::Mock::VerifyAndClearExpectations(glow);
148 }
149
150 } // namespace
151
152 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698