Index: ui/views/widget/desktop_aura/desktop_screen_position_client_unittest.cc |
diff --git a/ui/views/widget/desktop_aura/desktop_screen_position_client_unittest.cc b/ui/views/widget/desktop_aura/desktop_screen_position_client_unittest.cc |
index 196f6e4f25a81a928a6f0cb0047e6b280775adf1..47ba5dc18269d25bc81e1dbce9c68c49ad8b0985 100644 |
--- a/ui/views/widget/desktop_aura/desktop_screen_position_client_unittest.cc |
+++ b/ui/views/widget/desktop_aura/desktop_screen_position_client_unittest.cc |
@@ -34,4 +34,45 @@ TEST_F(DesktopScreenPositionClientTest, PositionDialog) { |
EXPECT_EQ("11,12", dialog->GetWindowBoundsInScreen().origin().ToString()); |
} |
+// Verifies that setting the bounds of a control parented to something other |
+// than the root window is positioned correctly. |
+TEST_F(DesktopScreenPositionClientTest, PositionControlWithNonRootParent) { |
+ Widget widget1; |
+ Widget widget2; |
+ Widget widget3; |
+ gfx::Point origin = gfx::Point(16, 16); |
+ |
+ // Create 3 windows. A root window, an arbitrary window parented to the root |
+ // but NOT positioned at (0,0) relative to the root, and then a third window |
+ // parented to the second, also not positioned at (0,0). |
+ Widget::InitParams params1 = |
+ CreateParams(Widget::InitParams::TYPE_WINDOW); |
+ params1.bounds = gfx::Rect(origin, gfx::Size(700, 600)); |
+ params1.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
+ params1.native_widget = new DesktopNativeWidgetAura(&widget1); |
+ widget1.Init(params1); |
+ |
+ Widget::InitParams params2 = |
+ CreateParams(Widget::InitParams::TYPE_WINDOW); |
+ params2.bounds = gfx::Rect(origin, gfx::Size(600, 500)); |
+ params2.parent = widget1.GetNativeView(); |
+ params2.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
+ params2.child = true; |
+ widget2.Init(params2); |
+ |
+ Widget::InitParams params3 = |
+ CreateParams(Widget::InitParams::TYPE_CONTROL); |
+ params3.parent = widget2.GetNativeView(); |
+ params3.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
+ params3.child = true; |
+ params3.bounds = gfx::Rect(origin, gfx::Size(500, 400)); |
+ widget3.Init(params3); |
+ |
+ // The origin of the 3rd window should be the sum of all parent origins. |
+ gfx::Point expected_origin(origin.x() * 3, origin.y() * 3); |
+ gfx::Rect expected_bounds(expected_origin, gfx::Size(500, 400)); |
+ gfx::Rect actual_bounds(widget3.GetWindowBoundsInScreen()); |
+ EXPECT_EQ(expected_bounds.ToString(), actual_bounds.ToString()); |
+} |
+ |
} // namespace views |