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

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

Issue 2645253002: DesktopAura: Track windows "owned" via the DesktopWindowTreeHost (Closed)
Patch Set: Add context, comment Created 3 years, 11 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/widget.cc ('k') | ui/views/win/hwnd_message_handler.h » ('j') | 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 52845e5ed925fc9141065f1f52e2ac2e7a8ccfc2..523a771486024e508fe8125b00e6984e46ff53a5 100644
--- a/ui/views/widget/widget_unittest.cc
+++ b/ui/views/widget/widget_unittest.cc
@@ -2990,7 +2990,7 @@ TEST_F(WidgetTest, GetAllChildWidgets) {
EXPECT_EQ(1u, expected.erase(toplevel.get()));
std::set<Widget*> owned_widgets;
- Widget::GetAllOwnedWidgets(toplevel->GetNativeView(), &owned_widgets);
+ Widget::GetAllOwnedWidgets(toplevel->GetNativeView(), &owned_widgets, true);
EXPECT_EQ(expected.size(), owned_widgets.size());
EXPECT_TRUE(
@@ -3090,6 +3090,61 @@ TEST_F(WidgetChildDestructionTest, DestroyChildWidgetsInOrder) {
RunDestroyChildWidgetsTest(false, false);
}
+Widget* TrackedTopLevelWidgetWithParent(Widget::InitParams params,
+ bool* destroyed,
+ Widget* parent) {
+ Widget* widget = new Widget(); // Owned by Native Widget.
+
+ params.bounds = gfx::Rect(100, 100, 100, 100);
+ params.parent = parent ? parent->GetNativeView() : nullptr;
+ params.native_widget =
+ CreatePlatformDesktopNativeWidgetImpl(params, widget, destroyed);
+ widget->Init(params);
+ widget->Show();
+ return widget;
+}
+
+// Test Widget::GetAllOwnedWidgets() for top-level child windows.
+// Also ensure that if a Widget is created with parent and is created using a
+// top-level Widget, then it is destroyed when the parent Widget goes away.
+TEST_F(WidgetTest, OwnedTopLevelChildWindows) {
+ Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
+
+ bool parent_destroyed = false;
+ bool child_destroyed = false;
+ bool grandchild_destroyed = false;
+
+ Widget* parent =
+ TrackedTopLevelWidgetWithParent(params, &parent_destroyed, nullptr);
+ Widget* child =
+ TrackedTopLevelWidgetWithParent(params, &child_destroyed, parent);
+ Widget* grandchild =
+ TrackedTopLevelWidgetWithParent(params, &grandchild_destroyed, child);
+
+ // |child| and |grandchild| are destroyed when their parents go away, so they
+ // should be considered "owned".
+ std::set<Widget*> owned_widgets;
+ Widget::GetAllOwnedWidgets(parent->GetNativeView(), &owned_widgets, true);
+ EXPECT_EQ(0u, owned_widgets.count(parent));
+ EXPECT_EQ(1u, owned_widgets.count(child));
+ EXPECT_EQ(1u, owned_widgets.count(grandchild));
+
+ owned_widgets.clear();
+ Widget::GetAllOwnedWidgets(child->GetNativeView(), &owned_widgets, true);
+ EXPECT_EQ(0u, owned_widgets.count(parent));
+ EXPECT_EQ(0u, owned_widgets.count(child));
+ EXPECT_EQ(1u, owned_widgets.count(grandchild));
+
+ // Trigger child destruction via a call to one of the following on the parent
+ // window: DesktopWindowTreeHostX11::CloseNow(), ::DestroyWindow(),
+ // DesktopWindowTreeHostMus::CloseNow(), or BridgedNativeWidget::
+ // OnWindowWillClose().
+ parent->CloseNow();
+ EXPECT_TRUE(parent_destroyed);
+ EXPECT_TRUE(child_destroyed);
+ EXPECT_TRUE(grandchild_destroyed);
+}
+
// Verifies nativeview visbility matches that of Widget visibility when
// SetFullscreen is invoked.
TEST_F(WidgetTest, FullscreenStatePropagated) {
« no previous file with comments | « ui/views/widget/widget.cc ('k') | ui/views/win/hwnd_message_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698