ash_test_base.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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/test/ash_test_base.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/ash_switches.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/display/display_controller.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ash/screen_ash.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/test/ash_test_helper.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/test/display_manager_test_api.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/test/test_session_state_delegate.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/test/test_shell_delegate.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/wm/coordinate_conversion.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/web_contents_tester.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/aura_constants.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/screen_position_client.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/root_window.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/test/event_generator.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/test/test_window_delegate.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/aura/window.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/window_delegate.h" 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/ime/input_method_initializer.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/display.h" 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/gfx/point.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/screen.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_CHROMEOS) 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/system/chromeos/tray_display.h" 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/test/test_metro_viewer_process_host.h" 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/test/test_process_killer_win.h" 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/win/metro.h" 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/win/windows_version.h" 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/remote_root_window_host_win.h" 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/root_window_host_win.h" 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "win8/test/test_registrar_constants.h" 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AshEventGeneratorDelegate : public aura::test::EventGeneratorDelegate { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AshEventGeneratorDelegate() {} 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~AshEventGeneratorDelegate() {} 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // aura::test::EventGeneratorDelegate overrides: 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual aura::RootWindow* GetRootWindowAt( 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Point& point_in_screen) const OVERRIDE { 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Screen* screen = Shell::GetScreen(); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Display display = screen->GetDisplayNearestPoint(point_in_screen); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Shell::GetInstance()->display_controller()-> 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRootWindowForDisplayId(display.id()); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual aura::client::ScreenPositionClient* GetScreenPositionClient( 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const aura::Window* window) const OVERRIDE { 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return aura::client::GetScreenPositionClient(window->GetRootWindow()); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AshEventGeneratorDelegate); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::WebContents* AshTestViewsDelegate::CreateWebContents( 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::SiteInstance* site_instance) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return content::WebContentsTester::CreateTestWebContents(browser_context, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)///////////////////////////////////////////////////////////////////////////// 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AshTestBase::AshTestBase() 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : setup_called_(false), 87bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch teardown_called_(false), 88bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch start_session_(true) { 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Must initialize |ash_test_helper_| here because some tests rely on 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AshTestBase methods before they call AshTestBase::SetUp(). 91a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ash_test_helper_.reset(new AshTestHelper(base::MessageLoopForUI::current())); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AshTestBase::~AshTestBase() { 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(setup_called_) 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) << "You have overridden SetUp but never called AshTestBase::SetUp"; 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(teardown_called_) 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) << "You have overridden TearDown but never called AshTestBase::TearDown"; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AshTestBase::SetUp() { 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) setup_called_ = true; 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(jamescook): Can we do this without changing command line? 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Use the origin (1,1) so that it doesn't over 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // lap with the native mouse cursor. 10668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) CommandLine* command_line = CommandLine::ForCurrentProcess(); 10768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (!command_line->HasSwitch(switches::kAshHostWindowBounds)) { 10868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) command_line->AppendSwitchASCII( 10968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) switches::kAshHostWindowBounds, "1+1-800x600"); 11068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::test::SetUsePopupAsRootWindowForTest(true); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 114bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch ash_test_helper_->SetUp(start_session_); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Shell::GetPrimaryRootWindow()->Show(); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell::GetPrimaryRootWindow()->ShowRootWindow(); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse cursor to far away so that native events doesn't 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // interfere test expectations. 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Shell::GetPrimaryRootWindow()->MoveCursorTo(gfx::Point(-1000, -1000)); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ash::Shell::GetInstance()->cursor_manager()->EnableMouseEvents(); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::win::GetVersion() >= base::win::VERSION_WIN8 && 12568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) !command_line->HasSwitch(ash::switches::kForceAshToDesktop)) { 12690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ipc_thread_.reset(new base::Thread("test_metro_viewer_ipc_thread")); 12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Thread::Options options; 12890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) options.message_loop_type = base::MessageLoop::TYPE_IO; 12990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ipc_thread_->StartWithOptions(options); 13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) metro_viewer_host_.reset( 132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new TestMetroViewerProcessHost(ipc_thread_->message_loop_proxy())); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(metro_viewer_host_->LaunchViewerAndWaitForConnection( 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) win8::test::kDefaultTestAppUserModelId)); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::RemoteRootWindowHostWin* root_window_host = 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::RemoteRootWindowHostWin::Instance(); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(root_window_host != NULL); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AshTestBase::TearDown() { 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) teardown_called_ = true; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Flush the message loop to finish pending release tasks. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAllPendingInMessageLoop(); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::win::GetVersion() >= base::win::VERSION_WIN8 && 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !CommandLine::ForCurrentProcess()->HasSwitch( 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::switches::kForceAshToDesktop)) { 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check that our viewer connection is still established. 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(!metro_viewer_host_->closed_unexpectedly()); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ash_test_helper_->TearDown(); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::test::SetUsePopupAsRootWindowForTest(false); 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Kill the viewer process if we spun one up. 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) metro_viewer_host_.reset(); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Clean up any dangling viewer processes as the metro APIs sometimes leave 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // zombies behind. A default browser process in metro will have the 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // following command line arg so use that to avoid killing all processes named 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // win8::test::kDefaultTestExePath. 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const wchar_t kViewerProcessArgument[] = L"DefaultBrowserServer"; 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::KillAllNamedProcessesWithArgument(win8::test::kDefaultTestExePath, 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kViewerProcessArgument); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event_generator_.reset(); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Some tests set an internal display id, 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reset it here, so other tests will continue in a clean environment. 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Display::SetInternalDisplayId(gfx::Display::kInvalidDisplayID); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::test::EventGenerator& AshTestBase::GetEventGenerator() { 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!event_generator_) { 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event_generator_.reset( 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new aura::test::EventGenerator(new AshEventGeneratorDelegate())); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return *event_generator_.get(); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool AshTestBase::SupportsMultipleDisplays() { 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_WIN) 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return base::win::GetVersion() < base::win::VERSION_WIN8; 189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#else 190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return true; 191eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif 192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static 195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool AshTestBase::SupportsHostWindowResize() { 196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_WIN) 197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return base::win::GetVersion() < base::win::VERSION_WIN8; 1987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#else 1997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return true; 2007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 2017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 2027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AshTestBase::UpdateDisplay(const std::string& display_specs) { 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DisplayManagerTestApi display_manager_test_api( 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell::GetInstance()->display_manager()); 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) display_manager_test_api.UpdateDisplay(display_specs); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::RootWindow* AshTestBase::CurrentContext() { 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return ash_test_helper_->CurrentContext(); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShellWithId(int id) { 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CreateTestWindowInShellWithDelegate(NULL, id, gfx::Rect()); 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShellWithBounds( 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& bounds) { 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CreateTestWindowInShellWithDelegate(NULL, 0, bounds); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShell(SkColor color, 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int id, 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& bounds) { 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CreateTestWindowInShellWithDelegate( 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new aura::test::ColorTestWindowDelegate(color), id, bounds); 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShellWithDelegate( 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::WindowDelegate* delegate, 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int id, 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& bounds) { 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CreateTestWindowInShellWithDelegateAndType( 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate, 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::client::WINDOW_TYPE_NORMAL, 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id, 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bounds); 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShellWithDelegateAndType( 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::WindowDelegate* delegate, 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::client::WindowType type, 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int id, 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& bounds) { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::Window* window = new aura::Window(delegate); 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->set_id(id); 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->SetType(type); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->Init(ui::LAYER_TEXTURED); 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->Show(); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (bounds.IsEmpty()) { 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetDefaultParentByPrimaryRootWindow(window); 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Display display = 2557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Shell::GetScreen()->GetDisplayMatching(bounds); 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::RootWindow* root = ash::Shell::GetInstance()->display_controller()-> 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRootWindowForDisplayId(display.id()); 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point origin = bounds.origin(); 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wm::ConvertPointFromScreen(root, &origin); 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->SetBounds(gfx::Rect(origin, bounds.size())); 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->SetDefaultParentByRootWindow(root, bounds); 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->SetProperty(aura::client::kCanMaximizeKey, true); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return window; 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AshTestBase::SetDefaultParentByPrimaryRootWindow(aura::Window* window) { 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->SetDefaultParentByRootWindow( 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell::GetPrimaryRootWindow(), gfx::Rect()); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AshTestBase::RunAllPendingInMessageLoop() { 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ash_test_helper_->RunAllPendingInMessageLoop(); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TestScreenshotDelegate* AshTestBase::GetScreenshotDelegate() { 2774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return ash_test_helper_->test_screenshot_delegate(); 2784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AshTestBase::SetSessionStarted(bool session_started) { 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ash_test_helper_->test_shell_delegate()->test_session_state_delegate()-> 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetActiveUserSessionStarted(session_started); 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AshTestBase::SetUserLoggedIn(bool user_logged_in) { 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ash_test_helper_->test_shell_delegate()->test_session_state_delegate()-> 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetHasActiveUser(user_logged_in); 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AshTestBase::SetCanLockScreen(bool can_lock_screen) { 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ash_test_helper_->test_shell_delegate()->test_session_state_delegate()-> 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetCanLockScreen(can_lock_screen); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 295bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochvoid AshTestBase::SetUserAddingScreenRunning(bool user_adding_screen_running) { 296bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch ash_test_helper_->test_shell_delegate()->test_session_state_delegate()-> 297bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch SetUserAddingScreenRunning(user_adding_screen_running); 298bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 299bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 300bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochvoid AshTestBase::BlockUserSession(UserSessionBlockReason block_reason) { 301bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch switch (block_reason) { 302bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case BLOCKED_BY_LOCK_SCREEN: 303bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch SetSessionStarted(true); 304bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch SetUserAddingScreenRunning(false); 305bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch Shell::GetInstance()->session_state_delegate()->LockScreen(); 306bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch break; 307bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case BLOCKED_BY_LOGIN_SCREEN: 308bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch SetUserAddingScreenRunning(false); 309bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch SetSessionStarted(false); 310bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch break; 311bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case BLOCKED_BY_USER_ADDING_SCREEN: 312bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch SetUserAddingScreenRunning(true); 313bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch SetSessionStarted(true); 314bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch break; 315bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch default: 316bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch NOTREACHED(); 317bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch break; 318bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch } 319bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 320bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 321bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochvoid AshTestBase::UnblockUserSession() { 322bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch Shell::GetInstance()->session_state_delegate()->UnlockScreen(); 323bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch SetSessionStarted(true); 324bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch SetUserAddingScreenRunning(false); 325bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 326bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 327bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace test 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 330