15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/window_sizer/window_sizer_common_unittest.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/test/ash_test_base.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/test/test_shell_delegate.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/wm/window_resizer.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/render_view_test.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/activation_client.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/client/aura_constants.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/env.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/root_window.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/test/test_windows.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ash::test::AshTestBase WindowSizerTest; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A browser window proxy which is able to associate an aura native window with 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// it. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestBrowserWindowAura : public TestBrowserWindow { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |native_window| will still be owned by the caller after the constructor 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // was called. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit TestBrowserWindowAura(aura::Window* native_window); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestBrowserWindowAura(); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TestBrowserWindow overrides: 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Show() OVERRIDE; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Activate() OVERRIDE; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::NativeWindow GetNativeWindow() OVERRIDE; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Rect GetBounds() const OVERRIDE; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The |native_window_| is still owned by the creator of this class. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::Window* native_window_; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestBrowserWindowAura); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestBrowserWindowAura::TestBrowserWindowAura(aura::Window *native_window) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : native_window_(native_window) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestBrowserWindowAura::~TestBrowserWindowAura() {} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestBrowserWindowAura::Show() { 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) native_window_->Show(); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Activate(); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestBrowserWindowAura::Activate() { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetActivationClient( 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) native_window_->GetRootWindow())->ActivateWindow(native_window_); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeWindow TestBrowserWindowAura::GetNativeWindow() { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return native_window_; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Rect TestBrowserWindowAura::GetBounds() const { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return native_window_->bounds(); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int AlignToGridRoundDown(int location, int grid_size) { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (grid_size <= 1 || location % grid_size == 0) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return location; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return location / grid_size * grid_size; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 79ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} // namespace 80ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the window is sized appropriately for the first run experience 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// where the default window bounds calculation is invoked. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WindowSizerTest, DefaultSizeCase) { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int grid = WindowSizer::kDesktopBorderSize; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4:3 monitor case, 1024x768, no taskbar 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), gfx::Rect(), 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), DEFAULT, NULL, gfx::Rect(), &window_bounds); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(WindowSizer::kDesktopBorderSize, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1024 - WindowSizer::kDesktopBorderSize * 2, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 768 - WindowSizer::kDesktopBorderSize), 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4:3 monitor case, 1024x768, taskbar on bottom 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, taskbar_bottom_work_area, gfx::Rect(), 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), gfx::Rect(), DEFAULT, NULL, gfx::Rect(), 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(WindowSizer::kDesktopBorderSize, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1024 - WindowSizer::kDesktopBorderSize * 2, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AlignToGridRoundDown( 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) taskbar_bottom_work_area.height() - 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, grid)), 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4:3 monitor case, 1024x768, taskbar on right 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, taskbar_right_work_area, gfx::Rect(), 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), gfx::Rect(), DEFAULT, NULL, gfx::Rect(), 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(WindowSizer::kDesktopBorderSize, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AlignToGridRoundDown( 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) taskbar_right_work_area.width() - 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize * 2, grid), 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 768 - WindowSizer::kDesktopBorderSize), 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4:3 monitor case, 1024x768, taskbar on left 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, taskbar_left_work_area, gfx::Rect(), 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), gfx::Rect(), DEFAULT, NULL, gfx::Rect(), 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(taskbar_left_work_area.x() + 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AlignToGridRoundDown( 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) taskbar_left_work_area.width() - 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize * 2, grid), 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AlignToGridRoundDown( 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) taskbar_left_work_area.height() - 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, grid)), 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4:3 monitor case, 1024x768, taskbar on top 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, taskbar_top_work_area, gfx::Rect(), 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), gfx::Rect(), DEFAULT, NULL, gfx::Rect(), 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(WindowSizer::kDesktopBorderSize, 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) taskbar_top_work_area.y() + 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1024 - WindowSizer::kDesktopBorderSize * 2, 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AlignToGridRoundDown( 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) taskbar_top_work_area.height() - 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, grid)), 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4:3 monitor case, 1280x1024 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1280x1024, p1280x1024, gfx::Rect(), gfx::Rect(), 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), DEFAULT, NULL, gfx::Rect(), &window_bounds); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect((1280 - WindowSizer::kMaximumWindowWidth) / 2, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kMaximumWindowWidth, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1024 - WindowSizer::kDesktopBorderSize), 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4:3 monitor case, 1600x1200 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, gfx::Rect(), gfx::Rect(), 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), DEFAULT, NULL, gfx::Rect(), &window_bounds); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect((1600 - WindowSizer::kMaximumWindowWidth) / 2, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kMaximumWindowWidth, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1200 - WindowSizer::kDesktopBorderSize), 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 16:10 monitor case, 1680x1050 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1680x1050, p1680x1050, gfx::Rect(), gfx::Rect(), 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), DEFAULT, NULL, gfx::Rect(), &window_bounds); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect((1680 - WindowSizer::kMaximumWindowWidth) / 2, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kMaximumWindowWidth, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AlignToGridRoundDown( 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1050 - WindowSizer::kDesktopBorderSize, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) grid)), 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 16:10 monitor case, 1920x1200 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1920x1200, p1920x1200, gfx::Rect(), gfx::Rect(), 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), DEFAULT, NULL, gfx::Rect(), &window_bounds); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect((1920 - WindowSizer::kMaximumWindowWidth) / 2, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kMaximumWindowWidth, 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1200 - WindowSizer::kDesktopBorderSize), 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the next opened window is positioned appropriately given the 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// bounds of an existing window of the same type. 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WindowSizerTest, LastWindowBoundsCase) { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // normal, in the middle of the screen somewhere. 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(WindowSizer::kDesktopBorderSize, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 500, 400), 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), LAST_ACTIVE, NULL, gfx::Rect(), 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(kWindowTilePixels + WindowSizer::kDesktopBorderSize, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kWindowTilePixels + WindowSizer::kDesktopBorderSize, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 500, 400).ToString(), 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // taskbar on top. 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, taskbar_top_work_area, gfx::Rect(), 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(WindowSizer::kDesktopBorderSize, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 500, 400), 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), LAST_ACTIVE, NULL, gfx::Rect(), 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(kWindowTilePixels + WindowSizer::kDesktopBorderSize, 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::max(kWindowTilePixels + 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34 /* toolbar height */), 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 500, 400).ToString(), window_bounds.ToString()); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Too small to satisify the minimum visibility condition. 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(WindowSizer::kDesktopBorderSize, 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 29, 29), 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), LAST_ACTIVE, NULL, gfx::Rect(), 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(kWindowTilePixels + WindowSizer::kDesktopBorderSize, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kWindowTilePixels + WindowSizer::kDesktopBorderSize, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30 /* not 29 */, 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30 /* not 29 */).ToString(), 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Normal. 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(WindowSizer::kDesktopBorderSize, 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 500, 400), 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), LAST_ACTIVE, NULL, gfx::Rect(), 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(kWindowTilePixels + WindowSizer::kDesktopBorderSize, 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kWindowTilePixels + WindowSizer::kDesktopBorderSize, 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 500, 400).ToString(), 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the window opened is sized appropriately given persisted sizes. 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WindowSizerTest, PersistedBoundsCase) { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // normal, in the middle of the screen somewhere. 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect initial_bounds(WindowSizer::kDesktopBorderSize, 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 500, 400); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), initial_bounds, 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), PERSISTED, NULL, gfx::Rect(), &window_bounds); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(initial_bounds.ToString(), window_bounds.ToString()); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Normal. 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect initial_bounds(0, 0, 1024, 768); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), initial_bounds, 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), PERSISTED, NULL, gfx::Rect(), &window_bounds); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(initial_bounds.ToString(), window_bounds.ToString()); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // normal, on non-primary monitor in negative coords. 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect initial_bounds(-600, 10, 500, 400); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, left_s1024x768, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initial_bounds, gfx::Rect(), PERSISTED, NULL, gfx::Rect(), 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(initial_bounds.ToString(), window_bounds.ToString()); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // normal, on non-primary monitor in negative coords. 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect initial_bounds(-1024, 0, 1024, 768); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, left_s1024x768, 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initial_bounds, gfx::Rect(), PERSISTED, NULL, gfx::Rect(), 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(initial_bounds.ToString(), window_bounds.ToString()); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Non-primary monitor resoultion has changed, but the monitor still 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // completely contains the window. 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect initial_bounds(1074, 50, 600, 500); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(1024, 0, 800, 600), 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) initial_bounds, right_s1024x768, PERSISTED, NULL, 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), &window_bounds); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(initial_bounds.ToString(), window_bounds.ToString()); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Non-primary monitor resoultion has changed, and the window is partially 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // off-screen. 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect initial_bounds(1274, 50, 600, 500); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(1024, 0, 800, 600), 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) initial_bounds, right_s1024x768, PERSISTED, 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, gfx::Rect(), &window_bounds); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("1224,50 600x500", window_bounds.ToString()); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Non-primary monitor resoultion has changed, and the window is now too 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // large for the monitor. 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect initial_bounds(1274, 50, 900, 700); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(1024, 0, 800, 600), 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) initial_bounds, right_s1024x768, PERSISTED, 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, gfx::Rect(), &window_bounds); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("1024,0 800x600", window_bounds.ToString()); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // width and height too small 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(WindowSizer::kDesktopBorderSize, 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 29, 29), 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), PERSISTED, NULL, gfx::Rect(), &window_bounds); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(WindowSizer::kDesktopBorderSize, 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30 /* not 29 */, 30 /* not 29 */).ToString(), 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////// 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The following unittests have different results on Mac/non-Mac because we 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// reposition windows aggressively on Mac. The *WithAggressiveReposition tests 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are run on Mac, and the *WithNonAggressiveRepositioning tests are run on 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// other platforms. 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WindowSizerTest, LastWindowOffscreenWithNonAggressiveRepositioning) { 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // taskbar on left. 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, taskbar_left_work_area, gfx::Rect(), 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(WindowSizer::kDesktopBorderSize, 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 500, 400), 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), LAST_ACTIVE, NULL, gfx::Rect(), 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(kWindowTilePixels + WindowSizer::kDesktopBorderSize, 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kWindowTilePixels + WindowSizer::kDesktopBorderSize, 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 500, 400).ToString(), 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // offset would put the new window offscreen at the bottom but the minimum 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // visibility condition is barely satisfied without relocation. 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(10, 728, 500, 400), gfx::Rect(), LAST_ACTIVE, 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, gfx::Rect(), &window_bounds); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10 + kWindowTilePixels, 738, 500, 400).ToString(), 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // offset would put the new window offscreen at the bottom and the minimum 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // visibility condition is satisified by relocation. 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(10, 729, 500, 400), gfx::Rect(), LAST_ACTIVE, 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, gfx::Rect(), &window_bounds); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10 + kWindowTilePixels, 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 738 /* not 739 */, 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 500, 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 400).ToString(), 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // offset would put the new window offscreen at the right but the minimum 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // visibility condition is barely satisfied without relocation. 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(984, 10, 500, 400), gfx::Rect(), LAST_ACTIVE, 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, gfx::Rect(), &window_bounds); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(994, 10 + kWindowTilePixels, 500, 400).ToString(), 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // offset would put the new window offscreen at the right and the minimum 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // visibility condition is satisified by relocation. 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(985, 10, 500, 400), gfx::Rect(), LAST_ACTIVE, 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, gfx::Rect(), &window_bounds); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(994 /* not 995 */, 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10 + kWindowTilePixels, 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 500, 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 400).ToString(), 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // offset would put the new window offscreen at the bottom right and the 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // minimum visibility condition is satisified by relocation. 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(985, 729, 500, 400), gfx::Rect(), LAST_ACTIVE, 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, gfx::Rect(), &window_bounds); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(994 /* not 995 */, 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 738 /* not 739 */, 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 500, 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 400).ToString(), 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the placement of newly created windows. 433a3f7b4e666c476898878fa745f637129375cd889Ben MurdochTEST_F(WindowSizerTest, PlaceNewWindows) { 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a dummy window. 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window->SetBounds(gfx::Rect(16, 32, 640, 320)); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> popup(CreateTestWindowInShellWithId(1)); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) popup->SetBounds(gfx::Rect(16, 32, 128, 256)); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> panel(CreateTestWindowInShellWithId(2)); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) panel->SetBounds(gfx::Rect(32, 48, 256, 512)); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a browser which we can use to pass into the GetWindowBounds 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // function. 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile(new TestingProfile()); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating a popup handler here to make sure it does not interfere with the 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // existing windows. 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams native_params(profile.get(), 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser( 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&native_params)); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating a popup handler here to make sure it does not interfere with the 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // existing windows. 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrowserWindow> browser_window( 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TestBrowserWindowAura(window.get())); 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams window_params(profile.get(), 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_params.window = browser_window.get(); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> window_owning_browser(new Browser(window_params)); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating a popup to make sure it does not interfere with the positioning. 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrowserWindow> browser_popup( 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TestBrowserWindowAura(popup.get())); 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams popup_params(Browser::TYPE_POPUP, profile.get(), 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) popup_params.window = browser_popup.get(); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> popup_owning_browser(new Browser(popup_params)); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating a panel to make sure it does not interfere with the positioning. 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrowserWindow> browser_panel( 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TestBrowserWindowAura(panel.get())); 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams panel_params(Browser::TYPE_POPUP, profile.get(), 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) panel_params.window = browser_panel.get(); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> panel_owning_browser(new Browser(panel_params)); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window->Show(); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // With a shown window it's size should get returned. 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, gfx::Rect(), 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(50, 100, 300, 150), bottom_s1600x1200, 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PERSISTED, browser.get(), gfx::Rect(), &window_bounds); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The position should be right flush. 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("960,32 640x320", window_bounds.ToString()); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // With the window shown - but more on the right side then on the left 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // side (and partially out of the screen), it should default to the other 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // side and inside the screen. 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->SetBounds(gfx::Rect(1000, 600, 640, 320)); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, gfx::Rect(), 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(50, 100, 300, 150), bottom_s1600x1200, 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PERSISTED, browser.get(), gfx::Rect(), &window_bounds); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The position should be left & bottom flush. 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("0,600 640x320", window_bounds.ToString()); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // If the second windows right side is already over the right side of the 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // screen, it will not move back into the screen. 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window->SetBounds(gfx::Rect(1000, 600, 640, 320)); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, gfx::Rect(), 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(50, 100, 300, 150), bottom_s1600x1200, 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PERSISTED, browser.get(), gfx::Rect(), &window_bounds); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The position should be left & bottom flush. 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("0,600 640x320", window_bounds.ToString()); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the other window was already beyond the point to get right flush 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it will remain where it is. 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("1000,600 640x320", window->bounds().ToString()); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Make sure that popups do not get changed. 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, gfx::Rect(), 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(50, 100, 300, 150), bottom_s1600x1200, 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PERSISTED, popup_owning_browser.get(), 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), &window_bounds); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("50,100 300x150", window_bounds.ToString()); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window->Hide(); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // If a window is there but not shown the persisted default should be used. 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, gfx::Rect(), 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(50, 100, 300, 150), bottom_s1600x1200, 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PERSISTED, browser.get(), gfx::Rect(), &window_bounds); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("50,100 300x150", window_bounds.ToString()); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // If a window is there but not shown the default should be returned. 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, gfx::Rect(), 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(), bottom_s1600x1200, 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEFAULT, browser.get(), gfx::Rect(), &window_bounds); 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note: We need to also take the defaults maximum width into account here 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // since that might get used if the resolution is too big. 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(gfx::Rect(std::max(WindowSizer::kDesktopBorderSize, 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (1600 - WindowSizer::kMaximumWindowWidth) / 2), 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WindowSizer::kDesktopBorderSize, 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::min(WindowSizer::kMaximumWindowWidth, 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1600 - 2 * WindowSizer::kDesktopBorderSize), 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1200 - WindowSizer::kDesktopBorderSize).ToString(), 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Test the placement of newly created windows on an empty desktop. 551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This test supplements "PlaceNewWindows" by testing the creation of a newly 552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// created browser window on an empty desktop. 553a3f7b4e666c476898878fa745f637129375cd889Ben MurdochTEST_F(WindowSizerTest, PlaceNewBrowserWindowOnEmptyDesktop) { 554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Create a browser which we can use to pass into the GetWindowBounds 555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // function. 556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<TestingProfile> profile(new TestingProfile()); 557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser::CreateParams native_params(profile.get(), 558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 559c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<Browser> browser( 560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&native_params)); 561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 562ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // A common screen size for Chrome OS devices where this behavior is 563ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // desirable. 564ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const gfx::Rect p1366x768(0, 0, 1366, 768); 565ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 566c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // If there is no previous state the window should get maximized if the 567ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // screen is less than or equal to our limit (1366 pixels width). 568c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) gfx::Rect window_bounds; 569c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui::WindowShowState out_show_state1 = ui::SHOW_STATE_DEFAULT; 570c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetWindowBoundsAndShowState( 571ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1366x768, // The screen resolution. 572ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1366x768, // The monitor work area. 573ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // The second monitor. 574ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // The (persisted) bounds. 575ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1366x768, // The overall work area. 576ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::SHOW_STATE_NORMAL, // The persisted show state. 577ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::SHOW_STATE_DEFAULT, // The last show state. 578ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DEFAULT, // No persisted values. 579ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch browser.get(), // Use this browser. 580ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // Don't request valid bounds. 581ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &window_bounds, 582ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &out_show_state1); 583c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, out_show_state1); 584c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 585c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // If there is a stored coordinate however, that should be taken instead. 586c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui::WindowShowState out_show_state2 = ui::SHOW_STATE_DEFAULT; 587c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetWindowBoundsAndShowState( 588ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1366x768, // The screen resolution. 589ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1366x768, // The monitor work area. 590ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // The second monitor. 591ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(50, 100, 300, 150), // The (persisted) bounds. 592ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1366x768, // The overall work area. 593ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::SHOW_STATE_NORMAL, // The persisted show state. 594ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::SHOW_STATE_DEFAULT, // The last show state. 595ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PERSISTED, // Set the persisted values. 596ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch browser.get(), // Use this browser. 597ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // Don't request valid bounds. 598ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &window_bounds, 599ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &out_show_state2); 600c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_NORMAL, out_show_state2); 601c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ("50,100 300x150", window_bounds.ToString()); 602c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 603ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // A larger monitor should not trigger auto-maximize. 604ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::WindowShowState out_show_state3 = ui::SHOW_STATE_DEFAULT; 605ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetWindowBoundsAndShowState( 606ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1600x1200, // The screen resolution. 607ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1600x1200, // The monitor work area. 608ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // The second monitor. 609ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // The (persisted) bounds. 610ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1600x1200, // The overall work area. 611ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::SHOW_STATE_NORMAL, // The persisted show state. 612ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::SHOW_STATE_DEFAULT, // The last show state. 613ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DEFAULT, // No persisted values. 614ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch browser.get(), // Use this browser. 615ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // Don't request valid bounds. 616ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &window_bounds, 617ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &out_show_state3); 618ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(ui::SHOW_STATE_DEFAULT, out_show_state3); 619ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 620c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_PlaceNewWindowsOnMultipleDisplays PlaceNewWindowsOnMultipleDisplays 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// No multiple displays on windows ash. 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_PlaceNewWindowsOnMultipleDisplays DISABLED_PlaceNewWindowsOnMultipleDisplays 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test the placement of newly created windows on multiple dislays. 629a3f7b4e666c476898878fa745f637129375cd889Ben MurdochTEST_F(WindowSizerTest, MAYBE_PlaceNewWindowsOnMultipleDisplays) { 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateDisplay("1600x1200,1600x1200"); 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect secondary(1600, 0, 1600, 1200); 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->set_active_root_window( 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetPrimaryRootWindow()); 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TestingProfile> profile(new TestingProfile()); 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create browser windows that are used as reference. 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->SetBounds(gfx::Rect(10, 10, 200, 200)); 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<BrowserWindow> browser_window( 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new TestBrowserWindowAura(window.get())); 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams window_params(profile.get(), 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_params.window = browser_window.get(); 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Browser> window_owning_browser(new Browser(window_params)); 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_window->Show(); 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window->GetRootWindow(), ash::Shell::GetActiveRootWindow()); 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> another_window(CreateTestWindowInShellWithId(1)); 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) another_window->SetBounds(gfx::Rect(1600 - 200, 10, 300, 300)); 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<BrowserWindow> another_browser_window( 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new TestBrowserWindowAura(another_window.get())); 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams another_window_params(profile.get(), 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) another_window_params.window = another_browser_window.get(); 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Browser> another_window_owning_browser( 6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new Browser(another_window_params)); 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) another_browser_window->Show(); 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creating a new window to verify the new placement. 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> new_window(CreateTestWindowInShellWithId(0)); 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<BrowserWindow> new_browser_window( 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new TestBrowserWindowAura(new_window.get())); 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams new_window_params(profile.get(), 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_window_params.window = new_browser_window.get(); 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<Browser> new_browser(new Browser(new_window_params)); 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure the primary root is active. 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(ash::Shell::GetPrimaryRootWindow(), 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetActiveRootWindow()); 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // First new window should be in the primary. 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect window_bounds; 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, secondary, 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(), secondary, 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PERSISTED, new_browser.get(), gfx::Rect(), &window_bounds); 6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("0,10 300x300", window_bounds.ToString()); 6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Move the window to the right side of the secondary display and create a new 6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // window. It should be opened then on the left side on the secondary display. 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Display second_display = gfx::Screen::GetScreenFor(window.get())-> 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetDisplayNearestPoint(gfx::Point(1600 + 100,10)); 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->SetBoundsInScreen( 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(secondary.CenterPoint().x() + 300, 10, 200, 200), 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) second_display); 6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_window->Activate(); 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(ash::Shell::GetPrimaryRootWindow(), 6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetActiveRootWindow()); 6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect window_bounds; 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, secondary, 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(), secondary, 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PERSISTED, new_browser.get(), gfx::Rect(), &window_bounds); 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("1600,10 200x200", window_bounds.ToString()); 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Activate another window in the primary display and create a new window. 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // It should be created in the primary display. 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) another_browser_window->Activate(); 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ash::Shell::GetPrimaryRootWindow(), 7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetActiveRootWindow()); 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect window_bounds; 7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, secondary, 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(), secondary, 7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PERSISTED, new_browser.get(), gfx::Rect(), &window_bounds); 7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("0,10 300x300", window_bounds.ToString()); 7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the show state is properly returned for non default cases. 718a3f7b4e666c476898878fa745f637129375cd889Ben MurdochTEST_F(WindowSizerTest, TestShowState) { 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating a browser & window to play with. 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window->SetBounds(gfx::Rect(16, 32, 640, 320)); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile(new TestingProfile()); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrowserWindow> browser_window( 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TestBrowserWindowAura(window.get())); 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams window_params(Browser::TYPE_TABBED, profile.get(), 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_params.window = browser_window.get(); 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser(new Browser(window_params)); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create also a popup browser since that behaves different. 7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> popup(CreateTestWindowInShellWithId(1)); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) popup->SetBounds(gfx::Rect(16, 32, 128, 256)); 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrowserWindow> browser_popup( 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TestBrowserWindowAura(popup.get())); 7382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams popup_params(Browser::TYPE_POPUP, profile.get(), 7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) popup_params.window = browser_window.get(); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> popup_browser(new Browser(popup_params)); 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tabbed windows should retrieve the saved window state - since there is a 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // top window. 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL, 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser.get(), 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200)); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_DEFAULT, 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_DEFAULT, 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL, 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser.get(), 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200)); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Non tabbed windows should always follow the window saved visibility state. 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL, 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) popup_browser.get(), 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200)); 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The non tabbed window will take the status of the last active of its kind. 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_NORMAL, 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_DEFAULT, 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL, 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) popup_browser.get(), 7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200)); 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now create a top level window and check again for both. Only the tabbed 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window should follow the top level window's state. 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating a browser & window to play with. 7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> window2(CreateTestWindowInShellWithId(0)); 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window->SetBounds(gfx::Rect(16, 32, 640, 320)); 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrowserWindow> browser_window2( 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TestBrowserWindowAura(window2.get())); 7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams window2_params(Browser::TYPE_TABBED, profile.get(), 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window2_params.window = browser_window2.get(); 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2(new Browser(window2_params)); 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A tabbed window should now take the top level window state. 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_DEFAULT, 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_DEFAULT, 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser2.get(), 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200)); 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Non tabbed windows should always follow the window saved visibility state. 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_MINIMIZED, 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) popup_browser.get(), 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200)); 7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // In smaller screen resolutions we default to maximized if there is no other 8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // window visible. 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int min_size = WindowSizer::GetForceMaximizedWidthLimit() / 2; 8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (min_size > 0) { 8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect tiny_screen(0, 0, min_size, min_size); 8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_DEFAULT, 8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::SHOW_STATE_DEFAULT, 8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BOTH, 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser2.get(), 8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tiny_screen)); 8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->Hide(); 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, 8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::SHOW_STATE_DEFAULT, 8152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BOTH, 8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser2.get(), 8172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tiny_screen)); 8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the default show state override behavior is properly handled. 823a3f7b4e666c476898878fa745f637129375cd889Ben MurdochTEST_F(WindowSizerTest, TestShowStateDefaults) { 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating a browser & window to play with. 8252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window->SetBounds(gfx::Rect(16, 32, 640, 320)); 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile(new TestingProfile()); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrowserWindow> browser_window( 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TestBrowserWindowAura(window.get())); 8322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams window_params(Browser::TYPE_TABBED, profile.get(), 8332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_params.window = browser_window.get(); 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser(new Browser(window_params)); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create also a popup browser since that behaves slightly different for 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // defaults. 8392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> popup(CreateTestWindowInShellWithId(1)); 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) popup->SetBounds(gfx::Rect(16, 32, 128, 256)); 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BrowserWindow> browser_popup( 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new TestBrowserWindowAura(popup.get())); 8442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams popup_params(Browser::TYPE_POPUP, profile.get(), 8452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) popup_params.window = browser_window.get(); 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> popup_browser(new Browser(popup_params)); 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that a browser creation state always get used if not given as 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SHOW_STATE_DEFAULT. 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_MAXIMIZED, 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEFAULT, 8542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser.get(), 8552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200), ui::SHOW_STATE_DEFAULT); 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser->set_initial_show_state(ui::SHOW_STATE_MINIMIZED); 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_MAXIMIZED, 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 8602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser.get(), 8612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200), ui::SHOW_STATE_MINIMIZED); 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser->set_initial_show_state(ui::SHOW_STATE_NORMAL); 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_MAXIMIZED, 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 8662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser.get(), 8672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200), ui::SHOW_STATE_NORMAL); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser->set_initial_show_state(ui::SHOW_STATE_MAXIMIZED); 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetWindowShowState(ui::SHOW_STATE_NORMAL, 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL, 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 8722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser.get(), 8732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200), ui::SHOW_STATE_MAXIMIZED); 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that setting the maximized command line option is forcing the 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // maximized state. 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch(switches::kStartMaximized); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser->set_initial_show_state(ui::SHOW_STATE_NORMAL); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetWindowShowState(ui::SHOW_STATE_NORMAL, 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL, 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 8832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser.get(), 8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200), ui::SHOW_STATE_MAXIMIZED); 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The popup should favor the initial show state over the command line. 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetWindowShowState(ui::SHOW_STATE_NORMAL, 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL, 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 8902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) popup_browser.get(), 8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200), ui::SHOW_STATE_NORMAL); 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 893