Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 "content/browser/web_contents/aura/overscroll_window_delegate.h" | |
| 6 | |
| 7 #include "content/browser/renderer_host/overscroll_controller_delegate.h" | |
| 8 #include "content/public/browser/overscroll_configuration.h" | |
| 9 #include "testing/gtest/include/gtest/gtest.h" | |
| 10 #include "ui/aura/test/aura_test_base.h" | |
| 11 #include "ui/aura/window.h" | |
| 12 #include "ui/events/test/event_generator.h" | |
| 13 | |
| 14 namespace content { | |
| 15 | |
| 16 namespace { | |
| 17 const int kTestWindowWidth = 600; | |
| 18 } | |
| 19 | |
| 20 class OverscrollWindowDelegateTest : public aura::test::AuraTestBase, | |
| 21 public OverscrollControllerDelegate { | |
| 22 public: | |
| 23 OverscrollWindowDelegateTest() | |
| 24 : window_(nullptr), | |
| 25 overscroll_complete_(false), | |
| 26 overscroll_started_(false), | |
| 27 current_mode_(OVERSCROLL_NONE), | |
| 28 touch_start_threshold_(content::GetOverscrollConfig( | |
| 29 content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START_TOUCHSCREEN)), | |
| 30 touch_complete_threshold_(content::GetOverscrollConfig( | |
| 31 content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_COMPLETE)) {} | |
| 32 | |
| 33 ~OverscrollWindowDelegateTest() override {} | |
| 34 | |
| 35 void Reset() { | |
| 36 overscroll_complete_ = false; | |
| 37 overscroll_started_ = false; | |
| 38 current_mode_ = OVERSCROLL_NONE; | |
| 39 window_.reset(CreateNormalWindow( | |
| 40 0, root_window(), new OverscrollWindowDelegate(this, gfx::Image()))); | |
| 41 window_->SetBounds(gfx::Rect(0, 0, kTestWindowWidth, kTestWindowWidth)); | |
| 42 } | |
| 43 | |
| 44 // Accessors. | |
| 45 aura::Window* window() { return window_.get(); } | |
| 46 | |
| 47 bool overscroll_complete() { return overscroll_complete_; } | |
| 48 bool overscroll_started() { return overscroll_started_; } | |
| 49 | |
| 50 OverscrollMode current_mode() { return current_mode_; } | |
| 51 | |
| 52 const float touch_start_threshold() { | |
| 53 return touch_start_threshold_; | |
| 54 } | |
| 55 | |
| 56 const float touch_complete_threshold() { | |
| 57 return kTestWindowWidth * touch_complete_threshold_; | |
| 58 } | |
| 59 | |
| 60 protected: | |
| 61 // aura::test::AuraTestBase: | |
| 62 void SetUp() override { | |
| 63 aura::test::AuraTestBase::SetUp(); | |
| 64 Reset(); | |
| 65 } | |
| 66 | |
| 67 void TearDown() override { | |
| 68 window_.reset(); | |
| 69 aura::test::AuraTestBase::TearDown(); | |
| 70 } | |
| 71 | |
| 72 private: | |
| 73 // OverscrollControllerDelegate: | |
| 74 gfx::Rect GetVisibleBounds() const override { | |
| 75 return gfx::Rect(600, 0); | |
| 76 } | |
| 77 | |
| 78 bool OnOverscrollUpdate(float delta_x, float delta_y) override { | |
| 79 return true; | |
| 80 } | |
| 81 | |
| 82 void OnOverscrollComplete(OverscrollMode overscroll_mode) override { | |
| 83 overscroll_complete_ = true; | |
| 84 } | |
| 85 | |
| 86 void OnOverscrollModeChange(OverscrollMode old_mode, | |
| 87 OverscrollMode new_mode) override { | |
| 88 current_mode_ = new_mode; | |
| 89 if (current_mode_ != OVERSCROLL_NONE) | |
| 90 overscroll_started_ = true; | |
| 91 } | |
| 92 | |
| 93 // Window in which the overscroll window delegate is installed. | |
| 94 scoped_ptr<aura::Window> window_; | |
| 95 | |
| 96 // State flags. | |
| 97 bool overscroll_complete_; | |
| 98 bool overscroll_started_; | |
| 99 | |
| 100 OverscrollMode current_mode_; | |
| 101 | |
| 102 // Config defined constants. | |
| 103 const float touch_start_threshold_; | |
| 104 const float touch_complete_threshold_; | |
| 105 | |
| 106 DISALLOW_COPY_AND_ASSIGN(OverscrollWindowDelegateTest); | |
| 107 }; | |
| 108 | |
| 109 // Tests that the basic overscroll gesture works and sends updates to the | |
| 110 // delegate. | |
| 111 TEST_F(OverscrollWindowDelegateTest, BasicOverscroll) { | |
| 112 ui::test::EventGenerator generator(root_window()); | |
| 113 | |
| 114 // Start an OVERSCROLL_EAST gesture. | |
| 115 generator.GestureScrollSequence( | |
| 116 gfx::Point(10, 10), | |
| 117 gfx::Point(20 + touch_complete_threshold(), 10), | |
|
mfomitchev
2015/03/27 00:14:05
10 + touch_complete_threshold() + 1?
Nina
2015/03/27 17:52:37
By using 10, we add 1 per motion, which I thought
mfomitchev
2015/03/31 22:16:31
We want to ensure that if we are over the threshol
Nina
2015/04/01 18:10:00
OK, modified test accordingly.
| |
| 118 base::TimeDelta::FromMilliseconds(10), | |
| 119 10); | |
| 120 EXPECT_TRUE(overscroll_started()); | |
| 121 EXPECT_EQ(current_mode(), OVERSCROLL_EAST); | |
|
mfomitchev
2015/03/27 00:14:05
SO by the end of the gesture I'd think the mode wo
Nina
2015/03/27 17:52:37
Yes, the mode in OWD is changed to none. However,
mfomitchev
2015/03/31 22:16:31
Acknowledged.
| |
| 122 EXPECT_TRUE(overscroll_complete()); | |
| 123 | |
| 124 Reset(); | |
| 125 // Start an OVERSCROLL_WEST gesture. | |
| 126 generator.GestureScrollSequence( | |
| 127 gfx::Point(20 + touch_complete_threshold(), 10), | |
| 128 gfx::Point(10, 10), | |
| 129 base::TimeDelta::FromMilliseconds(10), | |
| 130 10); | |
| 131 EXPECT_TRUE(overscroll_started()); | |
| 132 EXPECT_EQ(current_mode(), OVERSCROLL_WEST); | |
| 133 EXPECT_TRUE(overscroll_complete()); | |
| 134 } | |
| 135 | |
| 136 // Tests that the overscroll does not start until the gesture gets past a | |
| 137 // particular threshold. | |
| 138 TEST_F(OverscrollWindowDelegateTest, OverscrollThreshold) { | |
| 139 ui::test::EventGenerator generator(root_window()); | |
| 140 | |
| 141 // Start an OVERSCROLL_EAST gesture. | |
| 142 generator.GestureScrollSequence( | |
| 143 gfx::Point(10, 10), | |
| 144 gfx::Point(10 + touch_start_threshold(), 10), | |
| 145 base::TimeDelta::FromMilliseconds(10), | |
| 146 10); | |
| 147 EXPECT_FALSE(overscroll_started()); | |
| 148 EXPECT_EQ(current_mode(), OVERSCROLL_NONE); | |
| 149 EXPECT_FALSE(overscroll_complete()); | |
| 150 | |
| 151 Reset(); | |
| 152 // Start an OVERSCROLL_WEST gesture. | |
| 153 generator.GestureScrollSequence( | |
| 154 gfx::Point(10 + touch_start_threshold(), 10), | |
| 155 gfx::Point(10, 10), | |
| 156 base::TimeDelta::FromMilliseconds(10), | |
| 157 10); | |
| 158 EXPECT_FALSE(overscroll_started()); | |
| 159 EXPECT_EQ(current_mode(), OVERSCROLL_NONE); | |
| 160 EXPECT_FALSE(overscroll_complete()); | |
| 161 } | |
| 162 | |
| 163 // Tests that the overscroll is aborted if the gesture does not get past the | |
| 164 // completion threshold. | |
| 165 TEST_F(OverscrollWindowDelegateTest, AbortOverscrollThreshold) { | |
| 166 ui::test::EventGenerator generator(root_window()); | |
| 167 | |
| 168 // Start an OVERSCROLL_EAST gesture. | |
| 169 generator.GestureScrollSequence( | |
| 170 gfx::Point(10, 10), | |
| 171 gfx::Point(10 + touch_start_threshold() + 10, 10), | |
|
mfomitchev
2015/03/27 00:14:05
10 + touch_start_threshold() + 1?
Nina
2015/03/27 17:52:37
Same comment as above, I think it's cleaner (espec
mfomitchev
2015/03/31 22:16:31
ditto
Nina
2015/04/01 18:10:00
Done.
| |
| 172 base::TimeDelta::FromMilliseconds(10), | |
| 173 10); | |
| 174 EXPECT_TRUE(overscroll_started()); | |
| 175 EXPECT_EQ(current_mode(), OVERSCROLL_NONE); | |
| 176 EXPECT_FALSE(overscroll_complete()); | |
| 177 | |
| 178 Reset(); | |
| 179 // Start an OVERSCROLL_WEST gesture. | |
| 180 generator.GestureScrollSequence( | |
| 181 gfx::Point(10 + touch_start_threshold() + 10, 10), | |
| 182 gfx::Point(10, 10), | |
| 183 base::TimeDelta::FromMilliseconds(10), | |
| 184 10); | |
| 185 EXPECT_TRUE(overscroll_started()); | |
| 186 EXPECT_EQ(current_mode(), OVERSCROLL_NONE); | |
| 187 EXPECT_FALSE(overscroll_complete()); | |
| 188 } | |
| 189 | |
| 190 } // namespace content | |
| OLD | NEW |