blob: ca2e91ea724a8a63bfb4391f08bcbf4062112a47 [file] [log] [blame]
[email protected]e0d22e82012-01-04 00:46:571// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]87b0d82e2011-10-07 21:02:592// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]b65bdda2011-12-23 23:35:315#ifndef ASH_SHELL_H_
6#define ASH_SHELL_H_
[email protected]87b0d82e2011-10-07 21:02:597#pragma once
8
[email protected]cac10fc62011-10-07 23:22:569#include <utility>
10#include <vector>
11
[email protected]b65bdda2011-12-23 23:35:3112#include "ash/ash_export.h"
[email protected]82d3954ae2012-04-20 09:02:2213#include "ash/system/user/login_status.h"
[email protected]09f3fc82012-03-26 23:26:5614#include "ash/wm/shelf_auto_hide_behavior.h"
[email protected]87b0d82e2011-10-07 21:02:5915#include "base/basictypes.h"
[email protected]c45fdc72012-02-22 22:59:1216#include "base/compiler_specific.h"
[email protected]b0639282011-12-22 21:12:2717#include "base/gtest_prod_util.h"
[email protected]2b99f8c2011-10-11 19:42:2418#include "base/memory/scoped_ptr.h"
[email protected]1a2145b2012-03-13 21:09:1719#include "base/observer_list.h"
[email protected]0c4011b2012-02-11 02:10:4220#include "ui/gfx/size.h"
[email protected]1a2145b2012-03-13 21:09:1721#include "ui/gfx/insets.h"
[email protected]87b0d82e2011-10-07 21:02:5922
[email protected]b0639282011-12-22 21:12:2723class CommandLine;
[email protected]e70cf0ed2012-03-15 16:24:4724class SkBitmap;
[email protected]b0639282011-12-22 21:12:2725
[email protected]87b0d82e2011-10-07 21:02:5926namespace aura {
[email protected]e29014c2011-11-16 18:25:5127class EventFilter;
[email protected]e050ef142012-03-21 01:04:2428class Monitor;
[email protected]35304ce2011-12-14 23:21:0129class RootWindow;
[email protected]87b0d82e2011-10-07 21:02:5930class Window;
[email protected]0e46c272012-05-15 18:15:2331namespace shared {
32class InputMethodEventFilter;
33class RootWindowEventFilter;
34}
[email protected]87b0d82e2011-10-07 21:02:5935}
[email protected]fa4a45832012-04-12 21:32:4836namespace content {
37class BrowserContext;
38}
39
[email protected]2b99f8c2011-10-11 19:42:2440namespace gfx {
[email protected]b5f30602012-01-30 15:16:5741class Point;
[email protected]cac10fc62011-10-07 23:22:5642class Rect;
43}
[email protected]a8bd1cb2012-02-17 23:05:5444namespace ui {
45class Layer;
46}
[email protected]57b8bb352012-01-11 05:11:4647namespace views {
48class NonClientFrameView;
49class Widget;
50}
[email protected]87b0d82e2011-10-07 21:02:5951
[email protected]55f593352011-12-24 05:42:4652namespace ash {
[email protected]87b0d82e2011-10-07 21:02:5953
[email protected]2f744282011-12-23 22:40:5254class AcceleratorController;
[email protected]e70cf0ed2012-03-15 16:24:4755class DesktopBackgroundController;
[email protected]671a2ae2011-10-13 21:53:2356class Launcher;
[email protected]8f80db0f2012-02-07 14:44:5357class NestedDispatcherController;
[email protected]e0d22e82012-01-04 00:46:5758class PowerButtonController;
[email protected]1a2145b2012-03-13 21:09:1759class ScreenAsh;
[email protected]2b99f8c2011-10-11 19:42:2460class ShellDelegate;
[email protected]1a2145b2012-03-13 21:09:1761class ShellObserver;
[email protected]bfb411312012-02-27 20:59:2762class SystemTrayDelegate;
63class SystemTray;
[email protected]10b22612012-03-22 17:07:5564class UserWallpaperDelegate;
[email protected]6aa614a2012-01-19 22:13:3865class VideoDetector;
[email protected]40c4cbb2012-01-10 23:26:0766class WindowCycleController;
[email protected]60fa9bba2011-10-28 21:21:5167
68namespace internal {
[email protected]2f744282011-12-23 22:40:5269class AcceleratorFilter;
[email protected]0039db92012-05-09 04:11:4570class ActivationController;
71class AppListController;
[email protected]084b6bb2011-11-17 05:18:1672class DragDropController;
[email protected]262f8bd2012-03-23 19:30:2773class EventClientImpl;
[email protected]3d29912a2012-02-07 07:41:5174class FocusCycler;
[email protected]42f06f92012-03-27 00:57:5775class KeyRewriterEventFilter;
[email protected]c1c670172012-04-26 04:20:2676class MagnificationController;
[email protected]e050ef142012-03-21 01:04:2477class MonitorController;
[email protected]7cf8dd62012-04-22 05:14:5878class PanelLayoutManager;
[email protected]0b0b0742012-02-16 13:23:4579class PartialScreenshotEventFilter;
[email protected]e4a181cc2012-03-17 02:20:5780class ResizeShadowController;
[email protected]b0079a92012-01-25 20:13:3881class RootWindowLayoutManager;
[email protected]42993212012-04-30 23:42:0482class ScreenDimmer;
[email protected]a54e65b2011-11-21 22:03:3483class ShadowController;
[email protected]4e437632012-02-13 22:39:4084class ShelfLayoutManager;
[email protected]0cfc18e2012-04-11 18:17:4785class ShellContextMenu;
[email protected]435b212e2012-04-05 19:43:3786class SystemGestureEventFilter;
[email protected]ee1e1a22011-12-15 01:51:1087class StackingController;
[email protected]862deef2011-12-15 22:07:3388class TooltipController;
[email protected]73074742012-05-17 01:44:4189class TouchObserverHUD;
[email protected]ddd91e92012-01-27 16:03:4890class VisibilityController;
[email protected]80373572012-01-06 23:14:3091class WindowModalityController;
[email protected]60fa9bba2011-10-28 21:21:5192class WorkspaceController;
93}
[email protected]2b99f8c2011-10-11 19:42:2494
[email protected]87b0d82e2011-10-07 21:02:5995// Shell is a singleton object that presents the Shell API and implements the
[email protected]99f07e02011-12-07 00:02:5996// RootWindow's delegate interface.
[email protected]b0079a92012-01-25 20:13:3897//
98// Upon creation, the Shell sets itself as the RootWindow's delegate, which
99// takes ownership of the Shell.
[email protected]e050ef142012-03-21 01:04:24100class ASH_EXPORT Shell {
[email protected]87b0d82e2011-10-07 21:02:59101 public:
[email protected]3d29912a2012-02-07 07:41:51102 enum Direction {
103 FORWARD,
104 BACKWARD
105 };
106
[email protected]2b4cd302012-02-24 20:21:13107 // Accesses private data from a Shell for testing.
108 class ASH_EXPORT TestApi {
109 public:
110 explicit TestApi(Shell* shell);
111
[email protected]2b4cd302012-02-24 20:21:13112 internal::RootWindowLayoutManager* root_window_layout();
[email protected]0e46c272012-05-15 18:15:23113 aura::shared::InputMethodEventFilter* input_method_event_filter();
[email protected]435b212e2012-04-05 19:43:37114 internal::SystemGestureEventFilter* system_gesture_event_filter();
[email protected]db9131602012-02-29 19:06:32115 internal::WorkspaceController* workspace_controller();
[email protected]2b4cd302012-02-24 20:21:13116
117 private:
118 Shell* shell_; // not owned
119
120 DISALLOW_COPY_AND_ASSIGN(TestApi);
121 };
122
[email protected]3266c2b92011-11-14 00:06:08123 // A shell must be explicitly created so that it can call |Init()| with the
124 // delegate set. |delegate| can be NULL (if not required for initialization).
125 static Shell* CreateInstance(ShellDelegate* delegate);
126
127 // Should never be called before |CreateInstance()|.
[email protected]cac10fc62011-10-07 23:22:56128 static Shell* GetInstance();
[email protected]3266c2b92011-11-14 00:06:08129
[email protected]b3b7bcd2012-03-06 19:35:45130 // Returns true if the ash shell has been instantiated.
131 static bool HasInstance();
132
[email protected]ef589af2011-12-03 01:07:15133 static void DeleteInstance();
[email protected]cac10fc62011-10-07 23:22:56134
[email protected]d9456cb2012-03-21 16:41:04135 // Gets the singleton RootWindow used by the Shell.
[email protected]e73bd7802012-02-17 20:10:34136 static aura::RootWindow* GetRootWindow();
137
[email protected]e70cf0ed2012-03-15 16:24:47138 internal::RootWindowLayoutManager* root_window_layout() const {
139 return root_window_layout_;
[email protected]a8bd1cb2012-02-17 23:05:54140 }
141
[email protected]87b0d82e2011-10-07 21:02:59142 aura::Window* GetContainer(int container_id);
143 const aura::Window* GetContainer(int container_id) const;
144
[email protected]99f07e02011-12-07 00:02:59145 // Adds or removes |filter| from the RootWindowEventFilter.
146 void AddRootWindowEventFilter(aura::EventFilter* filter);
147 void RemoveRootWindowEventFilter(aura::EventFilter* filter);
[email protected]2c456102011-12-26 06:26:34148 size_t GetRootWindowEventFilterCount() const;
[email protected]e29014c2011-11-16 18:25:51149
[email protected]b5f30602012-01-30 15:16:57150 // Shows the background menu over |widget|.
151 void ShowBackgroundMenu(views::Widget* widget, const gfx::Point& location);
[email protected]cac10fc62011-10-07 23:22:56152
[email protected]ae4987d2011-11-21 22:52:44153 // Toggles app list.
154 void ToggleAppList();
155
[email protected]7510d1082012-03-30 21:58:34156 // Returns app list target visibility.
157 bool GetAppListTargetVisibility() const;
158
[email protected]1e51a9d2012-04-09 23:31:11159 // Returns app list window or NULL if it is not visible.
160 aura::Window* GetAppListWindow();
161
[email protected]f7eb89c2011-12-13 09:48:54162 // Returns true if the screen is locked.
163 bool IsScreenLocked() const;
164
[email protected]40c4cbb2012-01-10 23:26:07165 // Returns true if a modal dialog window is currently open.
166 bool IsModalWindowOpen() const;
167
[email protected]57b8bb352012-01-11 05:11:46168 // Creates a default views::NonClientFrameView for use by windows in the
169 // Ash environment.
170 views::NonClientFrameView* CreateDefaultNonClientFrameView(
171 views::Widget* widget);
172
[email protected]d9456cb2012-03-21 16:41:04173 // Rotates focus through containers that can receive focus.
[email protected]3d29912a2012-02-07 07:41:51174 void RotateFocus(Direction direction);
175
[email protected]8a45c972012-03-14 18:22:44176 // Sets the work area insets of the monitor that contains |window|,
177 // this notifies observers too.
[email protected]27f6af62012-03-21 05:34:40178 // TODO(sky): this no longer really replicates what happens and is unreliable.
179 // Remove this.
[email protected]8a45c972012-03-14 18:22:44180 void SetMonitorWorkAreaInsets(aura::Window* window,
181 const gfx::Insets& insets);
[email protected]1a2145b2012-03-13 21:09:17182
[email protected]82d3954ae2012-04-20 09:02:22183 // Called when the user logs in.
184 void OnLoginStateChanged(user::LoginStatus status);
185
186 // Called when the application is exiting.
187 void OnAppTerminating();
188
189 // Called when the screen is locked (after the lock window is visible) or
190 // unlocked.
191 void OnLockStateChanged(bool locked);
192
[email protected]d9456cb2012-03-21 16:41:04193 // Initializes |launcher_|. Does nothing if it's already initialized.
194 void CreateLauncher();
195
196 // Adds/removes observer.
[email protected]1a2145b2012-03-13 21:09:17197 void AddShellObserver(ShellObserver* observer);
198 void RemoveShellObserver(ShellObserver* observer);
199
[email protected]6e9f6aa2012-02-09 04:16:20200#if !defined(OS_MACOSX)
[email protected]2f744282011-12-23 22:40:52201 AcceleratorController* accelerator_controller() {
[email protected]745816be2011-11-22 05:08:30202 return accelerator_controller_.get();
203 }
[email protected]6e9f6aa2012-02-09 04:16:20204#endif // !defined(OS_MACOSX)
205
[email protected]0e46c272012-05-15 18:15:23206 aura::shared::RootWindowEventFilter* root_filter() {
[email protected]627a62f2012-02-14 22:59:14207 return root_filter_;
208 }
[email protected]862deef2011-12-15 22:07:33209 internal::TooltipController* tooltip_controller() {
210 return tooltip_controller_.get();
[email protected]4a229e902011-12-01 21:21:11211 }
[email protected]42f06f92012-03-27 00:57:57212 internal::KeyRewriterEventFilter* key_rewriter_filter() {
213 return key_rewriter_filter_.get();
214 }
[email protected]0b0b0742012-02-16 13:23:45215 internal::PartialScreenshotEventFilter* partial_screenshot_filter() {
216 return partial_screenshot_filter_.get();
217 }
[email protected]e70cf0ed2012-03-15 16:24:47218 DesktopBackgroundController* desktop_background_controller() {
219 return desktop_background_controller_.get();
220 }
[email protected]e0d22e82012-01-04 00:46:57221 PowerButtonController* power_button_controller() {
222 return power_button_controller_.get();
223 }
[email protected]6aa614a2012-01-19 22:13:38224 VideoDetector* video_detector() {
225 return video_detector_.get();
226 }
[email protected]40c4cbb2012-01-10 23:26:07227 WindowCycleController* window_cycle_controller() {
228 return window_cycle_controller_.get();
229 }
[email protected]2d511542012-03-07 09:13:34230 internal::FocusCycler* focus_cycler() {
231 return focus_cycler_.get();
232 }
[email protected]4a229e902011-12-01 21:21:11233
[email protected]3266c2b92011-11-14 00:06:08234 ShellDelegate* delegate() { return delegate_.get(); }
[email protected]bfb411312012-02-27 20:59:27235 SystemTrayDelegate* tray_delegate() { return tray_delegate_.get(); }
[email protected]10b22612012-03-22 17:07:55236 UserWallpaperDelegate* user_wallpaper_delegate() {
237 return user_wallpaper_delegate_.get();
238 }
[email protected]35304ce2011-12-14 23:21:01239
[email protected]c1c670172012-04-26 04:20:26240 internal::MagnificationController* magnification_controller() {
241 return magnification_controller_.get();
242 }
[email protected]42993212012-04-30 23:42:04243 internal::ScreenDimmer* screen_dimmer() {
244 return screen_dimmer_.get();
245 }
[email protected]c1c670172012-04-26 04:20:26246
[email protected]671a2ae2011-10-13 21:53:23247 Launcher* launcher() { return launcher_.get(); }
248
[email protected]1a2145b2012-03-13 21:09:17249 const ScreenAsh* screen() { return screen_; }
250
[email protected]c758fbf2012-03-25 22:53:59251 // Force the shelf to query for it's current visibility state.
252 void UpdateShelfVisibility();
253
[email protected]09f3fc82012-03-26 23:26:56254 // Sets/gets the shelf auto-hide behavior.
255 void SetShelfAutoHideBehavior(ShelfAutoHideBehavior behavior);
256 ShelfAutoHideBehavior GetShelfAutoHideBehavior() const;
[email protected]c758fbf2012-03-25 22:53:59257
[email protected]55444502012-05-10 15:43:53258 void SetShelfAlignment(ShelfAlignment alignment);
259 ShelfAlignment GetShelfAlignment();
260
[email protected]c758fbf2012-03-25 22:53:59261 // TODO(sky): don't expose this!
[email protected]4e437632012-02-13 22:39:40262 internal::ShelfLayoutManager* shelf() const { return shelf_; }
263
[email protected]bfb411312012-02-27 20:59:27264 SystemTray* tray() const { return tray_.get(); }
265
[email protected]85d43f02012-03-14 21:11:19266 // Returns the size of the grid.
267 int GetGridSize() const;
268
[email protected]9628e0af2012-04-12 20:40:56269 // Returns true if in maximized or fullscreen mode.
270 bool IsInMaximizedMode() const;
271
[email protected]9488d4d2012-02-29 18:32:37272 static void set_initially_hide_cursor(bool hide) {
273 initially_hide_cursor_ = hide;
274 }
275
[email protected]e4a181cc2012-03-17 02:20:57276 internal::ResizeShadowController* resize_shadow_controller() {
277 return resize_shadow_controller_.get();
278 }
279
[email protected]a54e65b2011-11-21 22:03:34280 // Made available for tests.
281 internal::ShadowController* shadow_controller() {
282 return shadow_controller_.get();
283 }
284
[email protected]fa4a45832012-04-12 21:32:48285 content::BrowserContext* browser_context() { return browser_context_; }
286 void set_browser_context(content::BrowserContext* browser_context) {
287 browser_context_ = browser_context;
288 }
289
[email protected]2b4cd302012-02-24 20:21:13290 private:
[email protected]ad0c8722012-03-02 20:17:45291 FRIEND_TEST_ALL_PREFIXES(RootWindowEventFilterTest, MouseEventCursors);
292 FRIEND_TEST_ALL_PREFIXES(RootWindowEventFilterTest, TransformActivate);
293
[email protected]cac10fc62011-10-07 23:22:56294 typedef std::pair<aura::Window*, gfx::Rect> WindowAndBoundsPair;
295
[email protected]3266c2b92011-11-14 00:06:08296 explicit Shell(ShellDelegate* delegate);
297 virtual ~Shell();
298
299 void Init();
[email protected]b0639282011-12-22 21:12:27300
[email protected]c73d1332012-03-08 17:11:04301 // Initializes the layout managers and event filters.
302 void InitLayoutManagers();
[email protected]1b62b892012-01-17 17:08:15303
[email protected]ad0c8722012-03-02 20:17:45304 // Disables the workspace grid layout.
305 void DisableWorkspaceGridLayout();
306
[email protected]cac10fc62011-10-07 23:22:56307 static Shell* instance_;
308
[email protected]9488d4d2012-02-29 18:32:37309 // If set before the Shell is initialized, the mouse cursor will be hidden
310 // when the screen is initially created.
311 static bool initially_hide_cursor_;
312
[email protected]58482fa2012-03-02 14:57:39313 scoped_ptr<aura::RootWindow> root_window_;
[email protected]1a2145b2012-03-13 21:09:17314 ScreenAsh* screen_;
[email protected]58482fa2012-03-02 14:57:39315
[email protected]0e46c272012-05-15 18:15:23316 aura::shared::RootWindowEventFilter* root_filter_; // not owned
[email protected]627a62f2012-02-14 22:59:14317
[email protected]cac10fc62011-10-07 23:22:56318 std::vector<WindowAndBoundsPair> to_restore_;
319
[email protected]6e9f6aa2012-02-09 04:16:20320#if !defined(OS_MACOSX)
[email protected]8f80db0f2012-02-07 14:44:53321 scoped_ptr<NestedDispatcherController> nested_dispatcher_controller_;
322
[email protected]2f744282011-12-23 22:40:52323 scoped_ptr<AcceleratorController> accelerator_controller_;
[email protected]6e9f6aa2012-02-09 04:16:20324#endif // !defined(OS_MACOSX)
[email protected]745816be2011-11-22 05:08:30325
[email protected]2b99f8c2011-10-11 19:42:24326 scoped_ptr<ShellDelegate> delegate_;
[email protected]bfb411312012-02-27 20:59:27327 scoped_ptr<SystemTrayDelegate> tray_delegate_;
[email protected]10b22612012-03-22 17:07:55328 scoped_ptr<UserWallpaperDelegate> user_wallpaper_delegate_;
[email protected]2b99f8c2011-10-11 19:42:24329
[email protected]671a2ae2011-10-13 21:53:23330 scoped_ptr<Launcher> launcher_;
331
[email protected]0039db92012-05-09 04:11:45332 scoped_ptr<internal::AppListController> app_list_controller_;
[email protected]ae4987d2011-11-21 22:52:44333
[email protected]0cfc18e2012-04-11 18:17:47334 scoped_ptr<internal::ShellContextMenu> shell_context_menu_;
[email protected]ee1e1a22011-12-15 01:51:10335 scoped_ptr<internal::StackingController> stacking_controller_;
[email protected]9fc206d2011-12-13 00:05:33336 scoped_ptr<internal::ActivationController> activation_controller_;
[email protected]80373572012-01-06 23:14:30337 scoped_ptr<internal::WindowModalityController> window_modality_controller_;
[email protected]084b6bb2011-11-17 05:18:16338 scoped_ptr<internal::DragDropController> drag_drop_controller_;
[email protected]60fa9bba2011-10-28 21:21:51339 scoped_ptr<internal::WorkspaceController> workspace_controller_;
[email protected]e4a181cc2012-03-17 02:20:57340 scoped_ptr<internal::ResizeShadowController> resize_shadow_controller_;
[email protected]a54e65b2011-11-21 22:03:34341 scoped_ptr<internal::ShadowController> shadow_controller_;
[email protected]862deef2011-12-15 22:07:33342 scoped_ptr<internal::TooltipController> tooltip_controller_;
[email protected]ddd91e92012-01-27 16:03:48343 scoped_ptr<internal::VisibilityController> visibility_controller_;
[email protected]e70cf0ed2012-03-15 16:24:47344 scoped_ptr<DesktopBackgroundController> desktop_background_controller_;
[email protected]e0d22e82012-01-04 00:46:57345 scoped_ptr<PowerButtonController> power_button_controller_;
[email protected]6aa614a2012-01-19 22:13:38346 scoped_ptr<VideoDetector> video_detector_;
[email protected]40c4cbb2012-01-10 23:26:07347 scoped_ptr<WindowCycleController> window_cycle_controller_;
[email protected]3d29912a2012-02-07 07:41:51348 scoped_ptr<internal::FocusCycler> focus_cycler_;
[email protected]262f8bd2012-03-23 19:30:27349 scoped_ptr<internal::EventClientImpl> event_client_;
[email protected]e050ef142012-03-21 01:04:24350 scoped_ptr<internal::MonitorController> monitor_controller_;
[email protected]c1c670172012-04-26 04:20:26351 scoped_ptr<internal::MagnificationController> magnification_controller_;
[email protected]42993212012-04-30 23:42:04352 scoped_ptr<internal::ScreenDimmer> screen_dimmer_;
[email protected]ae18b9112011-11-07 16:59:13353
[email protected]42f06f92012-03-27 00:57:57354 // An event filter that rewrites or drops a key event.
355 scoped_ptr<internal::KeyRewriterEventFilter> key_rewriter_filter_;
[email protected]6e9f6aa2012-02-09 04:16:20356
[email protected]0b0b0742012-02-16 13:23:45357 // An event filter that pre-handles key events while the partial
358 // screenshot UI is active.
359 scoped_ptr<internal::PartialScreenshotEventFilter> partial_screenshot_filter_;
360
[email protected]435b212e2012-04-05 19:43:37361 // An event filter which handles system level gestures
362 scoped_ptr<internal::SystemGestureEventFilter> system_gesture_filter_;
363
[email protected]6e9f6aa2012-02-09 04:16:20364#if !defined(OS_MACOSX)
[email protected]745816be2011-11-22 05:08:30365 // An event filter that pre-handles global accelerators.
[email protected]2f744282011-12-23 22:40:52366 scoped_ptr<internal::AcceleratorFilter> accelerator_filter_;
[email protected]6e9f6aa2012-02-09 04:16:20367#endif
[email protected]745816be2011-11-22 05:08:30368
[email protected]42f06f92012-03-27 00:57:57369 // An event filter that pre-handles all key events to send them to an IME.
[email protected]0e46c272012-05-15 18:15:23370 scoped_ptr<aura::shared::InputMethodEventFilter> input_method_filter_;
[email protected]42f06f92012-03-27 00:57:57371
[email protected]73074742012-05-17 01:44:41372 // An event filter that silently keeps track of all touch events and controls
373 // a heads-up display. This is enabled only if --ash-touch-hud flag is used.
374 scoped_ptr<internal::TouchObserverHUD> touch_observer_hud_;
375
[email protected]4e437632012-02-13 22:39:40376 // The shelf for managing the launcher and the status widget in non-compact
377 // mode. Shell does not own the shelf. Instead, it is owned by container of
378 // the status area.
379 internal::ShelfLayoutManager* shelf_;
380
[email protected]7cf8dd62012-04-22 05:14:58381 // Manages layout of panels. Owned by PanelContainer.
382 internal::PanelLayoutManager* panel_layout_manager_;
383
[email protected]1a2145b2012-03-13 21:09:17384 ObserverList<ShellObserver> observers_;
385
[email protected]b0079a92012-01-25 20:13:38386 // Owned by aura::RootWindow, cached here for type safety.
387 internal::RootWindowLayoutManager* root_window_layout_;
388
[email protected]860f5942012-04-24 16:11:39389 // System tray with clock, Wi-Fi signal, etc.
[email protected]bfb411312012-02-27 20:59:27390 scoped_ptr<SystemTray> tray_;
391
[email protected]fa4a45832012-04-12 21:32:48392 // Used by ash/shell.
393 content::BrowserContext* browser_context_;
394
[email protected]87b0d82e2011-10-07 21:02:59395 DISALLOW_COPY_AND_ASSIGN(Shell);
396};
397
[email protected]55f593352011-12-24 05:42:46398} // namespace ash
[email protected]87b0d82e2011-10-07 21:02:59399
[email protected]b65bdda2011-12-23 23:35:31400#endif // ASH_SHELL_H_