16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file.
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/test/base/view_event_test_platform_part.h"
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ash/shell.h"
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ash/shell_init_params.h"
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ash/test/test_session_state_delegate.h"
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ash/test/test_shell_delegate.h"
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/audio/cras_audio_handler.h"
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h"
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/network/network_handler.h"
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/aura/env.h"
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/aura/window_tree_host.h"
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/message_center/message_center.h"
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/wm/core/wm_state.h"
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace {
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// ViewEventTestPlatformPart implementation for ChromeOS (chromeos=1).
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class ViewEventTestPlatformPartChromeOS : public ViewEventTestPlatformPart {
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public:
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  explicit ViewEventTestPlatformPartChromeOS(
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      ui::ContextFactory* context_factory);
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual ~ViewEventTestPlatformPartChromeOS();
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Overridden from ViewEventTestPlatformPart:
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual gfx::NativeWindow GetContext() OVERRIDE {
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    return ash::Shell::GetPrimaryRootWindow();
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private:
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  wm::WMState wm_state_;
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ViewEventTestPlatformPartChromeOS);
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)ViewEventTestPlatformPartChromeOS::ViewEventTestPlatformPartChromeOS(
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ui::ContextFactory* context_factory) {
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Ash Shell can't just live on its own without a browser process, we need to
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // also create the message center.
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  message_center::MessageCenter::Initialize();
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  chromeos::DBusThreadManager::Initialize();
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  chromeos::CrasAudioHandler::InitializeForTesting();
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  chromeos::NetworkHandler::Initialize();
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ash::test::TestShellDelegate* shell_delegate =
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      new ash::test::TestShellDelegate();
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ash::ShellInitParams init_params;
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  init_params.delegate = shell_delegate;
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  init_params.context_factory = context_factory;
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ash::Shell::CreateInstance(init_params);
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  shell_delegate->test_session_state_delegate()->SetActiveUserSessionStarted(
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      true);
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  GetContext()->GetHost()->Show();
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)ViewEventTestPlatformPartChromeOS::~ViewEventTestPlatformPartChromeOS() {
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ash::Shell::DeleteInstance();
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  chromeos::NetworkHandler::Shutdown();
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  chromeos::CrasAudioHandler::Shutdown();
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  chromeos::DBusThreadManager::Shutdown();
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Ash Shell can't just live on its own without a browser process, we need to
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // also shut down the message center.
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  message_center::MessageCenter::Shutdown();
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  aura::Env::DeleteInstance();
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// static
736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)ViewEventTestPlatformPart* ViewEventTestPlatformPart::Create(
746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ui::ContextFactory* context_factory) {
756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return new ViewEventTestPlatformPartChromeOS(context_factory);
766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
77