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

Unified Diff: ui/views/view_targeter_unittest.cc

Issue 533793002: Only target ui::ET_GESTURE_END to the default gesture handler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | ui/views/widget/root_view_targeter.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/view_targeter_unittest.cc
diff --git a/ui/views/view_targeter_unittest.cc b/ui/views/view_targeter_unittest.cc
index 6564a8800a79f8cf0ced54267251c8348e7a57ac..98110382457de6a48b2f6fdd8a1bf284a615791e 100644
--- a/ui/views/view_targeter_unittest.cc
+++ b/ui/views/view_targeter_unittest.cc
@@ -263,7 +263,7 @@ TEST_F(ViewTargeterTest, ViewTargeterForGestureEvents) {
static_cast<internal::RootView*>(widget.GetRootView());
ui::EventTargeter* targeter = root_view->targeter();
- // Define a GESTURE_TAP and a GESTURE_SCROLL_BEGIN.
+ // Define some gesture events for testing.
gfx::Rect bounding_box(gfx::Point(46, 46), gfx::Size(8, 8));
gfx::Point center_point(bounding_box.CenterPoint());
ui::GestureEventDetails details(ui::ET_GESTURE_TAP, 0.0f, 0.0f);
@@ -272,12 +272,16 @@ TEST_F(ViewTargeterTest, ViewTargeterForGestureEvents) {
details = ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_BEGIN, 0.0f, 0.0f);
details.set_bounding_box(bounding_box);
GestureEventForTest scroll_begin(details, center_point.x(), center_point.y());
+ details = ui::GestureEventDetails(ui::ET_GESTURE_END, 0.0f, 0.0f);
+ details.set_bounding_box(bounding_box);
+ GestureEventForTest end(details, center_point.x(), center_point.y());
// Assume that the view currently handling gestures has been set as
- // |grandchild| by a previous gesture event. Thus subsequent gesture events
- // should be initially targeted to |grandchild|, and re-targeting should
- // be prohibited for all gesture event types except for GESTURE_SCROLL_BEGIN
- // (which should be re-targeted to the parent of |grandchild|).
+ // |grandchild| by a previous gesture event. Thus subsequent TAP and
+ // SCROLL_BEGIN events should be initially targeted to |grandchild|, and
+ // re-targeting should be prohibited for TAP but permitted for
+ // GESTURE_SCROLL_BEGIN (which should be re-targeted to the parent of
+ // |grandchild|).
SetAllowGestureEventRetargeting(root_view, false);
SetGestureHandler(root_view, grandchild);
EXPECT_EQ(grandchild, targeter->FindTargetForEvent(root_view, &tap));
@@ -285,15 +289,25 @@ TEST_F(ViewTargeterTest, ViewTargeterForGestureEvents) {
EXPECT_EQ(grandchild, targeter->FindTargetForEvent(root_view, &scroll_begin));
EXPECT_EQ(child, targeter->FindNextBestTarget(grandchild, &scroll_begin));
+ // GESTURE_END events should be targeted to the existing gesture handler,
+ // but re-targeting should be prohibited.
+ EXPECT_EQ(grandchild, targeter->FindTargetForEvent(root_view, &end));
+ EXPECT_EQ(NULL, targeter->FindNextBestTarget(grandchild, &tap));
+
// Assume that the view currently handling gestures is still set as
// |grandchild|, but this was not done by a previous gesture. Thus we are
// in the process of finding the View to which subsequent gestures will be
- // dispatched, so all gesture events should be re-targeted up the ancestor
- // chain.
+ // dispatched, so TAP and SCROLL_BEGIN events should be re-targeted up
+ // the ancestor chain.
SetAllowGestureEventRetargeting(root_view, true);
EXPECT_EQ(child, targeter->FindNextBestTarget(grandchild, &tap));
EXPECT_EQ(child, targeter->FindNextBestTarget(grandchild, &scroll_begin));
+ // GESTURE_END events are not permitted to be re-targeted up the ancestor
+ // chain; they are only ever targeted in the case where the gesture handler
+ // was established by a previous gesture.
+ EXPECT_EQ(NULL, targeter->FindNextBestTarget(grandchild, &end));
+
// Assume that the default gesture handler was set by the previous gesture,
// but that this handler is currently NULL. No gesture events should be
// re-targeted in this case (regardless of the view that is passed in to
@@ -303,12 +317,20 @@ TEST_F(ViewTargeterTest, ViewTargeterForGestureEvents) {
EXPECT_EQ(NULL, targeter->FindNextBestTarget(child, &tap));
EXPECT_EQ(NULL, targeter->FindNextBestTarget(NULL, &tap));
EXPECT_EQ(NULL, targeter->FindNextBestTarget(content, &scroll_begin));
+ EXPECT_EQ(NULL, targeter->FindNextBestTarget(content, &end));
// If no default gesture handler is currently set, targeting should be
- // performed using the location of the gesture event.
+ // performed using the location of the gesture event for a TAP and a
+ // SCROLL_BEGIN.
SetAllowGestureEventRetargeting(root_view, true);
EXPECT_EQ(grandchild, targeter->FindTargetForEvent(root_view, &tap));
EXPECT_EQ(grandchild, targeter->FindTargetForEvent(root_view, &scroll_begin));
+
+ // If no default gesture handler is currently set, GESTURE_END events
+ // should never be targeted or re-targeted to any View.
+ EXPECT_EQ(NULL, targeter->FindTargetForEvent(root_view, &end));
+ EXPECT_EQ(NULL, targeter->FindNextBestTarget(NULL, &end));
+ EXPECT_EQ(NULL, targeter->FindNextBestTarget(child, &end));
}
// Tests that the functions ViewTargeterDelegate::DoesIntersectRect()
« no previous file with comments | « no previous file | ui/views/widget/root_view_targeter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698