// 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. #ifndef EXTENSIONS_SHELL_BROWSER_SHELL_DESKTOP_CONTROLLER_H_ #define EXTENSIONS_SHELL_BROWSER_SHELL_DESKTOP_CONTROLLER_H_ #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" #include "extensions/shell/browser/desktop_controller.h" #include "ui/aura/client/window_tree_client.h" #include "ui/aura/window_tree_host_observer.h" #if defined(OS_CHROMEOS) #include "chromeos/dbus/power_manager_client.h" #include "ui/display/chromeos/display_configurator.h" #endif namespace aura { class TestScreen; class Window; class WindowTreeHost; namespace client { class DefaultCaptureClient; class FocusClient; } } namespace content { class BrowserContext; } namespace gfx { class Size; } #if defined(OS_CHROMEOS) namespace ui { class UserActivityPowerManagerNotifier; } #endif namespace wm { class CompoundEventFilter; class CursorManager; class InputMethodEventFilter; class UserActivityDetector; } namespace extensions { class AppWindowClient; class Extension; // Handles desktop-related tasks for app_shell. class ShellDesktopController : public DesktopController, public aura::client::WindowTreeClient, #if defined(OS_CHROMEOS) public chromeos::PowerManagerClient::Observer, public ui::DisplayConfigurator::Observer, #endif public aura::WindowTreeHostObserver { public: ShellDesktopController(); virtual ~ShellDesktopController(); // DesktopController: virtual aura::WindowTreeHost* GetHost() OVERRIDE; virtual AppWindow* CreateAppWindow(content::BrowserContext* context, const Extension* extension) OVERRIDE; virtual void AddAppWindow(aura::Window* window) OVERRIDE; virtual void CloseAppWindows() OVERRIDE; // aura::client::WindowTreeClient overrides: virtual aura::Window* GetDefaultParent(aura::Window* context, aura::Window* window, const gfx::Rect& bounds) OVERRIDE; #if defined(OS_CHROMEOS) // chromeos::PowerManagerClient::Observer overrides: virtual void PowerButtonEventReceived(bool down, const base::TimeTicks& timestamp) OVERRIDE; // ui::DisplayConfigurator::Observer overrides. virtual void OnDisplayModeChanged(const std::vector< ui::DisplayConfigurator::DisplayState>& displays) OVERRIDE; #endif // aura::WindowTreeHostObserver overrides: virtual void OnHostCloseRequested(const aura::WindowTreeHost* host) OVERRIDE; protected: // Creates and sets the aura clients and window manager stuff. Subclass may // initialize different sets of the clients. virtual void InitWindowManager(); private: // Creates the window that hosts the app. void CreateRootWindow(); // Closes and destroys the root window hosting the app. void DestroyRootWindow(); // Returns the dimensions (in pixels) of the primary display, or an empty size // if the dimensions can't be determined or no display is connected. gfx::Size GetPrimaryDisplaySize(); #if defined(OS_CHROMEOS) scoped_ptr<ui::DisplayConfigurator> display_configurator_; #endif scoped_ptr<aura::TestScreen> test_screen_; scoped_ptr<aura::WindowTreeHost> host_; scoped_ptr<wm::CompoundEventFilter> root_window_event_filter_; scoped_ptr<aura::client::DefaultCaptureClient> capture_client_; scoped_ptr<wm::InputMethodEventFilter> input_method_filter_; scoped_ptr<aura::client::FocusClient> focus_client_; scoped_ptr<wm::CursorManager> cursor_manager_; scoped_ptr<wm::UserActivityDetector> user_activity_detector_; #if defined(OS_CHROMEOS) scoped_ptr<ui::UserActivityPowerManagerNotifier> user_activity_notifier_; #endif scoped_ptr<AppWindowClient> app_window_client_; // The desktop supports a single app window. AppWindow* app_window_; // NativeAppWindow::Close() deletes this. DISALLOW_COPY_AND_ASSIGN(ShellDesktopController); }; } // namespace extensions #endif // EXTENSIONS_SHELL_BROWSER_SHELL_DESKTOP_CONTROLLER_H_