| Index: chrome/browser/chromeos/system/ash_system_tray_delegate.cc
|
| diff --git a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
|
| index 1474c3c5ea9a7292ecbd10444aa6881e210b22b7..27efb1afc30d1c9ae97a9ba2dce21336d98128e0 100644
|
| --- a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
|
| +++ b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
|
| @@ -16,6 +16,7 @@
|
| #include "ash/system/power/power_status_observer.h"
|
| #include "ash/system/tray/system_tray.h"
|
| #include "ash/system/tray/system_tray_delegate.h"
|
| +#include "ash/system/tray/system_tray_observers.h"
|
| #include "ash/system/tray_accessibility.h"
|
| #include "ash/system/tray_caps_lock.h"
|
| #include "ash/system/user/update_observer.h"
|
| @@ -174,8 +175,8 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate,
|
| screen_locked_(false),
|
| connected_network_state_(STATE_UNKNOWN),
|
| data_promo_notification_(new DataPromoNotification()),
|
| - volume_control_delegate_(ALLOW_THIS_IN_INITIALIZER_LIST(
|
| - new VolumeController)) {
|
| + volume_control_delegate_(new VolumeController()),
|
| + system_tray_observers_(new ash::SystemTrayObservers()) {
|
| // Register notifications on construction so that events such as
|
| // PROFILE_CREATED do not get missed if they happen before Initialize().
|
| registrar_.Add(this,
|
| @@ -228,6 +229,9 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate,
|
| }
|
|
|
| virtual ~SystemTrayDelegate() {
|
| + // Clear observers first.
|
| + system_tray_observers_.reset();
|
| +
|
| AudioHandler* audiohandler = AudioHandler::GetInstance();
|
| if (audiohandler)
|
| audiohandler->RemoveVolumeObserver(this);
|
| @@ -251,6 +255,10 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate,
|
| }
|
| }
|
|
|
| + virtual ash::SystemTrayObservers* GetSystemTrayObservers() OVERRIDE {
|
| + return system_tray_observers_.get();
|
| + }
|
| +
|
| // Overridden from ash::SystemTrayDelegate:
|
| virtual bool GetTrayVisibilityOnStartup() OVERRIDE {
|
| // In case of OOBE / sign in screen tray will be shown later.
|
| @@ -625,7 +633,9 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate,
|
| }
|
|
|
| virtual void ToggleWifi() OVERRIDE {
|
| - GetSystemTray()->network_observer()->OnWillToggleWifi();
|
| + FOR_EACH_OBSERVER(ash::NetworkObserver,
|
| + system_tray_observers_->network_observers(),
|
| + OnWillToggleWifi());
|
| network_menu_->ToggleWifi();
|
| }
|
|
|
| @@ -768,35 +778,29 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate,
|
| void UpdateClockType(PrefService* service) {
|
| clock_type_ = service->GetBoolean(prefs::kUse24HourClock) ?
|
| base::k24HourClock : base::k12HourClock;
|
| - ash::ClockObserver* observer = GetSystemTray()->clock_observer();
|
| - if (observer)
|
| - observer->OnDateFormatChanged();
|
| + FOR_EACH_OBSERVER(ash::ClockObserver,
|
| + system_tray_observers_->clock_observers(),
|
| + OnDateFormatChanged());
|
| }
|
|
|
| void NotifyRefreshClock() {
|
| - ash::ClockObserver* observer = GetSystemTray()->clock_observer();
|
| - if (observer)
|
| - observer->Refresh();
|
| + FOR_EACH_OBSERVER(ash::ClockObserver,
|
| + system_tray_observers_->clock_observers(),
|
| + Refresh());
|
| }
|
|
|
| void NotifyRefreshNetwork() {
|
| - ash::NetworkObserver* observer = GetSystemTray()->network_observer();
|
| chromeos::NetworkLibrary* crosnet =
|
| chromeos::CrosLibrary::Get()->GetNetworkLibrary();
|
| - if (observer) {
|
| - ash::NetworkIconInfo info;
|
| - info.image = network_icon_->GetIconAndText(&info.description);
|
| - info.tray_icon_visible = network_icon_->ShouldShowIconInTray();
|
| - observer->OnNetworkRefresh(info);
|
| - }
|
| -
|
| - ash::NetworkObserver* vpn_observer = GetSystemTray()->vpn_observer();
|
| - if (vpn_observer) {
|
| - ash::NetworkIconInfo info;
|
| - info.image = network_icon_->GetIconAndText(&info.description);
|
| - info.tray_icon_visible = network_icon_->ShouldShowIconInTray();
|
| - vpn_observer->OnNetworkRefresh(info);
|
| - }
|
| + ash::NetworkIconInfo info;
|
| + info.image = network_icon_->GetIconAndText(&info.description);
|
| + info.tray_icon_visible = network_icon_->ShouldShowIconInTray();
|
| + FOR_EACH_OBSERVER(ash::NetworkObserver,
|
| + system_tray_observers_->network_observers(),
|
| + OnNetworkRefresh(info));
|
| + FOR_EACH_OBSERVER(ash::NetworkObserver,
|
| + system_tray_observers_->vpn_observers(),
|
| + OnNetworkRefresh(info));
|
|
|
| // Update Accessibility.
|
|
|
| @@ -827,27 +831,27 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate,
|
| }
|
|
|
| void NotifyRefreshBluetooth() {
|
| - ash::BluetoothObserver* observer = GetSystemTray()->bluetooth_observer();
|
| - if (observer)
|
| - observer->OnBluetoothRefresh();
|
| + FOR_EACH_OBSERVER(ash::BluetoothObserver,
|
| + system_tray_observers_->bluetooth_observers(),
|
| + OnBluetoothRefresh());
|
| }
|
|
|
| void NotifyBluetoothDiscoveringChanged() {
|
| - ash::BluetoothObserver* observer = GetSystemTray()->bluetooth_observer();
|
| - if (observer)
|
| - observer->OnBluetoothDiscoveringChanged();
|
| + FOR_EACH_OBSERVER(ash::BluetoothObserver,
|
| + system_tray_observers_->bluetooth_observers(),
|
| + OnBluetoothDiscoveringChanged());
|
| }
|
|
|
| void NotifyRefreshIME(bool show_message) {
|
| - ash::IMEObserver* observer = GetSystemTray()->ime_observer();
|
| - if (observer)
|
| - observer->OnIMERefresh(show_message);
|
| + FOR_EACH_OBSERVER(ash::IMEObserver,
|
| + system_tray_observers_->ime_observers(),
|
| + OnIMERefresh(show_message));
|
| }
|
|
|
| void NotifyRefreshDrive(ash::DriveOperationStatusList& list) {
|
| - ash::DriveObserver* observer = GetSystemTray()->drive_observer();
|
| - if (observer)
|
| - observer->OnDriveRefresh(list);
|
| + FOR_EACH_OBSERVER(ash::DriveObserver,
|
| + system_tray_observers_->drive_observers(),
|
| + OnDriveRefresh(list));
|
| }
|
|
|
| void RefreshNetworkObserver(NetworkLibrary* crosnet) {
|
| @@ -971,24 +975,30 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate,
|
| // Overridden from AudioHandler::VolumeObserver.
|
| virtual void OnVolumeChanged() OVERRIDE {
|
| float level = AudioHandler::GetInstance()->GetVolumePercent() / 100.f;
|
| - GetSystemTray()->audio_observer()->OnVolumeChanged(level);
|
| + FOR_EACH_OBSERVER(ash::AudioObserver,
|
| + system_tray_observers_->audio_observers(),
|
| + OnVolumeChanged(level));
|
| }
|
|
|
| // Overridden from AudioHandler::VolumeObserver.
|
| virtual void OnMuteToggled() OVERRIDE {
|
| - GetSystemTray()->audio_observer()->OnMuteToggled();
|
| + FOR_EACH_OBSERVER(ash::AudioObserver,
|
| + system_tray_observers_->audio_observers(),
|
| + OnMuteToggled());
|
| }
|
|
|
| // Overridden from PowerManagerClient::Observer.
|
| virtual void BrightnessChanged(int level, bool user_initiated) OVERRIDE {
|
| - GetSystemTray()->brightness_observer()->
|
| - OnBrightnessChanged(static_cast<double>(level), user_initiated);
|
| + FOR_EACH_OBSERVER(
|
| + ash::BrightnessObserver,
|
| + system_tray_observers_->brightness_observers(),
|
| + OnBrightnessChanged(static_cast<double>(level), user_initiated));
|
| }
|
|
|
| virtual void PowerChanged(const PowerSupplyStatus& power_status) OVERRIDE {
|
| power_supply_status_ = power_status;
|
| FOR_EACH_OBSERVER(ash::PowerStatusObserver,
|
| - GetSystemTray()->power_status_observers(),
|
| + system_tray_observers_->power_status_observers(),
|
| OnPowerStatusChanged(power_status));
|
| }
|
|
|
| @@ -1082,18 +1092,18 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate,
|
| severity = ash::UpdateObserver::UPDATE_NORMAL;
|
| break;
|
| }
|
| - ash::UpdateObserver* observer = GetSystemTray()->update_observer();
|
| - if (observer)
|
| - observer->OnUpdateRecommended(severity);
|
| + FOR_EACH_OBSERVER(ash::UpdateObserver,
|
| + system_tray_observers_->update_observers(),
|
| + OnUpdateRecommended(severity));
|
| break;
|
| }
|
| case chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED: {
|
| // This notification is also sent on login screen when user avatar
|
| // is loaded from file.
|
| if (GetUserLoginStatus() != ash::user::LOGGED_IN_NONE) {
|
| - ash::UserObserver* observer = GetSystemTray()->user_observer();
|
| - if (observer)
|
| - observer->OnUserUpdate();
|
| + FOR_EACH_OBSERVER(ash::UserObserver,
|
| + system_tray_observers_->user_observers(),
|
| + OnUserUpdate());
|
| }
|
| break;
|
| }
|
| @@ -1128,12 +1138,11 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate,
|
| search_key_mapped_to_ =
|
| service->GetInteger(prefs::kLanguageRemapSearchKeyTo);
|
| } else if (pref == prefs::kSpokenFeedbackEnabled) {
|
| - ash::AccessibilityObserver* observer =
|
| - GetSystemTray()->accessibility_observer();
|
| - if (observer) {
|
| - observer->OnAccessibilityModeChanged(
|
| - service->GetBoolean(prefs::kSpokenFeedbackEnabled));
|
| - }
|
| + FOR_EACH_OBSERVER(
|
| + ash::AccessibilityObserver,
|
| + system_tray_observers_->accessibility_observers(),
|
| + OnAccessibilityModeChanged(
|
| + service->GetBoolean(prefs::kSpokenFeedbackEnabled)));
|
| } else {
|
| NOTREACHED();
|
| }
|
| @@ -1244,9 +1253,9 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate,
|
| search_key_mapped_to_ == input_method::kCapsLockKey)
|
| search_mapped_to_caps_lock = true;
|
|
|
| - ash::CapsLockObserver* observer = GetSystemTray()->caps_lock_observer();
|
| - if (observer)
|
| - observer->OnCapsLockChanged(enabled, search_mapped_to_caps_lock);
|
| + FOR_EACH_OBSERVER(ash::CapsLockObserver,
|
| + system_tray_observers_->caps_lock_observers(),
|
| + OnCapsLockChanged(enabled, search_mapped_to_caps_lock));
|
| }
|
|
|
| // Overridden from ash::NetworkTrayDelegate
|
| @@ -1309,6 +1318,8 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate,
|
|
|
| scoped_ptr<ash::VolumeControlDelegate> volume_control_delegate_;
|
|
|
| + scoped_ptr<ash::SystemTrayObservers> system_tray_observers_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(SystemTrayDelegate);
|
| };
|
|
|
|
|