window_sizer_ash_unittest.cc revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
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) 5424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "ash/screen_ash.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/test/ash_test_base.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/test/test_shell_delegate.h" 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/wm/window_positioner.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/wm/window_resizer.h" 1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ash/wm/window_state.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/ui/window_sizer/window_sizer_common_unittest.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/render_view_test.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/activation_client.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/client/aura_constants.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/env.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/root_window.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/test/test_windows.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)typedef ash::test::AshTestBase WindowSizerAshTest; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A browser window proxy which is able to associate an aura native window with 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// it. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestBrowserWindowAura : public TestBrowserWindow { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |native_window| will still be owned by the caller after the constructor 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // was called. 35424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) explicit TestBrowserWindowAura(aura::Window* native_window) 36424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) : native_window_(native_window) { 37424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual ~TestBrowserWindowAura() {} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TestBrowserWindow overrides: 41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void Show() OVERRIDE { 42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) native_window_->Show(); 43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Activate(); 44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void Hide() OVERRIDE { 46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) native_window_->Hide(); 47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void Activate() OVERRIDE { 49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) GetActivationClient( 50424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) native_window_->GetRootWindow())->ActivateWindow(native_window_.get()); 51424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 52424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual gfx::NativeWindow GetNativeWindow() OVERRIDE { 53424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return native_window_.get(); 54424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 55424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual gfx::Rect GetBounds() const OVERRIDE { 56424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return native_window_->bounds(); 57424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 58424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 59424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Browser* browser() { return browser_.get(); } 60424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void CreateBrowser(const Browser::CreateParams& params) { 62424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Browser::CreateParams create_params = params; 63424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) create_params.window = this; 64424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_.reset(new Browser(create_params)); 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (browser_->is_type_tabbed() || browser_->is_app()) { 6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ash::wm::GetWindowState(native_window_.get())-> 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) set_window_position_managed(true); 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 69424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 72424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<Browser> browser_; 73424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<aura::Window> native_window_; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestBrowserWindowAura); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 78424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)scoped_ptr<TestBrowserWindowAura> CreateTestBrowserWindow( 79424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) aura::Window* window, 80424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const gfx::Rect& bounds, 81424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const Browser::CreateParams& params) { 82424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (!bounds.IsEmpty()) 83424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) window->SetBounds(bounds); 84424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<TestBrowserWindowAura> browser_window( 85424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) new TestBrowserWindowAura(window)); 86424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->CreateBrowser(params); 87424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return browser_window.Pass(); 88424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 89424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 90ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} // namespace 91ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the window is sized appropriately for the first run experience 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// where the default window bounds calculation is invoked. 94424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(WindowSizerAshTest, DefaultSizeCase) { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4:3 monitor case, 1024x768, no taskbar 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), gfx::Rect(), 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), DEFAULT, NULL, gfx::Rect(), &window_bounds); 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(gfx::Rect(ash::WindowPositioner::kDesktopBorderSize, 1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1024 - ash::WindowPositioner::kDesktopBorderSize * 2, 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 768 - ash::WindowPositioner::kDesktopBorderSize), 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4:3 monitor case, 1024x768, taskbar on bottom 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, taskbar_bottom_work_area, gfx::Rect(), 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), gfx::Rect(), DEFAULT, NULL, gfx::Rect(), 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(gfx::Rect(ash::WindowPositioner::kDesktopBorderSize, 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 1134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1024 - ash::WindowPositioner::kDesktopBorderSize * 2, 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) taskbar_bottom_work_area.height() - 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize), 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) window_bounds); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4:3 monitor case, 1024x768, taskbar on right 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, taskbar_right_work_area, gfx::Rect(), 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), gfx::Rect(), DEFAULT, NULL, gfx::Rect(), 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(gfx::Rect(ash::WindowPositioner::kDesktopBorderSize, 1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) taskbar_right_work_area.width() - 1274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize * 2, 1284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 768 - ash::WindowPositioner::kDesktopBorderSize), 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4:3 monitor case, 1024x768, taskbar on left 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, taskbar_left_work_area, gfx::Rect(), 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), gfx::Rect(), DEFAULT, NULL, gfx::Rect(), 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(taskbar_left_work_area.x() + 1384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 1394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) taskbar_left_work_area.width() - 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize * 2, 1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) taskbar_left_work_area.height() - 1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize), 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4:3 monitor case, 1024x768, taskbar on top 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, taskbar_top_work_area, gfx::Rect(), 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), gfx::Rect(), DEFAULT, NULL, gfx::Rect(), 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(gfx::Rect(ash::WindowPositioner::kDesktopBorderSize, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) taskbar_top_work_area.y() + 1544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1024 - ash::WindowPositioner::kDesktopBorderSize * 2, 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) taskbar_top_work_area.height() - 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize), 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4:3 monitor case, 1280x1024 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1280x1024, p1280x1024, gfx::Rect(), gfx::Rect(), 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), DEFAULT, NULL, gfx::Rect(), &window_bounds); 1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(gfx::Rect((1280 - ash::WindowPositioner::kMaximumWindowWidth) / 2, 1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kMaximumWindowWidth, 1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1024 - ash::WindowPositioner::kDesktopBorderSize), 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 4:3 monitor case, 1600x1200 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, gfx::Rect(), gfx::Rect(), 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), DEFAULT, NULL, gfx::Rect(), &window_bounds); 1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(gfx::Rect((1600 - ash::WindowPositioner::kMaximumWindowWidth) / 2, 1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kMaximumWindowWidth, 1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1200 - ash::WindowPositioner::kDesktopBorderSize), 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 16:10 monitor case, 1680x1050 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1680x1050, p1680x1050, gfx::Rect(), gfx::Rect(), 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), DEFAULT, NULL, gfx::Rect(), &window_bounds); 1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(gfx::Rect((1680 - ash::WindowPositioner::kMaximumWindowWidth) / 2, 1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kMaximumWindowWidth, 1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1050 - ash::WindowPositioner::kDesktopBorderSize), 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // 16:10 monitor case, 1920x1200 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1920x1200, p1920x1200, gfx::Rect(), gfx::Rect(), 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), DEFAULT, NULL, gfx::Rect(), &window_bounds); 1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(gfx::Rect((1920 - ash::WindowPositioner::kMaximumWindowWidth) / 2, 1994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kMaximumWindowWidth, 2014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1200 - ash::WindowPositioner::kDesktopBorderSize), 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the next opened window is positioned appropriately given the 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// bounds of an existing window of the same type. 208424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(WindowSizerAshTest, LastWindowBoundsCase) { 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // normal, in the middle of the screen somewhere. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetWindowBounds( 2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) p1024x768, p1024x768, gfx::Rect(), 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(ash::WindowPositioner::kDesktopBorderSize, 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 500, 400), 2154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(), LAST_ACTIVE, NULL, gfx::Rect(), 2164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &window_bounds); 2174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ( 2184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(kWindowTilePixels + ash::WindowPositioner::kDesktopBorderSize, 2194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kWindowTilePixels + ash::WindowPositioner::kDesktopBorderSize, 2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 500, 400).ToString(), 2214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) window_bounds.ToString()); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // taskbar on top. 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 2264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetWindowBounds( 2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) p1024x768, taskbar_top_work_area, gfx::Rect(), 2284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(ash::WindowPositioner::kDesktopBorderSize, 2294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 500, 400), 2304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(), LAST_ACTIVE, NULL, gfx::Rect(), 2314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &window_bounds); 2324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ( 2334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(kWindowTilePixels + ash::WindowPositioner::kDesktopBorderSize, 2344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::max(kWindowTilePixels + 2354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 2364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 34 /* toolbar height */), 2374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 500, 400).ToString(), 2384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) window_bounds.ToString()); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Too small to satisify the minimum visibility condition. 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 2434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetWindowBounds( 2444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) p1024x768, p1024x768, gfx::Rect(), 2454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(ash::WindowPositioner::kDesktopBorderSize, 2464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 29, 29), 2474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(), LAST_ACTIVE, NULL, gfx::Rect(), 2484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &window_bounds); 2494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ( 2504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(kWindowTilePixels + ash::WindowPositioner::kDesktopBorderSize, 2514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kWindowTilePixels + ash::WindowPositioner::kDesktopBorderSize, 2524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 30 /* not 29 */, 2534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 30 /* not 29 */).ToString(), 2544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) window_bounds.ToString()); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Normal. 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 2604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetWindowBounds( 2614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) p1024x768, p1024x768, gfx::Rect(), 2624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(ash::WindowPositioner::kDesktopBorderSize, 2634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 500, 400), 2644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(), LAST_ACTIVE, NULL, gfx::Rect(), 2654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &window_bounds); 2664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ( 2674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(kWindowTilePixels + ash::WindowPositioner::kDesktopBorderSize, 2684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kWindowTilePixels + ash::WindowPositioner::kDesktopBorderSize, 2694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 500, 400).ToString(), 2704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) window_bounds.ToString()); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the window opened is sized appropriately given persisted sizes. 275424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(WindowSizerAshTest, PersistedBoundsCase) { 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // normal, in the middle of the screen somewhere. 2774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect initial_bounds( 2784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 2794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 500, 400); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), initial_bounds, 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), PERSISTED, NULL, gfx::Rect(), &window_bounds); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(initial_bounds.ToString(), window_bounds.ToString()); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Normal. 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect initial_bounds(0, 0, 1024, 768); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), initial_bounds, 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), PERSISTED, NULL, gfx::Rect(), &window_bounds); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(initial_bounds.ToString(), window_bounds.ToString()); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // normal, on non-primary monitor in negative coords. 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect initial_bounds(-600, 10, 500, 400); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, left_s1024x768, 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initial_bounds, gfx::Rect(), PERSISTED, NULL, gfx::Rect(), 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(initial_bounds.ToString(), window_bounds.ToString()); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // normal, on non-primary monitor in negative coords. 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect initial_bounds(-1024, 0, 1024, 768); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, left_s1024x768, 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initial_bounds, gfx::Rect(), PERSISTED, NULL, gfx::Rect(), 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &window_bounds); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(initial_bounds.ToString(), window_bounds.ToString()); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Non-primary monitor resoultion has changed, but the monitor still 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // completely contains the window. 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect initial_bounds(1074, 50, 600, 500); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(1024, 0, 800, 600), 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) initial_bounds, right_s1024x768, PERSISTED, NULL, 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), &window_bounds); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(initial_bounds.ToString(), window_bounds.ToString()); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Non-primary monitor resoultion has changed, and the window is partially 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // off-screen. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect initial_bounds(1274, 50, 600, 500); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(1024, 0, 800, 600), 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) initial_bounds, right_s1024x768, PERSISTED, 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, gfx::Rect(), &window_bounds); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("1224,50 600x500", window_bounds.ToString()); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Non-primary monitor resoultion has changed, and the window is now too 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // large for the monitor. 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect initial_bounds(1274, 50, 900, 700); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(1024, 0, 800, 600), 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) initial_bounds, right_s1024x768, PERSISTED, 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, gfx::Rect(), &window_bounds); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("1024,0 800x600", window_bounds.ToString()); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // width and height too small 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetWindowBounds( 3554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) p1024x768, p1024x768, gfx::Rect(), 3564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(ash::WindowPositioner::kDesktopBorderSize, 3574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 29, 29), 3584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(), PERSISTED, NULL, gfx::Rect(), &window_bounds); 3594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(gfx::Rect(ash::WindowPositioner::kDesktopBorderSize, 3604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30 /* not 29 */, 30 /* not 29 */).ToString(), 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////// 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The following unittests have different results on Mac/non-Mac because we 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// reposition windows aggressively on Mac. The *WithAggressiveReposition tests 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are run on Mac, and the *WithNonAggressiveRepositioning tests are run on 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// other platforms. 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 372424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(WindowSizerAshTest, LastWindowOffscreenWithNonAggressiveRepositioning) { 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // taskbar on left. 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GetWindowBounds( 3764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) p1024x768, taskbar_left_work_area, gfx::Rect(), 3774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(ash::WindowPositioner::kDesktopBorderSize, 3784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 500, 400), 3794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(), LAST_ACTIVE, NULL, gfx::Rect(), 3804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) &window_bounds); 3814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ( 3824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect(kWindowTilePixels + ash::WindowPositioner::kDesktopBorderSize, 3834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kWindowTilePixels + ash::WindowPositioner::kDesktopBorderSize, 3844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 500, 400).ToString(), 3854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) window_bounds.ToString()); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // offset would put the new window offscreen at the bottom but the minimum 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // visibility condition is barely satisfied without relocation. 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(10, 728, 500, 400), gfx::Rect(), LAST_ACTIVE, 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, gfx::Rect(), &window_bounds); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10 + kWindowTilePixels, 738, 500, 400).ToString(), 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // offset would put the new window offscreen at the bottom and the minimum 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // visibility condition is satisified by relocation. 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(10, 729, 500, 400), gfx::Rect(), LAST_ACTIVE, 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, gfx::Rect(), &window_bounds); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(10 + kWindowTilePixels, 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 738 /* not 739 */, 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 500, 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 400).ToString(), 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // offset would put the new window offscreen at the right but the minimum 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // visibility condition is barely satisfied without relocation. 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(984, 10, 500, 400), gfx::Rect(), LAST_ACTIVE, 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, gfx::Rect(), &window_bounds); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(994, 10 + kWindowTilePixels, 500, 400).ToString(), 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // offset would put the new window offscreen at the right and the minimum 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // visibility condition is satisified by relocation. 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(985, 10, 500, 400), gfx::Rect(), LAST_ACTIVE, 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, gfx::Rect(), &window_bounds); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(994 /* not 995 */, 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10 + kWindowTilePixels, 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 500, 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 400).ToString(), 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // offset would put the new window offscreen at the bottom right and the 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // minimum visibility condition is satisified by relocation. 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1024x768, p1024x768, gfx::Rect(), 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(985, 729, 500, 400), gfx::Rect(), LAST_ACTIVE, 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, gfx::Rect(), &window_bounds); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(994 /* not 995 */, 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 738 /* not 739 */, 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 500, 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 400).ToString(), 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_bounds.ToString()); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the placement of newly created windows. 449424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(WindowSizerAshTest, PlaceNewWindows) { 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a browser which we can use to pass into the GetWindowBounds 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // function. 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile(new TestingProfile()); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating a popup handler here to make sure it does not interfere with the 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // existing windows. 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams native_params(profile.get(), 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser( 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&native_params)); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating a popup handler here to make sure it does not interfere with the 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // existing windows. 462424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<BrowserWindow> browser_window(CreateTestBrowserWindow( 463424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateTestWindowInShellWithId(0), 464424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(16, 32, 640, 320), 465424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Browser::CreateParams(profile.get(), chrome::HOST_DESKTOP_TYPE_ASH))); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating a popup to make sure it does not interfere with the positioning. 468424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<TestBrowserWindowAura> browser_popup(CreateTestBrowserWindow( 469424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateTestWindowInShellWithId(1), 470424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(16, 32, 128, 256), 471424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Browser::CreateParams(Browser::TYPE_POPUP, profile.get(), 472424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH))); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating a panel to make sure it does not interfere with the positioning. 475424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<BrowserWindow> browser_panel(CreateTestBrowserWindow( 476424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateTestWindowInShellWithId(2), 477424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(32, 48, 256, 512), 478424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Browser::CreateParams(Browser::TYPE_POPUP, profile.get(), 479424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH))); 480424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->Show(); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // Make sure that popups do not get changed. 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, gfx::Rect(), 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(50, 100, 300, 150), bottom_s1600x1200, 485424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) PERSISTED, browser_popup->browser(), 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), &window_bounds); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("50,100 300x150", window_bounds.ToString()); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 490424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->Hide(); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // If a window is there but not shown the persisted default should be used. 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, gfx::Rect(), 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(50, 100, 300, 150), bottom_s1600x1200, 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PERSISTED, browser.get(), gfx::Rect(), &window_bounds); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("50,100 300x150", window_bounds.ToString()); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // If a window is there but not shown the default should be returned. 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect window_bounds; 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, gfx::Rect(), 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(), bottom_s1600x1200, 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEFAULT, browser.get(), gfx::Rect(), &window_bounds); 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note: We need to also take the defaults maximum width into account here 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // since that might get used if the resolution is too big. 5064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ( 5074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) gfx::Rect( 5084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::max(ash::WindowPositioner::kDesktopBorderSize, 5094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) (1600 - ash::WindowPositioner::kMaximumWindowWidth) / 2), 5104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::WindowPositioner::kDesktopBorderSize, 5114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::min(ash::WindowPositioner::kMaximumWindowWidth, 5124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1600 - 2 * ash::WindowPositioner::kDesktopBorderSize), 5134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1200 - ash::WindowPositioner::kDesktopBorderSize).ToString(), 5144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) window_bounds.ToString()); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Test the placement of newly created windows on an empty desktop. 519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This test supplements "PlaceNewWindows" by testing the creation of a newly 520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// created browser window on an empty desktop. 521424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(WindowSizerAshTest, PlaceNewBrowserWindowOnEmptyDesktop) { 522c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Create a browser which we can use to pass into the GetWindowBounds 523c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // function. 524c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<TestingProfile> profile(new TestingProfile()); 525c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Browser::CreateParams native_params(profile.get(), 526c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH); 527c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<Browser> browser( 528c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&native_params)); 529c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 530ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // A common screen size for Chrome OS devices where this behavior is 531ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // desirable. 532ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const gfx::Rect p1366x768(0, 0, 1366, 768); 533ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 534c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // If there is no previous state the window should get maximized if the 535ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // screen is less than or equal to our limit (1366 pixels width). 536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) gfx::Rect window_bounds; 537c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui::WindowShowState out_show_state1 = ui::SHOW_STATE_DEFAULT; 538c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetWindowBoundsAndShowState( 539ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1366x768, // The screen resolution. 540ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1366x768, // The monitor work area. 541ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // The second monitor. 542ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // The (persisted) bounds. 543ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1366x768, // The overall work area. 544ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::SHOW_STATE_NORMAL, // The persisted show state. 545ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::SHOW_STATE_DEFAULT, // The last show state. 546ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DEFAULT, // No persisted values. 547ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch browser.get(), // Use this browser. 548ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // Don't request valid bounds. 549ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &window_bounds, 550ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &out_show_state1); 551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, out_show_state1); 552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 553c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // If there is a stored coordinate however, that should be taken instead. 554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui::WindowShowState out_show_state2 = ui::SHOW_STATE_DEFAULT; 555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetWindowBoundsAndShowState( 556ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1366x768, // The screen resolution. 557ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1366x768, // The monitor work area. 558ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // The second monitor. 559ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(50, 100, 300, 150), // The (persisted) bounds. 560ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1366x768, // The overall work area. 561ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::SHOW_STATE_NORMAL, // The persisted show state. 562ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::SHOW_STATE_DEFAULT, // The last show state. 563ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PERSISTED, // Set the persisted values. 564ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch browser.get(), // Use this browser. 565ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // Don't request valid bounds. 566ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &window_bounds, 567ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &out_show_state2); 568c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_NORMAL, out_show_state2); 569c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ("50,100 300x150", window_bounds.ToString()); 570c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 571ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // A larger monitor should not trigger auto-maximize. 572ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::WindowShowState out_show_state3 = ui::SHOW_STATE_DEFAULT; 573ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch GetWindowBoundsAndShowState( 574ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1600x1200, // The screen resolution. 575ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1600x1200, // The monitor work area. 576ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // The second monitor. 577ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // The (persisted) bounds. 578ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch p1600x1200, // The overall work area. 579ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::SHOW_STATE_NORMAL, // The persisted show state. 580ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::SHOW_STATE_DEFAULT, // The last show state. 581ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DEFAULT, // No persisted values. 582ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch browser.get(), // Use this browser. 583ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Rect(), // Don't request valid bounds. 584ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &window_bounds, 585ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch &out_show_state3); 586ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(ui::SHOW_STATE_DEFAULT, out_show_state3); 587ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 588c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_PlaceNewWindowsOnMultipleDisplays PlaceNewWindowsOnMultipleDisplays 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// No multiple displays on windows ash. 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_PlaceNewWindowsOnMultipleDisplays DISABLED_PlaceNewWindowsOnMultipleDisplays 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test the placement of newly created windows on multiple dislays. 597424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(WindowSizerAshTest, MAYBE_PlaceNewWindowsOnMultipleDisplays) { 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateDisplay("1600x1200,1600x1200"); 599424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect primary_bounds = ash::Shell::GetInstance()->GetScreen()-> 600424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) GetPrimaryDisplay().bounds(); 601424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect secondary_bounds = ash::ScreenAsh::GetSecondaryDisplay().bounds(); 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 603d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ash::Shell::GetInstance()->set_target_root_window( 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetPrimaryRootWindow()); 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TestingProfile> profile(new TestingProfile()); 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create browser windows that are used as reference. 609424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<BrowserWindow> browser_window(CreateTestBrowserWindow( 610424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateTestWindowInShellWithId(0), 611424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(10, 10, 200, 200), 612424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Browser::CreateParams(profile.get(), chrome::HOST_DESKTOP_TYPE_ASH))); 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_window->Show(); 614424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(browser_window->GetNativeWindow()->GetRootWindow(), 615d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ash::Shell::GetTargetRootWindow()); 616424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 617424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<BrowserWindow> another_browser_window(CreateTestBrowserWindow( 618424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateTestWindowInShellWithId(1), 619424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(400, 10, 300, 300), 620424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Browser::CreateParams(profile.get(), chrome::HOST_DESKTOP_TYPE_ASH))); 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) another_browser_window->Show(); 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creating a new window to verify the new placement. 624424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<TestBrowserWindowAura> new_browser_window(CreateTestBrowserWindow( 625424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateTestWindowInShellWithId(0), 626424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(), 627424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Browser::CreateParams(profile.get(), 628424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH))); 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure the primary root is active. 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(ash::Shell::GetPrimaryRootWindow(), 632d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ash::Shell::GetTargetRootWindow()); 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // First new window should be in the primary. 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect window_bounds; 637424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, secondary_bounds, 638424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(), secondary_bounds, 639424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) PERSISTED, new_browser_window->browser(), 640424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(), &window_bounds); 641424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // TODO(oshima): Use exact bounds when the window_sizer_ash is 642424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // moved to ash and changed to include the result from 643424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // RearrangeVisibleWindowOnShow. 644424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_TRUE(primary_bounds.Contains(window_bounds)); 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Move the window to the right side of the secondary display and create a new 648424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // window. It should be opened then on the secondary display. 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 650424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Display second_display = ash::Shell::GetScreen()-> 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetDisplayNearestPoint(gfx::Point(1600 + 100,10)); 652424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->GetNativeWindow()->SetBoundsInScreen( 653424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(secondary_bounds.CenterPoint().x() - 100, 10, 200, 200), 6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) second_display); 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_window->Activate(); 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(ash::Shell::GetPrimaryRootWindow(), 657d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ash::Shell::GetTargetRootWindow()); 6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect window_bounds; 659424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, secondary_bounds, 660424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(), secondary_bounds, 661424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) PERSISTED, new_browser_window->browser(), 662424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(), &window_bounds); 663424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // TODO(oshima): Use exact bounds when the window_sizer_ash is 664424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // moved to ash and changed to include the result from 665424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // RearrangeVisibleWindowOnShow. 666424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_TRUE(secondary_bounds.Contains(window_bounds)); 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Activate another window in the primary display and create a new window. 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // It should be created in the primary display. 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) another_browser_window->Activate(); 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ash::Shell::GetPrimaryRootWindow(), 674d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ash::Shell::GetTargetRootWindow()); 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect window_bounds; 677424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) GetWindowBounds(p1600x1200, p1600x1200, secondary_bounds, 678424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(), secondary_bounds, 679424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) PERSISTED, new_browser_window->browser(), 680424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(), &window_bounds); 681424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // TODO(oshima): Use exact bounds when the window_sizer_ash is 682424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // moved to ash and changed to include the result from 683424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // RearrangeVisibleWindowOnShow. 684424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_TRUE(primary_bounds.Contains(window_bounds)); 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the show state is properly returned for non default cases. 689424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(WindowSizerAshTest, TestShowState) { 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile(new TestingProfile()); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 692424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Creating a browser & window to play with. 693424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<TestBrowserWindowAura> browser_window(CreateTestBrowserWindow( 694424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateTestWindowInShellWithId(0), 695424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(16, 32, 640, 320), 696424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Browser::CreateParams(Browser::TYPE_TABBED, profile.get(), 697424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH))); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create also a popup browser since that behaves different. 700424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<TestBrowserWindowAura> browser_popup(CreateTestBrowserWindow( 701424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateTestWindowInShellWithId(1), 702424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(16, 32, 640, 320), 703424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Browser::CreateParams(Browser::TYPE_POPUP, profile.get(), 704424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH))); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tabbed windows should retrieve the saved window state - since there is a 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // top window. 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL, 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 712424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->browser(), 7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200)); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_DEFAULT, 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_DEFAULT, 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL, 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 718424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->browser(), 7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200)); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Non tabbed windows should always follow the window saved visibility state. 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL, 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 725424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_popup->browser(), 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200)); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The non tabbed window will take the status of the last active of its kind. 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_NORMAL, 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_DEFAULT, 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL, 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 732424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_popup->browser(), 7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200)); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now create a top level window and check again for both. Only the tabbed 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window should follow the top level window's state. 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating a browser & window to play with. 738424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<TestBrowserWindowAura> browser_window2(CreateTestBrowserWindow( 739424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateTestWindowInShellWithId(3), 740424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(16, 32, 640, 320), 741424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Browser::CreateParams(Browser::TYPE_TABBED, profile.get(), 742424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH))); 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A tabbed window should now take the top level window state. 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_DEFAULT, 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_DEFAULT, 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 749424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->browser(), 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200)); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Non tabbed windows should always follow the window saved visibility state. 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_MINIMIZED, 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 756424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_popup->browser(), 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200)); 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // In smaller screen resolutions we default to maximized if there is no other 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // window visible. 7614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int min_size = ash::WindowPositioner::GetForceMaximizedWidthLimit() / 2; 7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (min_size > 0) { 7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect tiny_screen(0, 0, min_size, min_size); 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_DEFAULT, 7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::SHOW_STATE_DEFAULT, 7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BOTH, 768424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->browser(), 7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tiny_screen)); 770424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->Hide(); 7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, 7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 7732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::SHOW_STATE_DEFAULT, 7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BOTH, 775424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window2->browser(), 7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tiny_screen)); 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the default show state override behavior is properly handled. 782424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(WindowSizerAshTest, TestShowStateDefaults) { 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating a browser & window to play with. 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile(new TestingProfile()); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 786424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<TestBrowserWindowAura> browser_window(CreateTestBrowserWindow( 787424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateTestWindowInShellWithId(0), 788424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(16, 32, 640, 320), 789424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Browser::CreateParams(Browser::TYPE_TABBED, profile.get(), 790424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH))); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create also a popup browser since that behaves slightly different for 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // defaults. 794424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) scoped_ptr<TestBrowserWindowAura> browser_popup(CreateTestBrowserWindow( 795424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) CreateTestWindowInShellWithId(1), 796424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) gfx::Rect(16, 32, 128, 256), 797424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) Browser::CreateParams(Browser::TYPE_POPUP, profile.get(), 798424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) chrome::HOST_DESKTOP_TYPE_ASH))); 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that a browser creation state always get used if not given as 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SHOW_STATE_DEFAULT. 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_MAXIMIZED, 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEFAULT, 805424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->browser(), 8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200), ui::SHOW_STATE_DEFAULT); 807424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->browser()->set_initial_show_state(ui::SHOW_STATE_MINIMIZED); 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_MAXIMIZED, 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 811424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->browser(), 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200), ui::SHOW_STATE_MINIMIZED); 813424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->browser()->set_initial_show_state(ui::SHOW_STATE_NORMAL); 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetWindowShowState(ui::SHOW_STATE_MAXIMIZED, 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_MAXIMIZED, 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 817424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->browser(), 8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200), ui::SHOW_STATE_NORMAL); 819424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->browser()->set_initial_show_state(ui::SHOW_STATE_MAXIMIZED); 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetWindowShowState(ui::SHOW_STATE_NORMAL, 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL, 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 823424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->browser(), 8242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200), ui::SHOW_STATE_MAXIMIZED); 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that setting the maximized command line option is forcing the 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // maximized state. 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch(switches::kStartMaximized); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 830424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->browser()->set_initial_show_state(ui::SHOW_STATE_NORMAL); 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetWindowShowState(ui::SHOW_STATE_NORMAL, 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL, 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 834424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_window->browser(), 8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200), ui::SHOW_STATE_MAXIMIZED); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The popup should favor the initial show state over the command line. 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GetWindowShowState(ui::SHOW_STATE_NORMAL, 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::SHOW_STATE_NORMAL, 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOTH, 841424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) browser_popup->browser(), 8422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) p1600x1200), ui::SHOW_STATE_NORMAL); 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 844