| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "base/time/time.h" | 7 #include "base/time/time.h" |
| 8 #include "content/browser/renderer_host/input/synthetic_gesture.h" | 8 #include "content/browser/renderer_host/input/synthetic_gesture.h" |
| 9 #include "content/browser/renderer_host/input/synthetic_gesture_controller.h" | 9 #include "content/browser/renderer_host/input/synthetic_gesture_controller.h" |
| 10 #include "content/browser/renderer_host/input/synthetic_gesture_target.h" | 10 #include "content/browser/renderer_host/input/synthetic_gesture_target.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 const float kMinScalingSpanInDips = 27.5f; | 40 const float kMinScalingSpanInDips = 27.5f; |
| 41 | 41 |
| 42 class MockSyntheticGesture : public SyntheticGesture { | 42 class MockSyntheticGesture : public SyntheticGesture { |
| 43 public: | 43 public: |
| 44 MockSyntheticGesture(bool* finished, int num_steps) | 44 MockSyntheticGesture(bool* finished, int num_steps) |
| 45 : finished_(finished), | 45 : finished_(finished), |
| 46 num_steps_(num_steps), | 46 num_steps_(num_steps), |
| 47 step_count_(0) { | 47 step_count_(0) { |
| 48 *finished_ = false; | 48 *finished_ = false; |
| 49 } | 49 } |
| 50 virtual ~MockSyntheticGesture() {} | 50 ~MockSyntheticGesture() override {} |
| 51 | 51 |
| 52 virtual Result ForwardInputEvents(const base::TimeTicks& timestamp, | 52 Result ForwardInputEvents(const base::TimeTicks& timestamp, |
| 53 SyntheticGestureTarget* target) override { | 53 SyntheticGestureTarget* target) override { |
| 54 step_count_++; | 54 step_count_++; |
| 55 if (step_count_ == num_steps_) { | 55 if (step_count_ == num_steps_) { |
| 56 *finished_ = true; | 56 *finished_ = true; |
| 57 return SyntheticGesture::GESTURE_FINISHED; | 57 return SyntheticGesture::GESTURE_FINISHED; |
| 58 } else if (step_count_ > num_steps_) { | 58 } else if (step_count_ > num_steps_) { |
| 59 *finished_ = true; | 59 *finished_ = true; |
| 60 // Return arbitrary failure. | 60 // Return arbitrary failure. |
| 61 return SyntheticGesture::GESTURE_SOURCE_TYPE_NOT_IMPLEMENTED; | 61 return SyntheticGesture::GESTURE_SOURCE_TYPE_NOT_IMPLEMENTED; |
| 62 } | 62 } |
| 63 | 63 |
| 64 return SyntheticGesture::GESTURE_RUNNING; | 64 return SyntheticGesture::GESTURE_RUNNING; |
| 65 } | 65 } |
| 66 | 66 |
| 67 protected: | 67 protected: |
| 68 bool* finished_; | 68 bool* finished_; |
| 69 int num_steps_; | 69 int num_steps_; |
| 70 int step_count_; | 70 int step_count_; |
| 71 }; | 71 }; |
| 72 | 72 |
| 73 class MockSyntheticGestureTarget : public SyntheticGestureTarget { | 73 class MockSyntheticGestureTarget : public SyntheticGestureTarget { |
| 74 public: | 74 public: |
| 75 MockSyntheticGestureTarget() | 75 MockSyntheticGestureTarget() |
| 76 : flush_requested_(false), | 76 : flush_requested_(false), |
| 77 pointer_assumed_stopped_time_ms_(kPointerAssumedStoppedTimeMs) {} | 77 pointer_assumed_stopped_time_ms_(kPointerAssumedStoppedTimeMs) {} |
| 78 virtual ~MockSyntheticGestureTarget() {} | 78 ~MockSyntheticGestureTarget() override {} |
| 79 | 79 |
| 80 // SyntheticGestureTarget: | 80 // SyntheticGestureTarget: |
| 81 virtual void DispatchInputEventToPlatform( | 81 void DispatchInputEventToPlatform(const WebInputEvent& event) override {} |
| 82 const WebInputEvent& event) override {} | |
| 83 | 82 |
| 84 virtual void SetNeedsFlush() override { | 83 void SetNeedsFlush() override { flush_requested_ = true; } |
| 85 flush_requested_ = true; | |
| 86 } | |
| 87 | 84 |
| 88 virtual SyntheticGestureParams::GestureSourceType | 85 SyntheticGestureParams::GestureSourceType |
| 89 GetDefaultSyntheticGestureSourceType() const override { | 86 GetDefaultSyntheticGestureSourceType() const override { |
| 90 return SyntheticGestureParams::TOUCH_INPUT; | 87 return SyntheticGestureParams::TOUCH_INPUT; |
| 91 } | 88 } |
| 92 | 89 |
| 93 virtual base::TimeDelta PointerAssumedStoppedTime() const override { | 90 base::TimeDelta PointerAssumedStoppedTime() const override { |
| 94 return base::TimeDelta::FromMilliseconds(pointer_assumed_stopped_time_ms_); | 91 return base::TimeDelta::FromMilliseconds(pointer_assumed_stopped_time_ms_); |
| 95 } | 92 } |
| 96 | 93 |
| 97 void set_pointer_assumed_stopped_time_ms(int time_ms) { | 94 void set_pointer_assumed_stopped_time_ms(int time_ms) { |
| 98 pointer_assumed_stopped_time_ms_ = time_ms; | 95 pointer_assumed_stopped_time_ms_ = time_ms; |
| 99 } | 96 } |
| 100 | 97 |
| 101 virtual float GetTouchSlopInDips() const override { | 98 float GetTouchSlopInDips() const override { return kTouchSlopInDips; } |
| 102 return kTouchSlopInDips; | |
| 103 } | |
| 104 | 99 |
| 105 virtual float GetMinScalingSpanInDips() const override { | 100 float GetMinScalingSpanInDips() const override { |
| 106 return kMinScalingSpanInDips; | 101 return kMinScalingSpanInDips; |
| 107 } | 102 } |
| 108 | 103 |
| 109 bool flush_requested() const { return flush_requested_; } | 104 bool flush_requested() const { return flush_requested_; } |
| 110 void ClearFlushRequest() { flush_requested_ = false; } | 105 void ClearFlushRequest() { flush_requested_ = false; } |
| 111 | 106 |
| 112 private: | 107 private: |
| 113 bool flush_requested_; | 108 bool flush_requested_; |
| 114 | 109 |
| 115 int pointer_assumed_stopped_time_ms_; | 110 int pointer_assumed_stopped_time_ms_; |
| 116 }; | 111 }; |
| 117 | 112 |
| 118 class MockScrollGestureTarget : public MockSyntheticGestureTarget { | 113 class MockScrollGestureTarget : public MockSyntheticGestureTarget { |
| 119 public: | 114 public: |
| 120 MockScrollGestureTarget() : total_abs_scroll_distance_length_(0) {} | 115 MockScrollGestureTarget() : total_abs_scroll_distance_length_(0) {} |
| 121 virtual ~MockScrollGestureTarget() {} | 116 ~MockScrollGestureTarget() override {} |
| 122 | 117 |
| 123 gfx::Vector2dF start_to_end_distance() const { | 118 gfx::Vector2dF start_to_end_distance() const { |
| 124 return start_to_end_distance_; | 119 return start_to_end_distance_; |
| 125 } | 120 } |
| 126 float total_abs_scroll_distance_length() const { | 121 float total_abs_scroll_distance_length() const { |
| 127 return total_abs_scroll_distance_length_; | 122 return total_abs_scroll_distance_length_; |
| 128 } | 123 } |
| 129 | 124 |
| 130 protected: | 125 protected: |
| 131 gfx::Vector2dF start_to_end_distance_; | 126 gfx::Vector2dF start_to_end_distance_; |
| 132 float total_abs_scroll_distance_length_; | 127 float total_abs_scroll_distance_length_; |
| 133 }; | 128 }; |
| 134 | 129 |
| 135 class MockScrollMouseTarget : public MockScrollGestureTarget { | 130 class MockScrollMouseTarget : public MockScrollGestureTarget { |
| 136 public: | 131 public: |
| 137 MockScrollMouseTarget() {} | 132 MockScrollMouseTarget() {} |
| 138 virtual ~MockScrollMouseTarget() {} | 133 ~MockScrollMouseTarget() override {} |
| 139 | 134 |
| 140 virtual void DispatchInputEventToPlatform( | 135 void DispatchInputEventToPlatform(const WebInputEvent& event) override { |
| 141 const WebInputEvent& event) override { | |
| 142 ASSERT_EQ(event.type, WebInputEvent::MouseWheel); | 136 ASSERT_EQ(event.type, WebInputEvent::MouseWheel); |
| 143 const WebMouseWheelEvent& mouse_wheel_event = | 137 const WebMouseWheelEvent& mouse_wheel_event = |
| 144 static_cast<const WebMouseWheelEvent&>(event); | 138 static_cast<const WebMouseWheelEvent&>(event); |
| 145 gfx::Vector2dF delta(mouse_wheel_event.deltaX, mouse_wheel_event.deltaY); | 139 gfx::Vector2dF delta(mouse_wheel_event.deltaX, mouse_wheel_event.deltaY); |
| 146 start_to_end_distance_ += delta; | 140 start_to_end_distance_ += delta; |
| 147 total_abs_scroll_distance_length_ += delta.Length(); | 141 total_abs_scroll_distance_length_ += delta.Length(); |
| 148 } | 142 } |
| 149 }; | 143 }; |
| 150 | 144 |
| 151 class MockScrollTouchTarget : public MockScrollGestureTarget { | 145 class MockScrollTouchTarget : public MockScrollGestureTarget { |
| 152 public: | 146 public: |
| 153 MockScrollTouchTarget() : started_(false) {} | 147 MockScrollTouchTarget() : started_(false) {} |
| 154 virtual ~MockScrollTouchTarget() {} | 148 ~MockScrollTouchTarget() override {} |
| 155 | 149 |
| 156 virtual void DispatchInputEventToPlatform( | 150 void DispatchInputEventToPlatform(const WebInputEvent& event) override { |
| 157 const WebInputEvent& event) override { | |
| 158 ASSERT_TRUE(WebInputEvent::isTouchEventType(event.type)); | 151 ASSERT_TRUE(WebInputEvent::isTouchEventType(event.type)); |
| 159 const WebTouchEvent& touch_event = static_cast<const WebTouchEvent&>(event); | 152 const WebTouchEvent& touch_event = static_cast<const WebTouchEvent&>(event); |
| 160 ASSERT_EQ(touch_event.touchesLength, 1U); | 153 ASSERT_EQ(touch_event.touchesLength, 1U); |
| 161 | 154 |
| 162 if (!started_) { | 155 if (!started_) { |
| 163 ASSERT_EQ(touch_event.type, WebInputEvent::TouchStart); | 156 ASSERT_EQ(touch_event.type, WebInputEvent::TouchStart); |
| 164 start_.SetPoint(touch_event.touches[0].position.x, | 157 start_.SetPoint(touch_event.touches[0].position.x, |
| 165 touch_event.touches[0].position.y); | 158 touch_event.touches[0].position.y); |
| 166 last_touch_point_ = start_; | 159 last_touch_point_ = start_; |
| 167 started_ = true; | 160 started_ = true; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 193 ZOOM_DIRECTION_UNKNOWN, | 186 ZOOM_DIRECTION_UNKNOWN, |
| 194 ZOOM_IN, | 187 ZOOM_IN, |
| 195 ZOOM_OUT | 188 ZOOM_OUT |
| 196 }; | 189 }; |
| 197 | 190 |
| 198 MockSyntheticPinchTouchTarget() | 191 MockSyntheticPinchTouchTarget() |
| 199 : initial_pointer_distance_(0), | 192 : initial_pointer_distance_(0), |
| 200 last_pointer_distance_(0), | 193 last_pointer_distance_(0), |
| 201 zoom_direction_(ZOOM_DIRECTION_UNKNOWN), | 194 zoom_direction_(ZOOM_DIRECTION_UNKNOWN), |
| 202 started_(false) {} | 195 started_(false) {} |
| 203 virtual ~MockSyntheticPinchTouchTarget() {} | 196 ~MockSyntheticPinchTouchTarget() override {} |
| 204 | 197 |
| 205 virtual void DispatchInputEventToPlatform( | 198 void DispatchInputEventToPlatform(const WebInputEvent& event) override { |
| 206 const WebInputEvent& event) override { | |
| 207 ASSERT_TRUE(WebInputEvent::isTouchEventType(event.type)); | 199 ASSERT_TRUE(WebInputEvent::isTouchEventType(event.type)); |
| 208 const WebTouchEvent& touch_event = static_cast<const WebTouchEvent&>(event); | 200 const WebTouchEvent& touch_event = static_cast<const WebTouchEvent&>(event); |
| 209 ASSERT_EQ(touch_event.touchesLength, 2U); | 201 ASSERT_EQ(touch_event.touchesLength, 2U); |
| 210 | 202 |
| 211 if (!started_) { | 203 if (!started_) { |
| 212 ASSERT_EQ(touch_event.type, WebInputEvent::TouchStart); | 204 ASSERT_EQ(touch_event.type, WebInputEvent::TouchStart); |
| 213 | 205 |
| 214 start_0_ = gfx::PointF(touch_event.touches[0].position); | 206 start_0_ = gfx::PointF(touch_event.touches[0].position); |
| 215 start_1_ = gfx::PointF(touch_event.touches[1].position); | 207 start_1_ = gfx::PointF(touch_event.touches[1].position); |
| 216 last_pointer_distance_ = (start_0_ - start_1_).Length(); | 208 last_pointer_distance_ = (start_0_ - start_1_).Length(); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 float last_pointer_distance_; | 263 float last_pointer_distance_; |
| 272 ZoomDirection zoom_direction_; | 264 ZoomDirection zoom_direction_; |
| 273 gfx::PointF start_0_; | 265 gfx::PointF start_0_; |
| 274 gfx::PointF start_1_; | 266 gfx::PointF start_1_; |
| 275 bool started_; | 267 bool started_; |
| 276 }; | 268 }; |
| 277 | 269 |
| 278 class MockSyntheticTapGestureTarget : public MockSyntheticGestureTarget { | 270 class MockSyntheticTapGestureTarget : public MockSyntheticGestureTarget { |
| 279 public: | 271 public: |
| 280 MockSyntheticTapGestureTarget() : state_(NOT_STARTED) {} | 272 MockSyntheticTapGestureTarget() : state_(NOT_STARTED) {} |
| 281 virtual ~MockSyntheticTapGestureTarget() {} | 273 ~MockSyntheticTapGestureTarget() override {} |
| 282 | 274 |
| 283 bool GestureFinished() const { return state_ == FINISHED; } | 275 bool GestureFinished() const { return state_ == FINISHED; } |
| 284 gfx::PointF position() const { return position_; } | 276 gfx::PointF position() const { return position_; } |
| 285 base::TimeDelta GetDuration() const { return stop_time_ - start_time_; } | 277 base::TimeDelta GetDuration() const { return stop_time_ - start_time_; } |
| 286 | 278 |
| 287 protected: | 279 protected: |
| 288 enum GestureState { | 280 enum GestureState { |
| 289 NOT_STARTED, | 281 NOT_STARTED, |
| 290 STARTED, | 282 STARTED, |
| 291 FINISHED | 283 FINISHED |
| 292 }; | 284 }; |
| 293 | 285 |
| 294 gfx::PointF position_; | 286 gfx::PointF position_; |
| 295 base::TimeDelta start_time_; | 287 base::TimeDelta start_time_; |
| 296 base::TimeDelta stop_time_; | 288 base::TimeDelta stop_time_; |
| 297 GestureState state_; | 289 GestureState state_; |
| 298 }; | 290 }; |
| 299 | 291 |
| 300 class MockSyntheticTapTouchTarget : public MockSyntheticTapGestureTarget { | 292 class MockSyntheticTapTouchTarget : public MockSyntheticTapGestureTarget { |
| 301 public: | 293 public: |
| 302 MockSyntheticTapTouchTarget() {} | 294 MockSyntheticTapTouchTarget() {} |
| 303 virtual ~MockSyntheticTapTouchTarget() {} | 295 ~MockSyntheticTapTouchTarget() override {} |
| 304 | 296 |
| 305 virtual void DispatchInputEventToPlatform( | 297 void DispatchInputEventToPlatform(const WebInputEvent& event) override { |
| 306 const WebInputEvent& event) override { | |
| 307 ASSERT_TRUE(WebInputEvent::isTouchEventType(event.type)); | 298 ASSERT_TRUE(WebInputEvent::isTouchEventType(event.type)); |
| 308 const WebTouchEvent& touch_event = static_cast<const WebTouchEvent&>(event); | 299 const WebTouchEvent& touch_event = static_cast<const WebTouchEvent&>(event); |
| 309 ASSERT_EQ(touch_event.touchesLength, 1U); | 300 ASSERT_EQ(touch_event.touchesLength, 1U); |
| 310 | 301 |
| 311 switch (state_) { | 302 switch (state_) { |
| 312 case NOT_STARTED: | 303 case NOT_STARTED: |
| 313 EXPECT_EQ(touch_event.type, WebInputEvent::TouchStart); | 304 EXPECT_EQ(touch_event.type, WebInputEvent::TouchStart); |
| 314 position_ = gfx::PointF(touch_event.touches[0].position); | 305 position_ = gfx::PointF(touch_event.touches[0].position); |
| 315 start_time_ = base::TimeDelta::FromMilliseconds( | 306 start_time_ = base::TimeDelta::FromMilliseconds( |
| 316 static_cast<int64>(touch_event.timeStampSeconds * 1000)); | 307 static_cast<int64>(touch_event.timeStampSeconds * 1000)); |
| 317 state_ = STARTED; | 308 state_ = STARTED; |
| 318 break; | 309 break; |
| 319 case STARTED: | 310 case STARTED: |
| 320 EXPECT_EQ(touch_event.type, WebInputEvent::TouchEnd); | 311 EXPECT_EQ(touch_event.type, WebInputEvent::TouchEnd); |
| 321 EXPECT_EQ(position_, gfx::PointF(touch_event.touches[0].position)); | 312 EXPECT_EQ(position_, gfx::PointF(touch_event.touches[0].position)); |
| 322 stop_time_ = base::TimeDelta::FromMilliseconds( | 313 stop_time_ = base::TimeDelta::FromMilliseconds( |
| 323 static_cast<int64>(touch_event.timeStampSeconds * 1000)); | 314 static_cast<int64>(touch_event.timeStampSeconds * 1000)); |
| 324 state_ = FINISHED; | 315 state_ = FINISHED; |
| 325 break; | 316 break; |
| 326 case FINISHED: | 317 case FINISHED: |
| 327 EXPECT_FALSE(true); | 318 EXPECT_FALSE(true); |
| 328 break; | 319 break; |
| 329 } | 320 } |
| 330 } | 321 } |
| 331 }; | 322 }; |
| 332 | 323 |
| 333 class MockSyntheticTapMouseTarget : public MockSyntheticTapGestureTarget { | 324 class MockSyntheticTapMouseTarget : public MockSyntheticTapGestureTarget { |
| 334 public: | 325 public: |
| 335 MockSyntheticTapMouseTarget() {} | 326 MockSyntheticTapMouseTarget() {} |
| 336 virtual ~MockSyntheticTapMouseTarget() {} | 327 ~MockSyntheticTapMouseTarget() override {} |
| 337 | 328 |
| 338 virtual void DispatchInputEventToPlatform( | 329 void DispatchInputEventToPlatform(const WebInputEvent& event) override { |
| 339 const WebInputEvent& event) override { | |
| 340 ASSERT_TRUE(WebInputEvent::isMouseEventType(event.type)); | 330 ASSERT_TRUE(WebInputEvent::isMouseEventType(event.type)); |
| 341 const WebMouseEvent& mouse_event = static_cast<const WebMouseEvent&>(event); | 331 const WebMouseEvent& mouse_event = static_cast<const WebMouseEvent&>(event); |
| 342 | 332 |
| 343 switch (state_) { | 333 switch (state_) { |
| 344 case NOT_STARTED: | 334 case NOT_STARTED: |
| 345 EXPECT_EQ(mouse_event.type, WebInputEvent::MouseDown); | 335 EXPECT_EQ(mouse_event.type, WebInputEvent::MouseDown); |
| 346 EXPECT_EQ(mouse_event.button, WebMouseEvent::ButtonLeft); | 336 EXPECT_EQ(mouse_event.button, WebMouseEvent::ButtonLeft); |
| 347 EXPECT_EQ(mouse_event.clickCount, 1); | 337 EXPECT_EQ(mouse_event.clickCount, 1); |
| 348 position_ = gfx::PointF(mouse_event.x, mouse_event.y); | 338 position_ = gfx::PointF(mouse_event.x, mouse_event.y); |
| 349 start_time_ = base::TimeDelta::FromMilliseconds( | 339 start_time_ = base::TimeDelta::FromMilliseconds( |
| (...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 995 EXPECT_TRUE(tap_target->GestureFinished()); | 985 EXPECT_TRUE(tap_target->GestureFinished()); |
| 996 EXPECT_EQ(tap_target->position(), params.position); | 986 EXPECT_EQ(tap_target->position(), params.position); |
| 997 EXPECT_EQ(tap_target->GetDuration().InMilliseconds(), params.duration_ms); | 987 EXPECT_EQ(tap_target->GetDuration().InMilliseconds(), params.duration_ms); |
| 998 EXPECT_GE(GetTotalTime(), | 988 EXPECT_GE(GetTotalTime(), |
| 999 base::TimeDelta::FromMilliseconds(params.duration_ms)); | 989 base::TimeDelta::FromMilliseconds(params.duration_ms)); |
| 1000 } | 990 } |
| 1001 | 991 |
| 1002 } // namespace | 992 } // namespace |
| 1003 | 993 |
| 1004 } // namespace content | 994 } // namespace content |
| OLD | NEW |