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