| Index: ash/wm/workspace/workspace_layout_manager_unittest.cc
|
| diff --git a/ash/wm/workspace/workspace_layout_manager_unittest.cc b/ash/wm/workspace/workspace_layout_manager_unittest.cc
|
| index 3e3a1c7d655f35a518077b081b335d8c0a47e5d8..3dce5b015c98c307c8e67d5f65cac5b0393ce720 100644
|
| --- a/ash/wm/workspace/workspace_layout_manager_unittest.cc
|
| +++ b/ash/wm/workspace/workspace_layout_manager_unittest.cc
|
| @@ -17,11 +17,35 @@
|
| #include "ui/aura/test/test_windows.h"
|
| #include "ui/aura/window.h"
|
| #include "ui/gfx/insets.h"
|
| +#include "ui/views/widget/widget.h"
|
| +#include "ui/views/widget/widget_delegate.h"
|
|
|
| namespace ash {
|
| -
|
| namespace {
|
|
|
| +class MaximizeDelegateView : public views::WidgetDelegateView {
|
| + public:
|
| + MaximizeDelegateView(const gfx::Rect& initial_bounds)
|
| + : initial_bounds_(initial_bounds) {
|
| + }
|
| + virtual ~MaximizeDelegateView() {}
|
| +
|
| + virtual bool GetSavedWindowPlacement(
|
| + gfx::Rect* bounds,
|
| + ui::WindowShowState* show_state) const OVERRIDE {
|
| + *bounds = initial_bounds_;
|
| + *show_state = ui::SHOW_STATE_MAXIMIZED;
|
| + return true;
|
| + }
|
| +
|
| + private:
|
| + const gfx::Rect initial_bounds_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MaximizeDelegateView);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| typedef test::AshTestBase WorkspaceLayoutManagerTest;
|
|
|
| // Verifies that a window containing a restore coordinate will be restored to
|
| @@ -98,6 +122,91 @@ TEST_F(WorkspaceLayoutManagerTest, KeepRestoredWindowInDisplay) {
|
| EXPECT_EQ("-20,-30 30x40", window->bounds().ToString());
|
| }
|
|
|
| +TEST_F(WorkspaceLayoutManagerTest, MaximizeInDisplayToBeRestored) {
|
| + if (!SupportsMultipleDisplays())
|
| + return;
|
| + UpdateDisplay("300x400,400x500");
|
| +
|
| + Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
|
| +
|
| + scoped_ptr<aura::Window> window(
|
| + CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 30, 40)));
|
| + EXPECT_EQ(root_windows[0], window->GetRootWindow());
|
| +
|
| + SetRestoreBoundsInScreen(window.get(), gfx::Rect(400, 0, 30, 40));
|
| + // Maximize the window in 2nd display as the restore bounds
|
| + // is inside 2nd display.
|
| + wm::MaximizeWindow(window.get());
|
| + EXPECT_EQ(root_windows[1], window->GetRootWindow());
|
| + EXPECT_EQ("300,0 400x452", window->GetBoundsInScreen().ToString());
|
| +
|
| + wm::RestoreWindow(window.get());
|
| + EXPECT_EQ(root_windows[1], window->GetRootWindow());
|
| + EXPECT_EQ("400,0 30x40", window->GetBoundsInScreen().ToString());
|
| +
|
| + // If the restore bounds intersects with the current display,
|
| + // don't move.
|
| + SetRestoreBoundsInScreen(window.get(), gfx::Rect(280, 0, 30, 40));
|
| + wm::MaximizeWindow(window.get());
|
| + EXPECT_EQ(root_windows[1], window->GetRootWindow());
|
| + EXPECT_EQ("300,0 400x452", window->GetBoundsInScreen().ToString());
|
| +
|
| + wm::RestoreWindow(window.get());
|
| + EXPECT_EQ(root_windows[1], window->GetRootWindow());
|
| + EXPECT_EQ("280,0 30x40", window->GetBoundsInScreen().ToString());
|
| +
|
| + // Restoring widget state.
|
| + scoped_ptr<views::Widget> w1(new views::Widget);
|
| + views::Widget::InitParams params;
|
| + params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
|
| + params.delegate = new MaximizeDelegateView(gfx::Rect(400, 0, 30, 40));
|
| + params.context = root_windows[0];
|
| + w1->Init(params);
|
| + w1->Show();
|
| + EXPECT_TRUE(w1->IsMaximized());
|
| + EXPECT_EQ(root_windows[1], w1->GetNativeView()->GetRootWindow());
|
| + EXPECT_EQ("300,0 400x452", w1->GetWindowBoundsInScreen().ToString());
|
| + w1->Restore();
|
| + EXPECT_EQ(root_windows[1], w1->GetNativeView()->GetRootWindow());
|
| + EXPECT_EQ("400,0 30x40", w1->GetWindowBoundsInScreen().ToString());
|
| +}
|
| +
|
| +TEST_F(WorkspaceLayoutManagerTest, FullscreenInDisplayToBeRestored) {
|
| + if (!SupportsMultipleDisplays())
|
| + return;
|
| + UpdateDisplay("300x400,400x500");
|
| +
|
| + Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
|
| +
|
| + scoped_ptr<aura::Window> window(
|
| + CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 30, 40)));
|
| + EXPECT_EQ(root_windows[0], window->GetRootWindow());
|
| +
|
| + SetRestoreBoundsInScreen(window.get(), gfx::Rect(400, 0, 30, 40));
|
| + // Maximize the window in 2nd display as the restore bounds
|
| + // is inside 2nd display.
|
| + window->SetProperty(aura::client::kShowStateKey,
|
| + ui::SHOW_STATE_FULLSCREEN);
|
| + EXPECT_EQ(root_windows[1], window->GetRootWindow());
|
| + EXPECT_EQ("300,0 400x500", window->GetBoundsInScreen().ToString());
|
| +
|
| + wm::RestoreWindow(window.get());
|
| + EXPECT_EQ(root_windows[1], window->GetRootWindow());
|
| + EXPECT_EQ("400,0 30x40", window->GetBoundsInScreen().ToString());
|
| +
|
| + // If the restore bounds intersects with the current display,
|
| + // don't move.
|
| + SetRestoreBoundsInScreen(window.get(), gfx::Rect(280, 0, 30, 40));
|
| + window->SetProperty(aura::client::kShowStateKey,
|
| + ui::SHOW_STATE_FULLSCREEN);
|
| + EXPECT_EQ(root_windows[1], window->GetRootWindow());
|
| + EXPECT_EQ("300,0 400x500", window->GetBoundsInScreen().ToString());
|
| +
|
| + wm::RestoreWindow(window.get());
|
| + EXPECT_EQ(root_windows[1], window->GetRootWindow());
|
| + EXPECT_EQ("280,0 30x40", window->GetBoundsInScreen().ToString());
|
| +}
|
| +
|
| // WindowObserver implementation used by DontClobberRestoreBoundsWindowObserver.
|
| // This code mirrors what BrowserFrameAura does. In particular when this code
|
| // sees the window was maximized it changes the bounds of a secondary
|
| @@ -250,5 +359,4 @@ TEST_F(WorkspaceLayoutManagerTest, SizeToWorkArea) {
|
| window->bounds().ToString());
|
| }
|
|
|
| -} // namespace
|
| } // namespace ash
|
|
|