1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef ASH_SHELL_H_ 6 #define ASH_SHELL_H_ 7 8 #include <utility> 9 #include <vector> 10 11 #include "ash/ash_export.h" 12 #include "ash/metrics/user_metrics_recorder.h" 13 #include "ash/shelf/shelf_types.h" 14 #include "ash/system/user/login_status.h" 15 #include "ash/wm/cursor_manager_chromeos.h" 16 #include "ash/wm/system_modal_container_event_filter_delegate.h" 17 #include "base/basictypes.h" 18 #include "base/compiler_specific.h" 19 #include "base/gtest_prod_util.h" 20 #include "base/memory/scoped_ptr.h" 21 #include "base/memory/weak_ptr.h" 22 #include "base/observer_list.h" 23 #include "ui/aura/window.h" 24 #include "ui/base/ui_base_types.h" 25 #include "ui/events/event_target.h" 26 #include "ui/gfx/insets.h" 27 #include "ui/gfx/screen.h" 28 #include "ui/gfx/size.h" 29 #include "ui/wm/core/cursor_manager.h" 30 #include "ui/wm/public/activation_change_observer.h" 31 32 namespace app_list { 33 class AppListView; 34 } 35 namespace aura { 36 class EventFilter; 37 class RootWindow; 38 class Window; 39 namespace client { 40 class ActivationClient; 41 class FocusClient; 42 } 43 } 44 45 namespace gfx { 46 class ImageSkia; 47 class Point; 48 class Rect; 49 } 50 51 namespace ui { 52 class DisplayConfigurator; 53 class Layer; 54 class UserActivityPowerManagerNotifier; 55 } 56 namespace views { 57 class NonClientFrameView; 58 class Widget; 59 namespace corewm { 60 class TooltipController; 61 } 62 } 63 64 namespace wm { 65 class AcceleratorFilter; 66 class CompoundEventFilter; 67 class InputMethodEventFilter; 68 class NestedAcceleratorController; 69 class ShadowController; 70 class VisibilityController; 71 class UserActivityDetector; 72 class WindowModalityController; 73 } 74 75 namespace ash { 76 77 class AcceleratorController; 78 class AccelerometerController; 79 class AccessibilityDelegate; 80 class AppListController; 81 class AshNativeCursorManager; 82 class AutoclickController; 83 class BluetoothNotificationController; 84 class CaptureController; 85 class DesktopBackgroundController; 86 class DisplayChangeObserver; 87 class DisplayConfiguratorAnimation; 88 class DisplayController; 89 class DisplayErrorObserver; 90 class DisplayManager; 91 class DragDropController; 92 class EventClientImpl; 93 class EventRewriterEventFilter; 94 class EventTransformationHandler; 95 class FirstRunHelper; 96 class FocusCycler; 97 class GPUSupport; 98 class HighContrastController; 99 class KeyboardUMAEventFilter; 100 class LastWindowClosedLogoutReminder; 101 class LocaleNotificationController; 102 class LockStateController; 103 class LogoutConfirmationController; 104 class MagnificationController; 105 class MaximizeModeController; 106 class MaximizeModeWindowManager; 107 class MediaDelegate; 108 class MouseCursorEventFilter; 109 class MruWindowTracker; 110 class NewWindowDelegate; 111 class OverlayEventFilter; 112 class PartialMagnificationController; 113 class PowerButtonController; 114 class PowerEventObserver; 115 class ProjectingObserver; 116 class ResizeShadowController; 117 class ResolutionNotificationController; 118 class RootWindowController; 119 class ScopedTargetRootWindow; 120 class ScreenAsh; 121 class ScreenPositionController; 122 class SessionStateDelegate; 123 class Shelf; 124 class ShelfDelegate; 125 class ShelfItemDelegateManager; 126 class ShelfModel; 127 class ShelfWindowWatcher; 128 class ShellDelegate; 129 struct ShellInitParams; 130 class ShellObserver; 131 class SlowAnimationEventFilter; 132 class StatusAreaWidget; 133 class StickyKeysController; 134 class SystemGestureEventFilter; 135 class SystemModalContainerEventFilter; 136 class SystemTray; 137 class SystemTrayDelegate; 138 class SystemTrayNotifier; 139 class ToplevelWindowEventHandler; 140 class TouchTransformerController; 141 class TouchObserverHUD; 142 class UserActivityDetector; 143 class UserWallpaperDelegate; 144 class VideoActivityNotifier; 145 class VideoDetector; 146 class WebNotificationTray; 147 class WindowCycleController; 148 class WindowPositioner; 149 class WindowSelectorController; 150 151 namespace shell { 152 class WindowWatcher; 153 } 154 155 namespace test { 156 class ShellTestApi; 157 } 158 159 // Shell is a singleton object that presents the Shell API and implements the 160 // RootWindow's delegate interface. 161 // 162 // Upon creation, the Shell sets itself as the RootWindow's delegate, which 163 // takes ownership of the Shell. 164 class ASH_EXPORT Shell : public SystemModalContainerEventFilterDelegate, 165 public ui::EventTarget, 166 public aura::client::ActivationChangeObserver { 167 public: 168 typedef std::vector<RootWindowController*> RootWindowControllerList; 169 170 enum Direction { 171 FORWARD, 172 BACKWARD 173 }; 174 175 // A shell must be explicitly created so that it can call |Init()| with the 176 // delegate set. |delegate| can be NULL (if not required for initialization). 177 // Takes ownership of |delegate|. 178 static Shell* CreateInstance(const ShellInitParams& init_params); 179 180 // Should never be called before |CreateInstance()|. 181 static Shell* GetInstance(); 182 183 // Returns true if the ash shell has been instantiated. 184 static bool HasInstance(); 185 186 static void DeleteInstance(); 187 188 // Returns the root window controller for the primary root window. 189 // TODO(oshima): move this to |RootWindowController| 190 static RootWindowController* GetPrimaryRootWindowController(); 191 192 // Returns all root window controllers. 193 // TODO(oshima): move this to |RootWindowController| 194 static RootWindowControllerList GetAllRootWindowControllers(); 195 196 // Returns the primary root Window. The primary root Window is the one that 197 // has a launcher. 198 static aura::Window* GetPrimaryRootWindow(); 199 200 // Returns a root Window when used as a target when creating a new window. 201 // The root window of the active window is used in most cases, but can 202 // be overridden by using ScopedTargetRootWindow(). 203 // If you want to get the root Window of the active window, just use 204 // |wm::GetActiveWindow()->GetRootWindow()|. 205 static aura::Window* GetTargetRootWindow(); 206 207 // Returns the global Screen object that's always active in ash. 208 static gfx::Screen* GetScreen(); 209 210 // Returns all root windows. 211 static aura::Window::Windows GetAllRootWindows(); 212 213 static aura::Window* GetContainer(aura::Window* root_window, 214 int container_id); 215 static const aura::Window* GetContainer(const aura::Window* root_window, 216 int container_id); 217 218 // Returns the list of containers that match |container_id| in 219 // all root windows. If |priority_root| is given, the container 220 // in the |priority_root| will be inserted at the top of the list. 221 static std::vector<aura::Window*> GetContainersFromAllRootWindows( 222 int container_id, 223 aura::Window* priority_root); 224 set_target_root_window(aura::Window * target_root_window)225 void set_target_root_window(aura::Window* target_root_window) { 226 target_root_window_ = target_root_window; 227 } 228 229 // Shows the context menu for the background and launcher at 230 // |location_in_screen| (in screen coordinates). 231 void ShowContextMenu(const gfx::Point& location_in_screen, 232 ui::MenuSourceType source_type); 233 234 // Toggles the app list. |window| specifies in which display the app 235 // list should be shown. If this is NULL, the active root window 236 // will be used. 237 void ToggleAppList(aura::Window* anchor); 238 239 // Returns app list target visibility. 240 bool GetAppListTargetVisibility() const; 241 242 // Returns app list window or NULL if it is not visible. 243 aura::Window* GetAppListWindow(); 244 245 // Returns app list view or NULL if it is not visible. 246 app_list::AppListView* GetAppListView(); 247 248 // Returns true if a system-modal dialog window is currently open. 249 bool IsSystemModalWindowOpen() const; 250 251 // For testing only: set simulation that a modal window is open SimulateModalWindowOpenForTesting(bool modal_window_open)252 void SimulateModalWindowOpenForTesting(bool modal_window_open) { 253 simulate_modal_window_open_for_testing_ = modal_window_open; 254 } 255 256 // Creates a default views::NonClientFrameView for use by windows in the 257 // Ash environment. 258 views::NonClientFrameView* CreateDefaultNonClientFrameView( 259 views::Widget* widget); 260 261 // Rotates focus through containers that can receive focus. 262 void RotateFocus(Direction direction); 263 264 // Sets the work area insets of the display that contains |window|, 265 // this notifies observers too. 266 // TODO(sky): this no longer really replicates what happens and is unreliable. 267 // Remove this. 268 void SetDisplayWorkAreaInsets(aura::Window* window, 269 const gfx::Insets& insets); 270 271 // Called when the user logs in. 272 void OnLoginStateChanged(user::LoginStatus status); 273 274 // Called after the logged-in user's profile is ready. 275 void OnLoginUserProfilePrepared(); 276 277 // Called when the login status changes. 278 // TODO(oshima): Investigate if we can merge this and |OnLoginStateChanged|. 279 void UpdateAfterLoginStatusChange(user::LoginStatus status); 280 281 // Called when the application is exiting. 282 void OnAppTerminating(); 283 284 // Called when the screen is locked (after the lock window is visible) or 285 // unlocked. 286 void OnLockStateChanged(bool locked); 287 288 // Called when a casting session is started or stopped. 289 void OnCastingSessionStartedOrStopped(bool started); 290 291 // Called when the overview mode is about to be started (before the windows 292 // get re-arranged). 293 void OnOverviewModeStarting(); 294 295 // Called before the overview mode is ending (before the windows get arranged 296 // to their final position). 297 void OnOverviewModeEnding(); 298 299 // Called after maximize mode has started, windows might still animate though. 300 void OnMaximizeModeStarted(); 301 302 // Called after maximize mode has ended, windows might still be returning to 303 // their original position. 304 void OnMaximizeModeEnded(); 305 306 // Called when a root window is created. 307 void OnRootWindowAdded(aura::Window* root_window); 308 309 // Initializes |shelf_|. Does nothing if it's already initialized. 310 void CreateShelf(); 311 312 // Called when the shelf is created for |root_window|. 313 void OnShelfCreatedForRootWindow(aura::Window* root_window); 314 315 // Creates a virtual keyboard. Deletes the old virtual keyboard if it already 316 // exists. 317 void CreateKeyboard(); 318 319 // Deactivates the virtual keyboard. 320 void DeactivateKeyboard(); 321 322 // Show shelf view if it was created hidden (before session has started). 323 void ShowShelf(); 324 325 // Adds/removes observer. 326 void AddShellObserver(ShellObserver* observer); 327 void RemoveShellObserver(ShellObserver* observer); 328 329 #if defined(OS_CHROMEOS) 330 // Test if MaximizeModeWindowManager is not enabled, and if 331 // MaximizeModeController is not currently setting a display rotation. Or if 332 // the |resolution_notification_controller_| is not showing its confirmation 333 // dialog. If true then changes to display settings can be saved. 334 bool ShouldSaveDisplaySettings(); 335 #endif 336 accelerator_controller()337 AcceleratorController* accelerator_controller() { 338 return accelerator_controller_.get(); 339 } 340 display_manager()341 DisplayManager* display_manager() { return display_manager_.get(); } input_method_filter()342 ::wm::InputMethodEventFilter* input_method_filter() { 343 return input_method_filter_.get(); 344 } env_filter()345 ::wm::CompoundEventFilter* env_filter() { 346 return env_filter_.get(); 347 } tooltip_controller()348 views::corewm::TooltipController* tooltip_controller() { 349 return tooltip_controller_.get(); 350 } overlay_filter()351 OverlayEventFilter* overlay_filter() { return overlay_filter_.get(); } desktop_background_controller()352 DesktopBackgroundController* desktop_background_controller() { 353 return desktop_background_controller_.get(); 354 } power_button_controller()355 PowerButtonController* power_button_controller() { 356 return power_button_controller_.get(); 357 } lock_state_controller()358 LockStateController* lock_state_controller() { 359 return lock_state_controller_.get(); 360 } mru_window_tracker()361 MruWindowTracker* mru_window_tracker() { 362 return mru_window_tracker_.get(); 363 } user_activity_detector()364 ::wm::UserActivityDetector* user_activity_detector() { 365 return user_activity_detector_.get(); 366 } video_detector()367 VideoDetector* video_detector() { 368 return video_detector_.get(); 369 } window_cycle_controller()370 WindowCycleController* window_cycle_controller() { 371 return window_cycle_controller_.get(); 372 } window_selector_controller()373 WindowSelectorController* window_selector_controller() { 374 return window_selector_controller_.get(); 375 } focus_cycler()376 FocusCycler* focus_cycler() { return focus_cycler_.get(); } display_controller()377 DisplayController* display_controller() { 378 return display_controller_.get(); 379 } 380 #if defined(OS_CHROMEOS) && defined(USE_X11) touch_transformer_controller()381 TouchTransformerController* touch_transformer_controller() { 382 return touch_transformer_controller_.get(); 383 } 384 #endif // defined(OS_CHROMEOS) && defined(USE_X11) mouse_cursor_filter()385 MouseCursorEventFilter* mouse_cursor_filter() { 386 return mouse_cursor_filter_.get(); 387 } event_transformation_handler()388 EventTransformationHandler* event_transformation_handler() { 389 return event_transformation_handler_.get(); 390 } cursor_manager()391 ::wm::CursorManager* cursor_manager() { return &cursor_manager_; } 392 delegate()393 ShellDelegate* delegate() { return delegate_.get(); } 394 user_wallpaper_delegate()395 UserWallpaperDelegate* user_wallpaper_delegate() { 396 return user_wallpaper_delegate_.get(); 397 } 398 session_state_delegate()399 SessionStateDelegate* session_state_delegate() { 400 return session_state_delegate_.get(); 401 } 402 accessibility_delegate()403 AccessibilityDelegate* accessibility_delegate() { 404 return accessibility_delegate_.get(); 405 } 406 new_window_delegate()407 NewWindowDelegate* new_window_delegate() { 408 return new_window_delegate_.get(); 409 } 410 media_delegate()411 MediaDelegate* media_delegate() { 412 return media_delegate_.get(); 413 } 414 high_contrast_controller()415 HighContrastController* high_contrast_controller() { 416 return high_contrast_controller_.get(); 417 } 418 magnification_controller()419 MagnificationController* magnification_controller() { 420 return magnification_controller_.get(); 421 } 422 partial_magnification_controller()423 PartialMagnificationController* partial_magnification_controller() { 424 return partial_magnification_controller_.get(); 425 } 426 autoclick_controller()427 AutoclickController* autoclick_controller() { 428 return autoclick_controller_.get(); 429 } 430 activation_client()431 aura::client::ActivationClient* activation_client() { 432 return activation_client_; 433 } 434 shelf_item_delegate_manager()435 ShelfItemDelegateManager* shelf_item_delegate_manager() { 436 return shelf_item_delegate_manager_.get(); 437 } 438 439 // Force the shelf to query for it's current visibility state. 440 void UpdateShelfVisibility(); 441 442 // TODO(oshima): Define an interface to access shelf/launcher 443 // state, or just use Launcher. 444 445 // Sets/gets the shelf auto-hide behavior on |root_window|. 446 void SetShelfAutoHideBehavior(ShelfAutoHideBehavior behavior, 447 aura::Window* root_window); 448 ShelfAutoHideBehavior GetShelfAutoHideBehavior( 449 aura::Window* root_window) const; 450 451 // Sets/gets shelf's alignment on |root_window|. 452 void SetShelfAlignment(ShelfAlignment alignment, 453 aura::Window* root_window); 454 ShelfAlignment GetShelfAlignment(const aura::Window* root_window); 455 456 // Dims or undims the screen. 457 void SetDimming(bool should_dim); 458 459 // Notifies |observers_| when entering or exiting fullscreen mode in 460 // |root_window|. 461 void NotifyFullscreenStateChange(bool is_fullscreen, 462 aura::Window* root_window); 463 464 // Creates a modal background (a partially-opaque fullscreen window) 465 // on all displays for |window|. 466 void CreateModalBackground(aura::Window* window); 467 468 // Called when a modal window is removed. It will activate 469 // another modal window if any, or remove modal screens 470 // on all displays. 471 void OnModalWindowRemoved(aura::Window* removed); 472 473 // Returns WebNotificationTray on the primary root window. 474 WebNotificationTray* GetWebNotificationTray(); 475 476 // Does the primary display have status area? 477 bool HasPrimaryStatusArea(); 478 479 // Returns the system tray on primary display. 480 SystemTray* GetPrimarySystemTray(); 481 system_tray_delegate()482 SystemTrayDelegate* system_tray_delegate() { 483 return system_tray_delegate_.get(); 484 } 485 system_tray_notifier()486 SystemTrayNotifier* system_tray_notifier() { 487 return system_tray_notifier_.get(); 488 } 489 set_initially_hide_cursor(bool hide)490 static void set_initially_hide_cursor(bool hide) { 491 initially_hide_cursor_ = hide; 492 } 493 resize_shadow_controller()494 ResizeShadowController* resize_shadow_controller() { 495 return resize_shadow_controller_.get(); 496 } 497 498 // Made available for tests. shadow_controller()499 ::wm::ShadowController* shadow_controller() { 500 return shadow_controller_.get(); 501 } 502 503 // Starts the animation that occurs on first login. 504 void DoInitialWorkspaceAnimation(); 505 accelerometer_controller()506 AccelerometerController* accelerometer_controller() { 507 return accelerometer_controller_.get(); 508 } 509 maximize_mode_controller()510 MaximizeModeController* maximize_mode_controller() { 511 return maximize_mode_controller_.get(); 512 } 513 514 #if defined(OS_CHROMEOS) 515 // TODO(oshima): Move these objects to DisplayController. display_configurator()516 ui::DisplayConfigurator* display_configurator() { 517 return display_configurator_.get(); 518 } display_configurator_animation()519 DisplayConfiguratorAnimation* display_configurator_animation() { 520 return display_configurator_animation_.get(); 521 } display_error_observer()522 DisplayErrorObserver* display_error_observer() { 523 return display_error_observer_.get(); 524 } 525 resolution_notification_controller()526 ResolutionNotificationController* resolution_notification_controller() { 527 return resolution_notification_controller_.get(); 528 } 529 logout_confirmation_controller()530 LogoutConfirmationController* logout_confirmation_controller() { 531 return logout_confirmation_controller_.get(); 532 } 533 #endif // defined(OS_CHROMEOS) 534 shelf_model()535 ShelfModel* shelf_model() { 536 return shelf_model_.get(); 537 } 538 window_positioner()539 WindowPositioner* window_positioner() { 540 return window_positioner_.get(); 541 } 542 543 // Returns the launcher delegate, creating if necesary. 544 ShelfDelegate* GetShelfDelegate(); 545 metrics()546 UserMetricsRecorder* metrics() { 547 return user_metrics_recorder_.get(); 548 } 549 550 void SetTouchHudProjectionEnabled(bool enabled); 551 is_touch_hud_projection_enabled()552 bool is_touch_hud_projection_enabled() const { 553 return is_touch_hud_projection_enabled_; 554 } 555 556 #if defined(OS_CHROMEOS) 557 // Creates instance of FirstRunHelper. Caller is responsible for deleting 558 // returned object. 559 ash::FirstRunHelper* CreateFirstRunHelper(); 560 561 // Toggles cursor compositing on/off. Native cursor is disabled when cursor 562 // compositing is enabled, and vice versa. 563 void SetCursorCompositingEnabled(bool enabled); 564 sticky_keys_controller()565 StickyKeysController* sticky_keys_controller() { 566 return sticky_keys_controller_.get(); 567 } 568 #endif // defined(OS_CHROMEOS) 569 gpu_support()570 GPUSupport* gpu_support() { return gpu_support_.get(); } 571 572 private: 573 FRIEND_TEST_ALL_PREFIXES(ExtendedDesktopTest, TestCursor); 574 FRIEND_TEST_ALL_PREFIXES(WindowManagerTest, MouseEventCursors); 575 FRIEND_TEST_ALL_PREFIXES(WindowManagerTest, TransformActivate); 576 friend class RootWindowController; 577 friend class ScopedTargetRootWindow; 578 friend class test::ShellTestApi; 579 friend class shell::WindowWatcher; 580 581 typedef std::pair<aura::Window*, gfx::Rect> WindowAndBoundsPair; 582 583 // Takes ownership of |delegate|. 584 explicit Shell(ShellDelegate* delegate); 585 virtual ~Shell(); 586 587 void Init(const ShellInitParams& init_params); 588 589 // Initializes virtual keyboard controller. 590 void InitKeyboard(); 591 592 // Initializes the root window so that it can host browser windows. 593 void InitRootWindow(aura::Window* root_window); 594 595 // ash::SystemModalContainerEventFilterDelegate overrides: 596 virtual bool CanWindowReceiveEvents(aura::Window* window) OVERRIDE; 597 598 // Overridden from ui::EventTarget: 599 virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE; 600 virtual EventTarget* GetParentTarget() OVERRIDE; 601 virtual scoped_ptr<ui::EventTargetIterator> GetChildIterator() const OVERRIDE; 602 virtual ui::EventTargeter* GetEventTargeter() OVERRIDE; 603 virtual void OnEvent(ui::Event* event) OVERRIDE; 604 605 // Overridden from aura::client::ActivationChangeObserver: 606 virtual void OnWindowActivated(aura::Window* gained_active, 607 aura::Window* lost_active) OVERRIDE; 608 609 static Shell* instance_; 610 611 // If set before the Shell is initialized, the mouse cursor will be hidden 612 // when the screen is initially created. 613 static bool initially_hide_cursor_; 614 615 // When no explicit target display/RootWindow is given, new windows are 616 // created on |scoped_target_root_window_| , unless NULL in 617 // which case they are created on |target_root_window_|. 618 // |target_root_window_| never becomes NULL during the session. 619 aura::Window* target_root_window_; 620 aura::Window* scoped_target_root_window_; 621 622 // The CompoundEventFilter owned by aura::Env object. 623 scoped_ptr< ::wm::CompoundEventFilter> env_filter_; 624 625 std::vector<WindowAndBoundsPair> to_restore_; 626 627 scoped_ptr<UserMetricsRecorder> user_metrics_recorder_; 628 scoped_ptr< ::wm::NestedAcceleratorController> nested_accelerator_controller_; 629 scoped_ptr<AcceleratorController> accelerator_controller_; 630 scoped_ptr<ShellDelegate> delegate_; 631 scoped_ptr<SystemTrayDelegate> system_tray_delegate_; 632 scoped_ptr<SystemTrayNotifier> system_tray_notifier_; 633 scoped_ptr<UserWallpaperDelegate> user_wallpaper_delegate_; 634 scoped_ptr<SessionStateDelegate> session_state_delegate_; 635 scoped_ptr<AccessibilityDelegate> accessibility_delegate_; 636 scoped_ptr<NewWindowDelegate> new_window_delegate_; 637 scoped_ptr<MediaDelegate> media_delegate_; 638 scoped_ptr<ShelfDelegate> shelf_delegate_; 639 scoped_ptr<ShelfItemDelegateManager> shelf_item_delegate_manager_; 640 scoped_ptr<ShelfWindowWatcher> shelf_window_watcher_; 641 642 scoped_ptr<ShelfModel> shelf_model_; 643 scoped_ptr<WindowPositioner> window_positioner_; 644 645 scoped_ptr<AppListController> app_list_controller_; 646 647 scoped_ptr<DragDropController> drag_drop_controller_; 648 scoped_ptr<ResizeShadowController> resize_shadow_controller_; 649 scoped_ptr< ::wm::ShadowController> shadow_controller_; 650 scoped_ptr< ::wm::VisibilityController> visibility_controller_; 651 scoped_ptr< ::wm::WindowModalityController> window_modality_controller_; 652 scoped_ptr<views::corewm::TooltipController> tooltip_controller_; 653 scoped_ptr<DesktopBackgroundController> desktop_background_controller_; 654 scoped_ptr<PowerButtonController> power_button_controller_; 655 scoped_ptr<LockStateController> lock_state_controller_; 656 scoped_ptr<MruWindowTracker> mru_window_tracker_; 657 scoped_ptr< ::wm::UserActivityDetector> user_activity_detector_; 658 scoped_ptr<VideoDetector> video_detector_; 659 scoped_ptr<WindowCycleController> window_cycle_controller_; 660 scoped_ptr<WindowSelectorController> window_selector_controller_; 661 scoped_ptr<FocusCycler> focus_cycler_; 662 scoped_ptr<DisplayController> display_controller_; 663 scoped_ptr<HighContrastController> high_contrast_controller_; 664 scoped_ptr<MagnificationController> magnification_controller_; 665 scoped_ptr<PartialMagnificationController> partial_magnification_controller_; 666 scoped_ptr<AutoclickController> autoclick_controller_; 667 scoped_ptr<aura::client::FocusClient> focus_client_; 668 aura::client::ActivationClient* activation_client_; 669 670 scoped_ptr<MouseCursorEventFilter> mouse_cursor_filter_; 671 scoped_ptr<ScreenPositionController> screen_position_controller_; 672 scoped_ptr<SystemModalContainerEventFilter> modality_filter_; 673 scoped_ptr<EventClientImpl> event_client_; 674 scoped_ptr<EventTransformationHandler> event_transformation_handler_; 675 676 // An event filter that pre-handles key events while the partial 677 // screenshot UI or the keyboard overlay is active. 678 scoped_ptr<OverlayEventFilter> overlay_filter_; 679 680 // An event filter for logging keyboard-related metrics. 681 scoped_ptr<KeyboardUMAEventFilter> keyboard_metrics_filter_; 682 683 // An event filter which handles moving and resizing windows. 684 scoped_ptr<ToplevelWindowEventHandler> toplevel_window_event_handler_; 685 686 // An event filter which handles system level gestures 687 scoped_ptr<SystemGestureEventFilter> system_gesture_filter_; 688 689 // An event filter that pre-handles global accelerators. 690 scoped_ptr< ::wm::AcceleratorFilter> accelerator_filter_; 691 692 // An event filter that pre-handles all key events to send them to an IME. 693 scoped_ptr< ::wm::InputMethodEventFilter> input_method_filter_; 694 695 scoped_ptr<DisplayManager> display_manager_; 696 scoped_ptr<base::WeakPtrFactory<DisplayManager> > 697 weak_display_manager_factory_; 698 699 scoped_ptr<LocaleNotificationController> locale_notification_controller_; 700 701 scoped_ptr<AccelerometerController> accelerometer_controller_; 702 703 #if defined(OS_CHROMEOS) 704 scoped_ptr<PowerEventObserver> power_event_observer_; 705 scoped_ptr<ui::UserActivityPowerManagerNotifier> user_activity_notifier_; 706 scoped_ptr<VideoActivityNotifier> video_activity_notifier_; 707 scoped_ptr<StickyKeysController> sticky_keys_controller_; 708 scoped_ptr<ResolutionNotificationController> 709 resolution_notification_controller_; 710 scoped_ptr<BluetoothNotificationController> 711 bluetooth_notification_controller_; 712 scoped_ptr<LogoutConfirmationController> logout_confirmation_controller_; 713 scoped_ptr<LastWindowClosedLogoutReminder> 714 last_window_closed_logout_reminder_; 715 // Controls video output device state. 716 scoped_ptr<ui::DisplayConfigurator> display_configurator_; 717 scoped_ptr<DisplayConfiguratorAnimation> display_configurator_animation_; 718 scoped_ptr<DisplayErrorObserver> display_error_observer_; 719 scoped_ptr<ProjectingObserver> projecting_observer_; 720 721 // Listens for output changes and updates the display manager. 722 scoped_ptr<DisplayChangeObserver> display_change_observer_; 723 724 #if defined(USE_X11) 725 scoped_ptr<ui::EventHandler> magnifier_key_scroll_handler_; 726 scoped_ptr<ui::EventHandler> speech_feedback_handler_; 727 scoped_ptr<TouchTransformerController> touch_transformer_controller_; 728 #endif // defined(USE_X11) 729 #endif // defined(OS_CHROMEOS) 730 731 scoped_ptr<MaximizeModeController> maximize_mode_controller_; 732 733 // |native_cursor_manager_| is owned by |cursor_manager_|, but we keep a 734 // pointer to vend to test code. 735 AshNativeCursorManager* native_cursor_manager_; 736 737 // Cursor may be hidden on certain key events in ChromeOS, whereas we never hide 738 // the cursor on Windows. 739 #if defined(OS_CHROMEOS) 740 CursorManager cursor_manager_; 741 #else // !defined(OS_CHROMEOS) 742 ::wm::CursorManager cursor_manager_; 743 #endif // defined(OS_CHROMEOS) 744 745 ObserverList<ShellObserver> observers_; 746 747 // For testing only: simulate that a modal window is open 748 bool simulate_modal_window_open_for_testing_; 749 750 bool is_touch_hud_projection_enabled_; 751 752 // Injected content::GPUDataManager support. 753 scoped_ptr<GPUSupport> gpu_support_; 754 755 DISALLOW_COPY_AND_ASSIGN(Shell); 756 }; 757 758 } // namespace ash 759 760 #endif // ASH_SHELL_H_ 761