| Index: components/login/screens/screen_context.cc
|
| diff --git a/components/login/screens/screen_context.cc b/components/login/screens/screen_context.cc
|
| index 5324164ee6af6283062e8bd79fd44a70c6ebd71c..71ffdf14b23c68140b20978a0e4ba809f6a9fc67 100644
|
| --- a/components/login/screens/screen_context.cc
|
| +++ b/components/login/screens/screen_context.cc
|
| @@ -122,6 +122,19 @@ String16List ScreenContext::GetString16List(
|
| return Get(key, default_value);
|
| }
|
|
|
| +scoped_ptr<ScreenContext::KeyObserverSubscription>
|
| +ScreenContext::AddKeyObserver(const KeyType& key, const KeyObserver& observer) {
|
| + auto it = key_observers_.find(key);
|
| + linked_ptr<KeyObserversList> observers_list;
|
| + if (it == key_observers_.end()) {
|
| + observers_list.reset(new KeyObserversList());
|
| + key_observers_[key] = observers_list;
|
| + } else {
|
| + observers_list = it->second;
|
| + }
|
| + return observers_list->Add(observer);
|
| +}
|
| +
|
| bool ScreenContext::HasKey(const KeyType& key) const {
|
| DCHECK(CalledOnValidThread());
|
| return storage_.HasKey(key);
|
| @@ -147,12 +160,15 @@ void ScreenContext::ApplyChanges(const base::DictionaryValue& diff,
|
| keys->clear();
|
| keys->reserve(diff.size());
|
| }
|
| - base::DictionaryValue::Iterator it(diff);
|
| - while (!it.IsAtEnd()) {
|
| +
|
| + for (base::DictionaryValue::Iterator it(diff); !it.IsAtEnd(); it.Advance()) {
|
| Set(it.key(), it.value().DeepCopy());
|
| if (keys)
|
| keys->push_back(it.key());
|
| - it.Advance();
|
| +
|
| + linked_ptr<KeyObserversList> observers = key_observers_[it.key()];
|
| + if (observers.get())
|
| + observers->Notify(it.key(), it.value());
|
| }
|
| changes_.Clear();
|
| }
|
|
|