Index: content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
index 03f7d5c591f2b3279fc742bd52b60997753ff066..fb4bcba1f100b4426be9b995d20a75db4d569055 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
@@ -17,6 +17,7 @@ |
#include "ipc/ipc_test_sink.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "ui/aura/client/aura_constants.h" |
+#include "ui/aura/client/screen_position_client.h" |
#include "ui/aura/env.h" |
#include "ui/aura/layout_manager.h" |
#include "ui/aura/root_window.h" |
@@ -32,6 +33,37 @@ |
namespace content { |
namespace { |
+ |
+ |
+// Simple screen position client to test coordinate system conversion. |
+class TestScreenPositionClient |
+ : public aura::client::ScreenPositionClient { |
+ public: |
+ TestScreenPositionClient() {} |
+ virtual ~TestScreenPositionClient() {} |
+ |
+ // aura::client::ScreenPositionClient overrides: |
+ virtual void ConvertPointToScreen(const aura::Window* window, |
+ gfx::Point* point) OVERRIDE { |
+ point->Offset(-1, -1); |
+ } |
+ |
+ virtual void ConvertPointFromScreen(const aura::Window* window, |
+ gfx::Point* point) OVERRIDE { |
+ point->Offset(1, 1); |
+ } |
+ |
+ virtual void ConvertHostPointToScreen(aura::RootWindow* window, |
+ gfx::Point* point) OVERRIDE { |
+ ConvertPointToScreen(window, point); |
+ } |
+ |
+ virtual void SetBounds(aura::Window* window, |
+ const gfx::Rect& bounds, |
+ const gfx::Display& display) OVERRIDE { |
+ } |
+}; |
+ |
class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate { |
public: |
MockRenderWidgetHostDelegate() {} |
@@ -189,6 +221,48 @@ TEST_F(RenderWidgetHostViewAuraTest, FocusFullscreen) { |
EXPECT_TRUE(view_->ShouldActivate()); |
} |
+ |
+// Checks that a popup is positioned correctly relative to its parent using |
+// screen coordinates. |
+TEST_F(RenderWidgetHostViewAuraTest, PositionChildPopup) { |
+ scoped_ptr<TestScreenPositionClient> screen_position_client; |
+ screen_position_client.reset(new TestScreenPositionClient()); |
sky
2013/07/26 15:37:59
Any reason to use a scoped_ptr here rather than on
|
+ |
+ aura::Window* window = parent_view_->GetNativeView(); |
+ aura::RootWindow* root = window->GetRootWindow(); |
+ aura::client::SetScreenPositionClient(root, screen_position_client.get()); |
+ |
+ parent_view_->SetBounds(gfx::Rect(10, 10, 800, 600)); |
+ gfx::Rect bounds_in_screen = parent_view_->GetViewBounds(); |
+ int horiz = bounds_in_screen.width() / 4; |
+ int vert = bounds_in_screen.height() / 4; |
+ bounds_in_screen.Inset(horiz, vert); |
+ |
+ // Verify that when the popup is initialized for the first time, it correctly |
+ // treats the input bounds as screen coordinates. |
+ view_->InitAsPopup(parent_view_, bounds_in_screen); |
+ gfx::Rect final_bounds_in_screen = view_->GetViewBounds(); |
+ EXPECT_EQ(final_bounds_in_screen, bounds_in_screen); |
sky
2013/07/26 15:37:59
nit: if you compare strings (rect has a ToString()
|
+ |
+ // Verify that directly setting the bounds via SetBounds() treats the input |
+ // as screen coordinates. |
+ bounds_in_screen = gfx::Rect(60, 60, 100, 100); |
+ view_->SetBounds(bounds_in_screen); |
+ final_bounds_in_screen = view_->GetViewBounds(); |
+ EXPECT_EQ(final_bounds_in_screen, bounds_in_screen); |
+ |
+ // Verify that setting the size does not alter the origin. |
+ gfx::Point original_origin = window->bounds().origin(); |
+ view_->SetSize(gfx::Size(120, 120)); |
+ gfx::Point new_origin = window->bounds().origin(); |
+ EXPECT_EQ(original_origin, new_origin); |
+ |
+ aura::client::SetScreenPositionClient(root, NULL); |
+ |
+ widget_host_ = NULL; |
+ view_ = NULL; |
+} |
+ |
// Checks that a fullscreen view is destroyed when it loses the focus. |
TEST_F(RenderWidgetHostViewAuraTest, DestroyFullscreenOnBlur) { |
view_->InitAsFullscreen(parent_view_); |