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

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: Adds missing ifdef for aura Created 7 years, 8 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 #if defined(USE_AURA)
19 #include "ui/aura/env.h"
20 #include "ui/aura/test/test_screen.h"
21 #endif
22
23 using base::TimeDelta;
24
25 namespace content {
26
27 namespace {
28
29 class MockSmoothScrollGesture : public SmoothScrollGesture {
30 public:
31 MockSmoothScrollGesture() :
32 called_(0) {
33 }
34
35 // SmoothScrollGesture implementation:
36 virtual bool ForwardInputEvents(base::TimeTicks now,
37 RenderWidgetHost* host) OVERRIDE {
38 ++called_;
39 return true;
40 }
41
42 int called_;
43
44 protected:
45 virtual ~MockSmoothScrollGesture() {
46 }
47 };
48
49 class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
50 public:
51 MockRenderWidgetHostDelegate() {
52 }
53 virtual ~MockRenderWidgetHostDelegate() {}
54 };
55
56 class MockRenderWidgetHost : public RenderWidgetHostImpl {
57 public:
58 MockRenderWidgetHost(
59 RenderWidgetHostDelegate* delegate,
60 RenderProcessHost* process,
61 int routing_id)
62 : RenderWidgetHostImpl(delegate, process, routing_id) {
63 }
64 virtual ~MockRenderWidgetHost() {}
65 };
66
67 class TestView : public TestRenderWidgetHostView {
68 public:
69 explicit TestView(RenderWidgetHostImpl* rwh)
70 : TestRenderWidgetHostView(rwh),
71 mock_gesture_(NULL) {
72 }
73 virtual ~TestView() {}
74
75 // TestRenderWidgetHostView implementation:
76 virtual SmoothScrollGesture* CreateSmoothScrollGesture(
77 bool scroll_down, int pixels_to_scroll, int mouse_event_x,
78 int mouse_event_y) OVERRIDE {
79 mock_gesture_ = new MockSmoothScrollGesture();
80 return mock_gesture_;
81 }
82
83 MockSmoothScrollGesture* mock_gesture_;
84 };
85
86 class SmoothScrollGestureControllerTest : public testing::Test {
87 public:
88 SmoothScrollGestureControllerTest() : process_(NULL) {
89 }
90 ~SmoothScrollGestureControllerTest() {
91 }
92
93 protected:
94 // testing::Test implementation:
95 virtual void SetUp() OVERRIDE {
96 browser_context_.reset(new TestBrowserContext());
97 delegate_.reset(new MockRenderWidgetHostDelegate());
98 process_ = new MockRenderProcessHost(browser_context_.get());
99 #if defined(USE_AURA)
100 screen_.reset(aura::TestScreen::Create());
101 gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, screen_.get());
102 #endif
103 host_.reset(
104 new MockRenderWidgetHost(delegate_.get(), process_, MSG_ROUTING_NONE));
105 view_.reset(new TestView(host_.get()));
106 host_->SetView(view_.get());
107 host_->Init();
108 }
109
110 virtual void TearDown() OVERRIDE {
111 view_.reset();
112 host_.reset();
113 delegate_.reset();
114 process_ = NULL;
115 browser_context_.reset();
116
117 #if defined(USE_AURA)
118 aura::Env::DeleteInstance();
119 screen_.reset();
120 #endif
121
122 // Process all pending tasks to avoid leaks.
123 MessageLoop::current()->RunUntilIdle();
124 }
125
126 void PostQuitMessageAndRun() {
127 MessageLoop::current()->PostDelayedTask(
128 FROM_HERE, MessageLoop::QuitClosure(),
129 TimeDelta::FromMilliseconds(
130 controller_.SyntheticScrollMessageInterval()));
131 MessageLoop::current()->Run();
132 }
133
134 MessageLoopForUI message_loop_;
135
136 scoped_ptr<TestBrowserContext> browser_context_;
137 MockRenderProcessHost* process_; // Deleted automatically by the widget.
138 scoped_ptr<MockRenderWidgetHostDelegate> delegate_;
139 scoped_ptr<MockRenderWidgetHost> host_;
140 scoped_ptr<TestView> view_;
141 #if defined(USE_AURA)
142 scoped_ptr<gfx::Screen> screen_;
143 #endif
144
145 SmoothScrollGestureController controller_;
146 };
147
148 TEST_F(SmoothScrollGestureControllerTest, Tick) {
149 ViewHostMsg_BeginSmoothScroll_Params params;
150 params.scroll_down = true;
151 params.pixels_to_scroll = 10;
152 params.mouse_event_x = 20;
153 params.mouse_event_y = 30;
154
155 // Begin a smooth scroll.
156 // The mock gesture will be "called_" twice, then it'll stop being called
157 // whilst we have pending input events.
158 // Once they're all ACK'd, it'll be called again.
159 controller_.OnBeginSmoothScroll(view_.get(), params);
160 EXPECT_TRUE(view_->mock_gesture_);
161 EXPECT_EQ(1, view_->mock_gesture_->called_);
162
163 controller_.OnForwardInputEvent();
164 PostQuitMessageAndRun();
165 EXPECT_EQ(2, view_->mock_gesture_->called_);
166
167 controller_.OnForwardInputEvent();
168 PostQuitMessageAndRun();
169 EXPECT_EQ(2, view_->mock_gesture_->called_);
170
171 controller_.OnInputEventACK(host_.get());
172 PostQuitMessageAndRun();
173 EXPECT_EQ(2, view_->mock_gesture_->called_);
174
175 controller_.OnInputEventACK(host_.get());
176 PostQuitMessageAndRun();
177 EXPECT_LT(2, view_->mock_gesture_->called_);
178 }
179
180 } // namespace
181
182 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/smooth_scroll_gesture_controller.cc ('k') | content/common/view_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698