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

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

Issue 2061693003: MacViews: Suppress visibility changes during an asynchronous close. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Neater, but Linux, Windows disagree on WidgetTest.DesktopNativeWidgetVisibilityAfterCloseTest Created 4 years, 4 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 | « ui/views/widget/native_widget_mac.mm ('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_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) {
« no previous file with comments | « ui/views/widget/native_widget_mac.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698