| Index: apps/shell/browser/shell_desktop_controller.cc
 | 
| diff --git a/apps/shell/browser/shell_desktop_controller.cc b/apps/shell/browser/shell_desktop_controller.cc
 | 
| deleted file mode 100644
 | 
| index 88f114a5500e449b1d0fb73b93b0850ec6d4b437..0000000000000000000000000000000000000000
 | 
| --- a/apps/shell/browser/shell_desktop_controller.cc
 | 
| +++ /dev/null
 | 
| @@ -1,341 +0,0 @@
 | 
| -// Copyright 2014 The Chromium Authors. All rights reserved.
 | 
| -// Use of this source code is governed by a BSD-style license that can be
 | 
| -// found in the LICENSE file.
 | 
| -
 | 
| -#include "apps/shell/browser/shell_desktop_controller.h"
 | 
| -
 | 
| -#include "apps/shell/browser/shell_app_window_controller.h"
 | 
| -#include "apps/shell/common/switches.h"
 | 
| -#include "base/command_line.h"
 | 
| -#include "content/public/browser/context_factory.h"
 | 
| -#include "ui/aura/client/cursor_client.h"
 | 
| -#include "ui/aura/client/default_capture_client.h"
 | 
| -#include "ui/aura/env.h"
 | 
| -#include "ui/aura/layout_manager.h"
 | 
| -#include "ui/aura/test/test_screen.h"
 | 
| -#include "ui/aura/window.h"
 | 
| -#include "ui/aura/window_event_dispatcher.h"
 | 
| -#include "ui/aura/window_tree_host.h"
 | 
| -#include "ui/base/cursor/cursor.h"
 | 
| -#include "ui/base/cursor/image_cursors.h"
 | 
| -#include "ui/base/ime/input_method_initializer.h"
 | 
| -#include "ui/gfx/native_widget_types.h"
 | 
| -#include "ui/gfx/screen.h"
 | 
| -#include "ui/wm/core/base_focus_rules.h"
 | 
| -#include "ui/wm/core/compound_event_filter.h"
 | 
| -#include "ui/wm/core/cursor_manager.h"
 | 
| -#include "ui/wm/core/focus_controller.h"
 | 
| -#include "ui/wm/core/input_method_event_filter.h"
 | 
| -#include "ui/wm/core/native_cursor_manager.h"
 | 
| -#include "ui/wm/core/native_cursor_manager_delegate.h"
 | 
| -#include "ui/wm/core/user_activity_detector.h"
 | 
| -
 | 
| -#if defined(OS_CHROMEOS)
 | 
| -#include "ui/chromeos/user_activity_power_manager_notifier.h"
 | 
| -#include "ui/display/types/chromeos/display_mode.h"
 | 
| -#include "ui/display/types/chromeos/display_snapshot.h"
 | 
| -#endif
 | 
| -
 | 
| -namespace apps {
 | 
| -namespace {
 | 
| -
 | 
| -// A simple layout manager that makes each new window fill its parent.
 | 
| -class FillLayout : public aura::LayoutManager {
 | 
| - public:
 | 
| -  FillLayout() {}
 | 
| -  virtual ~FillLayout() {}
 | 
| -
 | 
| - private:
 | 
| -  // aura::LayoutManager:
 | 
| -  virtual void OnWindowResized() OVERRIDE {}
 | 
| -
 | 
| -  virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE {
 | 
| -    if (!child->parent())
 | 
| -      return;
 | 
| -
 | 
| -    // Create a rect at 0,0 with the size of the parent.
 | 
| -    gfx::Size parent_size = child->parent()->bounds().size();
 | 
| -    child->SetBounds(gfx::Rect(parent_size));
 | 
| -  }
 | 
| -
 | 
| -  virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE {}
 | 
| -
 | 
| -  virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE {}
 | 
| -
 | 
| -  virtual void OnChildWindowVisibilityChanged(aura::Window* child,
 | 
| -                                              bool visible) OVERRIDE {}
 | 
| -
 | 
| -  virtual void SetChildBounds(aura::Window* child,
 | 
| -                              const gfx::Rect& requested_bounds) OVERRIDE {
 | 
| -    SetChildBoundsDirect(child, requested_bounds);
 | 
| -  }
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(FillLayout);
 | 
| -};
 | 
| -
 | 
| -// A class that bridges the gap between CursorManager and Aura. It borrows
 | 
| -// heavily from AshNativeCursorManager.
 | 
| -class ShellNativeCursorManager : public wm::NativeCursorManager {
 | 
| - public:
 | 
| -  explicit ShellNativeCursorManager(aura::WindowTreeHost* host)
 | 
| -      : host_(host),
 | 
| -        image_cursors_(new ui::ImageCursors) {}
 | 
| -  virtual ~ShellNativeCursorManager() {}
 | 
| -
 | 
| -  // wm::NativeCursorManager overrides.
 | 
| -  virtual void SetDisplay(
 | 
| -      const gfx::Display& display,
 | 
| -      wm::NativeCursorManagerDelegate* delegate) OVERRIDE {
 | 
| -    if (image_cursors_->SetDisplay(display, display.device_scale_factor()))
 | 
| -      SetCursor(delegate->GetCursor(), delegate);
 | 
| -  }
 | 
| -
 | 
| -  virtual void SetCursor(
 | 
| -      gfx::NativeCursor cursor,
 | 
| -      wm::NativeCursorManagerDelegate* delegate) OVERRIDE {
 | 
| -    image_cursors_->SetPlatformCursor(&cursor);
 | 
| -    cursor.set_device_scale_factor(image_cursors_->GetScale());
 | 
| -    delegate->CommitCursor(cursor);
 | 
| -
 | 
| -    if (delegate->IsCursorVisible())
 | 
| -      ApplyCursor(cursor);
 | 
| -  }
 | 
| -
 | 
| -  virtual void SetVisibility(
 | 
| -      bool visible,
 | 
| -      wm::NativeCursorManagerDelegate* delegate) OVERRIDE {
 | 
| -    delegate->CommitVisibility(visible);
 | 
| -
 | 
| -    if (visible) {
 | 
| -      SetCursor(delegate->GetCursor(), delegate);
 | 
| -    } else {
 | 
| -      gfx::NativeCursor invisible_cursor(ui::kCursorNone);
 | 
| -      image_cursors_->SetPlatformCursor(&invisible_cursor);
 | 
| -      ApplyCursor(invisible_cursor);
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  virtual void SetCursorSet(
 | 
| -      ui::CursorSetType cursor_set,
 | 
| -      wm::NativeCursorManagerDelegate* delegate) OVERRIDE {
 | 
| -    image_cursors_->SetCursorSet(cursor_set);
 | 
| -    delegate->CommitCursorSet(cursor_set);
 | 
| -    if (delegate->IsCursorVisible())
 | 
| -      SetCursor(delegate->GetCursor(), delegate);
 | 
| -  }
 | 
| -
 | 
| -  virtual void SetMouseEventsEnabled(
 | 
| -      bool enabled,
 | 
| -      wm::NativeCursorManagerDelegate* delegate) OVERRIDE {
 | 
| -    delegate->CommitMouseEventsEnabled(enabled);
 | 
| -    SetVisibility(delegate->IsCursorVisible(), delegate);
 | 
| -  }
 | 
| -
 | 
| - private:
 | 
| -  // Sets |cursor| as the active cursor within Aura.
 | 
| -  void ApplyCursor(gfx::NativeCursor cursor) {
 | 
| -    host_->SetCursor(cursor);
 | 
| -  }
 | 
| -
 | 
| -  aura::WindowTreeHost* host_;  // Not owned.
 | 
| -
 | 
| -  scoped_ptr<ui::ImageCursors> image_cursors_;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(ShellNativeCursorManager);
 | 
| -};
 | 
| -
 | 
| -class AppsFocusRules : public wm::BaseFocusRules {
 | 
| - public:
 | 
| -  AppsFocusRules() {}
 | 
| -  virtual ~AppsFocusRules() {}
 | 
| -
 | 
| -  virtual bool SupportsChildActivation(aura::Window* window) const OVERRIDE {
 | 
| -    return true;
 | 
| -  }
 | 
| -
 | 
| - private:
 | 
| -  DISALLOW_COPY_AND_ASSIGN(AppsFocusRules);
 | 
| -};
 | 
| -
 | 
| -ShellDesktopController* g_instance = NULL;
 | 
| -
 | 
| -}  // namespace
 | 
| -
 | 
| -ShellDesktopController::ShellDesktopController() {
 | 
| -#if defined(OS_CHROMEOS)
 | 
| -  display_configurator_.reset(new ui::DisplayConfigurator);
 | 
| -  display_configurator_->Init(false);
 | 
| -  display_configurator_->ForceInitialConfigure(0);
 | 
| -  display_configurator_->AddObserver(this);
 | 
| -#endif
 | 
| -  aura::Env::CreateInstance(true);
 | 
| -  aura::Env::GetInstance()->set_context_factory(content::GetContextFactory());
 | 
| -
 | 
| -  g_instance = this;
 | 
| -}
 | 
| -
 | 
| -ShellDesktopController::~ShellDesktopController() {
 | 
| -  app_window_controller_.reset();
 | 
| -  g_instance = NULL;
 | 
| -  DestroyRootWindow();
 | 
| -  aura::Env::DeleteInstance();
 | 
| -}
 | 
| -
 | 
| -// static
 | 
| -ShellDesktopController* ShellDesktopController::instance() {
 | 
| -  return g_instance;
 | 
| -}
 | 
| -
 | 
| -void ShellDesktopController::SetAppWindowController(
 | 
| -    ShellAppWindowController* app_window_controller) {
 | 
| -  app_window_controller_.reset(app_window_controller);
 | 
| -}
 | 
| -
 | 
| -ShellAppWindow* ShellDesktopController::CreateAppWindow(
 | 
| -    content::BrowserContext* context) {
 | 
| -  return app_window_controller_->CreateAppWindow(context);
 | 
| -}
 | 
| -
 | 
| -void ShellDesktopController::CloseAppWindows() {
 | 
| -  if (app_window_controller_)
 | 
| -    app_window_controller_->CloseAppWindows();
 | 
| -}
 | 
| -
 | 
| -aura::Window* ShellDesktopController::GetDefaultParent(
 | 
| -    aura::Window* context,
 | 
| -    aura::Window* window,
 | 
| -    const gfx::Rect& bounds) {
 | 
| -  return host_->window();
 | 
| -}
 | 
| -
 | 
| -#if defined(OS_CHROMEOS)
 | 
| -void ShellDesktopController::OnDisplayModeChanged(
 | 
| -    const std::vector<ui::DisplayConfigurator::DisplayState>& displays) {
 | 
| -  gfx::Size size = GetPrimaryDisplaySize();
 | 
| -  if (!size.IsEmpty())
 | 
| -    host_->UpdateRootWindowSize(size);
 | 
| -}
 | 
| -#endif
 | 
| -
 | 
| -void ShellDesktopController::OnHostCloseRequested(
 | 
| -    const aura::WindowTreeHost* host) {
 | 
| -  DCHECK_EQ(host_.get(), host);
 | 
| -  CloseAppWindows();
 | 
| -  base::MessageLoop::current()->PostTask(FROM_HERE,
 | 
| -                                         base::MessageLoop::QuitClosure());
 | 
| -}
 | 
| -
 | 
| -void ShellDesktopController::CreateRootWindow() {
 | 
| -  // Set up basic pieces of ui::wm.
 | 
| -  gfx::Size size;
 | 
| -  base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
 | 
| -  if (command_line->HasSwitch(switches::kAppShellHostWindowBounds)) {
 | 
| -    const std::string size_str =
 | 
| -        command_line->GetSwitchValueASCII(switches::kAppShellHostWindowBounds);
 | 
| -    int width, height;
 | 
| -    CHECK_EQ(2, sscanf(size_str.c_str(), "%dx%d", &width, &height));
 | 
| -    size = gfx::Size(width, height);
 | 
| -  } else {
 | 
| -    size = GetPrimaryDisplaySize();
 | 
| -  }
 | 
| -  if (size.IsEmpty())
 | 
| -    size = gfx::Size(1280, 720);
 | 
| -
 | 
| -  test_screen_.reset(aura::TestScreen::Create(size));
 | 
| -  // TODO(jamescook): Replace this with a real Screen implementation.
 | 
| -  gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, test_screen_.get());
 | 
| -  // TODO(mukai): Set up input method.
 | 
| -
 | 
| -  host_.reset(test_screen_->CreateHostForPrimaryDisplay());
 | 
| -  host_->InitHost();
 | 
| -  aura::client::SetWindowTreeClient(host_->window(), this);
 | 
| -  root_window_event_filter_.reset(new wm::CompoundEventFilter);
 | 
| -  host_->window()->AddPreTargetHandler(root_window_event_filter_.get());
 | 
| -  InitWindowManager();
 | 
| -
 | 
| -  host_->AddObserver(this);
 | 
| -
 | 
| -  // Ensure the X window gets mapped.
 | 
| -  host_->Show();
 | 
| -}
 | 
| -
 | 
| -void ShellDesktopController::InitWindowManager() {
 | 
| -  wm::FocusController* focus_controller =
 | 
| -      new wm::FocusController(CreateFocusRules());
 | 
| -  aura::client::SetFocusClient(host_->window(), focus_controller);
 | 
| -  host_->window()->AddPreTargetHandler(focus_controller);
 | 
| -  aura::client::SetActivationClient(host_->window(), focus_controller);
 | 
| -  focus_client_.reset(focus_controller);
 | 
| -
 | 
| -  input_method_filter_.reset(
 | 
| -      new wm::InputMethodEventFilter(host_->GetAcceleratedWidget()));
 | 
| -  input_method_filter_->SetInputMethodPropertyInRootWindow(host_->window());
 | 
| -  root_window_event_filter_->AddHandler(input_method_filter_.get());
 | 
| -
 | 
| -  capture_client_.reset(
 | 
| -      new aura::client::DefaultCaptureClient(host_->window()));
 | 
| -
 | 
| -  // Ensure new windows fill the display.
 | 
| -  host_->window()->SetLayoutManager(new FillLayout);
 | 
| -
 | 
| -  cursor_manager_.reset(
 | 
| -      new wm::CursorManager(scoped_ptr<wm::NativeCursorManager>(
 | 
| -          new ShellNativeCursorManager(host_.get()))));
 | 
| -  cursor_manager_->SetDisplay(
 | 
| -      gfx::Screen::GetNativeScreen()->GetPrimaryDisplay());
 | 
| -  cursor_manager_->SetCursor(ui::kCursorPointer);
 | 
| -  aura::client::SetCursorClient(host_->window(), cursor_manager_.get());
 | 
| -
 | 
| -  user_activity_detector_.reset(new wm::UserActivityDetector);
 | 
| -  host_->event_processor()->GetRootTarget()->AddPreTargetHandler(
 | 
| -      user_activity_detector_.get());
 | 
| -#if defined(OS_CHROMEOS)
 | 
| -  user_activity_notifier_.reset(
 | 
| -      new ui::UserActivityPowerManagerNotifier(user_activity_detector_.get()));
 | 
| -#endif
 | 
| -}
 | 
| -
 | 
| -wm::FocusRules* ShellDesktopController::CreateFocusRules() {
 | 
| -  return new AppsFocusRules();
 | 
| -}
 | 
| -
 | 
| -void ShellDesktopController::DestroyRootWindow() {
 | 
| -  host_->RemoveObserver(this);
 | 
| -  if (input_method_filter_)
 | 
| -    root_window_event_filter_->RemoveHandler(input_method_filter_.get());
 | 
| -  if (user_activity_detector_) {
 | 
| -    host_->event_processor()->GetRootTarget()->RemovePreTargetHandler(
 | 
| -        user_activity_detector_.get());
 | 
| -  }
 | 
| -  wm::FocusController* focus_controller =
 | 
| -      static_cast<wm::FocusController*>(focus_client_.get());
 | 
| -  if (focus_controller) {
 | 
| -    host_->window()->RemovePreTargetHandler(focus_controller);
 | 
| -    aura::client::SetActivationClient(host_->window(), NULL);
 | 
| -  }
 | 
| -  root_window_event_filter_.reset();
 | 
| -  capture_client_.reset();
 | 
| -  input_method_filter_.reset();
 | 
| -  focus_client_.reset();
 | 
| -  cursor_manager_.reset();
 | 
| -#if defined(OS_CHROMEOS)
 | 
| -  user_activity_notifier_.reset();
 | 
| -#endif
 | 
| -  user_activity_detector_.reset();
 | 
| -  host_.reset();
 | 
| -}
 | 
| -
 | 
| -gfx::Size ShellDesktopController::GetPrimaryDisplaySize() {
 | 
| -#if defined(OS_CHROMEOS)
 | 
| -  const std::vector<ui::DisplayConfigurator::DisplayState>& displays =
 | 
| -      display_configurator_->cached_displays();
 | 
| -  if (displays.empty())
 | 
| -    return gfx::Size();
 | 
| -  const ui::DisplayMode* mode = displays[0].display->current_mode();
 | 
| -  return mode ? mode->size() : gfx::Size();
 | 
| -#else
 | 
| -  return gfx::Size();
 | 
| -#endif
 | 
| -}
 | 
| -
 | 
| -}  // namespace apps
 | 
| 
 |