shell_desktop_controller.h revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file.
4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#ifndef APPS_SHELL_BROWSER_SHELL_DESKTOP_CONTROLLER_H_
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define APPS_SHELL_BROWSER_SHELL_DESKTOP_CONTROLLER_H_
7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/basictypes.h"
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/compiler_specific.h"
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/memory/scoped_ptr.h"
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/aura/window_tree_host_observer.h"
12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/gfx/geometry/size.h"
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_CHROMEOS)
15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/display/chromeos/display_configurator.h"
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace aura {
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass TestScreen;
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass WindowTreeHost;
21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace content {
24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass BrowserContext;
25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#if defined(OS_CHROMEOS)
280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace ui {
290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass UserActivityPowerManagerNotifier;
300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif
320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace wm {
345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass CursorManager;
350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass UserActivityDetector;
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass WMTestHelper;
37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace apps {
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass ShellAppWindow;
42c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Handles desktop-related tasks for app_shell.
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass ShellDesktopController
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_CHROMEOS)
46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    : public ui::DisplayConfigurator::Observer
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      {
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public:
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  ShellDesktopController();
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual ~ShellDesktopController();
52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Returns the single instance of the desktop. (Stateless functions like
54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // ShellAppWindowCreateFunction need to be able to access the desktop, so
55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // we need a singleton somewhere).
56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  static ShellDesktopController* instance();
57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Creates a new app window and adds it to the desktop. The desktop maintains
59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // ownership of the window.
60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ShellAppWindow* CreateAppWindow(content::BrowserContext* context);
61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Closes and destroys the app window.
63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  void CloseAppWindow();
64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Returns the host for the Aura window tree.
66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  aura::WindowTreeHost* GetWindowTreeHost();
67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_CHROMEOS)
69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // ui::DisplayConfigurator::Observer overrides.
70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void OnDisplayModeChanged(const std::vector<
710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      ui::DisplayConfigurator::DisplayState>& displays) OVERRIDE;
72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private:
75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Creates the window that hosts the app.
76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void CreateRootWindow();
77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Closes and destroys the root window hosting the app.
79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void DestroyRootWindow();
80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Returns the dimensions (in pixels) of the primary display, or an empty size
82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // if the dimensions can't be determined or no display is connected.
83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  gfx::Size GetPrimaryDisplaySize();
84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_CHROMEOS)
86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  scoped_ptr<ui::DisplayConfigurator> display_configurator_;
87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Enable a minimal set of views::corewm to be initialized.
90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  scoped_ptr<wm::WMTestHelper> wm_test_helper_;
91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  scoped_ptr<aura::TestScreen> test_screen_;
93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  scoped_ptr<wm::CursorManager> cursor_manager_;
955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  scoped_ptr<wm::UserActivityDetector> user_activity_detector_;
970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#if defined(OS_CHROMEOS)
980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  scoped_ptr<ui::UserActivityPowerManagerNotifier> user_activity_notifier_;
990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif
1000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
101c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // The desktop supports a single app window.
102c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  scoped_ptr<ShellAppWindow> app_window_;
103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DISALLOW_COPY_AND_ASSIGN(ShellDesktopController);
105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}  // namespace apps
108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif  // APPS_SHELL_BROWSER_SHELL_DESKTOP_CONTROLLER_H_
110