Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / ash / system_tray_delegate_chromeos.h
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_UI_ASH_SYSTEM_TRAY_DELEGATE_CHROMEOS_H_
6 #define CHROME_BROWSER_UI_ASH_SYSTEM_TRAY_DELEGATE_CHROMEOS_H_
7
8 #include "ash/ime/input_method_menu_manager.h"
9 #include "ash/session/session_state_observer.h"
10 #include "ash/system/tray/system_tray.h"
11 #include "ash/system/tray/system_tray_delegate.h"
12 #include "ash/system/tray/system_tray_notifier.h"
13 #include "base/callback_list.h"
14 #include "base/compiler_specific.h"
15 #include "base/containers/scoped_ptr_hash_map.h"
16 #include "base/memory/ref_counted.h"
17 #include "base/memory/weak_ptr.h"
18 #include "base/prefs/pref_change_registrar.h"
19 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
20 #include "chrome/browser/profiles/profile.h"
21 #include "chrome/browser/ui/ash/system_tray_delegate_chromeos.h"
22 #include "chrome/browser/ui/browser_list_observer.h"
23 #include "chromeos/audio/cras_audio_handler.h"
24 #include "chromeos/dbus/session_manager_client.h"
25 #include "chromeos/ime/input_method_manager.h"
26 #include "chromeos/login/login_state.h"
27 #include "components/policy/core/common/cloud/cloud_policy_store.h"
28 #include "content/public/browser/notification_observer.h"
29 #include "content/public/browser/notification_registrar.h"
30 #include "device/bluetooth/bluetooth_adapter.h"
31 #include "device/bluetooth/bluetooth_discovery_session.h"
32 #include "extensions/browser/app_window/app_window_registry.h"
33
34 namespace chromeos {
35
36 class SystemTrayDelegateChromeOS
37     : public ash::ime::InputMethodMenuManager::Observer,
38       public ash::SystemTrayDelegate,
39       public SessionManagerClient::Observer,
40       public content::NotificationObserver,
41       public input_method::InputMethodManager::Observer,
42       public chromeos::LoginState::Observer,
43       public chromeos::CrasAudioHandler::AudioObserver,
44       public device::BluetoothAdapter::Observer,
45       public policy::CloudPolicyStore::Observer,
46       public ash::SessionStateObserver,
47       public chrome::BrowserListObserver,
48       public extensions::AppWindowRegistry::Observer {
49  public:
50   SystemTrayDelegateChromeOS();
51
52   virtual ~SystemTrayDelegateChromeOS();
53
54   void InitializeOnAdapterReady(
55       scoped_refptr<device::BluetoothAdapter> adapter);
56
57   // Overridden from ash::SystemTrayDelegate:
58   virtual void Initialize() OVERRIDE;
59   virtual void Shutdown() OVERRIDE;
60   virtual bool GetTrayVisibilityOnStartup() OVERRIDE;
61   virtual ash::user::LoginStatus GetUserLoginStatus() const OVERRIDE;
62   virtual void ChangeProfilePicture() OVERRIDE;
63   virtual const std::string GetEnterpriseDomain() const OVERRIDE;
64   virtual const base::string16 GetEnterpriseMessage() const OVERRIDE;
65   virtual const std::string GetSupervisedUserManager() const OVERRIDE;
66   virtual const base::string16 GetSupervisedUserManagerName() const OVERRIDE;
67   virtual const base::string16 GetSupervisedUserMessage() const OVERRIDE;
68   virtual bool IsUserSupervised() const OVERRIDE;
69   virtual bool SystemShouldUpgrade() const OVERRIDE;
70   virtual base::HourClockType GetHourClockType() const OVERRIDE;
71   virtual void ShowSettings() OVERRIDE;
72   virtual bool ShouldShowSettings() OVERRIDE;
73   virtual void ShowDateSettings() OVERRIDE;
74   virtual void ShowSetTimeDialog() OVERRIDE;
75   virtual void ShowNetworkSettings(const std::string& service_path) OVERRIDE;
76   virtual void ShowBluetoothSettings() OVERRIDE;
77   virtual void ShowDisplaySettings() OVERRIDE;
78   virtual void ShowChromeSlow() OVERRIDE;
79   virtual bool ShouldShowDisplayNotification() OVERRIDE;
80   virtual void ShowIMESettings() OVERRIDE;
81   virtual void ShowHelp() OVERRIDE;
82   virtual void ShowAccessibilityHelp() OVERRIDE;
83   virtual void ShowAccessibilitySettings() OVERRIDE;
84   virtual void ShowPublicAccountInfo() OVERRIDE;
85   virtual void ShowSupervisedUserInfo() OVERRIDE;
86   virtual void ShowEnterpriseInfo() OVERRIDE;
87   virtual void ShowUserLogin() OVERRIDE;
88   virtual bool ShowSpringChargerReplacementDialog() OVERRIDE;
89   virtual bool IsSpringChargerReplacementDialogVisible() OVERRIDE;
90   virtual bool HasUserConfirmedSafeSpringCharger() OVERRIDE;
91   virtual void ShutDown() OVERRIDE;
92   virtual void SignOut() OVERRIDE;
93   virtual void RequestLockScreen() OVERRIDE;
94   virtual void RequestRestartForUpdate() OVERRIDE;
95   virtual void GetAvailableBluetoothDevices(ash::BluetoothDeviceList* list)
96       OVERRIDE;
97   virtual void BluetoothStartDiscovering() OVERRIDE;
98   virtual void BluetoothStopDiscovering() OVERRIDE;
99   virtual void ConnectToBluetoothDevice(const std::string& address) OVERRIDE;
100   virtual bool IsBluetoothDiscovering() OVERRIDE;
101   virtual void GetCurrentIME(ash::IMEInfo* info) OVERRIDE;
102   virtual void GetAvailableIMEList(ash::IMEInfoList* list) OVERRIDE;
103   virtual void GetCurrentIMEProperties(ash::IMEPropertyInfoList* list) OVERRIDE;
104   virtual void SwitchIME(const std::string& ime_id) OVERRIDE;
105   virtual void ActivateIMEProperty(const std::string& key) OVERRIDE;
106   virtual void ShowNetworkConfigure(const std::string& network_id) OVERRIDE;
107   virtual bool EnrollNetwork(const std::string& network_id) OVERRIDE;
108   virtual void ManageBluetoothDevices() OVERRIDE;
109   virtual void ToggleBluetooth() OVERRIDE;
110   virtual void ShowMobileSimDialog() OVERRIDE;
111   virtual void ShowMobileSetupDialog(const std::string& service_path) OVERRIDE;
112   virtual void ShowOtherNetworkDialog(const std::string& type) OVERRIDE;
113   virtual bool GetBluetoothAvailable() OVERRIDE;
114   virtual bool GetBluetoothEnabled() OVERRIDE;
115   virtual bool GetBluetoothDiscovering() OVERRIDE;
116   virtual void ChangeProxySettings() OVERRIDE;
117   virtual ash::VolumeControlDelegate* GetVolumeControlDelegate() const OVERRIDE;
118   virtual void SetVolumeControlDelegate(
119       scoped_ptr<ash::VolumeControlDelegate> delegate) OVERRIDE;
120   virtual bool GetSessionStartTime(base::TimeTicks* session_start_time)
121       OVERRIDE;
122   virtual bool GetSessionLengthLimit(base::TimeDelta* session_length_limit)
123       OVERRIDE;
124   virtual int GetSystemTrayMenuWidth() OVERRIDE;
125   virtual void ActiveUserWasChanged() OVERRIDE;
126   virtual bool IsSearchKeyMappedToCapsLock() OVERRIDE;
127   virtual ash::tray::UserAccountsDelegate* GetUserAccountsDelegate(
128       const std::string& user_id) OVERRIDE;
129
130   // browser tests need to call ShouldUse24HourClock().
131   bool GetShouldUse24HourClockForTesting() const;
132
133  private:
134   // Should be the same as CrosSettings::ObserverSubscription.
135   typedef base::CallbackList<void(void)>::Subscription
136       CrosSettingsObserverSubscription;
137
138   ash::SystemTray* GetPrimarySystemTray();
139
140   ash::SystemTrayNotifier* GetSystemTrayNotifier();
141
142   void SetProfile(Profile* profile);
143
144   bool UnsetProfile(Profile* profile);
145
146   bool ShouldUse24HourClock() const;
147
148   void UpdateClockType();
149
150   void UpdateShowLogoutButtonInTray();
151
152   void UpdateLogoutDialogDuration();
153
154   void UpdateSessionStartTime();
155
156   void UpdateSessionLengthLimit();
157
158   void StopObservingAppWindowRegistry();
159
160   // Notify observers if the current user has no more open browser or app
161   // windows.
162   void NotifyIfLastWindowClosed();
163
164   // LoginState::Observer overrides.
165   virtual void LoggedInStateChanged() OVERRIDE;
166
167   // Overridden from SessionManagerClient::Observer.
168   virtual void ScreenIsLocked() OVERRIDE;
169   virtual void ScreenIsUnlocked() OVERRIDE;
170
171   gfx::NativeWindow GetNativeWindow() const;
172
173   // content::NotificationObserver implementation.
174   virtual void Observe(int type,
175                        const content::NotificationSource& source,
176                        const content::NotificationDetails& details) OVERRIDE;
177
178   void OnLanguageRemapSearchKeyToChanged();
179
180   void OnAccessibilityModeChanged(
181       ash::AccessibilityNotificationVisibility notify);
182
183   void UpdatePerformanceTracing();
184
185   // Overridden from InputMethodManager::Observer.
186   virtual void InputMethodChanged(input_method::InputMethodManager* manager,
187                                   bool show_message) OVERRIDE;
188
189   // Overridden from InputMethodMenuManager::Observer.
190   virtual void InputMethodMenuItemChanged(
191       ash::ime::InputMethodMenuManager* manager) OVERRIDE;
192
193   // Overridden from CrasAudioHandler::AudioObserver.
194   virtual void OnOutputVolumeChanged() OVERRIDE;
195   virtual void OnOutputMuteChanged() OVERRIDE;
196   virtual void OnInputGainChanged() OVERRIDE;
197   virtual void OnInputMuteChanged() OVERRIDE;
198   virtual void OnAudioNodesChanged() OVERRIDE;
199   virtual void OnActiveOutputNodeChanged() OVERRIDE;
200   virtual void OnActiveInputNodeChanged() OVERRIDE;
201
202   // Overridden from BluetoothAdapter::Observer.
203   virtual void AdapterPresentChanged(device::BluetoothAdapter* adapter,
204                                      bool present) OVERRIDE;
205   virtual void AdapterPoweredChanged(device::BluetoothAdapter* adapter,
206                                      bool powered) OVERRIDE;
207   virtual void AdapterDiscoveringChanged(device::BluetoothAdapter* adapter,
208                                          bool discovering) OVERRIDE;
209   virtual void DeviceAdded(device::BluetoothAdapter* adapter,
210                            device::BluetoothDevice* device) OVERRIDE;
211   virtual void DeviceChanged(device::BluetoothAdapter* adapter,
212                              device::BluetoothDevice* device) OVERRIDE;
213   virtual void DeviceRemoved(device::BluetoothAdapter* adapter,
214                              device::BluetoothDevice* device) OVERRIDE;
215
216   void OnStartBluetoothDiscoverySession(
217       scoped_ptr<device::BluetoothDiscoverySession> discovery_session);
218
219   void UpdateEnterpriseDomain();
220
221   // Overridden from CloudPolicyStore::Observer
222   virtual void OnStoreLoaded(policy::CloudPolicyStore* store) OVERRIDE;
223   virtual void OnStoreError(policy::CloudPolicyStore* store) OVERRIDE;
224
225   // Overridden from ash::SessionStateObserver
226   virtual void UserAddedToSession(const std::string& user_id) OVERRIDE;
227
228   // Overridden from chrome::BrowserListObserver:
229   virtual void OnBrowserRemoved(Browser* browser) OVERRIDE;
230
231   // Overridden from extensions::AppWindowRegistry::Observer:
232   virtual void OnAppWindowRemoved(extensions::AppWindow* app_window) OVERRIDE;
233
234   void OnAccessibilityStatusChanged(
235       const AccessibilityStatusEventDetails& details);
236
237   scoped_ptr<content::NotificationRegistrar> registrar_;
238   scoped_ptr<PrefChangeRegistrar> local_state_registrar_;
239   scoped_ptr<PrefChangeRegistrar> user_pref_registrar_;
240   Profile* user_profile_;
241   base::HourClockType clock_type_;
242   int search_key_mapped_to_;
243   bool screen_locked_;
244   bool have_session_start_time_;
245   base::TimeTicks session_start_time_;
246   bool have_session_length_limit_;
247   base::TimeDelta session_length_limit_;
248   std::string enterprise_domain_;
249   bool should_run_bluetooth_discovery_;
250
251   scoped_refptr<device::BluetoothAdapter> bluetooth_adapter_;
252   scoped_ptr<device::BluetoothDiscoverySession> bluetooth_discovery_session_;
253   scoped_ptr<ash::VolumeControlDelegate> volume_control_delegate_;
254   scoped_ptr<CrosSettingsObserverSubscription> device_settings_observer_;
255   scoped_ptr<AccessibilityStatusSubscription> accessibility_subscription_;
256   base::ScopedPtrHashMap<std::string, ash::tray::UserAccountsDelegate>
257       accounts_delegates_;
258
259   base::WeakPtrFactory<SystemTrayDelegateChromeOS> weak_ptr_factory_;
260
261   DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegateChromeOS);
262 };
263
264 ash::SystemTrayDelegate* CreateSystemTrayDelegate();
265
266 }  // namespace chromeos
267 #endif  // CHROME_BROWSER_UI_ASH_SYSTEM_TRAY_DELEGATE_CHROMEOS_H_