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