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

Side by Side Diff: content/browser/renderer_host/smooth_scroll_gesture_controller_unittest.cc

Issue 11858007: Splits SmoothGestureController from RenderWidgetHostImpl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 7 years, 10 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013 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 "base/basictypes.h"
6 #include "base/memory/scoped_ptr.h"
7 #include "base/time.h"
8 #include "content/browser/renderer_host/render_widget_host_delegate.h"
9 #include "content/browser/renderer_host/smooth_scroll_gesture_controller.h"
10 #include "content/browser/renderer_host/test_render_view_host.h"
11 #include "content/common/view_messages.h"
12 #include "content/port/browser/render_widget_host_view_port.h"
13 #include "content/port/browser/smooth_scroll_gesture.h"
14 #include "content/public/test/mock_render_process_host.h"
15 #include "content/public/test/test_browser_context.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 using base::TimeDelta;
19
20 namespace content {
21
22 namespace {
23
24 class MockSmoothScrollGesture : public SmoothScrollGesture {
25 public:
26 MockSmoothScrollGesture() :
27 called_(0) {
28 }
29
30 // SmoothScrollGesture implementation:
31 virtual bool ForwardInputEvents(base::TimeTicks now,
32 RenderWidgetHost* host) OVERRIDE {
33 ++called_;
34 return true;
35 }
36
37 int called_;
38 };
39
40 class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
41 public:
42 MockRenderWidgetHostDelegate() {
43 }
44 virtual ~MockRenderWidgetHostDelegate() {}
45 };
46
47 class MockRenderWidgetHost : public RenderWidgetHostImpl {
48 public:
49 MockRenderWidgetHost(
50 RenderWidgetHostDelegate* delegate,
51 RenderProcessHost* process,
52 int routing_id)
53 : RenderWidgetHostImpl(delegate, process, routing_id) {
54 }
55 virtual ~MockRenderWidgetHost() {}
56 };
57
58 class TestView : public TestRenderWidgetHostView {
59 public:
60 explicit TestView(RenderWidgetHostImpl* rwh)
61 : TestRenderWidgetHostView(rwh),
62 mock_gesture_(NULL) {
63 }
64 virtual ~TestView() {}
65
66 // TestRenderWidgetHostView implementation:
67 virtual SmoothScrollGesture* CreateSmoothScrollGesture(
68 bool scroll_down, int pixels_to_scroll, int mouse_event_x,
69 int mouse_event_y) OVERRIDE {
70 mock_gesture_ = new MockSmoothScrollGesture();
71 return mock_gesture_;
72 }
73
74 MockSmoothScrollGesture* mock_gesture_;
75 };
76
77 class SmoothScrollGestureControllerTest : public testing::Test {
78 public:
79 SmoothScrollGestureControllerTest() : process_(NULL) {
80 }
81 ~SmoothScrollGestureControllerTest() {
82 }
83
84 protected:
85 // testing::Test implementation:
86 virtual void SetUp() OVERRIDE {
87 browser_context_.reset(new TestBrowserContext());
88 delegate_.reset(new MockRenderWidgetHostDelegate());
89 process_ = new MockRenderProcessHost(browser_context_.get());
90 host_.reset(
91 new MockRenderWidgetHost(delegate_.get(), process_, MSG_ROUTING_NONE));
92 view_.reset(new TestView(host_.get()));
93 host_->SetView(view_.get());
94 host_->Init();
95 }
96
97 virtual void TearDown() OVERRIDE {
98 view_.reset();
99 host_.reset();
100 delegate_.reset();
101 process_ = NULL;
102 browser_context_.reset();
103
104 // Process all pending tasks to avoid leaks.
105 MessageLoop::current()->RunUntilIdle();
106 }
107
108 void PostQuitMessageAndRun() {
109 MessageLoop::current()->PostDelayedTask(
110 FROM_HERE, MessageLoop::QuitClosure(),
111 TimeDelta::FromMilliseconds(
112 controller_.SyntheticScrollMessageInterval()));
113 MessageLoop::current()->Run();
114 }
115
116 MessageLoopForUI message_loop_;
117
118 scoped_ptr<TestBrowserContext> browser_context_;
119 MockRenderProcessHost* process_; // Deleted automatically by the widget.
120 scoped_ptr<MockRenderWidgetHostDelegate> delegate_;
121 scoped_ptr<MockRenderWidgetHost> host_;
122 scoped_ptr<TestView> view_;
123
124 SmoothScrollGestureController controller_;
125 };
126
127 TEST_F(SmoothScrollGestureControllerTest, Tick) {
128 ViewHostMsg_BeginSmoothScroll_Params params;
129 params.scroll_down = true;
130 params.pixels_to_scroll = 10;
131 params.mouse_event_x = 20;
132 params.mouse_event_y = 30;
133
134 // Begin a smooth scroll.
135 // The mock gesture will be "called_" twice, then it'll stop being called
136 // whilst we have pending input events.
137 // Once they're all ACK'd, it'll be called again.
138 controller_.OnBeginSmoothScroll(view_.get(), params);
139 EXPECT_TRUE(view_->mock_gesture_);
140 EXPECT_EQ(1, view_->mock_gesture_->called_);
141
142 controller_.OnForwardInputEvent();
143 PostQuitMessageAndRun();
144 EXPECT_EQ(2, view_->mock_gesture_->called_);
145
146 controller_.OnForwardInputEvent();
147 PostQuitMessageAndRun();
148 EXPECT_EQ(2, view_->mock_gesture_->called_);
149
150 controller_.OnInputEventACK(host_.get());
151 PostQuitMessageAndRun();
152 EXPECT_EQ(2, view_->mock_gesture_->called_);
153
154 controller_.OnInputEventACK(host_.get());
155 PostQuitMessageAndRun();
156 EXPECT_LT(2, view_->mock_gesture_->called_);
157 }
158
159 } // namespace
160
161 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698