| 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 fd730c3daa8c38335a46bab57cd346ca751226b3..31f2ff2527b36a9a6a26c35c924a959c3353dcd0 100644 | 
| --- a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc | 
| +++ b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc | 
| @@ -26,6 +26,7 @@ | 
| #include "base/chromeos/chromeos_version.h" | 
| #include "base/logging.h" | 
| #include "base/memory/weak_ptr.h" | 
| +#include "base/prefs/public/pref_observer.h" | 
| #include "base/utf_string_conversions.h" | 
| #include "chrome/browser/browser_process.h" | 
| #include "chrome/browser/chromeos/accessibility/accessibility_util.h" | 
| @@ -151,6 +152,7 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, | 
| public NetworkLibrary::NetworkManagerObserver, | 
| public NetworkLibrary::NetworkObserver, | 
| public NetworkLibrary::CellularDataPlanObserver, | 
| +                           public PrefObserver, | 
| public google_apis::DriveServiceObserver, | 
| public content::NotificationObserver, | 
| public input_method::InputMethodManager::Observer, | 
| @@ -1088,26 +1090,6 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, | 
| ObserveGDataUpdates(); | 
| break; | 
| } | 
| -      case chrome::NOTIFICATION_PREF_CHANGED: { | 
| -        std::string pref = *content::Details<std::string>(details).ptr(); | 
| -        PrefService* service = content::Source<PrefService>(source).ptr(); | 
| -        if (pref == prefs::kUse24HourClock) { | 
| -          UpdateClockType(service); | 
| -        } else if (pref == prefs::kLanguageXkbRemapSearchKeyTo) { | 
| -          search_key_mapped_to_ = | 
| -              service->GetInteger(prefs::kLanguageXkbRemapSearchKeyTo); | 
| -        } else if (pref == prefs::kSpokenFeedbackEnabled) { | 
| -          ash::AccessibilityObserver* observer = | 
| -              tray_->accessibility_observer(); | 
| -          if (observer) { | 
| -            observer->OnAccessibilityModeChanged( | 
| -                service->GetBoolean(prefs::kSpokenFeedbackEnabled)); | 
| -          } | 
| -        } else { | 
| -          NOTREACHED(); | 
| -        } | 
| -        break; | 
| -      } | 
| case chrome::NOTIFICATION_PROFILE_CREATED: { | 
| SetProfile(content::Source<Profile>(source).ptr()); | 
| registrar_.Remove(this, | 
| @@ -1126,6 +1108,25 @@ class SystemTrayDelegate : public ash::SystemTrayDelegate, | 
| } | 
| } | 
|  | 
| +  virtual void OnPreferenceChanged(PrefServiceBase* service, | 
| +                                   const std::string& pref) OVERRIDE { | 
| +    if (pref == prefs::kUse24HourClock) { | 
| +      UpdateClockType(static_cast<PrefService*>(service)); | 
| +    } else if (pref == prefs::kLanguageXkbRemapSearchKeyTo) { | 
| +      search_key_mapped_to_ = | 
| +          service->GetInteger(prefs::kLanguageXkbRemapSearchKeyTo); | 
| +    } else if (pref == prefs::kSpokenFeedbackEnabled) { | 
| +      ash::AccessibilityObserver* observer = | 
| +          tray_->accessibility_observer(); | 
| +      if (observer) { | 
| +        observer->OnAccessibilityModeChanged( | 
| +            service->GetBoolean(prefs::kSpokenFeedbackEnabled)); | 
| +      } | 
| +    } else { | 
| +      NOTREACHED(); | 
| +    } | 
| +  } | 
| + | 
| // Overridden from InputMethodManager::Observer. | 
| virtual void InputMethodChanged( | 
| input_method::InputMethodManager* manager, bool show_message) OVERRIDE { | 
|  |