12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef ASH_SYSTEM_TRAY_SYSTEM_TRAY_NOTIFIER_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define ASH_SYSTEM_TRAY_SYSTEM_TRAY_NOTIFIER_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector>
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/ash_export.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/bluetooth/bluetooth_observer.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/brightness/brightness_observer.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/enterprise/enterprise_domain_observer.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/network_observer.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/sms_observer.h"
173d4dfb6f11fb4e934d658743a8efc26d5490fdb0Ben Murdoch#include "ash/system/chromeos/tray_tracing.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/date/clock_observer.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/drive/drive_observer.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/ime/ime_observer.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/locale/locale_observer.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/logout_button/logout_button_observer.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/session_length_limit/session_length_limit_observer.h"
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray_accessibility.h"
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray_caps_lock.h"
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/user/update_observer.h"
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/user/user_observer.h"
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/observer_list.h"
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/network_observer.h"
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/sms_observer.h"
33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ash/system/chromeos/screen_security/screen_capture_observer.h"
34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ash/system/chromeos/screen_security/screen_share_observer.h"
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ash {
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_CHROMEOS)
40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class NetworkStateNotifier;
41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif
42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ASH_EXPORT SystemTrayNotifier {
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public:
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SystemTrayNotifier();
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ~SystemTrayNotifier();
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddAccessibilityObserver(AccessibilityObserver* observer);
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveAccessibilityObserver(AccessibilityObserver* observer);
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddBluetoothObserver(BluetoothObserver* observer);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveBluetoothObserver(BluetoothObserver* observer);
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddBrightnessObserver(BrightnessObserver* observer);
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveBrightnessObserver(BrightnessObserver* observer);
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddCapsLockObserver(CapsLockObserver* observer);
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveCapsLockObserver(CapsLockObserver* observer);
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddClockObserver(ClockObserver* observer);
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveClockObserver(ClockObserver* observer);
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddDriveObserver(DriveObserver* observer);
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveDriveObserver(DriveObserver* observer);
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddIMEObserver(IMEObserver* observer);
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveIMEObserver(IMEObserver* observer);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddLocaleObserver(LocaleObserver* observer);
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveLocaleObserver(LocaleObserver* observer);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddLogoutButtonObserver(LogoutButtonObserver* observer);
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveLogoutButtonObserver(LogoutButtonObserver* observer);
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddSessionLengthLimitObserver(SessionLengthLimitObserver* observer);
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveSessionLengthLimitObserver(SessionLengthLimitObserver* observer);
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
783d4dfb6f11fb4e934d658743a8efc26d5490fdb0Ben Murdoch  void AddTracingObserver(TracingObserver* observer);
793d4dfb6f11fb4e934d658743a8efc26d5490fdb0Ben Murdoch  void RemoveTracingObserver(TracingObserver* observer);
803d4dfb6f11fb4e934d658743a8efc26d5490fdb0Ben Murdoch
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddUpdateObserver(UpdateObserver* observer);
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveUpdateObserver(UpdateObserver* observer);
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddUserObserver(UserObserver* observer);
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveUserObserver(UserObserver* observer);
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddNetworkObserver(NetworkObserver* observer);
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveNetworkObserver(NetworkObserver* observer);
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddSmsObserver(SmsObserver* observer);
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveSmsObserver(SmsObserver* observer);
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddEnterpriseDomainObserver(EnterpriseDomainObserver* observer);
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveEnterpriseDomainObserver(EnterpriseDomainObserver* observer);
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddScreenCaptureObserver(ScreenCaptureObserver* observer);
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveScreenCaptureObserver(ScreenCaptureObserver* observer);
99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void AddScreenShareObserver(ScreenShareObserver* observer);
101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void RemoveScreenShareObserver(ScreenShareObserver* observer);
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyAccessibilityModeChanged(
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      AccessibilityNotificationVisibility notify);
1063d4dfb6f11fb4e934d658743a8efc26d5490fdb0Ben Murdoch  void NotifyTracingModeChanged(bool value);
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyRefreshBluetooth();
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyBluetoothDiscoveringChanged();
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyBrightnessChanged(double level, bool user_initialted);
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyCapsLockChanged(bool enabled, bool search_mapped_to_caps_lock);
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyRefreshClock();
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyDateFormatChanged();
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifySystemClockTimeUpdated();
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void NotifyDriveJobUpdated(const DriveOperationStatus& status);
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyRefreshIME(bool show_message);
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyShowLoginButtonChanged(bool show_login_button);
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyLocaleChanged(LocaleObserver::Delegate* delegate,
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           const std::string& cur_locale,
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           const std::string& from_locale,
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           const std::string& to_locale);
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifySessionStartTimeChanged();
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifySessionLengthLimitChanged();
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyUpdateRecommended(UpdateObserver::UpdateSeverity severity);
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyUserUpdate();
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifySetNetworkMessage(NetworkTrayDelegate* delegate,
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               NetworkObserver::MessageType message_type,
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               NetworkObserver::NetworkType network_type,
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                               const base::string16& title,
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                               const base::string16& message,
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                               const std::vector<base::string16>& links);
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyClearNetworkMessage(NetworkObserver::MessageType message_type);
13390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void NotifyRequestToggleWifi();
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyAddSmsMessage(const base::DictionaryValue& message);
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyEnterpriseDomainChanged();
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyScreenCaptureStart(const base::Closure& stop_callback,
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                const base::string16& sharing_app_name);
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyScreenCaptureStop();
139868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void NotifyScreenShareStart(const base::Closure& stop_callback,
140868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                              const base::string16& helper_name);
141868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void NotifyScreenShareStop();
142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  NetworkStateNotifier* network_state_notifier() {
144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return network_state_notifier_.get();
145868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<AccessibilityObserver> accessibility_observers_;
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<BluetoothObserver> bluetooth_observers_;
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<BrightnessObserver> brightness_observers_;
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<CapsLockObserver> caps_lock_observers_;
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<ClockObserver> clock_observers_;
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<DriveObserver> drive_observers_;
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<IMEObserver> ime_observers_;
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<LocaleObserver> locale_observers_;
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<LogoutButtonObserver> logout_button_observers_;
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<SessionLengthLimitObserver> session_length_limit_observers_;
1593d4dfb6f11fb4e934d658743a8efc26d5490fdb0Ben Murdoch  ObserverList<TracingObserver> tracing_observers_;
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<UpdateObserver> update_observers_;
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<UserObserver> user_observers_;
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<NetworkObserver> network_observers_;
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<SmsObserver> sms_observers_;
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<EnterpriseDomainObserver> enterprise_domain_observers_;
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<ScreenCaptureObserver> screen_capture_observers_;
167868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ObserverList<ScreenShareObserver> screen_share_observers_;
168868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  scoped_ptr<NetworkStateNotifier> network_state_notifier_;
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SystemTrayNotifier);
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace ash
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // ASH_SYSTEM_TRAY_SYSTEM_TRAY_NOTIFIER_H_
177