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

Side by Side Diff: ui/touch_selection/touch_selection_controller_unittest.cc

Issue 1046783002: wip: Aura-specific implementation of unified touch selection: touch_selection (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moving the responsibility for showing the menu into the client. Created 5 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
OLDNEW
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/touch_selection/touch_selection_controller.h" 5 #include "ui/touch_selection/touch_selection_controller.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "testing/gmock/include/gmock/gmock.h" 9 #include "testing/gmock/include/gmock/gmock.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 18 matching lines...) Expand all
29 void SetOrientation(TouchHandleOrientation orientation) override {} 29 void SetOrientation(TouchHandleOrientation orientation) override {}
30 void SetAlpha(float alpha) override {} 30 void SetAlpha(float alpha) override {}
31 void SetFocus(const gfx::PointF& position) override {} 31 void SetFocus(const gfx::PointF& position) override {}
32 gfx::RectF GetVisibleBounds() const override { 32 gfx::RectF GetVisibleBounds() const override {
33 return *intersects_rect_ ? gfx::RectF(-1000, -1000, 2000, 2000) 33 return *intersects_rect_ ? gfx::RectF(-1000, -1000, 2000, 2000)
34 : gfx::RectF(-1000, -1000, 0, 0); 34 : gfx::RectF(-1000, -1000, 0, 0);
35 } 35 }
36 36
37 private: 37 private:
38 bool* intersects_rect_; 38 bool* intersects_rect_;
39
40 DISALLOW_COPY_AND_ASSIGN(MockTouchHandleDrawable);
39 }; 41 };
40 42
41 } // namespace 43 class MockTouchSelectionController : public TouchSelectionController,
42
43 class TouchSelectionControllerTest : public testing::Test,
44 public TouchSelectionControllerClient { 44 public TouchSelectionControllerClient {
45 public: 45 public:
46 TouchSelectionControllerTest() 46 explicit MockTouchSelectionController(bool show_on_tap_for_empty_editable)
47 : caret_moved_(false), 47 : TouchSelectionController(
48 this,
49 base::TimeDelta::FromMicroseconds(kDefaultTapTimeoutMs),
50 kDefaulTapSlop,
51 show_on_tap_for_empty_editable),
52 animation_enabled_(true),
53 dragging_enabled_(false),
54 needs_animate_(false),
55 caret_moved_(false),
48 selection_moved_(false), 56 selection_moved_(false),
49 selection_points_swapped_(false), 57 selection_points_swapped_(false) {}
50 needs_animate_(false),
51 animation_enabled_(true),
52 dragging_enabled_(false) {}
53 58
54 ~TouchSelectionControllerTest() override {} 59 ~MockTouchSelectionController() override {}
55 60
56 // testing::Test implementation. 61 void set_animation_enabled(bool enabled) { animation_enabled_ = enabled; }
57 62
58 void SetUp() override { 63 void set_dragging_enabled(bool enabled) { dragging_enabled_ = enabled; }
59 // Default touch selection controller is created with 64
60 // |show_on_tap_for_empty_editable| flag set to false. Use 65 const gfx::PointF& GetLastEventAnchor() const { return last_event_start_; }
61 // |AllowShowingOnTapForEmptyEditable()| function to override it. 66
62 bool show_on_tap_for_empty_editable = false; 67 std::vector<SelectionEventType> GetAndResetEvents() {
63 controller_.reset(new TouchSelectionController( 68 std::vector<SelectionEventType> events;
64 this, 69 events.swap(events_);
65 base::TimeDelta::FromMilliseconds(kDefaultTapTimeoutMs), 70 return events;
66 kDefaulTapSlop,
67 show_on_tap_for_empty_editable));
68 } 71 }
69 72
70 void TearDown() override { controller_.reset(); } 73 bool GetAndResetNeedsAnimate() {
74 bool needs_animate = needs_animate_;
75 RunAnimation();
76 return needs_animate;
77 }
71 78
72 // TouchSelectionControllerClient implementation. 79 bool GetAndResetCaretMoved() {
80 bool moved = caret_moved_;
81 caret_moved_ = false;
82 return moved;
83 }
84
85 bool GetAndResetSelectionMoved() {
86 bool moved = selection_moved_;
87 selection_moved_ = false;
88 return moved;
89 }
90
91 bool GetAndResetSelectionPointsSwapped() {
92 bool swapped = selection_points_swapped_;
93 selection_points_swapped_ = false;
94 return swapped;
95 }
96
97 const gfx::PointF& GetLastCaretPosition() const { return caret_position_; }
98 const gfx::PointF& GetLastSelectionStart() const { return selection_start_; }
99 const gfx::PointF& GetLastSelectionEnd() const { return selection_end_; }
100
101 private:
102 void RunAnimation() {
103 base::TimeTicks now = base::TimeTicks::Now();
104 while (needs_animate_) {
105 needs_animate_ = Animate(now);
106 now += base::TimeDelta::FromMilliseconds(16);
107 }
108 }
109
110 // TouchSelectionController implementation.
111
112 void OnSelectionEvent(SelectionEventType event,
113 const gfx::PointF& position) override {
114 events_.push_back(event);
115 last_event_start_ = position;
116 }
73 117
74 bool SupportsAnimation() const override { return animation_enabled_; } 118 bool SupportsAnimation() const override { return animation_enabled_; }
75 119
76 void SetNeedsAnimate() override { needs_animate_ = true; } 120 void SetNeedsAnimate() override { needs_animate_ = true; }
77 121
122 scoped_ptr<TouchHandleDrawable> CreateDrawable() override {
123 return make_scoped_ptr(new MockTouchHandleDrawable(&dragging_enabled_));
124 }
125
126 // TouchSelectionControllerClient implementation.
127
78 void MoveCaret(const gfx::PointF& position) override { 128 void MoveCaret(const gfx::PointF& position) override {
79 caret_moved_ = true; 129 caret_moved_ = true;
80 caret_position_ = position; 130 caret_position_ = position;
81 } 131 }
82 132
83 void SelectBetweenCoordinates(const gfx::PointF& base, 133 void SelectBetweenCoordinates(const gfx::PointF& base,
84 const gfx::PointF& extent) override { 134 const gfx::PointF& extent) override {
85 if (base == selection_end_ && extent == selection_start_) 135 if (base == selection_end_ && extent == selection_start_)
86 selection_points_swapped_ = true; 136 selection_points_swapped_ = true;
87 137
88 selection_start_ = base; 138 selection_start_ = base;
89 selection_end_ = extent; 139 selection_end_ = extent;
90 } 140 }
91 141
92 void MoveRangeSelectionExtent(const gfx::PointF& extent) override { 142 void MoveRangeSelectionExtent(const gfx::PointF& extent) override {
93 selection_moved_ = true; 143 selection_moved_ = true;
94 selection_end_ = extent; 144 selection_end_ = extent;
95 } 145 }
96 146
97 void OnSelectionEvent(SelectionEventType event, 147 bool animation_enabled_;
98 const gfx::PointF& end_position) override { 148 bool dragging_enabled_;
99 events_.push_back(event); 149 bool needs_animate_;
100 last_event_start_ = end_position; 150 gfx::PointF last_event_start_;
151 std::vector<SelectionEventType> events_;
152 gfx::PointF caret_position_;
153 gfx::PointF selection_start_;
154 gfx::PointF selection_end_;
155 bool caret_moved_;
156 bool selection_moved_;
157 bool selection_points_swapped_;
158
159 DISALLOW_COPY_AND_ASSIGN(MockTouchSelectionController);
160 };
161
162 } // namespace
163
164 class TouchSelectionControllerTest : public testing::Test {
165 public:
166 TouchSelectionControllerTest() {}
167 ~TouchSelectionControllerTest() override {}
168
169 protected:
170 void AllowShowingOnTapForEmptyEditable() {
171 bool show_on_tap_for_empty_editable = true;
172 controller_.reset(
173 new MockTouchSelectionController(show_on_tap_for_empty_editable));
101 } 174 }
102 175
103 scoped_ptr<TouchHandleDrawable> CreateDrawable() override { 176 bool ClearSelection() {
104 return make_scoped_ptr(new MockTouchHandleDrawable(&dragging_enabled_)); 177 return controller_->OnSelectionBoundsUpdated(SelectionBound(),
178 SelectionBound());
105 } 179 }
106 180
107 void AllowShowingOnTapForEmptyEditable() { 181 bool ClearInsertion() { return ClearSelection(); }
108 bool show_on_tap_for_empty_editable = true;
109 controller_.reset(new TouchSelectionController(
110 this,
111 base::TimeDelta::FromMilliseconds(kDefaultTapTimeoutMs),
112 kDefaulTapSlop,
113 show_on_tap_for_empty_editable));
114 }
115 182
116 void SetAnimationEnabled(bool enabled) { animation_enabled_ = enabled; } 183 bool ChangeInsertion(const gfx::RectF& rect, bool visible) {
117 void SetDraggingEnabled(bool enabled) { dragging_enabled_ = enabled; }
118
119 void ClearSelection() {
120 controller_->OnSelectionBoundsChanged(SelectionBound(),
121 SelectionBound());
122 }
123
124 void ClearInsertion() { ClearSelection(); }
125
126 void ChangeInsertion(const gfx::RectF& rect, bool visible) {
127 SelectionBound bound; 184 SelectionBound bound;
128 bound.set_type(SelectionBound::CENTER); 185 bound.set_type(SelectionBound::CENTER);
129 bound.SetEdge(rect.origin(), rect.bottom_left()); 186 bound.SetEdge(rect.origin(), rect.bottom_left());
130 bound.set_visible(visible); 187 bound.set_visible(visible);
131 controller_->OnSelectionBoundsChanged(bound, bound); 188 return controller_->OnSelectionBoundsUpdated(bound, bound);
132 } 189 }
133 190
134 void ChangeSelection(const gfx::RectF& start_rect, 191 bool ChangeSelection(const gfx::RectF& start_rect,
135 bool start_visible, 192 bool start_visible,
136 const gfx::RectF& end_rect, 193 const gfx::RectF& end_rect,
137 bool end_visible) { 194 bool end_visible) {
138 SelectionBound start_bound, end_bound; 195 SelectionBound start_bound, end_bound;
139 start_bound.set_type(SelectionBound::LEFT); 196 start_bound.set_type(SelectionBound::LEFT);
140 end_bound.set_type(SelectionBound::RIGHT); 197 end_bound.set_type(SelectionBound::RIGHT);
141 start_bound.SetEdge(start_rect.origin(), start_rect.bottom_left()); 198 start_bound.SetEdge(start_rect.origin(), start_rect.bottom_left());
142 end_bound.SetEdge(end_rect.origin(), end_rect.bottom_left()); 199 end_bound.SetEdge(end_rect.origin(), end_rect.bottom_left());
143 start_bound.set_visible(start_visible); 200 start_bound.set_visible(start_visible);
144 end_bound.set_visible(end_visible); 201 end_bound.set_visible(end_visible);
145 controller_->OnSelectionBoundsChanged(start_bound, end_bound); 202 return controller_->OnSelectionBoundsUpdated(start_bound, end_bound);
146 } 203 }
147 204
148 void Animate() { 205 MockTouchSelectionController& controller() { return *controller_; }
149 base::TimeTicks now = base::TimeTicks::Now(); 206
150 while (needs_animate_) { 207 private:
151 needs_animate_ = controller_->Animate(now); 208 // testing::Test implementation.
152 now += base::TimeDelta::FromMilliseconds(16); 209
153 } 210 void SetUp() override {
211 // Default touch selection controller is created with
212 // |show_on_tap_for_empty_editable| flag set to false. Use
213 // |AllowShowingOnTapForEmptyEditable()| function to override it.
214 bool show_on_tap_for_empty_editable = false;
215 controller_.reset(
216 new MockTouchSelectionController(show_on_tap_for_empty_editable));
154 } 217 }
155 218
156 bool GetAndResetNeedsAnimate() { 219 void TearDown() override { controller_.reset(); }
157 bool needs_animate = needs_animate_;
158 Animate();
159 return needs_animate;
160 }
161 220
162 bool GetAndResetCaretMoved() { 221 scoped_ptr<MockTouchSelectionController> controller_;
163 bool moved = caret_moved_;
164 caret_moved_ = false;
165 return moved;
166 }
167 222
168 bool GetAndResetSelectionMoved() { 223 DISALLOW_COPY_AND_ASSIGN(TouchSelectionControllerTest);
169 bool moved = selection_moved_;
170 selection_moved_ = false;
171 return moved;
172 }
173
174 bool GetAndResetSelectionPointsSwapped() {
175 bool swapped = selection_points_swapped_;
176 selection_points_swapped_ = false;
177 return swapped;
178 }
179
180 const gfx::PointF& GetLastCaretPosition() const { return caret_position_; }
181 const gfx::PointF& GetLastSelectionStart() const { return selection_start_; }
182 const gfx::PointF& GetLastSelectionEnd() const { return selection_end_; }
183 const gfx::PointF& GetLastEventAnchor() const { return last_event_start_; }
184
185 std::vector<SelectionEventType> GetAndResetEvents() {
186 std::vector<SelectionEventType> events;
187 events.swap(events_);
188 return events;
189 }
190
191 TouchSelectionController& controller() { return *controller_; }
192
193 private:
194 gfx::PointF last_event_start_;
195 gfx::PointF caret_position_;
196 gfx::PointF selection_start_;
197 gfx::PointF selection_end_;
198 std::vector<SelectionEventType> events_;
199 bool caret_moved_;
200 bool selection_moved_;
201 bool selection_points_swapped_;
202 bool needs_animate_;
203 bool animation_enabled_;
204 bool dragging_enabled_;
205 scoped_ptr<TouchSelectionController> controller_;
206 }; 224 };
207 225
208 TEST_F(TouchSelectionControllerTest, InsertionBasic) { 226 TEST_F(TouchSelectionControllerTest, InsertionBasic) {
209 gfx::RectF insertion_rect(5, 5, 0, 10); 227 gfx::RectF insertion_rect(5, 5, 0, 10);
210 bool visible = true; 228 bool visible = true;
211 229
212 // Insertion events are ignored until automatic showing is enabled. 230 // Insertion events are ignored until automatic showing is enabled.
213 ChangeInsertion(insertion_rect, visible); 231 EXPECT_FALSE(ChangeInsertion(insertion_rect, visible));
214 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 232 EXPECT_THAT(controller().GetAndResetEvents(), IsEmpty());
215 EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); 233 EXPECT_EQ(gfx::PointF(), controller().GetLastEventAnchor());
216 controller().OnTapEvent(); 234 controller().OnTapEvent();
217 235
218 // Insertion events are ignored until the selection region is marked editable. 236 // Insertion events are ignored until the selection region is marked editable.
219 ChangeInsertion(insertion_rect, visible); 237 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
220 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 238 EXPECT_THAT(controller().GetAndResetEvents(), IsEmpty());
221 EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); 239 EXPECT_EQ(gfx::PointF(), controller().GetLastEventAnchor());
222 240
223 controller().OnTapEvent(); 241 controller().OnTapEvent();
224 controller().OnSelectionEditable(true); 242 controller().OnSelectionEditable(true);
225 ChangeInsertion(insertion_rect, visible); 243 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
226 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 244 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
227 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventAnchor()); 245 EXPECT_EQ(insertion_rect.bottom_left(), controller().GetLastEventAnchor());
228 246
229 insertion_rect.Offset(1, 0); 247 insertion_rect.Offset(1, 0);
230 ChangeInsertion(insertion_rect, visible); 248 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
231 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED)); 249 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_MOVED));
232 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventAnchor()); 250 EXPECT_EQ(insertion_rect.bottom_left(), controller().GetLastEventAnchor());
233 251
234 insertion_rect.Offset(0, 1); 252 insertion_rect.Offset(0, 1);
235 ChangeInsertion(insertion_rect, visible); 253 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
236 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED)); 254 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_MOVED));
237 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventAnchor()); 255 EXPECT_EQ(insertion_rect.bottom_left(), controller().GetLastEventAnchor());
238 256
239 ClearInsertion(); 257 EXPECT_TRUE(ClearInsertion());
240 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 258 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
241 } 259 }
242 260
243 TEST_F(TouchSelectionControllerTest, InsertionClearedWhenNoLongerEditable) { 261 TEST_F(TouchSelectionControllerTest, InsertionClearedWhenNoLongerEditable) {
244 gfx::RectF insertion_rect(5, 5, 0, 10); 262 gfx::RectF insertion_rect(5, 5, 0, 10);
245 bool visible = true; 263 bool visible = true;
246 controller().OnTapEvent(); 264 controller().OnTapEvent();
247 controller().OnSelectionEditable(true); 265 controller().OnSelectionEditable(true);
248 266
249 ChangeInsertion(insertion_rect, visible); 267 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
250 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 268 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
251 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventAnchor()); 269 EXPECT_EQ(insertion_rect.bottom_left(), controller().GetLastEventAnchor());
252 270
253 controller().OnSelectionEditable(false); 271 controller().OnSelectionEditable(false);
254 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 272 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
255 } 273 }
256 274
257 TEST_F(TouchSelectionControllerTest, InsertionWithNoShowOnTapForEmptyEditable) { 275 TEST_F(TouchSelectionControllerTest, InsertionWithNoShowOnTapForEmptyEditable) {
258 gfx::RectF insertion_rect(5, 5, 0, 10); 276 gfx::RectF insertion_rect(5, 5, 0, 10);
259 bool visible = true; 277 bool visible = true;
260 controller().OnSelectionEditable(true); 278 controller().OnSelectionEditable(true);
261 279
262 // Taps on an empty editable region should be ignored if the controller is 280 // Taps on an empty editable region should be ignored if the controller is
263 // created with |show_on_tap_for_empty_editable| set to false. 281 // created with |show_on_tap_for_empty_editable| set to false.
264 controller().OnTapEvent(); 282 controller().OnTapEvent();
265 controller().OnSelectionEmpty(true); 283 controller().OnSelectionEmpty(true);
266 ChangeInsertion(insertion_rect, visible); 284 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
267 EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); 285 EXPECT_EQ(gfx::PointF(), controller().GetLastEventAnchor());
268 286
269 // Once the region becomes non-empty, taps should show the insertion handle. 287 // Once the region becomes non-empty, taps should show the insertion handle.
270 controller().OnTapEvent(); 288 controller().OnTapEvent();
271 controller().OnSelectionEmpty(false); 289 controller().OnSelectionEmpty(false);
272 ChangeInsertion(insertion_rect, visible); 290 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
273 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 291 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
274 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventAnchor()); 292 EXPECT_EQ(insertion_rect.bottom_left(), controller().GetLastEventAnchor());
275 293
276 // Reset the selection. 294 // Reset the selection.
277 controller().HideAndDisallowShowingAutomatically(); 295 controller().HideAndDisallowShowingAutomatically();
278 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 296 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
279 297
280 // Long-pressing should show the handle even if the editable region is empty. 298 // Long-pressing should show the handle even if the editable region is empty.
281 insertion_rect.Offset(2, -2); 299 insertion_rect.Offset(2, -2);
282 controller().OnLongPressEvent(); 300 controller().OnLongPressEvent();
283 controller().OnSelectionEmpty(true); 301 controller().OnSelectionEmpty(true);
284 ChangeInsertion(insertion_rect, visible); 302 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
285 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 303 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
286 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventAnchor()); 304 EXPECT_EQ(insertion_rect.bottom_left(), controller().GetLastEventAnchor());
287 305
288 // Single Tap on an empty edit field should clear insertion handle. 306 // Single Tap on an empty edit field should clear insertion handle.
289 controller().OnTapEvent(); 307 controller().OnTapEvent();
290 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 308 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
291 } 309 }
292 310
293 TEST_F(TouchSelectionControllerTest, InsertionWithShowOnTapForEmptyEditable) { 311 TEST_F(TouchSelectionControllerTest, InsertionWithShowOnTapForEmptyEditable) {
294 AllowShowingOnTapForEmptyEditable(); 312 AllowShowingOnTapForEmptyEditable();
295 313
296 gfx::RectF insertion_rect(5, 5, 0, 10); 314 gfx::RectF insertion_rect(5, 5, 0, 10);
297 bool visible = true; 315 bool visible = true;
298 controller().OnSelectionEditable(true); 316 controller().OnSelectionEditable(true);
299 317
300 // Taps on an empty editable region should show the insertion handle if the 318 // Taps on an empty editable region should show the insertion handle if the
301 // controller is created with |show_on_tap_for_empty_editable| set to true. 319 // controller is created with |show_on_tap_for_empty_editable| set to true.
302 controller().OnTapEvent(); 320 controller().OnTapEvent();
303 controller().OnSelectionEmpty(true); 321 controller().OnSelectionEmpty(true);
304 ChangeInsertion(insertion_rect, visible); 322 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
305 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 323 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
306 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventAnchor()); 324 EXPECT_EQ(insertion_rect.bottom_left(), controller().GetLastEventAnchor());
307 325
308 // Additional taps should not hide the insertion handle in this case. 326 // Additional taps should not hide the insertion handle in this case.
309 controller().OnTapEvent(); 327 controller().OnTapEvent();
310 ChangeInsertion(insertion_rect, visible); 328 EXPECT_FALSE(ChangeInsertion(insertion_rect, visible));
311 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 329 EXPECT_THAT(controller().GetAndResetEvents(), IsEmpty());
312 } 330 }
313 331
314 TEST_F(TouchSelectionControllerTest, InsertionAppearsAfterTapFollowingTyping) { 332 TEST_F(TouchSelectionControllerTest, InsertionAppearsAfterTapFollowingTyping) {
315 gfx::RectF insertion_rect(5, 5, 0, 10); 333 gfx::RectF insertion_rect(5, 5, 0, 10);
316 bool visible = true; 334 bool visible = true;
317 335
318 // Simulate the user tapping an empty text field. 336 // Simulate the user tapping an empty text field.
319 controller().OnTapEvent(); 337 controller().OnTapEvent();
320 controller().OnSelectionEditable(true); 338 controller().OnSelectionEditable(true);
321 controller().OnSelectionEmpty(true); 339 controller().OnSelectionEmpty(true);
322 ChangeInsertion(insertion_rect, visible); 340 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
323 EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); 341 EXPECT_EQ(gfx::PointF(), controller().GetLastEventAnchor());
324 342
325 // Simulate the cursor moving while a user is typing. 343 // Simulate the cursor moving while a user is typing.
326 insertion_rect.Offset(10, 0); 344 insertion_rect.Offset(10, 0);
327 controller().OnSelectionEmpty(false); 345 controller().OnSelectionEmpty(false);
328 ChangeInsertion(insertion_rect, visible); 346 EXPECT_FALSE(ChangeInsertion(insertion_rect, visible));
329 EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); 347 EXPECT_EQ(gfx::PointF(), controller().GetLastEventAnchor());
330 348
331 // If the user taps the *same* position as the cursor at the end of the text 349 // If the user taps the *same* position as the cursor at the end of the text
332 // entry, the handle should appear. 350 // entry, the handle should appear.
333 controller().OnTapEvent(); 351 controller().OnTapEvent();
334 ChangeInsertion(insertion_rect, visible); 352 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
335 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 353 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
336 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventAnchor()); 354 EXPECT_EQ(insertion_rect.bottom_left(), controller().GetLastEventAnchor());
337 } 355 }
338 356
339 TEST_F(TouchSelectionControllerTest, InsertionToSelectionTransition) { 357 TEST_F(TouchSelectionControllerTest, InsertionToSelectionTransition) {
340 controller().OnLongPressEvent(); 358 controller().OnLongPressEvent();
341 controller().OnSelectionEditable(true); 359 controller().OnSelectionEditable(true);
342 360
343 gfx::RectF start_rect(5, 5, 0, 10); 361 gfx::RectF start_rect(5, 5, 0, 10);
344 gfx::RectF end_rect(50, 5, 0, 10); 362 gfx::RectF end_rect(50, 5, 0, 10);
345 bool visible = true; 363 bool visible = true;
346 364
347 ChangeInsertion(start_rect, visible); 365 EXPECT_TRUE(ChangeInsertion(start_rect, visible));
348 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 366 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
349 EXPECT_EQ(start_rect.bottom_left(), GetLastEventAnchor()); 367 EXPECT_EQ(start_rect.bottom_left(), controller().GetLastEventAnchor());
350 368
351 ChangeSelection(start_rect, visible, end_rect, visible); 369 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
352 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED, 370 EXPECT_THAT(controller().GetAndResetEvents(),
353 SELECTION_SHOWN)); 371 ElementsAre(INSERTION_CLEARED, SELECTION_SHOWN));
354 EXPECT_EQ(start_rect.bottom_left(), GetLastEventAnchor()); 372 EXPECT_EQ(start_rect.bottom_left(), controller().GetLastEventAnchor());
355 373
356 ChangeInsertion(end_rect, visible); 374 EXPECT_TRUE(ChangeInsertion(end_rect, visible));
357 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED, 375 EXPECT_THAT(controller().GetAndResetEvents(),
358 INSERTION_SHOWN)); 376 ElementsAre(SELECTION_CLEARED, INSERTION_SHOWN));
359 EXPECT_EQ(end_rect.bottom_left(), GetLastEventAnchor()); 377 EXPECT_EQ(end_rect.bottom_left(), controller().GetLastEventAnchor());
360 378
361 controller().HideAndDisallowShowingAutomatically(); 379 controller().HideAndDisallowShowingAutomatically();
362 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED)); 380 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_CLEARED));
363 381
364 controller().OnTapEvent(); 382 controller().OnTapEvent();
365 ChangeInsertion(end_rect, visible); 383 EXPECT_TRUE(ChangeInsertion(end_rect, visible));
366 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 384 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
367 EXPECT_EQ(end_rect.bottom_left(), GetLastEventAnchor()); 385 EXPECT_EQ(end_rect.bottom_left(), controller().GetLastEventAnchor());
368 } 386 }
369 387
370 TEST_F(TouchSelectionControllerTest, InsertionDragged) { 388 TEST_F(TouchSelectionControllerTest, InsertionDragged) {
371 base::TimeTicks event_time = base::TimeTicks::Now(); 389 base::TimeTicks event_time = base::TimeTicks::Now();
372 controller().OnTapEvent(); 390 controller().OnTapEvent();
373 controller().OnSelectionEditable(true); 391 controller().OnSelectionEditable(true);
374 392
375 // The touch sequence should not be handled if insertion is not active. 393 // The touch sequence should not be handled if insertion is not active.
376 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 394 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
377 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 395 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
378 396
379 float line_height = 10.f; 397 float line_height = 10.f;
380 gfx::RectF start_rect(10, 0, 0, line_height); 398 gfx::RectF start_rect(10, 0, 0, line_height);
381 bool visible = true; 399 bool visible = true;
382 ChangeInsertion(start_rect, visible); 400 EXPECT_TRUE(ChangeInsertion(start_rect, visible));
383 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 401 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
384 EXPECT_EQ(start_rect.bottom_left(), GetLastEventAnchor()); 402 EXPECT_EQ(start_rect.bottom_left(), controller().GetLastEventAnchor());
385 403
386 // The touch sequence should be handled only if the drawable reports a hit. 404 // The touch sequence should be handled only if the drawable reports a hit.
387 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 405 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
388 SetDraggingEnabled(true); 406 controller().set_dragging_enabled(true);
389 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 407 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
390 EXPECT_FALSE(GetAndResetCaretMoved()); 408 EXPECT_FALSE(controller().GetAndResetCaretMoved());
391 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED)); 409 EXPECT_THAT(controller().GetAndResetEvents(),
410 ElementsAre(INSERTION_DRAG_STARTED));
392 411
393 // The MoveCaret() result should reflect the movement. 412 // The MoveCaret() result should reflect the movement.
394 // The reported position is offset from the center of |start_rect|. 413 // The reported position is offset from the center of |start_rect|.
395 gfx::PointF start_offset = start_rect.CenterPoint(); 414 gfx::PointF start_offset = start_rect.CenterPoint();
396 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 0, 5); 415 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 0, 5);
397 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 416 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
398 EXPECT_TRUE(GetAndResetCaretMoved()); 417 EXPECT_TRUE(controller().GetAndResetCaretMoved());
399 EXPECT_EQ(start_offset + gfx::Vector2dF(0, 5), GetLastCaretPosition()); 418 EXPECT_EQ(start_offset + gfx::Vector2dF(0, 5),
419 controller().GetLastCaretPosition());
400 420
401 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 5, 5); 421 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 5, 5);
402 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 422 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
403 EXPECT_TRUE(GetAndResetCaretMoved()); 423 EXPECT_TRUE(controller().GetAndResetCaretMoved());
404 EXPECT_EQ(start_offset + gfx::Vector2dF(5, 5), GetLastCaretPosition()); 424 EXPECT_EQ(start_offset + gfx::Vector2dF(5, 5),
425 controller().GetLastCaretPosition());
405 426
406 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 10, 10); 427 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 10, 10);
407 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 428 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
408 EXPECT_TRUE(GetAndResetCaretMoved()); 429 EXPECT_TRUE(controller().GetAndResetCaretMoved());
409 EXPECT_EQ(start_offset + gfx::Vector2dF(10, 10), GetLastCaretPosition()); 430 EXPECT_EQ(start_offset + gfx::Vector2dF(10, 10),
431 controller().GetLastCaretPosition());
410 432
411 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); 433 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5);
412 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 434 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
413 EXPECT_FALSE(GetAndResetCaretMoved()); 435 EXPECT_FALSE(controller().GetAndResetCaretMoved());
414 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STOPPED)); 436 EXPECT_THAT(controller().GetAndResetEvents(),
437 ElementsAre(INSERTION_DRAG_STOPPED));
415 438
416 // Once the drag is complete, no more touch events should be consumed until 439 // Once the drag is complete, no more touch events should be consumed until
417 // the next ACTION_DOWN. 440 // the next ACTION_DOWN.
418 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 441 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
419 } 442 }
420 443
421 TEST_F(TouchSelectionControllerTest, InsertionTapped) { 444 TEST_F(TouchSelectionControllerTest, InsertionTapped) {
422 base::TimeTicks event_time = base::TimeTicks::Now(); 445 base::TimeTicks event_time = base::TimeTicks::Now();
423 controller().OnTapEvent(); 446 controller().OnTapEvent();
424 controller().OnSelectionEditable(true); 447 controller().OnSelectionEditable(true);
425 SetDraggingEnabled(true); 448 controller().set_dragging_enabled(true);
426 449
427 gfx::RectF start_rect(10, 0, 0, 10); 450 gfx::RectF start_rect(10, 0, 0, 10);
428 bool visible = true; 451 bool visible = true;
429 ChangeInsertion(start_rect, visible); 452 EXPECT_TRUE(ChangeInsertion(start_rect, visible));
430 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 453 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
431 454
432 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 455 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
433 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 456 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
434 //TODO(AKV): this test case has to be modified once crbug.com/394093 is fixed. 457 //TODO(AKV): this test case has to be modified once crbug.com/394093 is fixed.
435 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED)); 458 EXPECT_THAT(controller().GetAndResetEvents(),
459 ElementsAre(INSERTION_DRAG_STARTED));
436 460
437 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0); 461 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
438 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 462 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
439 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED, 463 EXPECT_THAT(controller().GetAndResetEvents(),
440 INSERTION_DRAG_STOPPED)); 464 ElementsAre(INSERTION_TAPPED, INSERTION_DRAG_STOPPED));
441 465
442 // Reset the insertion. 466 // Reset the insertion.
443 ClearInsertion(); 467 EXPECT_TRUE(ClearInsertion());
444 controller().OnTapEvent(); 468 controller().OnTapEvent();
445 ChangeInsertion(start_rect, visible); 469 EXPECT_TRUE(ChangeInsertion(start_rect, visible));
446 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED, 470 EXPECT_THAT(controller().GetAndResetEvents(),
447 INSERTION_SHOWN)); 471 ElementsAre(INSERTION_CLEARED, INSERTION_SHOWN));
448 472
449 // No tap should be signalled if the time between DOWN and UP was too long. 473 // No tap should be signalled if the time between DOWN and UP was too long.
450 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 474 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
451 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 475 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
452 event = MockMotionEvent(MockMotionEvent::ACTION_UP, 476 event = MockMotionEvent(MockMotionEvent::ACTION_UP,
453 event_time + base::TimeDelta::FromSeconds(1), 477 event_time + base::TimeDelta::FromSeconds(1),
454 0, 478 0,
455 0); 479 0);
456 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 480 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
457 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED, 481 EXPECT_THAT(controller().GetAndResetEvents(),
458 INSERTION_DRAG_STOPPED)); 482 ElementsAre(INSERTION_DRAG_STARTED, INSERTION_DRAG_STOPPED));
459 483
460 // Reset the insertion. 484 // Reset the insertion.
461 ClearInsertion(); 485 EXPECT_TRUE(ClearInsertion());
462 controller().OnTapEvent(); 486 controller().OnTapEvent();
463 ChangeInsertion(start_rect, visible); 487 EXPECT_TRUE(ChangeInsertion(start_rect, visible));
464 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED, 488 EXPECT_THAT(controller().GetAndResetEvents(),
465 INSERTION_SHOWN)); 489 ElementsAre(INSERTION_CLEARED, INSERTION_SHOWN));
466 490
467 // No tap should be signalled if the drag was too long. 491 // No tap should be signalled if the drag was too long.
468 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 492 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
469 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 493 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
470 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 100, 0); 494 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 100, 0);
471 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 495 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
472 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 100, 0); 496 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 100, 0);
473 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 497 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
474 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED, 498 EXPECT_THAT(controller().GetAndResetEvents(),
475 INSERTION_DRAG_STOPPED)); 499 ElementsAre(INSERTION_DRAG_STARTED, INSERTION_DRAG_STOPPED));
476 500
477 // Reset the insertion. 501 // Reset the insertion.
478 ClearInsertion(); 502 EXPECT_TRUE(ClearInsertion());
479 controller().OnTapEvent(); 503 controller().OnTapEvent();
480 ChangeInsertion(start_rect, visible); 504 EXPECT_TRUE(ChangeInsertion(start_rect, visible));
481 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_CLEARED, 505 EXPECT_THAT(controller().GetAndResetEvents(),
482 INSERTION_SHOWN)); 506 ElementsAre(INSERTION_CLEARED, INSERTION_SHOWN));
483 507
484 // No tap should be signalled if the touch sequence is cancelled. 508 // No tap should be signalled if the touch sequence is cancelled.
485 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 509 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
486 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 510 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
487 event = MockMotionEvent(MockMotionEvent::ACTION_CANCEL, event_time, 0, 0); 511 event = MockMotionEvent(MockMotionEvent::ACTION_CANCEL, event_time, 0, 0);
488 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 512 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
489 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED, 513 EXPECT_THAT(controller().GetAndResetEvents(),
490 INSERTION_DRAG_STOPPED)); 514 ElementsAre(INSERTION_DRAG_STARTED, INSERTION_DRAG_STOPPED));
491 } 515 }
492 516
493 TEST_F(TouchSelectionControllerTest, InsertionNotResetByRepeatedTapOrPress) { 517 TEST_F(TouchSelectionControllerTest, InsertionNotResetByRepeatedTapOrPress) {
494 base::TimeTicks event_time = base::TimeTicks::Now(); 518 base::TimeTicks event_time = base::TimeTicks::Now();
495 controller().OnTapEvent(); 519 controller().OnTapEvent();
496 controller().OnSelectionEditable(true); 520 controller().OnSelectionEditable(true);
497 SetDraggingEnabled(true); 521 controller().set_dragging_enabled(true);
498 522
499 gfx::RectF anchor_rect(10, 0, 0, 10); 523 gfx::RectF anchor_rect(10, 0, 0, 10);
500 bool visible = true; 524 bool visible = true;
501 ChangeInsertion(anchor_rect, visible); 525 EXPECT_TRUE(ChangeInsertion(anchor_rect, visible));
502 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 526 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
503 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventAnchor()); 527 EXPECT_EQ(anchor_rect.bottom_left(), controller().GetLastEventAnchor());
504 528
505 // Tapping again shouldn't reset the active insertion point. 529 // Tapping again shouldn't reset the active insertion point.
506 controller().OnTapEvent(); 530 controller().OnTapEvent();
507 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 531 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
508 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 532 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
509 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED)); 533 EXPECT_THAT(controller().GetAndResetEvents(),
510 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventAnchor()); 534 ElementsAre(INSERTION_DRAG_STARTED));
535 EXPECT_EQ(anchor_rect.bottom_left(), controller().GetLastEventAnchor());
511 536
512 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0); 537 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
513 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 538 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
514 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED, 539 EXPECT_THAT(controller().GetAndResetEvents(),
515 INSERTION_DRAG_STOPPED)); 540 ElementsAre(INSERTION_TAPPED, INSERTION_DRAG_STOPPED));
516 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventAnchor()); 541 EXPECT_EQ(anchor_rect.bottom_left(), controller().GetLastEventAnchor());
517 542
518 anchor_rect.Offset(5, 15); 543 anchor_rect.Offset(5, 15);
519 ChangeInsertion(anchor_rect, visible); 544 EXPECT_TRUE(ChangeInsertion(anchor_rect, visible));
520 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_MOVED)); 545 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_MOVED));
521 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventAnchor()); 546 EXPECT_EQ(anchor_rect.bottom_left(), controller().GetLastEventAnchor());
522 547
523 // Pressing shouldn't reset the active insertion point. 548 // Pressing shouldn't reset the active insertion point.
524 controller().OnLongPressEvent(); 549 controller().OnLongPressEvent();
525 controller().OnSelectionEmpty(true); 550 controller().OnSelectionEmpty(true);
526 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 551 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
527 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 552 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
528 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_DRAG_STARTED)); 553 EXPECT_THAT(controller().GetAndResetEvents(),
529 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventAnchor()); 554 ElementsAre(INSERTION_DRAG_STARTED));
555 EXPECT_EQ(anchor_rect.bottom_left(), controller().GetLastEventAnchor());
530 556
531 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0); 557 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
532 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 558 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
533 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_TAPPED, 559 EXPECT_THAT(controller().GetAndResetEvents(),
534 INSERTION_DRAG_STOPPED)); 560 ElementsAre(INSERTION_TAPPED, INSERTION_DRAG_STOPPED));
535 EXPECT_EQ(anchor_rect.bottom_left(), GetLastEventAnchor()); 561 EXPECT_EQ(anchor_rect.bottom_left(), controller().GetLastEventAnchor());
536 } 562 }
537 563
538 TEST_F(TouchSelectionControllerTest, SelectionBasic) { 564 TEST_F(TouchSelectionControllerTest, SelectionBasic) {
539 gfx::RectF start_rect(5, 5, 0, 10); 565 gfx::RectF start_rect(5, 5, 0, 10);
540 gfx::RectF end_rect(50, 5, 0, 10); 566 gfx::RectF end_rect(50, 5, 0, 10);
541 bool visible = true; 567 bool visible = true;
542 568
543 // Selection events are ignored until automatic showing is enabled. 569 // Selection events are ignored until automatic showing is enabled.
544 ChangeSelection(start_rect, visible, end_rect, visible); 570 EXPECT_FALSE(ChangeSelection(start_rect, visible, end_rect, visible));
545 EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); 571 EXPECT_EQ(gfx::PointF(), controller().GetLastEventAnchor());
546 572
547 controller().OnLongPressEvent(); 573 controller().OnLongPressEvent();
548 ChangeSelection(start_rect, visible, end_rect, visible); 574 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
549 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 575 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
550 EXPECT_EQ(start_rect.bottom_left(), GetLastEventAnchor()); 576 EXPECT_EQ(start_rect.bottom_left(), controller().GetLastEventAnchor());
551 577
552 start_rect.Offset(1, 0); 578 start_rect.Offset(1, 0);
553 ChangeSelection(start_rect, visible, end_rect, visible); 579 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
554 // Selection movement does not currently trigger a separate event. 580 // Selection movement does not currently trigger a separate event.
555 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 581 EXPECT_THAT(controller().GetAndResetEvents(), IsEmpty());
556 582
557 ClearSelection(); 583 EXPECT_TRUE(ClearSelection());
558 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED)); 584 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(SELECTION_CLEARED));
559 EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); 585 EXPECT_EQ(gfx::PointF(), controller().GetLastEventAnchor());
560 } 586 }
561 587
562 TEST_F(TouchSelectionControllerTest, SelectionRepeatedLongPress) { 588 TEST_F(TouchSelectionControllerTest, SelectionRepeatedLongPress) {
563 gfx::RectF start_rect(5, 5, 0, 10); 589 gfx::RectF start_rect(5, 5, 0, 10);
564 gfx::RectF end_rect(50, 5, 0, 10); 590 gfx::RectF end_rect(50, 5, 0, 10);
565 bool visible = true; 591 bool visible = true;
566 592
567 controller().OnLongPressEvent(); 593 controller().OnLongPressEvent();
568 ChangeSelection(start_rect, visible, end_rect, visible); 594 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
569 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 595 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
570 EXPECT_EQ(start_rect.bottom_left(), GetLastEventAnchor()); 596 EXPECT_EQ(start_rect.bottom_left(), controller().GetLastEventAnchor());
571 597
572 // A long press triggering a new selection should re-send the SELECTION_SHOWN 598 // A long press triggering a new selection should re-send the SELECTION_SHOWN
573 // event notification. 599 // event notification.
574 start_rect.Offset(10, 10); 600 start_rect.Offset(10, 10);
575 controller().OnLongPressEvent(); 601 controller().OnLongPressEvent();
576 ChangeSelection(start_rect, visible, end_rect, visible); 602 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
577 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 603 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
578 EXPECT_EQ(start_rect.bottom_left(), GetLastEventAnchor()); 604 EXPECT_EQ(start_rect.bottom_left(), controller().GetLastEventAnchor());
579 } 605 }
580 606
581 TEST_F(TouchSelectionControllerTest, SelectionDragged) { 607 TEST_F(TouchSelectionControllerTest, SelectionDragged) {
582 base::TimeTicks event_time = base::TimeTicks::Now(); 608 base::TimeTicks event_time = base::TimeTicks::Now();
583 controller().OnLongPressEvent(); 609 controller().OnLongPressEvent();
584 610
585 // The touch sequence should not be handled if selection is not active. 611 // The touch sequence should not be handled if selection is not active.
586 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); 612 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0);
587 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 613 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
588 614
589 float line_height = 10.f; 615 float line_height = 10.f;
590 gfx::RectF start_rect(0, 0, 0, line_height); 616 gfx::RectF start_rect(0, 0, 0, line_height);
591 gfx::RectF end_rect(50, 0, 0, line_height); 617 gfx::RectF end_rect(50, 0, 0, line_height);
592 bool visible = true; 618 bool visible = true;
593 ChangeSelection(start_rect, visible, end_rect, visible); 619 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
594 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 620 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
595 EXPECT_EQ(start_rect.bottom_left(), GetLastEventAnchor()); 621 EXPECT_EQ(start_rect.bottom_left(), controller().GetLastEventAnchor());
596 622
597 // The touch sequence should be handled only if the drawable reports a hit. 623 // The touch sequence should be handled only if the drawable reports a hit.
598 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 624 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
599 SetDraggingEnabled(true); 625 controller().set_dragging_enabled(true);
600 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 626 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
601 EXPECT_FALSE(GetAndResetSelectionMoved()); 627 EXPECT_FALSE(controller().GetAndResetSelectionMoved());
602 628
603 // The SelectBetweenCoordinates() result should reflect the movement. Note 629 // The SelectBetweenCoordinates() result should reflect the movement. Note
604 // that the start coordinate will always reflect the "fixed" handle's 630 // that the start coordinate will always reflect the "fixed" handle's
605 // position, in this case the position from |end_rect|. 631 // position, in this case the position from |end_rect|.
606 // Note that the reported position is offset from the center of the 632 // Note that the reported position is offset from the center of the
607 // input rects (i.e., the middle of the corresponding text line). 633 // input rects (i.e., the middle of the corresponding text line).
608 gfx::PointF fixed_offset = end_rect.CenterPoint(); 634 gfx::PointF fixed_offset = end_rect.CenterPoint();
609 gfx::PointF start_offset = start_rect.CenterPoint(); 635 gfx::PointF start_offset = start_rect.CenterPoint();
610 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 0, 5); 636 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 0, 5);
611 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 637 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
612 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED)); 638 EXPECT_THAT(controller().GetAndResetEvents(),
613 EXPECT_TRUE(GetAndResetSelectionMoved()); 639 ElementsAre(SELECTION_DRAG_STARTED));
614 EXPECT_EQ(fixed_offset, GetLastSelectionStart()); 640 EXPECT_TRUE(controller().GetAndResetSelectionMoved());
615 EXPECT_EQ(start_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd()); 641 EXPECT_EQ(fixed_offset, controller().GetLastSelectionStart());
642 EXPECT_EQ(start_offset + gfx::Vector2dF(0, 5),
643 controller().GetLastSelectionEnd());
616 644
617 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 5, 5); 645 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 5, 5);
618 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 646 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
619 EXPECT_TRUE(GetAndResetSelectionMoved()); 647 EXPECT_TRUE(controller().GetAndResetSelectionMoved());
620 EXPECT_EQ(fixed_offset, GetLastSelectionStart()); 648 EXPECT_EQ(fixed_offset, controller().GetLastSelectionStart());
621 EXPECT_EQ(start_offset + gfx::Vector2dF(5, 5), GetLastSelectionEnd()); 649 EXPECT_EQ(start_offset + gfx::Vector2dF(5, 5),
650 controller().GetLastSelectionEnd());
622 651
623 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 10, 5); 652 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 10, 5);
624 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 653 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
625 EXPECT_TRUE(GetAndResetSelectionMoved()); 654 EXPECT_TRUE(controller().GetAndResetSelectionMoved());
626 EXPECT_EQ(fixed_offset, GetLastSelectionStart()); 655 EXPECT_EQ(fixed_offset, controller().GetLastSelectionStart());
627 EXPECT_EQ(start_offset + gfx::Vector2dF(10, 5), GetLastSelectionEnd()); 656 EXPECT_EQ(start_offset + gfx::Vector2dF(10, 5),
657 controller().GetLastSelectionEnd());
628 658
629 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); 659 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5);
630 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 660 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
631 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED)); 661 EXPECT_THAT(controller().GetAndResetEvents(),
632 EXPECT_FALSE(GetAndResetSelectionMoved()); 662 ElementsAre(SELECTION_DRAG_STOPPED));
663 EXPECT_FALSE(controller().GetAndResetSelectionMoved());
633 664
634 // Once the drag is complete, no more touch events should be consumed until 665 // Once the drag is complete, no more touch events should be consumed until
635 // the next ACTION_DOWN. 666 // the next ACTION_DOWN.
636 EXPECT_FALSE(controller().WillHandleTouchEvent(event)); 667 EXPECT_FALSE(controller().WillHandleTouchEvent(event));
637 } 668 }
638 669
639 TEST_F(TouchSelectionControllerTest, SelectionDraggedWithOverlap) { 670 TEST_F(TouchSelectionControllerTest, SelectionDraggedWithOverlap) {
640 base::TimeTicks event_time = base::TimeTicks::Now(); 671 base::TimeTicks event_time = base::TimeTicks::Now();
641 controller().OnLongPressEvent(); 672 controller().OnLongPressEvent();
642 673
643 float line_height = 10.f; 674 float line_height = 10.f;
644 gfx::RectF start_rect(0, 0, 0, line_height); 675 gfx::RectF start_rect(0, 0, 0, line_height);
645 gfx::RectF end_rect(50, 0, 0, line_height); 676 gfx::RectF end_rect(50, 0, 0, line_height);
646 bool visible = true; 677 bool visible = true;
647 ChangeSelection(start_rect, visible, end_rect, visible); 678 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
648 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 679 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
649 EXPECT_EQ(start_rect.bottom_left(), GetLastEventAnchor()); 680 EXPECT_EQ(start_rect.bottom_left(), controller().GetLastEventAnchor());
650 681
651 // The ACTION_DOWN should lock to the closest handle. 682 // The ACTION_DOWN should lock to the closest handle.
652 gfx::PointF end_offset = end_rect.CenterPoint(); 683 gfx::PointF end_offset = end_rect.CenterPoint();
653 gfx::PointF fixed_offset = start_rect.CenterPoint(); 684 gfx::PointF fixed_offset = start_rect.CenterPoint();
654 float touch_down_x = (end_offset.x() + fixed_offset.x()) / 2 + 1.f; 685 float touch_down_x = (end_offset.x() + fixed_offset.x()) / 2 + 1.f;
655 MockMotionEvent event( 686 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, touch_down_x,
656 MockMotionEvent::ACTION_DOWN, event_time, touch_down_x, 0); 687 0);
657 SetDraggingEnabled(true); 688 controller().set_dragging_enabled(true);
658 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 689 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
659 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED)); 690 EXPECT_THAT(controller().GetAndResetEvents(),
660 EXPECT_FALSE(GetAndResetSelectionMoved()); 691 ElementsAre(SELECTION_DRAG_STARTED));
692 EXPECT_FALSE(controller().GetAndResetSelectionMoved());
661 693
662 // Even though the ACTION_MOVE is over the start handle, it should continue 694 // Even though the ACTION_MOVE is over the start handle, it should continue
663 // targetting the end handle that consumed the ACTION_DOWN. 695 // targetting the end handle that consumed the ACTION_DOWN.
664 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 0, 0); 696 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 0, 0);
665 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 697 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
666 EXPECT_TRUE(GetAndResetSelectionMoved()); 698 EXPECT_TRUE(controller().GetAndResetSelectionMoved());
667 EXPECT_EQ(fixed_offset, GetLastSelectionStart()); 699 EXPECT_EQ(fixed_offset, controller().GetLastSelectionStart());
668 EXPECT_EQ(end_offset - gfx::Vector2dF(touch_down_x, 0), 700 EXPECT_EQ(end_offset - gfx::Vector2dF(touch_down_x, 0),
669 GetLastSelectionEnd()); 701 controller().GetLastSelectionEnd());
670 702
671 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0); 703 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 0, 0);
672 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 704 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
673 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED)); 705 EXPECT_THAT(controller().GetAndResetEvents(),
674 EXPECT_FALSE(GetAndResetSelectionMoved()); 706 ElementsAre(SELECTION_DRAG_STOPPED));
707 EXPECT_FALSE(controller().GetAndResetSelectionMoved());
675 } 708 }
676 709
677 TEST_F(TouchSelectionControllerTest, SelectionDraggedToSwitchBaseAndExtent) { 710 TEST_F(TouchSelectionControllerTest, SelectionDraggedToSwitchBaseAndExtent) {
678 base::TimeTicks event_time = base::TimeTicks::Now(); 711 base::TimeTicks event_time = base::TimeTicks::Now();
679 controller().OnLongPressEvent(); 712 controller().OnLongPressEvent();
680 713
681 float line_height = 10.f; 714 float line_height = 10.f;
682 gfx::RectF start_rect(50, line_height, 0, line_height); 715 gfx::RectF start_rect(50, line_height, 0, line_height);
683 gfx::RectF end_rect(100, line_height, 0, line_height); 716 gfx::RectF end_rect(100, line_height, 0, line_height);
684 bool visible = true; 717 bool visible = true;
685 ChangeSelection(start_rect, visible, end_rect, visible); 718 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
686 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 719 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
687 EXPECT_EQ(start_rect.bottom_left(), GetLastEventAnchor()); 720 EXPECT_EQ(start_rect.bottom_left(), controller().GetLastEventAnchor());
688 721
689 SetDraggingEnabled(true); 722 controller().set_dragging_enabled(true);
690 723
691 // Move the extent, not triggering a swap of points. 724 // Move the extent, not triggering a swap of points.
692 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 725 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time,
693 end_rect.x(), end_rect.bottom()); 726 end_rect.x(), end_rect.bottom());
694 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 727 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
695 EXPECT_FALSE(GetAndResetSelectionMoved()); 728 EXPECT_FALSE(controller().GetAndResetSelectionMoved());
696 EXPECT_FALSE(GetAndResetSelectionPointsSwapped()); 729 EXPECT_FALSE(controller().GetAndResetSelectionPointsSwapped());
697 730
698 gfx::PointF base_offset = start_rect.CenterPoint(); 731 gfx::PointF base_offset = start_rect.CenterPoint();
699 gfx::PointF extent_offset = end_rect.CenterPoint(); 732 gfx::PointF extent_offset = end_rect.CenterPoint();
700 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 733 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time,
701 end_rect.x(), end_rect.bottom() + 5); 734 end_rect.x(), end_rect.bottom() + 5);
702 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 735 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
703 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED)); 736 EXPECT_THAT(controller().GetAndResetEvents(),
704 EXPECT_TRUE(GetAndResetSelectionMoved()); 737 ElementsAre(SELECTION_DRAG_STARTED));
705 EXPECT_FALSE(GetAndResetSelectionPointsSwapped()); 738 EXPECT_TRUE(controller().GetAndResetSelectionMoved());
706 EXPECT_EQ(base_offset, GetLastSelectionStart()); 739 EXPECT_FALSE(controller().GetAndResetSelectionPointsSwapped());
707 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd()); 740 EXPECT_EQ(base_offset, controller().GetLastSelectionStart());
741 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5),
742 controller().GetLastSelectionEnd());
708 743
709 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); 744 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5);
710 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 745 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
711 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED)); 746 EXPECT_THAT(controller().GetAndResetEvents(),
712 EXPECT_FALSE(GetAndResetSelectionMoved()); 747 ElementsAre(SELECTION_DRAG_STOPPED));
748 EXPECT_FALSE(controller().GetAndResetSelectionMoved());
713 749
714 end_rect += gfx::Vector2dF(0, 5); 750 end_rect += gfx::Vector2dF(0, 5);
715 ChangeSelection(start_rect, visible, end_rect, visible); 751 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
716 752
717 // Move the base, triggering a swap of points. 753 // Move the base, triggering a swap of points.
718 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 754 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time,
719 start_rect.x(), start_rect.bottom()); 755 start_rect.x(), start_rect.bottom());
720 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 756 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
721 EXPECT_FALSE(GetAndResetSelectionMoved()); 757 EXPECT_FALSE(controller().GetAndResetSelectionMoved());
722 EXPECT_TRUE(GetAndResetSelectionPointsSwapped()); 758 EXPECT_TRUE(controller().GetAndResetSelectionPointsSwapped());
723 759
724 base_offset = end_rect.CenterPoint(); 760 base_offset = end_rect.CenterPoint();
725 extent_offset = start_rect.CenterPoint(); 761 extent_offset = start_rect.CenterPoint();
726 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 762 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time,
727 start_rect.x(), start_rect.bottom() + 5); 763 start_rect.x(), start_rect.bottom() + 5);
728 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 764 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
729 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED)); 765 EXPECT_THAT(controller().GetAndResetEvents(),
730 EXPECT_TRUE(GetAndResetSelectionMoved()); 766 ElementsAre(SELECTION_DRAG_STARTED));
731 EXPECT_FALSE(GetAndResetSelectionPointsSwapped()); 767 EXPECT_TRUE(controller().GetAndResetSelectionMoved());
732 EXPECT_EQ(base_offset, GetLastSelectionStart()); 768 EXPECT_FALSE(controller().GetAndResetSelectionPointsSwapped());
733 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd()); 769 EXPECT_EQ(base_offset, controller().GetLastSelectionStart());
770 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5),
771 controller().GetLastSelectionEnd());
734 772
735 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); 773 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5);
736 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 774 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
737 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED)); 775 EXPECT_THAT(controller().GetAndResetEvents(),
738 EXPECT_FALSE(GetAndResetSelectionMoved()); 776 ElementsAre(SELECTION_DRAG_STOPPED));
777 EXPECT_FALSE(controller().GetAndResetSelectionMoved());
739 778
740 start_rect += gfx::Vector2dF(0, 5); 779 start_rect += gfx::Vector2dF(0, 5);
741 ChangeSelection(start_rect, visible, end_rect, visible); 780 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
742 781
743 // Move the same point again, not triggering a swap of points. 782 // Move the same point again, not triggering a swap of points.
744 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 783 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time,
745 start_rect.x(), start_rect.bottom()); 784 start_rect.x(), start_rect.bottom());
746 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 785 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
747 EXPECT_FALSE(GetAndResetSelectionMoved()); 786 EXPECT_FALSE(controller().GetAndResetSelectionMoved());
748 EXPECT_FALSE(GetAndResetSelectionPointsSwapped()); 787 EXPECT_FALSE(controller().GetAndResetSelectionPointsSwapped());
749 788
750 base_offset = end_rect.CenterPoint(); 789 base_offset = end_rect.CenterPoint();
751 extent_offset = start_rect.CenterPoint(); 790 extent_offset = start_rect.CenterPoint();
752 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 791 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time,
753 start_rect.x(), start_rect.bottom() + 5); 792 start_rect.x(), start_rect.bottom() + 5);
754 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 793 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
755 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED)); 794 EXPECT_THAT(controller().GetAndResetEvents(),
756 EXPECT_TRUE(GetAndResetSelectionMoved()); 795 ElementsAre(SELECTION_DRAG_STARTED));
757 EXPECT_FALSE(GetAndResetSelectionPointsSwapped()); 796 EXPECT_TRUE(controller().GetAndResetSelectionMoved());
758 EXPECT_EQ(base_offset, GetLastSelectionStart()); 797 EXPECT_FALSE(controller().GetAndResetSelectionPointsSwapped());
759 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd()); 798 EXPECT_EQ(base_offset, controller().GetLastSelectionStart());
799 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5),
800 controller().GetLastSelectionEnd());
760 801
761 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); 802 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5);
762 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 803 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
763 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED)); 804 EXPECT_THAT(controller().GetAndResetEvents(),
764 EXPECT_FALSE(GetAndResetSelectionMoved()); 805 ElementsAre(SELECTION_DRAG_STOPPED));
806 EXPECT_FALSE(controller().GetAndResetSelectionMoved());
765 807
766 start_rect += gfx::Vector2dF(0, 5); 808 start_rect += gfx::Vector2dF(0, 5);
767 ChangeSelection(start_rect, visible, end_rect, visible); 809 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
768 810
769 // Move the base, triggering a swap of points. 811 // Move the base, triggering a swap of points.
770 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time, 812 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, event_time,
771 end_rect.x(), end_rect.bottom()); 813 end_rect.x(), end_rect.bottom());
772 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 814 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
773 EXPECT_FALSE(GetAndResetSelectionMoved()); 815 EXPECT_FALSE(controller().GetAndResetSelectionMoved());
774 EXPECT_TRUE(GetAndResetSelectionPointsSwapped()); 816 EXPECT_TRUE(controller().GetAndResetSelectionPointsSwapped());
775 817
776 base_offset = start_rect.CenterPoint(); 818 base_offset = start_rect.CenterPoint();
777 extent_offset = end_rect.CenterPoint(); 819 extent_offset = end_rect.CenterPoint();
778 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 820 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time,
779 end_rect.x(), end_rect.bottom() + 5); 821 end_rect.x(), end_rect.bottom() + 5);
780 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 822 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
781 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED)); 823 EXPECT_THAT(controller().GetAndResetEvents(),
782 EXPECT_TRUE(GetAndResetSelectionMoved()); 824 ElementsAre(SELECTION_DRAG_STARTED));
783 EXPECT_FALSE(GetAndResetSelectionPointsSwapped()); 825 EXPECT_TRUE(controller().GetAndResetSelectionMoved());
784 EXPECT_EQ(base_offset, GetLastSelectionStart()); 826 EXPECT_FALSE(controller().GetAndResetSelectionPointsSwapped());
785 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5), GetLastSelectionEnd()); 827 EXPECT_EQ(base_offset, controller().GetLastSelectionStart());
828 EXPECT_EQ(extent_offset + gfx::Vector2dF(0, 5),
829 controller().GetLastSelectionEnd());
786 830
787 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5); 831 event = MockMotionEvent(MockMotionEvent::ACTION_UP, event_time, 10, 5);
788 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 832 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
789 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STOPPED)); 833 EXPECT_THAT(controller().GetAndResetEvents(),
790 EXPECT_FALSE(GetAndResetSelectionMoved()); 834 ElementsAre(SELECTION_DRAG_STOPPED));
835 EXPECT_FALSE(controller().GetAndResetSelectionMoved());
791 } 836 }
792 837
793 TEST_F(TouchSelectionControllerTest, SelectionDragExtremeLineSize) { 838 TEST_F(TouchSelectionControllerTest, SelectionDragExtremeLineSize) {
794 base::TimeTicks event_time = base::TimeTicks::Now(); 839 base::TimeTicks event_time = base::TimeTicks::Now();
795 controller().OnLongPressEvent(); 840 controller().OnLongPressEvent();
796 841
797 float small_line_height = 1.f; 842 float small_line_height = 1.f;
798 float large_line_height = 50.f; 843 float large_line_height = 50.f;
799 gfx::RectF small_line_rect(0, 0, 0, small_line_height); 844 gfx::RectF small_line_rect(0, 0, 0, small_line_height);
800 gfx::RectF large_line_rect(50, 50, 0, large_line_height); 845 gfx::RectF large_line_rect(50, 50, 0, large_line_height);
801 bool visible = true; 846 bool visible = true;
802 ChangeSelection(small_line_rect, visible, large_line_rect, visible); 847 EXPECT_TRUE(
803 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 848 ChangeSelection(small_line_rect, visible, large_line_rect, visible));
804 EXPECT_EQ(small_line_rect.bottom_left(), GetLastEventAnchor()); 849 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
850 EXPECT_EQ(small_line_rect.bottom_left(), controller().GetLastEventAnchor());
805 851
806 // Start dragging the handle on the small line. 852 // Start dragging the handle on the small line.
807 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 853 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time,
808 small_line_rect.x(), small_line_rect.y()); 854 small_line_rect.x(), small_line_rect.y());
809 SetDraggingEnabled(true); 855 controller().set_dragging_enabled(true);
810 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 856 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
811 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_DRAG_STARTED)); 857 EXPECT_THAT(controller().GetAndResetEvents(),
858 ElementsAre(SELECTION_DRAG_STARTED));
812 // The drag coordinate for large lines should be capped to a reasonable 859 // The drag coordinate for large lines should be capped to a reasonable
813 // offset, allowing seamless transition to neighboring lines with different 860 // offset, allowing seamless transition to neighboring lines with different
814 // sizes. The drag coordinate for small lines should have an offset 861 // sizes. The drag coordinate for small lines should have an offset
815 // commensurate with the small line size. 862 // commensurate with the small line size.
816 EXPECT_EQ(large_line_rect.bottom_left() - gfx::Vector2dF(0, 5.f), 863 EXPECT_EQ(large_line_rect.bottom_left() - gfx::Vector2dF(0, 5.f),
817 GetLastSelectionStart()); 864 controller().GetLastSelectionStart());
818 EXPECT_EQ(small_line_rect.CenterPoint(), GetLastSelectionEnd()); 865 EXPECT_EQ(small_line_rect.CenterPoint(), controller().GetLastSelectionEnd());
819 866
820 small_line_rect += gfx::Vector2dF(25.f, 0); 867 small_line_rect += gfx::Vector2dF(25.f, 0);
821 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time, 868 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE, event_time,
822 small_line_rect.x(), small_line_rect.y()); 869 small_line_rect.x(), small_line_rect.y());
823 EXPECT_TRUE(controller().WillHandleTouchEvent(event)); 870 EXPECT_TRUE(controller().WillHandleTouchEvent(event));
824 EXPECT_TRUE(GetAndResetSelectionMoved()); 871 EXPECT_TRUE(controller().GetAndResetSelectionMoved());
825 EXPECT_EQ(small_line_rect.CenterPoint(), GetLastSelectionEnd()); 872 EXPECT_EQ(small_line_rect.CenterPoint(), controller().GetLastSelectionEnd());
826 } 873 }
827 874
828 TEST_F(TouchSelectionControllerTest, Animation) { 875 TEST_F(TouchSelectionControllerTest, Animation) {
829 controller().OnTapEvent(); 876 controller().OnTapEvent();
830 controller().OnSelectionEditable(true); 877 controller().OnSelectionEditable(true);
831 878
832 gfx::RectF insertion_rect(5, 5, 0, 10); 879 gfx::RectF insertion_rect(5, 5, 0, 10);
833 880
834 bool visible = true; 881 bool visible = true;
835 ChangeInsertion(insertion_rect, visible); 882 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
836 EXPECT_FALSE(GetAndResetNeedsAnimate()); 883 EXPECT_FALSE(controller().GetAndResetNeedsAnimate());
837 884
838 visible = false; 885 visible = false;
839 ChangeInsertion(insertion_rect, visible); 886 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
840 EXPECT_TRUE(GetAndResetNeedsAnimate()); 887 EXPECT_TRUE(controller().GetAndResetNeedsAnimate());
841 888
842 visible = true; 889 visible = true;
843 ChangeInsertion(insertion_rect, visible); 890 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
844 EXPECT_TRUE(GetAndResetNeedsAnimate()); 891 EXPECT_TRUE(controller().GetAndResetNeedsAnimate());
845 892
846 // If the handles are explicity hidden, no animation should be triggered. 893 // If the handles are explicity hidden, no animation should be triggered.
847 controller().HideAndDisallowShowingAutomatically(); 894 controller().HideAndDisallowShowingAutomatically();
848 EXPECT_FALSE(GetAndResetNeedsAnimate()); 895 EXPECT_FALSE(controller().GetAndResetNeedsAnimate());
849 896
850 // If the client doesn't support animation, no animation should be triggered. 897 // If the client doesn't support animation, no animation should be triggered.
851 SetAnimationEnabled(false); 898 controller().set_animation_enabled(false);
852 controller().OnTapEvent(); 899 controller().OnTapEvent();
853 visible = true; 900 visible = true;
854 ChangeInsertion(insertion_rect, visible); 901 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
855 EXPECT_FALSE(GetAndResetNeedsAnimate()); 902 EXPECT_FALSE(controller().GetAndResetNeedsAnimate());
856 } 903 }
857 904
858 TEST_F(TouchSelectionControllerTest, TemporarilyHidden) { 905 TEST_F(TouchSelectionControllerTest, TemporarilyHidden) {
859 controller().OnTapEvent(); 906 controller().OnTapEvent();
860 controller().OnSelectionEditable(true); 907 controller().OnSelectionEditable(true);
861 908
862 gfx::RectF insertion_rect(5, 5, 0, 10); 909 gfx::RectF insertion_rect(5, 5, 0, 10);
863 910
864 bool visible = true; 911 bool visible = true;
865 ChangeInsertion(insertion_rect, visible); 912 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
866 EXPECT_FALSE(GetAndResetNeedsAnimate()); 913 EXPECT_FALSE(controller().GetAndResetNeedsAnimate());
867 914
868 controller().SetTemporarilyHidden(true); 915 controller().SetTemporarilyHidden(true);
869 EXPECT_TRUE(GetAndResetNeedsAnimate()); 916 EXPECT_TRUE(controller().GetAndResetNeedsAnimate());
870 917
871 visible = false; 918 visible = false;
872 ChangeInsertion(insertion_rect, visible); 919 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
873 EXPECT_FALSE(GetAndResetNeedsAnimate()); 920 EXPECT_FALSE(controller().GetAndResetNeedsAnimate());
874 921
875 visible = true; 922 visible = true;
876 ChangeInsertion(insertion_rect, visible); 923 EXPECT_TRUE(ChangeInsertion(insertion_rect, visible));
877 EXPECT_FALSE(GetAndResetNeedsAnimate()); 924 EXPECT_FALSE(controller().GetAndResetNeedsAnimate());
878 925
879 controller().SetTemporarilyHidden(false); 926 controller().SetTemporarilyHidden(false);
880 EXPECT_TRUE(GetAndResetNeedsAnimate()); 927 EXPECT_TRUE(controller().GetAndResetNeedsAnimate());
881 } 928 }
882 929
883 TEST_F(TouchSelectionControllerTest, SelectionClearOnTap) { 930 TEST_F(TouchSelectionControllerTest, SelectionClearOnTap) {
884 gfx::RectF start_rect(5, 5, 0, 10); 931 gfx::RectF start_rect(5, 5, 0, 10);
885 gfx::RectF end_rect(50, 5, 0, 10); 932 gfx::RectF end_rect(50, 5, 0, 10);
886 bool visible = true; 933 bool visible = true;
887 934
888 controller().OnLongPressEvent(); 935 controller().OnLongPressEvent();
889 ChangeSelection(start_rect, visible, end_rect, visible); 936 EXPECT_TRUE(ChangeSelection(start_rect, visible, end_rect, visible));
890 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 937 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
891 938
892 // Selection should not be cleared if the selection bounds have not changed. 939 // Selection should not be cleared if the selection bounds have not changed.
893 controller().OnTapEvent(); 940 controller().OnTapEvent();
894 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 941 EXPECT_THAT(controller().GetAndResetEvents(), IsEmpty());
895 EXPECT_EQ(start_rect.bottom_left(), GetLastEventAnchor()); 942 EXPECT_EQ(start_rect.bottom_left(), controller().GetLastEventAnchor());
896 943
897 controller().OnTapEvent(); 944 controller().OnTapEvent();
898 ClearSelection(); 945 EXPECT_TRUE(ClearSelection());
899 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED)); 946 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(SELECTION_CLEARED));
900 EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); 947 EXPECT_EQ(gfx::PointF(), controller().GetLastEventAnchor());
901 } 948 }
902 949
903 TEST_F(TouchSelectionControllerTest, AllowShowingFromCurrentSelection) { 950 TEST_F(TouchSelectionControllerTest, AllowShowingFromCurrentSelection) {
904 gfx::RectF start_rect(5, 5, 0, 10); 951 gfx::RectF start_rect(5, 5, 0, 10);
905 gfx::RectF end_rect(50, 5, 0, 10); 952 gfx::RectF end_rect(50, 5, 0, 10);
906 bool visible = true; 953 bool visible = true;
907 954
908 // The selection should not be activated, as it wasn't yet allowed. 955 // The selection should not be activated, as it wasn't yet allowed.
909 ChangeSelection(start_rect, visible, end_rect, visible); 956 EXPECT_FALSE(ChangeSelection(start_rect, visible, end_rect, visible));
910 EXPECT_EQ(gfx::PointF(), GetLastEventAnchor()); 957 EXPECT_EQ(gfx::PointF(), controller().GetLastEventAnchor());
911 958
912 // Now explicitly allow showing from the previously supplied bounds. 959 // Now explicitly allow showing from the previously supplied bounds.
913 controller().AllowShowingFromCurrentSelection(); 960 controller().AllowShowingFromCurrentSelection();
914 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_SHOWN)); 961 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(SELECTION_SHOWN));
915 EXPECT_EQ(start_rect.bottom_left(), GetLastEventAnchor()); 962 EXPECT_EQ(start_rect.bottom_left(), controller().GetLastEventAnchor());
916 963
917 // Repeated calls to show from the current selection should be ignored. 964 // Repeated calls to show from the current selection should be ignored.
918 controller().AllowShowingFromCurrentSelection(); 965 controller().AllowShowingFromCurrentSelection();
919 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 966 EXPECT_THAT(controller().GetAndResetEvents(), IsEmpty());
920 EXPECT_EQ(start_rect.bottom_left(), GetLastEventAnchor()); 967 EXPECT_EQ(start_rect.bottom_left(), controller().GetLastEventAnchor());
921 968
922 // Trying to show from an empty selection will have no result. 969 // Trying to show from an empty selection will have no result.
923 ClearSelection(); 970 EXPECT_TRUE(ClearSelection());
924 EXPECT_THAT(GetAndResetEvents(), ElementsAre(SELECTION_CLEARED)); 971 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(SELECTION_CLEARED));
925 controller().AllowShowingFromCurrentSelection(); 972 controller().AllowShowingFromCurrentSelection();
926 EXPECT_THAT(GetAndResetEvents(), IsEmpty()); 973 EXPECT_THAT(controller().GetAndResetEvents(), IsEmpty());
927 974
928 // Showing the insertion handle should also be supported. 975 // Showing the insertion handle should also be supported.
929 controller().OnSelectionEditable(true); 976 controller().OnSelectionEditable(true);
930 controller().OnSelectionEmpty(false); 977 controller().OnSelectionEmpty(false);
931 controller().HideAndDisallowShowingAutomatically(); 978 controller().HideAndDisallowShowingAutomatically();
932 gfx::RectF insertion_rect(5, 5, 0, 10); 979 gfx::RectF insertion_rect(5, 5, 0, 10);
933 ChangeInsertion(insertion_rect, visible); 980 EXPECT_FALSE(ChangeInsertion(insertion_rect, visible));
934 controller().AllowShowingFromCurrentSelection(); 981 controller().AllowShowingFromCurrentSelection();
935 EXPECT_THAT(GetAndResetEvents(), ElementsAre(INSERTION_SHOWN)); 982 EXPECT_THAT(controller().GetAndResetEvents(), ElementsAre(INSERTION_SHOWN));
936 EXPECT_EQ(insertion_rect.bottom_left(), GetLastEventAnchor()); 983 EXPECT_EQ(insertion_rect.bottom_left(), controller().GetLastEventAnchor());
937 } 984 }
938 985
939 } // namespace ui 986 } // namespace ui
OLDNEW
« no previous file with comments | « ui/touch_selection/touch_selection_controller_impl.cc ('k') | ui/touch_selection/touch_selection_menu_runner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698