ash_test_base.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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),
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      teardown_called_(false) {
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Must initialize |ash_test_helper_| here because some tests rely on
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // AshTestBase methods before they call AshTestBase::SetUp().
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ash_test_helper_.reset(new AshTestHelper(&message_loop_));
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AshTestBase::~AshTestBase() {
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CHECK(setup_called_)
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      << "You have overridden SetUp but never called AshTestBase::SetUp";
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CHECK(teardown_called_)
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      << "You have overridden TearDown but never called AshTestBase::TearDown";
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AshTestBase::SetUp() {
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  setup_called_ = true;
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // TODO(jamescook): Can we do this without changing command line?
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Use the origin (1,1) so that it doesn't over
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // lap with the native mouse cursor.
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CommandLine::ForCurrentProcess()->AppendSwitchASCII(
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      switches::kAshHostWindowBounds, "1+1-800x600");
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN)
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  aura::test::SetUsePopupAsRootWindowForTest(true);
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ui::InitializeInputMethodForTesting();
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ash_test_helper_->SetUp();
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Shell::GetPrimaryRootWindow()->Show();
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Shell::GetPrimaryRootWindow()->ShowRootWindow();
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Move the mouse cursor to far away so that native events doesn't
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // interfere test expectations.
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Shell::GetPrimaryRootWindow()->MoveCursorTo(gfx::Point(-1000, -1000));
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ash::Shell::GetInstance()->cursor_manager()->EnableMouseEvents();
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN)
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (base::win::GetVersion() >= base::win::VERSION_WIN8 &&
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      !CommandLine::ForCurrentProcess()->HasSwitch(
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ash::switches::kForceAshToDesktop)) {
12590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    ipc_thread_.reset(new base::Thread("test_metro_viewer_ipc_thread"));
12690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::Thread::Options options;
12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    options.message_loop_type = base::MessageLoop::TYPE_IO;
12890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    ipc_thread_->StartWithOptions(options);
12990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    metro_viewer_host_.reset(
131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        new TestMetroViewerProcessHost(ipc_thread_->message_loop_proxy()));
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    CHECK(metro_viewer_host_->LaunchViewerAndWaitForConnection(
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        win8::test::kDefaultTestAppUserModelId));
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    aura::RemoteRootWindowHostWin* root_window_host =
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        aura::RemoteRootWindowHostWin::Instance();
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    CHECK(root_window_host != NULL);
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AshTestBase::TearDown() {
142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  teardown_called_ = true;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Flush the message loop to finish pending release tasks.
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunAllPendingInMessageLoop();
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN)
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (base::win::GetVersion() >= base::win::VERSION_WIN8 &&
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      !CommandLine::ForCurrentProcess()->HasSwitch(
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ash::switches::kForceAshToDesktop)) {
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Check that our viewer connection is still established.
151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    CHECK(!metro_viewer_host_->closed_unexpectedly());
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ash_test_helper_->TearDown();
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ui::ShutdownInputMethodForTesting();
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN)
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  aura::test::SetUsePopupAsRootWindowForTest(false);
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Kill the viewer process if we spun one up.
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  metro_viewer_host_.reset();
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Clean up any dangling viewer processes as the metro APIs sometimes leave
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // zombies behind. A default browser process in metro will have the
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // following command line arg so use that to avoid killing all processes named
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // win8::test::kDefaultTestExePath.
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const wchar_t kViewerProcessArgument[] = L"DefaultBrowserServer";
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::KillAllNamedProcessesWithArgument(win8::test::kDefaultTestExePath,
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                          kViewerProcessArgument);
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  event_generator_.reset();
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Some tests set an internal display id,
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // reset it here, so other tests will continue in a clean environment.
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Display::SetInternalDisplayId(gfx::Display::kInvalidDisplayID);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::test::EventGenerator& AshTestBase::GetEventGenerator() {
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (!event_generator_) {
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    event_generator_.reset(
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        new aura::test::EventGenerator(new AshEventGeneratorDelegate()));
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return *event_generator_.get();
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool AshTestBase::SupportsMultipleDisplays() {
1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_WIN)
1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return base::win::GetVersion() < base::win::VERSION_WIN8;
190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#else
191eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return true;
192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif
193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static
196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool AshTestBase::SupportsHostWindowResize() {
197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#if defined(OS_WIN)
198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return base::win::GetVersion() < base::win::VERSION_WIN8;
1997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#else
2007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return true;
2017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif
2027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
2037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AshTestBase::UpdateDisplay(const std::string& display_specs) {
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DisplayManagerTestApi display_manager_test_api(
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Shell::GetInstance()->display_manager());
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  display_manager_test_api.UpdateDisplay(display_specs);
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::RootWindow* AshTestBase::CurrentContext() {
211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return ash_test_helper_->CurrentContext();
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShellWithId(int id) {
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return CreateTestWindowInShellWithDelegate(NULL, id, gfx::Rect());
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShellWithBounds(
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const gfx::Rect& bounds) {
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return CreateTestWindowInShellWithDelegate(NULL, 0, bounds);
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShell(SkColor color,
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                   int id,
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                   const gfx::Rect& bounds) {
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return CreateTestWindowInShellWithDelegate(
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      new aura::test::ColorTestWindowDelegate(color), id, bounds);
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShellWithDelegate(
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    aura::WindowDelegate* delegate,
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int id,
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const gfx::Rect& bounds) {
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return CreateTestWindowInShellWithDelegateAndType(
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      delegate,
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      aura::client::WINDOW_TYPE_NORMAL,
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      id,
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bounds);
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)aura::Window* AshTestBase::CreateTestWindowInShellWithDelegateAndType(
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    aura::WindowDelegate* delegate,
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    aura::client::WindowType type,
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int id,
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const gfx::Rect& bounds) {
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  aura::Window* window = new aura::Window(delegate);
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  window->set_id(id);
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  window->SetType(type);
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  window->Init(ui::LAYER_TEXTURED);
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  window->Show();
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (bounds.IsEmpty()) {
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    SetDefaultParentByPrimaryRootWindow(window);
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } else {
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    gfx::Display display =
2567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        Shell::GetScreen()->GetDisplayMatching(bounds);
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    aura::RootWindow* root = ash::Shell::GetInstance()->display_controller()->
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        GetRootWindowForDisplayId(display.id());
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    gfx::Point origin = bounds.origin();
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    wm::ConvertPointFromScreen(root, &origin);
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    window->SetBounds(gfx::Rect(origin, bounds.size()));
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    window->SetDefaultParentByRootWindow(root, bounds);
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  window->SetProperty(aura::client::kCanMaximizeKey, true);
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return window;
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AshTestBase::SetDefaultParentByPrimaryRootWindow(aura::Window* window) {
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  window->SetDefaultParentByRootWindow(
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      Shell::GetPrimaryRootWindow(), gfx::Rect());
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AshTestBase::RunAllPendingInMessageLoop() {
274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ash_test_helper_->RunAllPendingInMessageLoop();
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AshTestBase::SetSessionStarted(bool session_started) {
278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ash_test_helper_->test_shell_delegate()->test_session_state_delegate()->
279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SetActiveUserSessionStarted(session_started);
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AshTestBase::SetUserLoggedIn(bool user_logged_in) {
283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ash_test_helper_->test_shell_delegate()->test_session_state_delegate()->
284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SetHasActiveUser(user_logged_in);
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AshTestBase::SetCanLockScreen(bool can_lock_screen) {
288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ash_test_helper_->test_shell_delegate()->test_session_state_delegate()->
289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SetCanLockScreen(can_lock_screen);
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace test
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ash
294