Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / ash / system_tray_delegate_linux.cc
1 // Copyright 2014 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 #include "chrome/browser/ui/ash/system_tray_delegate_linux.h"
6
7 #include <string>
8
9 #include "ash/shell.h"
10 #include "ash/shell_delegate.h"
11 #include "ash/system/tray/system_tray.h"
12 #include "ash/system/tray/system_tray_delegate.h"
13 #include "ash/system/tray/system_tray_notifier.h"
14 #include "ash/volume_control_delegate.h"
15 #include "base/time/time.h"
16 #include "chrome/browser/chrome_notification_types.h"
17 #include "chrome/browser/lifetime/application_lifetime.h"
18 #include "chrome/browser/profiles/profile_manager.h"
19 #include "chrome/browser/ui/chrome_pages.h"
20 #include "chrome/browser/ui/host_desktop.h"
21 #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
22 #include "chrome/browser/upgrade_detector.h"
23 #include "chrome/grit/locale_settings.h"
24 #include "content/public/browser/notification_observer.h"
25 #include "content/public/browser/notification_service.h"
26 #include "ui/base/l10n/l10n_util.h"
27
28 namespace {
29
30 class SystemTrayDelegateLinux : public ash::SystemTrayDelegate,
31                                 public content::NotificationObserver {
32  public:
33   SystemTrayDelegateLinux()
34       : clock_type_(base::GetHourClockType()) {
35     // Register notifications on construction so that events such as
36     // PROFILE_CREATED do not get missed if they happen before Initialize().
37     registrar_.reset(new content::NotificationRegistrar);
38     registrar_->Add(this,
39                     chrome::NOTIFICATION_UPGRADE_RECOMMENDED,
40                     content::NotificationService::AllSources());
41   }
42
43   virtual ~SystemTrayDelegateLinux() {
44     registrar_.reset();
45   }
46
47   // Overridden from ash::SystemTrayDelegate:
48   virtual void Initialize() OVERRIDE {
49     UpdateClockType();
50   }
51
52   virtual void Shutdown() OVERRIDE {
53   }
54
55   virtual bool GetTrayVisibilityOnStartup() OVERRIDE {
56     return true;
57   }
58
59   virtual ash::user::LoginStatus GetUserLoginStatus() const OVERRIDE {
60     return ash::user::LOGGED_IN_OWNER;
61   }
62
63   virtual void ChangeProfilePicture() OVERRIDE {
64   }
65
66   virtual const std::string GetEnterpriseDomain() const OVERRIDE {
67     return std::string();
68   }
69
70   virtual const base::string16 GetEnterpriseMessage() const OVERRIDE {
71     return base::string16();
72   }
73
74   virtual const std::string GetSupervisedUserManager() const OVERRIDE {
75     return std::string();
76   }
77
78   virtual const base::string16 GetSupervisedUserManagerName() const OVERRIDE {
79     return base::string16();
80   }
81
82   virtual const base::string16 GetSupervisedUserMessage() const OVERRIDE {
83     return base::string16();
84   }
85
86   virtual bool IsUserSupervised() const OVERRIDE {
87     return false;
88   }
89
90   virtual bool SystemShouldUpgrade() const OVERRIDE {
91     return UpgradeDetector::GetInstance()->notify_upgrade();
92   }
93
94   virtual base::HourClockType GetHourClockType() const OVERRIDE {
95     return clock_type_;
96   }
97
98   virtual void ShowSettings() OVERRIDE {
99   }
100
101   virtual bool ShouldShowSettings() OVERRIDE {
102     return true;
103   }
104
105   virtual void ShowDateSettings() OVERRIDE {
106   }
107
108   virtual void ShowSetTimeDialog() OVERRIDE {
109   }
110
111   virtual void ShowNetworkSettings(const std::string& service_path) OVERRIDE {
112   }
113
114   virtual void ShowBluetoothSettings() OVERRIDE {
115   }
116
117   virtual void ShowDisplaySettings() OVERRIDE {
118   }
119
120   virtual void ShowChromeSlow() OVERRIDE {
121     chrome::ScopedTabbedBrowserDisplayer displayer(
122         ProfileManager::GetPrimaryUserProfile(), chrome::HOST_DESKTOP_TYPE_ASH);
123     chrome::ShowSlow(displayer.browser());
124   }
125
126   virtual bool ShouldShowDisplayNotification() OVERRIDE {
127     return false;
128   }
129
130   virtual void ShowIMESettings() OVERRIDE {
131   }
132
133   virtual void ShowHelp() OVERRIDE {
134     chrome::ShowHelpForProfile(
135         ProfileManager::GetLastUsedProfile(),
136         chrome::HOST_DESKTOP_TYPE_ASH,
137         chrome::HELP_SOURCE_MENU);
138   }
139
140   virtual void ShowAccessibilityHelp() OVERRIDE {
141   }
142
143   virtual void ShowAccessibilitySettings() OVERRIDE {
144   }
145
146   virtual void ShowPublicAccountInfo() OVERRIDE {
147   }
148
149   virtual void ShowSupervisedUserInfo() OVERRIDE {
150   }
151
152   virtual void ShowEnterpriseInfo() OVERRIDE {
153   }
154
155   virtual void ShowUserLogin() OVERRIDE {
156   }
157
158   virtual bool ShowSpringChargerReplacementDialog() OVERRIDE {
159     return false;
160   }
161
162   virtual bool IsSpringChargerReplacementDialogVisible() OVERRIDE {
163     return false;
164   }
165
166   virtual bool HasUserConfirmedSafeSpringCharger() OVERRIDE {
167     return false;
168   }
169
170   virtual void ShutDown() OVERRIDE {
171   }
172
173   virtual void SignOut() OVERRIDE {
174   }
175
176   virtual void RequestLockScreen() OVERRIDE {
177   }
178
179   virtual void RequestRestartForUpdate() OVERRIDE {
180     chrome::AttemptRestart();
181   }
182
183   virtual void GetAvailableBluetoothDevices(
184       ash::BluetoothDeviceList* list) OVERRIDE {
185   }
186
187   virtual void BluetoothStartDiscovering() OVERRIDE {
188   }
189
190   virtual void BluetoothStopDiscovering() OVERRIDE {
191   }
192
193   virtual void ConnectToBluetoothDevice(const std::string& address) OVERRIDE {
194   }
195
196   virtual bool IsBluetoothDiscovering() OVERRIDE {
197     return false;
198   }
199
200   virtual void GetCurrentIME(ash::IMEInfo* info) OVERRIDE {
201   }
202
203   virtual void GetAvailableIMEList(ash::IMEInfoList* list) OVERRIDE {
204   }
205
206   virtual void GetCurrentIMEProperties(
207       ash::IMEPropertyInfoList* list) OVERRIDE {
208   }
209
210   virtual void SwitchIME(const std::string& ime_id) OVERRIDE {
211   }
212
213   virtual void ActivateIMEProperty(const std::string& key) OVERRIDE {
214   }
215
216   virtual void ShowNetworkConfigure(const std::string& network_id) OVERRIDE {
217   }
218
219   virtual bool EnrollNetwork(const std::string& network_id) OVERRIDE {
220     return true;
221   }
222
223   virtual void ManageBluetoothDevices() OVERRIDE {
224   }
225
226   virtual void ToggleBluetooth() OVERRIDE {
227   }
228
229   virtual void ShowMobileSimDialog() OVERRIDE {
230   }
231
232   virtual void ShowMobileSetupDialog(const std::string& service_path) OVERRIDE {
233   }
234
235   virtual void ShowOtherNetworkDialog(const std::string& type) OVERRIDE {
236   }
237
238   virtual bool GetBluetoothAvailable() OVERRIDE {
239     return false;
240   }
241
242   virtual bool GetBluetoothEnabled() OVERRIDE {
243     return false;
244   }
245
246   virtual bool GetBluetoothDiscovering() OVERRIDE {
247     return false;
248   }
249
250   virtual void ChangeProxySettings() OVERRIDE {
251   }
252
253   virtual ash::VolumeControlDelegate*
254   GetVolumeControlDelegate() const OVERRIDE {
255     return NULL;
256   }
257
258   virtual void SetVolumeControlDelegate(
259       scoped_ptr<ash::VolumeControlDelegate> delegate) OVERRIDE {
260   }
261
262   virtual bool GetSessionStartTime(
263       base::TimeTicks* session_start_time) OVERRIDE {
264     return false;
265   }
266
267   virtual bool GetSessionLengthLimit(
268       base::TimeDelta* session_length_limit) OVERRIDE {
269     return false;
270   }
271
272   virtual int GetSystemTrayMenuWidth() OVERRIDE {
273     return l10n_util::GetLocalizedContentsWidthInPixels(
274         IDS_SYSTEM_TRAY_MENU_BUBBLE_WIDTH_PIXELS);
275   }
276
277   virtual void ActiveUserWasChanged() OVERRIDE {
278   }
279
280   virtual bool IsSearchKeyMappedToCapsLock() OVERRIDE {
281     return false;
282   }
283
284   virtual ash::tray::UserAccountsDelegate* GetUserAccountsDelegate(
285       const std::string& user_id) OVERRIDE {
286     return NULL;
287   }
288
289  private:
290   ash::SystemTrayNotifier* GetSystemTrayNotifier() {
291     return ash::Shell::GetInstance()->system_tray_notifier();
292   }
293
294   void UpdateClockType() {
295     clock_type_ = (base::GetHourClockType() == base::k24HourClock) ?
296         base::k24HourClock : base::k12HourClock;
297     GetSystemTrayNotifier()->NotifyDateFormatChanged();
298   }
299
300   // content::NotificationObserver implementation.
301   virtual void Observe(int type,
302                        const content::NotificationSource& source,
303                        const content::NotificationDetails& details) OVERRIDE {
304     if (type == chrome::NOTIFICATION_UPGRADE_RECOMMENDED) {
305         UpgradeDetector* detector =
306             content::Source<UpgradeDetector>(source).ptr();
307       ash::UpdateObserver::UpdateSeverity severity =
308           ash::UpdateObserver::UPDATE_NORMAL;
309       switch (detector->upgrade_notification_stage()) {
310         case UpgradeDetector::UPGRADE_ANNOYANCE_CRITICAL:
311         case UpgradeDetector::UPGRADE_ANNOYANCE_SEVERE:
312           severity = ash::UpdateObserver::UPDATE_SEVERE_RED;
313           break;
314         case UpgradeDetector::UPGRADE_ANNOYANCE_HIGH:
315           severity = ash::UpdateObserver::UPDATE_HIGH_ORANGE;
316           break;
317         case UpgradeDetector::UPGRADE_ANNOYANCE_ELEVATED:
318           severity = ash::UpdateObserver::UPDATE_LOW_GREEN;
319           break;
320         case UpgradeDetector::UPGRADE_ANNOYANCE_LOW:
321         case UpgradeDetector::UPGRADE_ANNOYANCE_NONE:
322           severity = ash::UpdateObserver::UPDATE_NORMAL;
323           break;
324       }
325       GetSystemTrayNotifier()->NotifyUpdateRecommended(severity);
326     } else {
327       NOTREACHED();
328     }
329   }
330
331   scoped_ptr<content::NotificationRegistrar> registrar_;
332   base::HourClockType clock_type_;
333
334   DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegateLinux);
335 };
336
337 }  // namespace
338
339
340 ash::SystemTrayDelegate* CreateLinuxSystemTrayDelegate() {
341   return new SystemTrayDelegateLinux();
342 }