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

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

Issue 1876553002: mash: Close system tray bubble on click outside its bounds, part 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review comments Created 4 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 side-by-side diff with in-line comments
Download patch
« ui/views/widget/root_view.h ('K') | « ui/views/widget/widget.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 e9f9397c01b52c9b1ee21372f9505247c31a0063..a946d93c94e662b4e50a3a022f7a9db02efaa1ed 100644
--- a/ui/views/widget/widget_interactive_uitest.cc
+++ b/ui/views/widget/widget_interactive_uitest.cc
@@ -83,12 +83,7 @@ class GestureCaptureView : public View {
// A view that always processes all mouse events.
class MouseView : public View {
public:
- MouseView()
- : View(),
- entered_(0),
- exited_(0),
- pressed_(0) {
- }
+ MouseView() {}
~MouseView() override {}
bool OnMousePressed(const ui::MouseEvent& event) override {
@@ -96,6 +91,8 @@ class MouseView : public View {
return true;
}
+ void OnMouseReleased(const ui::MouseEvent& event) override { released_++; }
+
void OnMouseEntered(const ui::MouseEvent& event) override { entered_++; }
void OnMouseExited(const ui::MouseEvent& event) override { exited_++; }
@@ -115,12 +112,14 @@ class MouseView : public View {
}
int pressed() const { return pressed_; }
+ int released() const { return released_; }
private:
- int entered_;
- int exited_;
+ int entered_ = 0;
+ int exited_ = 0;
- int pressed_;
+ int pressed_ = 0;
+ int released_ = 0;
DISALLOW_COPY_AND_ASSIGN(MouseView);
};
@@ -366,7 +365,7 @@ TEST_F(WidgetTestInteractive, CaptureAutoReset) {
toplevel->SetContentsView(container);
EXPECT_FALSE(toplevel->HasCapture());
- toplevel->SetCapture(NULL);
+ toplevel->SetCapture(nullptr);
EXPECT_TRUE(toplevel->HasCapture());
// By default, mouse release removes capture.
@@ -379,15 +378,53 @@ TEST_F(WidgetTestInteractive, CaptureAutoReset) {
// Now a mouse release shouldn't remove capture.
toplevel->set_auto_release_capture(false);
- toplevel->SetCapture(NULL);
+ toplevel->SetCapture(nullptr);
EXPECT_TRUE(toplevel->HasCapture());
toplevel->OnMouseEvent(&release);
EXPECT_TRUE(toplevel->HasCapture());
toplevel->ReleaseCapture();
EXPECT_FALSE(toplevel->HasCapture());
- toplevel->Close();
- RunPendingMessages();
+ toplevel->CloseNow();
+}
+
+// Tests capture when auto-release is disabled and events are captured to a
+// specific view.
+TEST_F(WidgetTestInteractive, CaptureToViewWithoutAutoRelease) {
+ Widget* widget = CreateTopLevelFramelessPlatformWidget();
+ MouseView* target_view = new MouseView;
+ widget->SetContentsView(target_view);
+
+ // Set capture to a specific view.
+ widget->set_auto_release_capture(false);
+ widget->SetCapture(target_view);
+ EXPECT_TRUE(widget->HasCapture());
+
+ // A click is routed to the view and capture is not released on mouse release.
+ gfx::Point point(12, 34);
+ ui::MouseEvent press(ui::ET_MOUSE_PRESSED, point, point,
+ ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ ui::MouseEvent release(ui::ET_MOUSE_RELEASED, point, point,
+ ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ widget->OnMouseEvent(&press);
+ widget->OnMouseEvent(&release);
+ EXPECT_EQ(1, target_view->pressed());
+ EXPECT_EQ(1, target_view->released());
+
+ // Future events are still routed to the view.
+ widget->OnMouseEvent(&press);
+ widget->OnMouseEvent(&release);
+ EXPECT_EQ(2, target_view->pressed());
+ EXPECT_EQ(2, target_view->released());
+
+ // Capture must be explicitly released.
+ EXPECT_TRUE(widget->HasCapture());
+ widget->ReleaseCapture();
+ EXPECT_FALSE(widget->HasCapture());
+
+ widget->CloseNow();
}
TEST_F(WidgetTestInteractive, ResetCaptureOnGestureEnd) {
« ui/views/widget/root_view.h ('K') | « ui/views/widget/widget.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698