| 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) {
|
|
|