ash_test_base.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/display/display_manager.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/screen_ash.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/test/display_manager_test_api.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/test/shell_test_api.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 "base/run_loop.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/web_contents_tester.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/aura_constants.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/screen_position_client.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/env.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/root_window.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/test/event_generator.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/test/test_window_delegate.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/window_delegate.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/ime/text_input_test_support.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/compositor/layer_animator.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/compositor/scoped_animation_duration_scale_mode.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/display.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/screen.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_MESSAGE_CENTER) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/message_center.h" 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/test/test_metro_viewer_process_host.h" 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/test/test_process_killer_win.h" 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/win/windows_version.h" 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/remote_root_window_host_win.h" 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/root_window_host_win.h" 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "win8/test/test_registrar_constants.h" 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test { 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class AshEventGeneratorDelegate : public aura::test::EventGeneratorDelegate { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AshEventGeneratorDelegate() {} 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~AshEventGeneratorDelegate() {} 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // aura::test::EventGeneratorDelegate overrides: 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual aura::RootWindow* GetRootWindowAt( 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Point& point_in_screen) const OVERRIDE { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Screen* screen = Shell::GetScreen(); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Display display = screen->GetDisplayNearestPoint(point_in_screen); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Shell::GetInstance()->display_controller()-> 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRootWindowForDisplayId(display.id()); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual aura::client::ScreenPositionClient* GetScreenPositionClient( 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const aura::Window* window) const OVERRIDE { 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return aura::client::GetScreenPositionClient(window->GetRootWindow()); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AshEventGeneratorDelegate); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::WebContents* AshTestViewsDelegate::CreateWebContents( 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::SiteInstance* site_instance) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return content::WebContentsTester::CreateTestWebContents(browser_context, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_instance); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AshTestBase::AshTestBase() 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : test_shell_delegate_(NULL) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AshTestBase::~AshTestBase() { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AshTestBase::SetUp() { 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Use the origin (1,1) so that it doesn't over 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // lap with the native mouse cursor. 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitchASCII( 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switches::kAshHostWindowBounds, "1+1-800x600"); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::test::SetUsePopupAsRootWindowForTest(true); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable animations during tests. 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) zero_duration_mode_.reset(new ui::ScopedAnimationDurationScaleMode( 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ScopedAnimationDurationScaleMode::ZERO_DURATION)); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::TextInputTestSupport::Initialize(); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates Shell and hook with Desktop. 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_shell_delegate_ = new TestShellDelegate; 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_MESSAGE_CENTER) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates MessageCenter since g_browser_process is not created in AshTestBase 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // tests. 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_center::MessageCenter::Initialize(); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::CreateInstance(test_shell_delegate_); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell* shell = Shell::GetInstance(); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test::DisplayManagerTestApi(shell->display_manager()). 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DisableChangeDisplayUponHostResize(); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Shell::GetPrimaryRootWindow()->Show(); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell::GetPrimaryRootWindow()->ShowRootWindow(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse cursor to far away so that native events doesn't 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // interfere test expectations. 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Shell::GetPrimaryRootWindow()->MoveCursorTo(gfx::Point(-1000, -1000)); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) shell->cursor_manager()->EnableMouseEvents(); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellTestApi(shell).DisableOutputConfiguratorAnimation(); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::win::GetVersion() >= base::win::VERSION_WIN8 && 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !CommandLine::ForCurrentProcess()->HasSwitch( 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::switches::kForceAshToDesktop)) { 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) metro_viewer_host_.reset(new TestMetroViewerProcessHost("viewer")); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE( 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) metro_viewer_host_->LaunchViewerAndWaitForConnection( 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) win8::test::kDefaultTestAppUserModelId)); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::RemoteRootWindowHostWin* root_window_host = 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::RemoteRootWindowHostWin::Instance(); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(root_window_host != NULL); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AshTestBase::TearDown() { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Flush the message loop to finish pending release tasks. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAllPendingInMessageLoop(); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::win::GetVersion() >= base::win::VERSION_WIN8 && 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !CommandLine::ForCurrentProcess()->HasSwitch( 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::switches::kForceAshToDesktop)) { 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check that our viewer connection is still established. 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_FALSE(metro_viewer_host_->closed_unexpectedly()); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tear down the shell. 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Shell::DeleteInstance(); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_MESSAGE_CENTER) 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove global message center state. 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_center::MessageCenter::Shutdown(); 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::Env::DeleteInstance(); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::TextInputTestSupport::Shutdown(); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::test::SetUsePopupAsRootWindowForTest(false); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Kill the viewer process if we spun one up. 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) metro_viewer_host_.reset(); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Clean up any dangling viewer processes as the metro APIs sometimes leave 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // zombies behind. A default browser process in metro will have the 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // following command line arg so use that to avoid killing all processes named 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // win8::test::kDefaultTestExePath. 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const wchar_t kViewerProcessArgument[] = L"DefaultBrowserServer"; 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::KillAllNamedProcessesWithArgument(win8::test::kDefaultTestExePath, 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kViewerProcessArgument); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event_generator_.reset(); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Some tests set an internal display id, 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reset it here, so other tests will continue in a clean environment. 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Display::SetInternalDisplayId(gfx::Display::kInvalidDisplayID); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::test::EventGenerator& AshTestBase::GetEventGenerator() { 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!event_generator_.get()) { 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event_generator_.reset( 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new aura::test::EventGenerator(new AshEventGeneratorDelegate())); 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return *event_generator_.get(); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AshTestBase::UpdateDisplay(const std::string& display_specs) { 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DisplayManagerTestApi display_manager_test_api( 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell::GetInstance()->display_manager()); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) display_manager_test_api.UpdateDisplay(display_specs); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::RootWindow* AshTestBase::CurrentContext() { 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::RootWindow* root_window = Shell::GetActiveRootWindow(); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!root_window) 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window = Shell::GetPrimaryRootWindow(); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(root_window); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return root_window; 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShellWithId(int id) { 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CreateTestWindowInShellWithDelegate(NULL, id, gfx::Rect()); 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShellWithBounds( 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& bounds) { 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CreateTestWindowInShellWithDelegate(NULL, 0, bounds); 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShell(SkColor color, 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int id, 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& bounds) { 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CreateTestWindowInShellWithDelegate( 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new aura::test::ColorTestWindowDelegate(color), id, bounds); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShellWithDelegate( 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::WindowDelegate* delegate, 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int id, 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& bounds) { 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return CreateTestWindowInShellWithDelegateAndType( 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate, 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::client::WINDOW_TYPE_NORMAL, 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id, 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bounds); 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShellWithDelegateAndType( 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::WindowDelegate* delegate, 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::client::WindowType type, 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int id, 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& bounds) { 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::Window* window = new aura::Window(delegate); 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->set_id(id); 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->SetType(type); 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->Init(ui::LAYER_TEXTURED); 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->Show(); 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (bounds.IsEmpty()) { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetDefaultParentByPrimaryRootWindow(window); 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Display display = 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->display_manager()->GetDisplayMatching(bounds); 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::RootWindow* root = ash::Shell::GetInstance()->display_controller()-> 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRootWindowForDisplayId(display.id()); 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point origin = bounds.origin(); 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) wm::ConvertPointFromScreen(root, &origin); 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->SetBounds(gfx::Rect(origin, bounds.size())); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->SetDefaultParentByRootWindow(root, bounds); 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->SetProperty(aura::client::kCanMaximizeKey, true); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return window; 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AshTestBase::SetDefaultParentByPrimaryRootWindow(aura::Window* window) { 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->SetDefaultParentByRootWindow( 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell::GetPrimaryRootWindow(), gfx::Rect()); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AshTestBase::RunAllPendingInMessageLoop() { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(MessageLoopForUI::current() == &message_loop_); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::RunLoop run_loop(aura::Env::GetInstance()->GetDispatcher()); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run_loop.RunUntilIdle(); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AshTestBase::SetSessionStarted(bool session_started) { 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_shell_delegate_->SetSessionStarted(session_started); 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AshTestBase::SetUserLoggedIn(bool user_logged_in) { 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_shell_delegate_->SetUserLoggedIn(user_logged_in); 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AshTestBase::SetCanLockScreen(bool can_lock_screen) { 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_shell_delegate_->SetCanLockScreen(can_lock_screen); 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace test 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 287