shell_delegate.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ASH_SHELL_DELEGATE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ASH_SHELL_DELEGATE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/ash_export.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace app_list {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppListViewDelegate;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RootWindow;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Window;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace client {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UserActionClient;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace content {
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class BrowserContext;
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MenuModel;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Widget;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace keyboard {
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class KeyboardControllerProxy;
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class AccessibilityDelegate;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CapsLockDelegate;
470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)class MediaDelegate;
481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class NewWindowDelegate;
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class WindowTreeHostFactory;
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SessionStateDelegate;
51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class ShelfDelegate;
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ShelfItemDelegate;
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ShelfModel;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SystemTrayDelegate;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UserWallpaperDelegate;
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct ShelfItem;
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Delegate of the Shell.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ASH_EXPORT ShellDelegate {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The Shell owns the delegate.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ShellDelegate() {}
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if this is the first time that the shell has been run after
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the system has booted.  false is returned after the shell has been
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // restarted, typically due to logging in as a guest or logging out.
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsFirstRunAfterBoot() const = 0;
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Returns true if multi-profiles feature is enabled.
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool IsMultiProfilesEnabled() const = 0;
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // Returns true if incognito mode is allowed for the user.
730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // Incognito windows are restricted for supervised users.
740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual bool IsIncognitoAllowed() const = 0;
750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns true if we're running in forced app mode.
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsRunningInForcedAppMode() const = 0;
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Called before processing |Shell::Init()| so that the delegate
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // can perform tasks necessary before the shell is initialized.
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void PreInit() = 0;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shuts down the environment.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Shutdown() = 0;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked when the user uses Ctrl-Shift-Q to close chrome.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Exit() = 0;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Create a shell-specific keyboard::KeyboardControllerProxy
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual keyboard::KeyboardControllerProxy*
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      CreateKeyboardControllerProxy() = 0;
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Get the active browser context. This will get us the active profile
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // in chrome.
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual content::BrowserContext* GetActiveBrowserContext() = 0;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked to create an AppListViewDelegate. Shell takes the ownership of
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the created delegate.
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual app_list::AppListViewDelegate* CreateAppListViewDelegate() = 0;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Creates a new ShelfDelegate. Shell takes ownership of the returned
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // value.
103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual ShelfDelegate* CreateShelfDelegate(ShelfModel* model) = 0;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a system-tray delegate. Shell takes ownership of the delegate.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual SystemTrayDelegate* CreateSystemTrayDelegate() = 0;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a user wallpaper delegate. Shell takes ownership of the delegate.
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual UserWallpaperDelegate* CreateUserWallpaperDelegate() = 0;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a caps lock delegate. Shell takes ownership of the delegate.
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual CapsLockDelegate* CreateCapsLockDelegate() = 0;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Creates a session state delegate. Shell takes ownership of the delegate.
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual SessionStateDelegate* CreateSessionStateDelegate() = 0;
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Creates a accessibility delegate. Shell takes ownership of the delegate.
1181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual AccessibilityDelegate* CreateAccessibilityDelegate() = 0;
1191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Creates an application delegate. Shell takes ownership of the delegate.
1211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual NewWindowDelegate* CreateNewWindowDelegate() = 0;
1221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // Creates a media delegate. Shell takes ownership of the delegate.
1240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual MediaDelegate* CreateMediaDelegate() = 0;
1250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a user action client. Shell takes ownership of the object.
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual aura::client::UserActionClient* CreateUserActionClient() = 0;
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a menu model of the context for the |root_window|.
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // When a ContextMenu is used for an item created by ShelfWindowWatcher,
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // passes its ShelfItemDelegate and ShelfItem.
1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ui::MenuModel* CreateContextMenu(
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      aura::Window* root_window,
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ash::ShelfItemDelegate* item_delegate,
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ash::ShelfItem* item) = 0;
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates a root window host factory. Shell takes ownership of the returned
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // value.
1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual WindowTreeHostFactory* CreateWindowTreeHostFactory() = 0;
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Creates a GPU support object. Shell takes ownership of the object.
1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual GPUSupport* CreateGPUSupport() = 0;
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Get the product name.
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual base::string16 GetProductName() const = 0;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ash
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // ASH_SHELL_DELEGATE_H_
151