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 CHROME_BROWSER_UI_ASH_CHROME_SHELL_DELEGATE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_ASH_CHROME_SHELL_DELEGATE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/shelf/shelf_item_types.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell_delegate.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/observer_list.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Browser;
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace ash {
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ShelfItemDelegate;
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace content {
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WebContents;
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace keyboard {
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class KeyboardControllerProxy;
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS)
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace chromeos {
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class DisplayConfigurationObserver;
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeLauncherController;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeShellDelegate : public ash::ShellDelegate,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            public content::NotificationObserver {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ChromeShellDelegate();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ChromeShellDelegate();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static ChromeShellDelegate* instance() { return instance_; }
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ash::ShellDelegate overrides;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsFirstRunAfterBoot() const OVERRIDE;
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool IsMultiProfilesEnabled() const OVERRIDE;
520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual bool IsIncognitoAllowed() const OVERRIDE;
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsRunningInForcedAppMode() const OVERRIDE;
54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  virtual bool IsMultiAccountEnabled() const OVERRIDE;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void PreInit() OVERRIDE;
56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void PreShutdown() OVERRIDE;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Exit() OVERRIDE;
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual keyboard::KeyboardControllerProxy*
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      CreateKeyboardControllerProxy() OVERRIDE;
60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void VirtualKeyboardActivated(bool activated) OVERRIDE;
61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void AddVirtualKeyboardStateObserver(
62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      ash::VirtualKeyboardStateObserver* observer) OVERRIDE;
63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void RemoveVirtualKeyboardStateObserver(
64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      ash::VirtualKeyboardStateObserver* observer) OVERRIDE;
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual content::BrowserContext* GetActiveBrowserContext() OVERRIDE;
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual app_list::AppListViewDelegate* GetAppListViewDelegate() OVERRIDE;
67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual ash::ShelfDelegate* CreateShelfDelegate(
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      ash::ShelfModel* model) OVERRIDE;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ash::SystemTrayDelegate* CreateSystemTrayDelegate() OVERRIDE;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ash::UserWallpaperDelegate* CreateUserWallpaperDelegate() OVERRIDE;
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ash::SessionStateDelegate* CreateSessionStateDelegate() OVERRIDE;
721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual ash::AccessibilityDelegate* CreateAccessibilityDelegate() OVERRIDE;
731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual ash::NewWindowDelegate* CreateNewWindowDelegate() OVERRIDE;
740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  virtual ash::MediaDelegate* CreateMediaDelegate() OVERRIDE;
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ui::MenuModel* CreateContextMenu(
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      aura::Window* root,
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ash::ShelfItemDelegate* item_delegate,
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ash::ShelfItem* item) OVERRIDE;
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ash::GPUSupport* CreateGPUSupport() OVERRIDE;
80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetProductName() const OVERRIDE;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // content::NotificationObserver override:
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Observe(int type,
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationSource& source,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationDetails& details) OVERRIDE;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void PlatformInit();
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static ChromeShellDelegate* instance_;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::NotificationRegistrar registrar_;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ChromeLauncherController* shelf_delegate_;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
96c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ObserverList<ash::VirtualKeyboardStateObserver> keyboard_state_observer_list_;
97c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_CHROMEOS)
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<chromeos::DisplayConfigurationObserver>
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      display_configuration_observer_;
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChromeShellDelegate);
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_ASH_CHROME_SHELL_DELEGATE_H_
107