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