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)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace content {
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class BrowserContext;
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MenuModel;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Widget;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace keyboard {
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class KeyboardControllerProxy;
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class AccessibilityDelegate;
430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)class MediaDelegate;
441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class NewWindowDelegate;
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SessionStateDelegate;
46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class ShelfDelegate;
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ShelfItemDelegate;
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ShelfModel;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SystemTrayDelegate;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UserWallpaperDelegate;
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct ShelfItem;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass ASH_EXPORT VirtualKeyboardStateObserver {
54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public:
55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Called when keyboard is activated/deactivated.
56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void OnVirtualKeyboardStateChanged(bool activated) {}
57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch protected:
59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual ~VirtualKeyboardStateObserver() {}
60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch};
61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Delegate of the Shell.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ASH_EXPORT ShellDelegate {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The Shell owns the delegate.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ShellDelegate() {}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if this is the first time that the shell has been run after
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the system has booted.  false is returned after the shell has been
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // restarted, typically due to logging in as a guest or logging out.
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsFirstRunAfterBoot() const = 0;
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Returns true if multi-profiles feature is enabled.
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool IsMultiProfilesEnabled() const = 0;
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // Returns true if incognito mode is allowed for the user.
770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // Incognito windows are restricted for supervised users.
780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual bool IsIncognitoAllowed() const = 0;
790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns true if we're running in forced app mode.
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsRunningInForcedAppMode() const = 0;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
83a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Returns true if multi account is enabled.
84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  virtual bool IsMultiAccountEnabled() const = 0;
85a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Called before processing |Shell::Init()| so that the delegate
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // can perform tasks necessary before the shell is initialized.
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void PreInit() = 0;
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Called at the beginninig of Shell destructor so that
91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // delegate can use Shell instance to perform cleanup tasks.
92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void PreShutdown() = 0;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked when the user uses Ctrl-Shift-Q to close chrome.
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Exit() = 0;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Create a shell-specific keyboard::KeyboardControllerProxy
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual keyboard::KeyboardControllerProxy*
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      CreateKeyboardControllerProxy() = 0;
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
101c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Called when virtual keyboard has been activated/deactivated.
102c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void VirtualKeyboardActivated(bool activated) = 0;
103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
104c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Adds or removes virtual keyboard state observer.
105c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void AddVirtualKeyboardStateObserver(
106c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      VirtualKeyboardStateObserver* observer) = 0;
107c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void RemoveVirtualKeyboardStateObserver(
108c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      VirtualKeyboardStateObserver* observer) = 0;
109c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Get the active browser context. This will get us the active profile
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // in chrome.
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual content::BrowserContext* GetActiveBrowserContext() = 0;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Get the AppListViewDelegate, creating one if it does not yet exist.
1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Ownership stays with Chrome's AppListService, or the ShellDelegate.
1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual app_list::AppListViewDelegate* GetAppListViewDelegate() = 0;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
118a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Creates a new ShelfDelegate. Shell takes ownership of the returned
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // value.
120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual ShelfDelegate* CreateShelfDelegate(ShelfModel* model) = 0;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a system-tray delegate. Shell takes ownership of the delegate.
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual SystemTrayDelegate* CreateSystemTrayDelegate() = 0;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a user wallpaper delegate. Shell takes ownership of the delegate.
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual UserWallpaperDelegate* CreateUserWallpaperDelegate() = 0;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Creates a session state delegate. Shell takes ownership of the delegate.
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual SessionStateDelegate* CreateSessionStateDelegate() = 0;
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Creates a accessibility delegate. Shell takes ownership of the delegate.
1321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual AccessibilityDelegate* CreateAccessibilityDelegate() = 0;
1331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Creates an application delegate. Shell takes ownership of the delegate.
1351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual NewWindowDelegate* CreateNewWindowDelegate() = 0;
1361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1370f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // Creates a media delegate. Shell takes ownership of the delegate.
1380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual MediaDelegate* CreateMediaDelegate() = 0;
1390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a menu model of the context for the |root_window|.
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // When a ContextMenu is used for an item created by ShelfWindowWatcher,
1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // passes its ShelfItemDelegate and ShelfItem.
1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ui::MenuModel* CreateContextMenu(
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      aura::Window* root_window,
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ash::ShelfItemDelegate* item_delegate,
1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ash::ShelfItem* item) = 0;
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Creates a GPU support object. Shell takes ownership of the object.
1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual GPUSupport* CreateGPUSupport() = 0;
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Get the product name.
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual base::string16 GetProductName() const = 0;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ash
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // ASH_SHELL_DELEGATE_H_
158