ash_test_helper.cc revision 0529e5d033099cbfc42635f6f6183833b09dff6e
1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/test/ash_test_helper.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/accelerators/accelerator_controller.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/ash_switches.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/shell.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/test/display_manager_test_api.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/test/shell_test_api.h" 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/test/test_screenshot_delegate.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/test/test_session_state_delegate.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/test/test_shell_delegate.h" 15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ash/test/test_system_tray_delegate.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/run_loop.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/aura/env.h" 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/aura/input_state_lookup.h" 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/aura/test/env_test_helper.h" 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/ime/input_method_initializer.h" 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/compositor/scoped_animation_duration_scale_mode.h" 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/compositor/test/context_factories_for_test.h" 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/message_center/message_center.h" 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/capture_controller.h" 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/wm_state.h" 26a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 27a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#if defined(OS_CHROMEOS) 28a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chromeos/audio/cras_audio_handler.h" 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/keyboard/keyboard.h" 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/win/windows_version.h" 35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(USE_X11) 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/aura/window_tree_host_x11.h" 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace ash { 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace test { 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AshTestHelper::AshTestHelper(base::MessageLoopForUI* message_loop) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : message_loop_(message_loop), 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) test_shell_delegate_(NULL), 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_screenshot_delegate_(NULL), 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dbus_thread_manager_initialized_(false) { 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(message_loop_); 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(USE_X11) 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) aura::test::SetUseOverrideRedirectWindowByDefault(true); 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AshTestHelper::~AshTestHelper() { 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 58bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochvoid AshTestHelper::SetUp(bool start_session) { 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) wm_state_.reset(new wm::WMState); 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Disable animations during tests. 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) zero_duration_mode_.reset(new ui::ScopedAnimationDurationScaleMode( 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui::ScopedAnimationDurationScaleMode::ZERO_DURATION)); 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ui::InitializeInputMethodForTesting(); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool enable_pixel_output = false; 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ui::InitializeContextFactoryForTests(enable_pixel_output); 681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Creates Shell and hook with Desktop. 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!test_shell_delegate_) 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) test_shell_delegate_ = new TestShellDelegate; 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Creates MessageCenter since g_browser_process is not created in AshTestBase 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // tests. 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) message_center::MessageCenter::Initialize(); 76a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 77a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#if defined(OS_CHROMEOS) 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Create DBusThreadManager for testing. 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!chromeos::DBusThreadManager::IsInitialized()) { 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chromeos::DBusThreadManager::InitializeWithStub(); 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dbus_thread_manager_initialized_ = true; 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 83a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Create CrasAudioHandler for testing since g_browser_process is not 84a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // created in AshTestBase tests. 85a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chromeos::CrasAudioHandler::InitializeForTesting(); 863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#endif 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ash::Shell::CreateInstance(test_shell_delegate_); 884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) aura::test::EnvTestHelper(aura::Env::GetInstance()).SetInputStateLookup( 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<aura::InputStateLookup>()); 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Shell* shell = Shell::GetInstance(); 92bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch if (start_session) { 93bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch test_shell_delegate_->test_session_state_delegate()-> 94bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch SetActiveUserSessionStarted(true); 95bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch test_shell_delegate_->test_session_state_delegate()-> 96bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch SetHasActiveUser(true); 97bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch } 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::DisplayManagerTestApi(shell->display_manager()). 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DisableChangeDisplayUponHostResize(); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ShellTestApi(shell).DisableOutputConfiguratorAnimation(); 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_screenshot_delegate_ = new TestScreenshotDelegate(); 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) shell->accelerator_controller()->SetScreenshotDelegate( 1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<ScreenshotDelegate>(test_screenshot_delegate_)); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AshTestHelper::TearDown() { 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Tear down the shell. 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Shell::DeleteInstance(); 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_screenshot_delegate_ = NULL; 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Remove global message center state. 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) message_center::MessageCenter::Shutdown(); 115a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 116a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#if defined(OS_CHROMEOS) 117a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) chromeos::CrasAudioHandler::Shutdown(); 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (dbus_thread_manager_initialized_) { 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chromeos::DBusThreadManager::Shutdown(); 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dbus_thread_manager_initialized_ = false; 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) keyboard::ResetKeyboardForTesting(); 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) aura::Env::DeleteInstance(); 1261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ui::TerminateContextFactoryForTests(); 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Need to reset the initial login status. 1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TestSystemTrayDelegate::SetInitialLoginStatus(user::LOGGED_IN_USER); 1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ui::ShutdownInputMethodForTesting(); 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) zero_duration_mode_.reset(); 1333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 134a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CHECK(!wm::ScopedCaptureClient::IsActive()); 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) wm_state_.reset(); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AshTestHelper::RunAllPendingInMessageLoop() { 140868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(base::MessageLoopForUI::current() == message_loop_); 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) aura::Env::CreateInstance(); 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::RunLoop run_loop; 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) run_loop.RunUntilIdle(); 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)aura::Window* AshTestHelper::CurrentContext() { 1471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root_window = Shell::GetTargetRootWindow(); 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!root_window) 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) root_window = Shell::GetPrimaryRootWindow(); 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(root_window); 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return root_window; 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 154c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// static 155c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool AshTestHelper::SupportsMultipleDisplays() { 156c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return false; 158c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 159c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return true; 160c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 161c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 162c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 163c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// static 164c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool AshTestHelper::SupportsHostWindowResize() { 165c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#if defined(OS_WIN) 1660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return false; 167c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#else 168c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return true; 169c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 170c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 171c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace test 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace ash 174