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"
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/system/audio/audio_observer.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/bluetooth/bluetooth_observer.h"
14ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ash/system/chromeos/tray_tracing.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/date/clock_observer.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/ime/ime_observer.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/locale/locale_observer.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray_accessibility.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/user/update_observer.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/user/user_observer.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/observer_list.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ash/system/chromeos/enterprise/enterprise_domain_observer.h"
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/network_observer.h"
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/system/chromeos/network/network_portal_detector_observer.h"
27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ash/system/chromeos/screen_security/screen_capture_observer.h"
28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ash/system/chromeos/screen_security/screen_share_observer.h"
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/system/chromeos/session/last_window_closed_observer.h"
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/system/chromeos/session/logout_button_observer.h"
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/system/chromeos/session/session_length_limit_observer.h"
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "ash/system/tray/media_security/media_capture_observer.h"
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/time/time.h"
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ash {
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_CHROMEOS)
39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class NetworkStateNotifier;
40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif
41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ASH_EXPORT SystemTrayNotifier {
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public:
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SystemTrayNotifier();
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ~SystemTrayNotifier();
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddAccessibilityObserver(AccessibilityObserver* observer);
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveAccessibilityObserver(AccessibilityObserver* observer);
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void AddAudioObserver(AudioObserver* observer);
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void RemoveAudioObserver(AudioObserver* observer);
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddBluetoothObserver(BluetoothObserver* observer);
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveBluetoothObserver(BluetoothObserver* observer);
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddClockObserver(ClockObserver* observer);
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveClockObserver(ClockObserver* observer);
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddIMEObserver(IMEObserver* observer);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveIMEObserver(IMEObserver* observer);
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddLocaleObserver(LocaleObserver* observer);
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveLocaleObserver(LocaleObserver* observer);
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
65ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  void AddTracingObserver(TracingObserver* observer);
66ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  void RemoveTracingObserver(TracingObserver* observer);
67ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddUpdateObserver(UpdateObserver* observer);
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveUpdateObserver(UpdateObserver* observer);
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddUserObserver(UserObserver* observer);
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveUserObserver(UserObserver* observer);
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void AddLogoutButtonObserver(LogoutButtonObserver* observer);
76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void RemoveLogoutButtonObserver(LogoutButtonObserver* observer);
77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void AddSessionLengthLimitObserver(SessionLengthLimitObserver* observer);
79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void RemoveSessionLengthLimitObserver(SessionLengthLimitObserver* observer);
80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddNetworkObserver(NetworkObserver* observer);
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveNetworkObserver(NetworkObserver* observer);
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void AddNetworkPortalDetectorObserver(
85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      NetworkPortalDetectorObserver* observer);
86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void RemoveNetworkPortalDetectorObserver(
87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      NetworkPortalDetectorObserver* observer);
88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddEnterpriseDomainObserver(EnterpriseDomainObserver* observer);
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveEnterpriseDomainObserver(EnterpriseDomainObserver* observer);
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void AddMediaCaptureObserver(MediaCaptureObserver* observer);
93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void RemoveMediaCaptureObserver(MediaCaptureObserver* observer);
94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddScreenCaptureObserver(ScreenCaptureObserver* observer);
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void RemoveScreenCaptureObserver(ScreenCaptureObserver* observer);
97868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void AddScreenShareObserver(ScreenShareObserver* observer);
99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void RemoveScreenShareObserver(ScreenShareObserver* observer);
100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void AddLastWindowClosedObserver(LastWindowClosedObserver* observer);
102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void RemoveLastWindowClosedObserver(LastWindowClosedObserver* observer);
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyAccessibilityModeChanged(
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      AccessibilityNotificationVisibility notify);
107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void NotifyAudioOutputVolumeChanged();
108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void NotifyAudioOutputMuteChanged();
109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void NotifyAudioNodesChanged();
110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void NotifyAudioActiveOutputNodeChanged();
111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void NotifyAudioActiveInputNodeChanged();
112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  void NotifyTracingModeChanged(bool value);
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyRefreshBluetooth();
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyBluetoothDiscoveringChanged();
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyRefreshClock();
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyDateFormatChanged();
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifySystemClockTimeUpdated();
1185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void NotifySystemClockCanSetTimeChanged(bool can_set_time);
119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void NotifyRefreshIME();
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyLocaleChanged(LocaleObserver::Delegate* delegate,
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           const std::string& cur_locale,
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           const std::string& from_locale,
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           const std::string& to_locale);
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyUpdateRecommended(UpdateObserver::UpdateSeverity severity);
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyUserUpdate();
1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  void NotifyUserAddedToSession();
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void NotifyShowLoginButtonChanged(bool show_login_button);
129a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void NotifyLogoutDialogDurationChanged(base::TimeDelta duration);
130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void NotifySessionStartTimeChanged();
131a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void NotifySessionLengthLimitChanged();
13290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void NotifyRequestToggleWifi();
133a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void NotifyOnCaptivePortalDetected(const std::string& service_path);
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void NotifyEnterpriseDomainChanged();
135010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void NotifyMediaCaptureChanged();
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();
142a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void NotifyLastWindowClosed();
143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  NetworkStateNotifier* network_state_notifier() {
145868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return network_state_notifier_.get();
146868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<AccessibilityObserver> accessibility_observers_;
151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ObserverList<AudioObserver> audio_observers_;
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<BluetoothObserver> bluetooth_observers_;
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<ClockObserver> clock_observers_;
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<IMEObserver> ime_observers_;
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<LocaleObserver> locale_observers_;
156ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  ObserverList<TracingObserver> tracing_observers_;
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<UpdateObserver> update_observers_;
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<UserObserver> user_observers_;
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS)
160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ObserverList<LogoutButtonObserver> logout_button_observers_;
161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ObserverList<SessionLengthLimitObserver> session_length_limit_observers_;
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<NetworkObserver> network_observers_;
163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ObserverList<NetworkPortalDetectorObserver>
164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      network_portal_detector_observers_;
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<EnterpriseDomainObserver> enterprise_domain_observers_;
166010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  ObserverList<MediaCaptureObserver> media_capture_observers_;
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ObserverList<ScreenCaptureObserver> screen_capture_observers_;
168868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ObserverList<ScreenShareObserver> screen_share_observers_;
169a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ObserverList<LastWindowClosedObserver> last_window_closed_observers_;
170868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  scoped_ptr<NetworkStateNotifier> network_state_notifier_;
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SystemTrayNotifier);
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace ash
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // ASH_SYSTEM_TRAY_SYSTEM_TRAY_NOTIFIER_H_
179