| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "ui/chromeos/touch_exploration_controller.h" | 5 #include "ui/chromeos/touch_exploration_controller.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 } | 169 } |
| 170 | 170 |
| 171 float GetMaxDistanceFromEdge() const { | 171 float GetMaxDistanceFromEdge() const { |
| 172 return touch_exploration_controller_->kMaxDistanceFromEdge; | 172 return touch_exploration_controller_->kMaxDistanceFromEdge; |
| 173 } | 173 } |
| 174 | 174 |
| 175 float GetSlopDistanceFromEdge() const { | 175 float GetSlopDistanceFromEdge() const { |
| 176 return touch_exploration_controller_->kSlopDistanceFromEdge; | 176 return touch_exploration_controller_->kSlopDistanceFromEdge; |
| 177 } | 177 } |
| 178 | 178 |
| 179 void SetTickClockForTesting(base::TickClock* simulated_clock) { | |
| 180 touch_exploration_controller_->tick_clock_ = simulated_clock; | |
| 181 } | |
| 182 | |
| 183 void SetTouchAccessibilityAnchorPoint(const gfx::Point& location) { | 179 void SetTouchAccessibilityAnchorPoint(const gfx::Point& location) { |
| 184 touch_exploration_controller_->SetTouchAccessibilityAnchorPoint(location); | 180 touch_exploration_controller_->SetTouchAccessibilityAnchorPoint(location); |
| 185 } | 181 } |
| 186 | 182 |
| 187 private: | 183 private: |
| 188 std::unique_ptr<TouchExplorationController> touch_exploration_controller_; | 184 std::unique_ptr<TouchExplorationController> touch_exploration_controller_; |
| 189 | 185 |
| 190 DISALLOW_COPY_AND_ASSIGN(TouchExplorationControllerTestApi); | 186 DISALLOW_COPY_AND_ASSIGN(TouchExplorationControllerTestApi); |
| 191 }; | 187 }; |
| 192 | 188 |
| 193 class TouchExplorationTest : public aura::test::AuraTestBase { | 189 class TouchExplorationTest : public aura::test::AuraTestBase { |
| 194 public: | 190 public: |
| 195 TouchExplorationTest() : simulated_clock_(new base::SimpleTestTickClock()) { | 191 TouchExplorationTest() : simulated_clock_(nullptr) {} |
| 196 // Tests fail if time is ever 0. | |
| 197 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(10)); | |
| 198 } | |
| 199 ~TouchExplorationTest() override {} | 192 ~TouchExplorationTest() override {} |
| 200 | 193 |
| 201 void SetUp() override { | 194 void SetUp() override { |
| 202 if (gl::GetGLImplementation() == gl::kGLImplementationNone) | 195 if (gl::GetGLImplementation() == gl::kGLImplementationNone) |
| 203 gl::GLSurfaceTestSupport::InitializeOneOff(); | 196 gl::GLSurfaceTestSupport::InitializeOneOff(); |
| 204 aura::test::AuraTestBase::SetUp(); | 197 aura::test::AuraTestBase::SetUp(); |
| 205 cursor_client_.reset(new aura::test::TestCursorClient(root_window())); | 198 cursor_client_.reset(new aura::test::TestCursorClient(root_window())); |
| 206 root_window()->AddPreTargetHandler(&event_capturer_); | 199 root_window()->AddPreTargetHandler(&event_capturer_); |
| 207 generator_.reset(new test::EventGenerator(root_window())); | 200 generator_.reset(new test::EventGenerator(root_window())); |
| 208 // The generator takes ownership of the tick clock. | 201 |
| 209 generator_->SetTickClock( | 202 simulated_clock_ = new base::SimpleTestTickClock(); |
| 203 // Tests fail if time is ever 0. |
| 204 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(10)); |
| 205 // ui takes ownership of the tick clock. |
| 206 ui::SetEventTickClockForTesting( |
| 210 std::unique_ptr<base::TickClock>(simulated_clock_)); | 207 std::unique_ptr<base::TickClock>(simulated_clock_)); |
| 208 |
| 211 cursor_client()->ShowCursor(); | 209 cursor_client()->ShowCursor(); |
| 212 cursor_client()->DisableMouseEvents(); | 210 cursor_client()->DisableMouseEvents(); |
| 213 } | 211 } |
| 214 | 212 |
| 215 void TearDown() override { | 213 void TearDown() override { |
| 214 ui::SetEventTickClockForTesting(nullptr); |
| 216 root_window()->RemovePreTargetHandler(&event_capturer_); | 215 root_window()->RemovePreTargetHandler(&event_capturer_); |
| 217 SwitchTouchExplorationMode(false); | 216 SwitchTouchExplorationMode(false); |
| 218 cursor_client_.reset(); | 217 cursor_client_.reset(); |
| 219 aura::test::AuraTestBase::TearDown(); | 218 aura::test::AuraTestBase::TearDown(); |
| 220 } | 219 } |
| 221 | 220 |
| 222 protected: | 221 protected: |
| 223 aura::client::CursorClient* cursor_client() { return cursor_client_.get(); } | 222 aura::client::CursorClient* cursor_client() { return cursor_client_.get(); } |
| 224 | 223 |
| 225 const ScopedVector<ui::Event>& GetCapturedEvents() { | 224 const ScopedVector<ui::Event>& GetCapturedEvents() { |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 | 275 |
| 277 void AdvanceSimulatedTimePastPotentialTapDelay() { | 276 void AdvanceSimulatedTimePastPotentialTapDelay() { |
| 278 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(1000)); | 277 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(1000)); |
| 279 touch_exploration_controller_->CallTapTimerNowIfRunningForTesting(); | 278 touch_exploration_controller_->CallTapTimerNowIfRunningForTesting(); |
| 280 } | 279 } |
| 281 | 280 |
| 282 void SuppressVLOGs(bool suppress) { | 281 void SuppressVLOGs(bool suppress) { |
| 283 touch_exploration_controller_->SuppressVLOGsForTesting(suppress); | 282 touch_exploration_controller_->SuppressVLOGsForTesting(suppress); |
| 284 } | 283 } |
| 285 | 284 |
| 286 void SetTickClock() { | |
| 287 touch_exploration_controller_->SetTickClockForTesting( | |
| 288 static_cast<base::TickClock*>(simulated_clock_)); | |
| 289 } | |
| 290 | |
| 291 void SwitchTouchExplorationMode(bool on) { | 285 void SwitchTouchExplorationMode(bool on) { |
| 292 if (!on && touch_exploration_controller_.get()) { | 286 if (!on && touch_exploration_controller_.get()) { |
| 293 touch_exploration_controller_.reset(); | 287 touch_exploration_controller_.reset(); |
| 294 } else if (on && !touch_exploration_controller_.get()) { | 288 } else if (on && !touch_exploration_controller_.get()) { |
| 295 touch_exploration_controller_.reset( | 289 touch_exploration_controller_.reset( |
| 296 new ui::TouchExplorationControllerTestApi( | 290 new ui::TouchExplorationControllerTestApi( |
| 297 new TouchExplorationController(root_window(), &delegate_))); | 291 new TouchExplorationController(root_window(), &delegate_))); |
| 298 cursor_client()->ShowCursor(); | 292 cursor_client()->ShowCursor(); |
| 299 cursor_client()->DisableMouseEvents(); | 293 cursor_client()->DisableMouseEvents(); |
| 300 } | 294 } |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 } | 379 } |
| 386 | 380 |
| 387 float GetMaxDistanceFromEdge() const { | 381 float GetMaxDistanceFromEdge() const { |
| 388 return touch_exploration_controller_->GetMaxDistanceFromEdge(); | 382 return touch_exploration_controller_->GetMaxDistanceFromEdge(); |
| 389 } | 383 } |
| 390 | 384 |
| 391 float GetSlopDistanceFromEdge() const { | 385 float GetSlopDistanceFromEdge() const { |
| 392 return touch_exploration_controller_->GetSlopDistanceFromEdge(); | 386 return touch_exploration_controller_->GetSlopDistanceFromEdge(); |
| 393 } | 387 } |
| 394 | 388 |
| 395 base::TimeTicks Now() { | 389 base::TimeTicks Now() { return ui::EventTimeForNow(); } |
| 396 // This is the same as what EventTimeForNow() does, but here we do it | |
| 397 // with our simulated clock. | |
| 398 return simulated_clock_->NowTicks(); | |
| 399 } | |
| 400 | 390 |
| 401 void SetTouchAccessibilityAnchorPoint(const gfx::Point& location) { | 391 void SetTouchAccessibilityAnchorPoint(const gfx::Point& location) { |
| 402 touch_exploration_controller_->SetTouchAccessibilityAnchorPoint(location); | 392 touch_exploration_controller_->SetTouchAccessibilityAnchorPoint(location); |
| 403 } | 393 } |
| 404 | 394 |
| 405 std::unique_ptr<test::EventGenerator> generator_; | 395 std::unique_ptr<test::EventGenerator> generator_; |
| 406 ui::GestureDetector::Config gesture_detector_config_; | 396 ui::GestureDetector::Config gesture_detector_config_; |
| 407 // Owned by |generator_|. | 397 // Owned by |ui|. |
| 408 base::SimpleTestTickClock* simulated_clock_; | 398 base::SimpleTestTickClock* simulated_clock_; |
| 409 MockTouchExplorationControllerDelegate delegate_; | 399 MockTouchExplorationControllerDelegate delegate_; |
| 410 | 400 |
| 411 private: | 401 private: |
| 412 EventCapturer event_capturer_; | 402 EventCapturer event_capturer_; |
| 413 std::unique_ptr<TouchExplorationControllerTestApi> | 403 std::unique_ptr<TouchExplorationControllerTestApi> |
| 414 touch_exploration_controller_; | 404 touch_exploration_controller_; |
| 415 std::unique_ptr<aura::test::TestCursorClient> cursor_client_; | 405 std::unique_ptr<aura::test::TestCursorClient> cursor_client_; |
| 416 | 406 |
| 417 DISALLOW_COPY_AND_ASSIGN(TouchExplorationTest); | 407 DISALLOW_COPY_AND_ASSIGN(TouchExplorationTest); |
| (...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 839 EXPECT_FALSE(IsInNoFingersDownState()); | 829 EXPECT_FALSE(IsInNoFingersDownState()); |
| 840 generator_->ReleaseTouchId(3); | 830 generator_->ReleaseTouchId(3); |
| 841 EXPECT_TRUE(IsInNoFingersDownState()); | 831 EXPECT_TRUE(IsInNoFingersDownState()); |
| 842 } | 832 } |
| 843 | 833 |
| 844 // Double-tapping, going into passthrough, and holding for the longpress | 834 // Double-tapping, going into passthrough, and holding for the longpress |
| 845 // time should send a touch press and released (right click) | 835 // time should send a touch press and released (right click) |
| 846 // to the location of the last successful touch exploration. | 836 // to the location of the last successful touch exploration. |
| 847 TEST_F(TouchExplorationTest, DoubleTapLongPress) { | 837 TEST_F(TouchExplorationTest, DoubleTapLongPress) { |
| 848 SwitchTouchExplorationMode(true); | 838 SwitchTouchExplorationMode(true); |
| 849 SetTickClock(); | |
| 850 // Tap at one location, and get a mouse move event. | 839 // Tap at one location, and get a mouse move event. |
| 851 gfx::Point tap_location(11, 12); | 840 gfx::Point tap_location(11, 12); |
| 852 generator_->set_current_location(tap_location); | 841 generator_->set_current_location(tap_location); |
| 853 generator_->PressTouch(); | 842 generator_->PressTouch(); |
| 854 generator_->ReleaseTouch(); | 843 generator_->ReleaseTouch(); |
| 855 AdvanceSimulatedTimePastTapDelay(); | 844 AdvanceSimulatedTimePastTapDelay(); |
| 856 | 845 |
| 857 std::vector<ui::LocatedEvent*> events = | 846 std::vector<ui::LocatedEvent*> events = |
| 858 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED); | 847 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED); |
| 859 ASSERT_EQ(1U, events.size()); | 848 ASSERT_EQ(1U, events.size()); |
| (...skipping 964 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1824 generator_->PressTouch(); | 1813 generator_->PressTouch(); |
| 1825 generator_->MoveTouch(initial_press); | 1814 generator_->MoveTouch(initial_press); |
| 1826 generator_->MoveTouch(*point); | 1815 generator_->MoveTouch(*point); |
| 1827 generator_->ReleaseTouch(); | 1816 generator_->ReleaseTouch(); |
| 1828 ASSERT_EQ(1U, delegate_.NumExitScreenSounds()); | 1817 ASSERT_EQ(1U, delegate_.NumExitScreenSounds()); |
| 1829 delegate_.ResetCountersToZero(); | 1818 delegate_.ResetCountersToZero(); |
| 1830 } | 1819 } |
| 1831 } | 1820 } |
| 1832 | 1821 |
| 1833 } // namespace ui | 1822 } // namespace ui |
| OLD | NEW |