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

Side by Side Diff: third_party/WebKit/Source/core/input/EventHandlerTest.cpp

Issue 2708703003: Expand FrameSeleciton::isRange() to increase chances of hoisting update layout (Closed)
Patch Set: 2017-02-21T23:48:22 rebase Created 3 years, 10 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 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 "core/input/EventHandler.h" 5 #include "core/input/EventHandler.h"
6 6
7 #include "core/dom/Document.h" 7 #include "core/dom/Document.h"
8 #include "core/dom/Range.h" 8 #include "core/dom/Range.h"
9 #include "core/editing/Editor.h" 9 #include "core/editing/Editor.h"
10 #include "core/editing/FrameSelection.h" 10 #include "core/editing/FrameSelection.h"
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 page().animator().serviceScriptedAnimations( 127 page().animator().serviceScriptedAnimations(
128 WTF::monotonicallyIncreasingTime()); 128 WTF::monotonicallyIncreasingTime());
129 129
130 WebMouseEvent mouseUpEvent( 130 WebMouseEvent mouseUpEvent(
131 WebMouseEvent::MouseUp, WebFloatPoint(100, 50), WebFloatPoint(200, 250), 131 WebMouseEvent::MouseUp, WebFloatPoint(100, 50), WebFloatPoint(200, 250),
132 WebPointerProperties::Button::Left, 1, WebInputEvent::NoModifiers, 132 WebPointerProperties::Button::Left, 1, WebInputEvent::NoModifiers,
133 WebInputEvent::TimeStampForTesting); 133 WebInputEvent::TimeStampForTesting);
134 mouseUpEvent.setFrameScale(1); 134 mouseUpEvent.setFrameScale(1);
135 document().frame()->eventHandler().handleMouseReleaseEvent(mouseUpEvent); 135 document().frame()->eventHandler().handleMouseReleaseEvent(mouseUpEvent);
136 136
137 ASSERT_TRUE(selection().isRange()); 137 ASSERT_TRUE(
138 selection().computeVisibleSelectionInDOMTreeDeprecated().isRange());
138 Range* range = createRange(selection() 139 Range* range = createRange(selection()
139 .computeVisibleSelectionInDOMTreeDeprecated() 140 .computeVisibleSelectionInDOMTreeDeprecated()
140 .toNormalizedEphemeralRange()); 141 .toNormalizedEphemeralRange());
141 ASSERT_TRUE(range); 142 ASSERT_TRUE(range);
142 EXPECT_EQ("Line 1\nLine 2", range->text()); 143 EXPECT_EQ("Line 1\nLine 2", range->text());
143 } 144 }
144 145
145 TEST_F(EventHandlerTest, multiClickSelectionFromTap) { 146 TEST_F(EventHandlerTest, multiClickSelectionFromTap) {
146 setHtmlInnerHTML( 147 setHtmlInnerHTML(
147 "<style> body { margin: 0px; } .line { display: block; width: 300px; " 148 "<style> body { margin: 0px; } .line { display: block; width: 300px; "
148 "height: 30px; } </style>" 149 "height: 30px; } </style>"
149 "<body contenteditable='true'><span class='line' id='line'>One Two " 150 "<body contenteditable='true'><span class='line' id='line'>One Two "
150 "Three</span></body>"); 151 "Three</span></body>");
151 152
152 Node* line = document().getElementById("line")->firstChild(); 153 Node* line = document().getElementById("line")->firstChild();
153 154
154 TapEventBuilder singleTapEvent(IntPoint(0, 0), 1); 155 TapEventBuilder singleTapEvent(IntPoint(0, 0), 1);
155 document().frame()->eventHandler().handleGestureEvent(singleTapEvent); 156 document().frame()->eventHandler().handleGestureEvent(singleTapEvent);
156 ASSERT_TRUE( 157 ASSERT_TRUE(
157 selection().computeVisibleSelectionInDOMTreeDeprecated().isCaret()); 158 selection().computeVisibleSelectionInDOMTreeDeprecated().isCaret());
158 EXPECT_EQ(Position(line, 0), selection().start()); 159 EXPECT_EQ(Position(line, 0), selection().start());
159 160
160 // Multi-tap events on editable elements should trigger selection, just 161 // Multi-tap events on editable elements should trigger selection, just
161 // like multi-click events. 162 // like multi-click events.
162 TapEventBuilder doubleTapEvent(IntPoint(0, 0), 2); 163 TapEventBuilder doubleTapEvent(IntPoint(0, 0), 2);
163 document().frame()->eventHandler().handleGestureEvent(doubleTapEvent); 164 document().frame()->eventHandler().handleGestureEvent(doubleTapEvent);
164 ASSERT_TRUE(selection().isRange()); 165 ASSERT_TRUE(
166 selection().computeVisibleSelectionInDOMTreeDeprecated().isRange());
165 EXPECT_EQ(Position(line, 0), selection().start()); 167 EXPECT_EQ(Position(line, 0), selection().start());
166 if (document().frame()->editor().isSelectTrailingWhitespaceEnabled()) { 168 if (document().frame()->editor().isSelectTrailingWhitespaceEnabled()) {
167 EXPECT_EQ(Position(line, 4), 169 EXPECT_EQ(Position(line, 4),
168 selection().computeVisibleSelectionInDOMTreeDeprecated().end()); 170 selection().computeVisibleSelectionInDOMTreeDeprecated().end());
169 EXPECT_EQ("One ", WebString(selection().selectedText()).utf8()); 171 EXPECT_EQ("One ", WebString(selection().selectedText()).utf8());
170 } else { 172 } else {
171 EXPECT_EQ(Position(line, 3), 173 EXPECT_EQ(Position(line, 3),
172 selection().computeVisibleSelectionInDOMTreeDeprecated().end()); 174 selection().computeVisibleSelectionInDOMTreeDeprecated().end());
173 EXPECT_EQ("One", WebString(selection().selectedText()).utf8()); 175 EXPECT_EQ("One", WebString(selection().selectedText()).utf8());
174 } 176 }
175 177
176 TapEventBuilder tripleTapEvent(IntPoint(0, 0), 3); 178 TapEventBuilder tripleTapEvent(IntPoint(0, 0), 3);
177 document().frame()->eventHandler().handleGestureEvent(tripleTapEvent); 179 document().frame()->eventHandler().handleGestureEvent(tripleTapEvent);
178 ASSERT_TRUE(selection().isRange()); 180 ASSERT_TRUE(
181 selection().computeVisibleSelectionInDOMTreeDeprecated().isRange());
179 EXPECT_EQ(Position(line, 0), selection().start()); 182 EXPECT_EQ(Position(line, 0), selection().start());
180 EXPECT_EQ(Position(line, 13), 183 EXPECT_EQ(Position(line, 13),
181 selection().computeVisibleSelectionInDOMTreeDeprecated().end()); 184 selection().computeVisibleSelectionInDOMTreeDeprecated().end());
182 EXPECT_EQ("One Two Three", WebString(selection().selectedText()).utf8()); 185 EXPECT_EQ("One Two Three", WebString(selection().selectedText()).utf8());
183 } 186 }
184 187
185 TEST_F(EventHandlerTest, multiClickSelectionFromTapDisabledIfNotEditable) { 188 TEST_F(EventHandlerTest, multiClickSelectionFromTapDisabledIfNotEditable) {
186 setHtmlInnerHTML( 189 setHtmlInnerHTML(
187 "<style> body { margin: 0px; } .line { display: block; width: 300px; " 190 "<style> body { margin: 0px; } .line { display: block; width: 300px; "
188 "height: 30px; } </style>" 191 "height: 30px; } </style>"
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 397
395 ASSERT_TRUE( 398 ASSERT_TRUE(
396 selection().computeVisibleSelectionInDOMTreeDeprecated().isCaret()); 399 selection().computeVisibleSelectionInDOMTreeDeprecated().isCaret());
397 ASSERT_FALSE(selection().isHandleVisible()); 400 ASSERT_FALSE(selection().isHandleVisible());
398 401
399 MousePressEventBuilder doubleClickMousePressEvent( 402 MousePressEventBuilder doubleClickMousePressEvent(
400 IntPoint(200, 200), 2, WebPointerProperties::Button::Left); 403 IntPoint(200, 200), 2, WebPointerProperties::Button::Left);
401 document().frame()->eventHandler().handleMousePressEvent( 404 document().frame()->eventHandler().handleMousePressEvent(
402 doubleClickMousePressEvent); 405 doubleClickMousePressEvent);
403 406
404 ASSERT_TRUE(selection().isRange()); 407 ASSERT_TRUE(
408 selection().computeVisibleSelectionInDOMTreeDeprecated().isRange());
405 ASSERT_FALSE(selection().isHandleVisible()); 409 ASSERT_FALSE(selection().isHandleVisible());
406 410
407 MousePressEventBuilder tripleClickMousePressEvent( 411 MousePressEventBuilder tripleClickMousePressEvent(
408 IntPoint(200, 200), 3, WebPointerProperties::Button::Left); 412 IntPoint(200, 200), 3, WebPointerProperties::Button::Left);
409 document().frame()->eventHandler().handleMousePressEvent( 413 document().frame()->eventHandler().handleMousePressEvent(
410 tripleClickMousePressEvent); 414 tripleClickMousePressEvent);
411 415
412 ASSERT_TRUE(selection().isRange()); 416 ASSERT_TRUE(
417 selection().computeVisibleSelectionInDOMTreeDeprecated().isRange());
413 ASSERT_FALSE(selection().isHandleVisible()); 418 ASSERT_FALSE(selection().isHandleVisible());
414 } 419 }
415 420
416 TEST_F(EventHandlerTest, dragEndInNewDrag) { 421 TEST_F(EventHandlerTest, dragEndInNewDrag) {
417 setHtmlInnerHTML( 422 setHtmlInnerHTML(
418 "<style>.box { width: 100px; height: 100px; display: block; }</style>" 423 "<style>.box { width: 100px; height: 100px; display: block; }</style>"
419 "<a class='box' href=''>Drag me</a>"); 424 "<a class='box' href=''>Drag me</a>");
420 425
421 WebMouseEvent mouseDownEvent( 426 WebMouseEvent mouseDownEvent(
422 WebInputEvent::MouseDown, WebFloatPoint(50, 50), WebFloatPoint(50, 50), 427 WebInputEvent::MouseDown, WebFloatPoint(50, 50), WebFloatPoint(50, 50),
(...skipping 21 matching lines...) Expand all
444 WebPointerProperties::Button::Left, 1, WebInputEvent::NoModifiers, 449 WebPointerProperties::Button::Left, 1, WebInputEvent::NoModifiers,
445 TimeTicks::Now().InSeconds()); 450 TimeTicks::Now().InSeconds());
446 mouseUpEvent.setFrameScale(1); 451 mouseUpEvent.setFrameScale(1);
447 document().frame()->eventHandler().dragSourceEndedAt(mouseUpEvent, 452 document().frame()->eventHandler().dragSourceEndedAt(mouseUpEvent,
448 DragOperationNone); 453 DragOperationNone);
449 454
450 // This test passes if it doesn't crash. 455 // This test passes if it doesn't crash.
451 } 456 }
452 457
453 } // namespace blink 458 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/input/EventHandler.cpp ('k') | third_party/WebKit/Source/core/input/MouseEventManager.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698