shell_desktop_controller.h revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
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" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/aura/client/window_tree_client.h" 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/aura/window_tree_host_observer.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; 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class Window; 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass WindowTreeHost; 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace client { 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class DefaultCaptureClient; 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class FocusClient; 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace content { 29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass BrowserContext; 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace gfx { 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class Size; 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#if defined(OS_CHROMEOS) 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace ui { 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass UserActivityPowerManagerNotifier; 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace wm { 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class CompoundEventFilter; 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass CursorManager; 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class InputMethodEventFilter; 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass UserActivityDetector; 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace apps { 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass ShellAppWindow; 52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Handles desktop-related tasks for app_shell. 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class ShellDesktopController : public aura::client::WindowTreeClient, 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public aura::WindowTreeHostObserver 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_CHROMEOS) 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) , 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public ui::DisplayConfigurator::Observer 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) { 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ShellDesktopController(); 63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual ~ShellDesktopController(); 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Returns the single instance of the desktop. (Stateless functions like 66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // ShellAppWindowCreateFunction need to be able to access the desktop, so 67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // we need a singleton somewhere). 68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch static ShellDesktopController* instance(); 69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) aura::WindowTreeHost* host() { return host_.get(); } 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Creates the window that hosts the app. 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void CreateRootWindow(); 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Creates a new app window and adds it to the desktop. The desktop maintains 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // ownership of the window. 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ShellAppWindow* CreateAppWindow(content::BrowserContext* context); 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Closes and destroys the app window. 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void CloseAppWindow(); 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Overridden from aura::client::WindowTreeClient: 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual aura::Window* GetDefaultParent(aura::Window* context, 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) aura::Window* window, 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const gfx::Rect& bounds) OVERRIDE; 86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_CHROMEOS) 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // ui::DisplayConfigurator::Observer overrides. 89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void OnDisplayModeChanged(const std::vector< 900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ui::DisplayConfigurator::DisplayState>& displays) OVERRIDE; 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // aura::WindowTreeHostObserver overrides: 9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void OnHostCloseRequested(const aura::WindowTreeHost* host) OVERRIDE; 9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) protected: 9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Creates and sets the aura clients and window manager stuff. Subclass may 9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // initialize different sets of the clients. 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void InitWindowManager(); 100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 102effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Closes and destroys the root window hosting the app. 103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void DestroyRootWindow(); 104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Returns the dimensions (in pixels) of the primary display, or an empty size 106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // if the dimensions can't be determined or no display is connected. 107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gfx::Size GetPrimaryDisplaySize(); 108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_CHROMEOS) 110c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_ptr<ui::DisplayConfigurator> display_configurator_; 111effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif 112effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 113effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch scoped_ptr<aura::TestScreen> test_screen_; 114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<aura::WindowTreeHost> host_; 11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<wm::CompoundEventFilter> root_window_event_filter_; 11846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<aura::client::DefaultCaptureClient> capture_client_; 12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 12146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<wm::InputMethodEventFilter> input_method_filter_; 12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<aura::client::FocusClient> focus_client_; 12446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<wm::CursorManager> cursor_manager_; 1265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<wm::UserActivityDetector> user_activity_detector_; 1280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#if defined(OS_CHROMEOS) 1290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<ui::UserActivityPowerManagerNotifier> user_activity_notifier_; 1300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif 1310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 132c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The desktop supports a single app window. 133c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_ptr<ShellAppWindow> app_window_; 134c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 135effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DISALLOW_COPY_AND_ASSIGN(ShellDesktopController); 136effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 137effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 138effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace apps 139effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 140effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif // APPS_SHELL_BROWSER_SHELL_DESKTOP_CONTROLLER_H_ 141