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

Unified Diff: ui/views/widget/widget_interactive_uitest.cc

Issue 375593002: Do not set the mouse event handler if Widget::SetCapture() fails (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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
Index: ui/views/widget/widget_interactive_uitest.cc
diff --git a/ui/views/widget/widget_interactive_uitest.cc b/ui/views/widget/widget_interactive_uitest.cc
index 91559401aebef9415daacc97a42beeaa2083d794..9f29b069b31f98dab006c9ecdd850ec3420853ca 100644
--- a/ui/views/widget/widget_interactive_uitest.cc
+++ b/ui/views/widget/widget_interactive_uitest.cc
@@ -893,6 +893,39 @@ TEST_F(WidgetCaptureTest, CaptureDesktopNativeWidget) {
}
#endif
+// Test that no state is set if capture fails.
+TEST_F(WidgetCaptureTest, FailedCaptureRequestIsNoop) {
+ Widget widget;
+ Widget::InitParams params =
+ CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
+ params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.bounds = gfx::Rect(400, 400);
+ widget.Init(params);
+
+ MouseView* mouse_view1 = new MouseView;
+ MouseView* mouse_view2 = new MouseView;
+ View* contents_view = new View;
+ contents_view->AddChildView(mouse_view1);
+ contents_view->AddChildView(mouse_view2);
+ widget.SetContentsView(contents_view);
+
+ mouse_view1->SetBounds(0, 0, 200, 400);
+ mouse_view2->SetBounds(200, 0, 200, 400);
+
+ // Setting capture should fail because |widget| is not visible.
+ widget.SetCapture(mouse_view1);
+ EXPECT_FALSE(widget.HasCapture());
+
+ widget.Show();
+ ui::MouseEvent mouse_press_event(ui::ET_MOUSE_PRESSED, gfx::Point(300, 10),
+ gfx::Point(300, 10), ui::EF_NONE, ui::EF_NONE);
+ ui::EventDispatchDetails details = widget.GetNativeWindow()->GetHost()->
+ event_processor()->OnEventFromSource(&mouse_press_event);
+ ASSERT_FALSE(details.dispatcher_destroyed);
+ EXPECT_FALSE(mouse_view1->pressed());
+ EXPECT_TRUE(mouse_view2->pressed());
+}
+
#if !defined(OS_CHROMEOS)
// Test that a synthetic mouse exit is sent to the widget which was handling
// mouse events when a different widget grabs capture.
« chrome/browser/ui/views/tabs/tab_drag_controller.cc ('K') | « ui/views/widget/widget.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698