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 85984fb92bbdac185de5d123d686ae84bdd0d1ac..bde9f7a4f31ad85451153c5568db731cf34b3c84 100644 |
--- a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc |
+++ b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc |
@@ -610,6 +610,10 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, |
BaseLoginDisplayHost::default_host()->OpenProxySettings(); |
} |
+ virtual void OnTrayDestroyed() OVERRIDE { |
+ tray_ = NULL; |
+ } |
+ |
private: |
// Returns the last active browser. If there is no such browser, creates a new |
// browser window with an empty tab and returns it. |
@@ -631,22 +635,19 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, |
void UpdateClockType(PrefService* service) { |
clock_type_ = service->GetBoolean(prefs::kUse24HourClock) ? |
base::k24HourClock : base::k12HourClock; |
- ash::ClockObserver* observer = |
- ash::Shell::GetInstance()->tray()->clock_observer(); |
+ ash::ClockObserver* observer = tray_ ? tray_->clock_observer() : NULL; |
if (observer) |
observer->OnDateFormatChanged(); |
} |
void NotifyRefreshClock() { |
- ash::ClockObserver* observer = |
- ash::Shell::GetInstance()->tray()->clock_observer(); |
+ ash::ClockObserver* observer = tray_ ? tray_->clock_observer() : NULL; |
if (observer) |
observer->Refresh(); |
} |
void NotifyRefreshNetwork() { |
- ash::NetworkObserver* observer = |
- ash::Shell::GetInstance()->tray()->network_observer(); |
+ ash::NetworkObserver* observer = tray_ ? tray_->network_observer() : NULL; |
if (observer) { |
NetworkLibrary* crosnet = CrosLibrary::Get()->GetNetworkLibrary(); |
ash::NetworkIconInfo info; |
@@ -659,14 +660,13 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, |
void NotifyRefreshBluetooth() { |
ash::BluetoothObserver* observer = |
- ash::Shell::GetInstance()->tray()->bluetooth_observer(); |
+ tray_ ? tray_->bluetooth_observer() : NULL; |
if (observer) |
observer->OnBluetoothRefresh(); |
} |
void NotifyRefreshIME() { |
- ash::IMEObserver* observer = |
- ash::Shell::GetInstance()->tray()->ime_observer(); |
+ ash::IMEObserver* observer = tray_ ? tray_->ime_observer() : NULL; |
if (observer) |
observer->OnIMERefresh(); |
} |
@@ -693,21 +693,24 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, |
// Overridden from AudioHandler::VolumeObserver. |
virtual void OnVolumeChanged() OVERRIDE { |
- float level = AudioHandler::GetInstance()->GetVolumePercent() / 100.f; |
- ash::Shell::GetInstance()->tray()->audio_observer()-> |
- OnVolumeChanged(level); |
+ if (tray_) { |
+ float level = AudioHandler::GetInstance()->GetVolumePercent() / 100.f; |
+ tray_->audio_observer()->OnVolumeChanged(level); |
+ } |
} |
// Overridden from PowerManagerClient::Observer. |
virtual void BrightnessChanged(int level, bool user_initiated) OVERRIDE { |
- ash::Shell::GetInstance()->tray()->brightness_observer()-> |
- OnBrightnessChanged(static_cast<double>(level), user_initiated); |
+ if (tray_) { |
+ tray_->brightness_observer()-> |
+ OnBrightnessChanged(static_cast<double>(level), user_initiated); |
+ } |
} |
virtual void PowerChanged(const PowerSupplyStatus& power_status) OVERRIDE { |
power_supply_status_ = power_status; |
ash::PowerStatusObserver* observer = |
- ash::Shell::GetInstance()->tray()->power_status_observer(); |
+ tray_ ? tray_->power_status_observer() : NULL; |
if (observer) |
observer->OnPowerStatusChanged(power_status); |
} |
@@ -718,12 +721,14 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, |
virtual void LockScreen() OVERRIDE { |
screen_locked_ = true; |
- tray_->UpdateAfterLoginStatusChange(GetUserLoginStatus()); |
+ if (tray_) |
+ tray_->UpdateAfterLoginStatusChange(GetUserLoginStatus()); |
} |
virtual void UnlockScreen() OVERRIDE { |
screen_locked_ = false; |
- tray_->UpdateAfterLoginStatusChange(GetUserLoginStatus()); |
+ if (tray_) |
+ tray_->UpdateAfterLoginStatusChange(GetUserLoginStatus()); |
} |
virtual void UnlockScreenFailed() OVERRIDE { |
@@ -760,8 +765,10 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, |
virtual void OnNetworkManagerChanged(NetworkLibrary* crosnet) OVERRIDE { |
RefreshNetworkObserver(crosnet); |
RefreshNetworkDeviceObserver(crosnet); |
- data_promo_notification_->ShowOptionalMobileDataPromoNotification(crosnet, |
- tray_, this); |
+ if (tray_) { |
+ data_promo_notification_->ShowOptionalMobileDataPromoNotification( |
+ crosnet, tray_, this); |
+ } |
NotifyRefreshNetwork(); |
} |
@@ -783,12 +790,12 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, |
const content::NotificationDetails& details) OVERRIDE { |
switch (type) { |
case chrome::NOTIFICATION_LOGIN_USER_CHANGED: { |
- tray_->UpdateAfterLoginStatusChange(GetUserLoginStatus()); |
+ if (tray_) |
+ tray_->UpdateAfterLoginStatusChange(GetUserLoginStatus()); |
break; |
} |
case chrome::NOTIFICATION_UPGRADE_RECOMMENDED: { |
- ash::UpdateObserver* observer = |
- ash::Shell::GetInstance()->tray()->update_observer(); |
+ ash::UpdateObserver* observer = tray_ ? tray_->update_observer() : NULL; |
if (observer) |
observer->OnUpdateRecommended(); |
break; |
@@ -797,8 +804,7 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, |
// 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 = |
- ash::Shell::GetInstance()->tray()->user_observer(); |
+ ash::UserObserver* observer = tray_ ? tray_->user_observer() : NULL; |
if (observer) |
observer->OnUserUpdate(); |
} |
@@ -814,7 +820,7 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, |
service->GetInteger(prefs::kLanguageXkbRemapSearchKeyTo); |
} else if (pref == prefs::kSpokenFeedbackEnabled) { |
ash::AccessibilityObserver* observer = |
- ash::Shell::GetInstance()->tray()->accessibility_observer(); |
+ tray_ ? tray_->accessibility_observer() : NULL; |
if (observer) { |
observer->OnAccessibilityModeChanged( |
service->GetBoolean(prefs::kSpokenFeedbackEnabled), |
@@ -907,7 +913,7 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, |
id = IDS_STATUSBAR_CAPS_LOCK_ENABLED_PRESS_SEARCH; |
ash::CapsLockObserver* observer = |
- ash::Shell::GetInstance()->tray()->caps_lock_observer(); |
+ tray_ ? tray_->caps_lock_observer() : NULL; |
if (observer) |
observer->OnCapsLockChanged(enabled, id); |
} |