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