| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "content/browser/web_contents/aura/overscroll_window_delegate.h" | 5 #include "content/browser/web_contents/aura/overscroll_window_delegate.h" |
| 6 | 6 |
| 7 #include "content/browser/renderer_host/overscroll_controller_delegate.h" | 7 #include "content/browser/renderer_host/overscroll_controller_delegate.h" |
| 8 #include "content/public/browser/overscroll_configuration.h" | 8 #include "content/public/browser/overscroll_configuration.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 #include "ui/aura/test/aura_test_base.h" | 10 #include "ui/aura/test/aura_test_base.h" |
| 11 #include "ui/aura/window.h" | 11 #include "ui/aura/window.h" |
| 12 #include "ui/events/gesture_detection/gesture_configuration.h" | 12 #include "ui/events/gesture_detection/gesture_configuration.h" |
| 13 #include "ui/events/test/event_generator.h" | 13 #include "ui/events/test/event_generator.h" |
| 14 | 14 |
| 15 namespace content { | 15 namespace content { |
| 16 | 16 |
| 17 namespace { | 17 namespace { |
| 18 const int kTestWindowWidth = 600; | 18 const int kTestWindowWidth = 600; |
| 19 } | 19 } |
| 20 | 20 |
| 21 class OverscrollWindowDelegateTest : public aura::test::AuraTestBase, | 21 class OverscrollWindowDelegateTest : public aura::test::AuraTestBase, |
| 22 public OverscrollControllerDelegate { | 22 public OverscrollControllerDelegate { |
| 23 public: | 23 public: |
| 24 OverscrollWindowDelegateTest() | 24 OverscrollWindowDelegateTest() |
| 25 : window_(nullptr), | 25 : window_(nullptr), |
| 26 overscroll_complete_(false), | 26 overscroll_complete_(false), |
| 27 overscroll_started_(false), | 27 overscroll_started_(false), |
| 28 mode_changed_(false), |
| 28 current_mode_(OVERSCROLL_NONE), | 29 current_mode_(OVERSCROLL_NONE), |
| 29 touch_start_threshold_(content::GetOverscrollConfig( | 30 touch_start_threshold_(content::GetOverscrollConfig( |
| 30 content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START_TOUCHSCREEN)), | 31 content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START_TOUCHSCREEN)), |
| 31 touch_complete_threshold_(content::GetOverscrollConfig( | 32 touch_complete_threshold_(content::GetOverscrollConfig( |
| 32 content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_COMPLETE)) { | 33 content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_COMPLETE)) { |
| 33 } | 34 } |
| 34 | 35 |
| 35 ~OverscrollWindowDelegateTest() override {} | 36 ~OverscrollWindowDelegateTest() override {} |
| 36 | 37 |
| 37 void Reset() { | 38 void Reset() { |
| 38 overscroll_complete_ = false; | 39 overscroll_complete_ = false; |
| 39 overscroll_started_ = false; | 40 overscroll_started_ = false; |
| 41 mode_changed_ = false; |
| 40 current_mode_ = OVERSCROLL_NONE; | 42 current_mode_ = OVERSCROLL_NONE; |
| 41 window_.reset(CreateNormalWindow( | 43 window_.reset(CreateNormalWindow( |
| 42 0, root_window(), new OverscrollWindowDelegate(this, gfx::Image()))); | 44 0, root_window(), new OverscrollWindowDelegate(this, gfx::Image()))); |
| 43 window_->SetBounds(gfx::Rect(0, 0, kTestWindowWidth, kTestWindowWidth)); | 45 window_->SetBounds(gfx::Rect(0, 0, kTestWindowWidth, kTestWindowWidth)); |
| 44 } | 46 } |
| 45 | 47 |
| 46 // Accessors. | 48 // Accessors. |
| 47 aura::Window* window() { return window_.get(); } | 49 aura::Window* window() { return window_.get(); } |
| 48 | 50 |
| 49 bool overscroll_complete() { return overscroll_complete_; } | 51 bool overscroll_complete() { return overscroll_complete_; } |
| 50 bool overscroll_started() { return overscroll_started_; } | 52 bool overscroll_started() { return overscroll_started_; } |
| 53 bool mode_changed() { return mode_changed_; } |
| 51 | 54 |
| 52 OverscrollMode current_mode() { return current_mode_; } | 55 OverscrollMode current_mode() { return current_mode_; } |
| 53 | 56 |
| 54 const float touch_start_threshold() { | 57 const float touch_start_threshold() { |
| 55 return touch_start_threshold_; | 58 return touch_start_threshold_; |
| 56 } | 59 } |
| 57 | 60 |
| 58 const float touch_complete_threshold() { | 61 const float touch_complete_threshold() { |
| 59 return kTestWindowWidth * touch_complete_threshold_; | 62 return kTestWindowWidth * touch_complete_threshold_; |
| 60 } | 63 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 82 bool OnOverscrollUpdate(float delta_x, float delta_y) override { | 85 bool OnOverscrollUpdate(float delta_x, float delta_y) override { |
| 83 return true; | 86 return true; |
| 84 } | 87 } |
| 85 | 88 |
| 86 void OnOverscrollComplete(OverscrollMode overscroll_mode) override { | 89 void OnOverscrollComplete(OverscrollMode overscroll_mode) override { |
| 87 overscroll_complete_ = true; | 90 overscroll_complete_ = true; |
| 88 } | 91 } |
| 89 | 92 |
| 90 void OnOverscrollModeChange(OverscrollMode old_mode, | 93 void OnOverscrollModeChange(OverscrollMode old_mode, |
| 91 OverscrollMode new_mode) override { | 94 OverscrollMode new_mode) override { |
| 95 mode_changed_ = true; |
| 92 current_mode_ = new_mode; | 96 current_mode_ = new_mode; |
| 93 if (current_mode_ != OVERSCROLL_NONE) | 97 if (current_mode_ != OVERSCROLL_NONE) |
| 94 overscroll_started_ = true; | 98 overscroll_started_ = true; |
| 95 } | 99 } |
| 96 | 100 |
| 97 // Window in which the overscroll window delegate is installed. | 101 // Window in which the overscroll window delegate is installed. |
| 98 scoped_ptr<aura::Window> window_; | 102 scoped_ptr<aura::Window> window_; |
| 99 | 103 |
| 100 // State flags. | 104 // State flags. |
| 101 bool overscroll_complete_; | 105 bool overscroll_complete_; |
| 102 bool overscroll_started_; | 106 bool overscroll_started_; |
| 103 | 107 bool mode_changed_; |
| 104 OverscrollMode current_mode_; | 108 OverscrollMode current_mode_; |
| 105 | 109 |
| 106 // Config defined constants. | 110 // Config defined constants. |
| 107 const float touch_start_threshold_; | 111 const float touch_start_threshold_; |
| 108 const float touch_complete_threshold_; | 112 const float touch_complete_threshold_; |
| 109 | 113 |
| 110 DISALLOW_COPY_AND_ASSIGN(OverscrollWindowDelegateTest); | 114 DISALLOW_COPY_AND_ASSIGN(OverscrollWindowDelegateTest); |
| 111 }; | 115 }; |
| 112 | 116 |
| 113 // Tests that the basic overscroll gesture works and sends updates to the | 117 // Tests that the basic overscroll gesture works and sends updates to the |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 EXPECT_EQ(delegate->overscroll_mode_, OVERSCROLL_NONE); | 164 EXPECT_EQ(delegate->overscroll_mode_, OVERSCROLL_NONE); |
| 161 | 165 |
| 162 // Slide the touch to the left. | 166 // Slide the touch to the left. |
| 163 generator.MoveTouch(gfx::Point(0, 0)); | 167 generator.MoveTouch(gfx::Point(0, 0)); |
| 164 EXPECT_EQ(delegate->overscroll_mode_, OVERSCROLL_WEST); | 168 EXPECT_EQ(delegate->overscroll_mode_, OVERSCROLL_WEST); |
| 165 | 169 |
| 166 // Complete the gesture. | 170 // Complete the gesture. |
| 167 generator.ReleaseTouch(); | 171 generator.ReleaseTouch(); |
| 168 EXPECT_EQ(delegate->overscroll_mode_, OVERSCROLL_NONE); | 172 EXPECT_EQ(delegate->overscroll_mode_, OVERSCROLL_NONE); |
| 169 EXPECT_TRUE(overscroll_complete()); | 173 EXPECT_TRUE(overscroll_complete()); |
| 174 |
| 175 // Generate a mouse events which normally cancel the overscroll. Confirm |
| 176 // that superfluous mode changed events are not dispatched. |
| 177 Reset(); |
| 178 generator.PressLeftButton(); |
| 179 generator.MoveMouseTo(gfx::Point(10, 10)); |
| 180 EXPECT_FALSE(mode_changed()); |
| 170 } | 181 } |
| 171 | 182 |
| 172 // Tests that the overscroll does not start until the gesture gets past a | 183 // Tests that the overscroll does not start until the gesture gets past a |
| 173 // particular threshold. | 184 // particular threshold. |
| 174 TEST_F(OverscrollWindowDelegateTest, OverscrollThreshold) { | 185 TEST_F(OverscrollWindowDelegateTest, OverscrollThreshold) { |
| 175 ui::test::EventGenerator generator(root_window()); | 186 ui::test::EventGenerator generator(root_window()); |
| 176 | 187 |
| 177 // Start an OVERSCROLL_EAST gesture. | 188 // Start an OVERSCROLL_EAST gesture. |
| 178 generator.GestureScrollSequence(gfx::Point(0, 0), | 189 generator.GestureScrollSequence(gfx::Point(0, 0), |
| 179 gfx::Point(touch_start_threshold(), 0), | 190 gfx::Point(touch_start_threshold(), 0), |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 EXPECT_EQ(current_mode(), OVERSCROLL_NONE); | 244 EXPECT_EQ(current_mode(), OVERSCROLL_NONE); |
| 234 EXPECT_FALSE(overscroll_complete()); | 245 EXPECT_FALSE(overscroll_complete()); |
| 235 | 246 |
| 236 // We should be able to restart the overscroll without lifting the finger. | 247 // We should be able to restart the overscroll without lifting the finger. |
| 237 generator.MoveTouch(gfx::Point(touch_x + touch_start_threshold() + 1, 0)); | 248 generator.MoveTouch(gfx::Point(touch_x + touch_start_threshold() + 1, 0)); |
| 238 EXPECT_EQ(current_mode(), OVERSCROLL_EAST); | 249 EXPECT_EQ(current_mode(), OVERSCROLL_EAST); |
| 239 EXPECT_FALSE(overscroll_complete()); | 250 EXPECT_FALSE(overscroll_complete()); |
| 240 } | 251 } |
| 241 | 252 |
| 242 } // namespace content | 253 } // namespace content |
| OLD | NEW |