| Index: ui/views/widget/widget_unittest.cc
|
| diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
|
| index 95fc77e0acd3fda26940cc855991f4f6d59d608a..40ba1e0e381e51527bfd3718b3d215664dfc43be 100644
|
| --- a/ui/views/widget/widget_unittest.cc
|
| +++ b/ui/views/widget/widget_unittest.cc
|
| @@ -1326,11 +1326,7 @@ TEST_F(WidgetTest, TestViewWidthAfterMinimizingWidget) {
|
| // and sets state whether subsequent paints are expected.
|
| class DesktopAuraTestValidPaintWidget : public views::Widget {
|
| public:
|
| - DesktopAuraTestValidPaintWidget()
|
| - : received_paint_(false),
|
| - expect_paint_(true),
|
| - received_paint_while_hidden_(false) {}
|
| -
|
| + DesktopAuraTestValidPaintWidget() {}
|
| ~DesktopAuraTestValidPaintWidget() override {}
|
|
|
| void InitForTest(Widget::InitParams create_params);
|
| @@ -1345,6 +1341,10 @@ class DesktopAuraTestValidPaintWidget : public views::Widget {
|
| return received_paint_while_hidden_;
|
| }
|
|
|
| + int visibility_change_count() const { return visibility_change_count_; }
|
| +
|
| + bool visible_at_last_change() const { return visible_at_last_change_; }
|
| +
|
| void WaitUntilPaint() {
|
| if (received_paint_)
|
| return;
|
| @@ -1380,10 +1380,20 @@ class DesktopAuraTestValidPaintWidget : public views::Widget {
|
| quit_closure_.Run();
|
| }
|
|
|
| + void OnNativeWidgetVisibilityChanged(bool visible) override {
|
| + ++visibility_change_count_;
|
| + visible_at_last_change_ = visible;
|
| + views::Widget::OnNativeWidgetVisibilityChanged(visible);
|
| + }
|
| +
|
| private:
|
| - bool received_paint_;
|
| - bool expect_paint_;
|
| - bool received_paint_while_hidden_;
|
| + int visibility_change_count_ = 0;
|
| + bool visible_at_last_change_ = false;
|
| +
|
| + bool received_paint_ = false;
|
| + bool expect_paint_ = true;
|
| + bool received_paint_while_hidden_ = false;
|
| +
|
| base::Closure quit_closure_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(DesktopAuraTestValidPaintWidget);
|
| @@ -1435,6 +1445,46 @@ TEST_F(WidgetTest, DesktopNativeWidgetNoPaintAfterHideTest) {
|
| widget.Close();
|
| }
|
|
|
| +// Tests that visibility changes after scheduling an asynchronous Close() are
|
| +// sane and consistent across platforms.
|
| +TEST_F(WidgetTest, DesktopNativeWidgetVisibilityAfterCloseTest) {
|
| + // TODO(sad): Desktop widgets do not work well in mus https://crbug.com/616551
|
| + if (IsMus())
|
| + return;
|
| +
|
| + DesktopAuraTestValidPaintWidget widget;
|
| + widget.InitForTest(CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS));
|
| + widget.WaitUntilPaint();
|
| + EXPECT_TRUE(widget.ReadReceivedPaintAndReset());
|
| + EXPECT_EQ(1, widget.visibility_change_count());
|
| + EXPECT_TRUE(widget.visible_at_last_change());
|
| +
|
| + // Hide before close should behave normally. Hide and show are synchronous.
|
| + widget.Hide();
|
| + EXPECT_EQ(2, widget.visibility_change_count());
|
| + EXPECT_FALSE(widget.visible_at_last_change());
|
| + widget.Show();
|
| + EXPECT_EQ(3, widget.visibility_change_count());
|
| + EXPECT_TRUE(widget.visible_at_last_change());
|
| +
|
| + RunPendingMessages();
|
| + EXPECT_EQ(3, widget.visibility_change_count()); // No change.
|
| +
|
| + EXPECT_FALSE(widget.ReadReceivedPaintAndReset());
|
| + widget.WaitUntilPaint();
|
| + EXPECT_TRUE(widget.ReadReceivedPaintAndReset());
|
| +
|
| + // After a Close, there should be no changes.
|
| + widget.Close();
|
| + EXPECT_EQ(3, widget.visibility_change_count()); // No change.
|
| + widget.Hide();
|
| + EXPECT_EQ(3, widget.visibility_change_count()); // No change.
|
| + widget.Show();
|
| + EXPECT_EQ(3, widget.visibility_change_count()); // No change.
|
| + RunPendingMessages();
|
| + EXPECT_EQ(3, widget.visibility_change_count()); // No change.
|
| +}
|
| +
|
| // Test to ensure that the aura Window's visiblity state is set to visible if
|
| // the underlying widget is hidden and then shown.
|
| TEST_F(WidgetTest, TestWindowVisibilityAfterHide) {
|
|
|