OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/managed_mode/managed_user_sync_service.h" | 5 #include "chrome/browser/managed_mode/managed_user_sync_service.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback.h" |
8 #include "base/values.h" | 9 #include "base/values.h" |
9 #include "chrome/browser/prefs/scoped_user_pref_update.h" | 10 #include "chrome/browser/prefs/scoped_user_pref_update.h" |
10 #include "chrome/browser/profiles/profile.h" | 11 #include "chrome/browser/profiles/profile.h" |
11 #include "chrome/common/pref_names.h" | 12 #include "chrome/common/pref_names.h" |
12 #include "components/user_prefs/pref_registry_syncable.h" | 13 #include "components/user_prefs/pref_registry_syncable.h" |
13 #include "sync/api/sync_change.h" | 14 #include "sync/api/sync_change.h" |
14 #include "sync/api/sync_data.h" | 15 #include "sync/api/sync_data.h" |
15 #include "sync/api/sync_error.h" | 16 #include "sync/api/sync_error.h" |
16 #include "sync/api/sync_error_factory.h" | 17 #include "sync/api/sync_error_factory.h" |
17 #include "sync/api/sync_merge_result.h" | 18 #include "sync/api/sync_merge_result.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 SyncChangeList change_list; | 115 SyncChangeList change_list; |
115 change_list.push_back(SyncChange( | 116 change_list.push_back(SyncChange( |
116 FROM_HERE, | 117 FROM_HERE, |
117 SyncChange::ACTION_DELETE, | 118 SyncChange::ACTION_DELETE, |
118 SyncData::CreateLocalDelete(id, MANAGED_USERS))); | 119 SyncData::CreateLocalDelete(id, MANAGED_USERS))); |
119 SyncError sync_error = | 120 SyncError sync_error = |
120 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); | 121 sync_processor_->ProcessSyncChanges(FROM_HERE, change_list); |
121 DCHECK(!sync_error.IsSet()); | 122 DCHECK(!sync_error.IsSet()); |
122 } | 123 } |
123 | 124 |
| 125 const DictionaryValue* ManagedUserSyncService::GetManagedUsers() { |
| 126 DCHECK(sync_processor_); |
| 127 return prefs_->GetDictionary(prefs::kManagedUsers); |
| 128 } |
| 129 |
| 130 void ManagedUserSyncService::GetManagedUsersAsync( |
| 131 const ManagedUsersCallback& callback) { |
| 132 // If we are already syncing, just run the callback. |
| 133 if (sync_processor_) { |
| 134 callback.Run(GetManagedUsers()); |
| 135 return; |
| 136 } |
| 137 |
| 138 // Otherwise queue it up until we start syncing. |
| 139 callbacks_.push_back(callback); |
| 140 } |
| 141 |
124 void ManagedUserSyncService::Shutdown() { | 142 void ManagedUserSyncService::Shutdown() { |
125 NotifyManagedUsersSyncingStopped(); | 143 NotifyManagedUsersSyncingStopped(); |
126 } | 144 } |
127 | 145 |
128 SyncMergeResult ManagedUserSyncService::MergeDataAndStartSyncing( | 146 SyncMergeResult ManagedUserSyncService::MergeDataAndStartSyncing( |
129 ModelType type, | 147 ModelType type, |
130 const SyncDataList& initial_sync_data, | 148 const SyncDataList& initial_sync_data, |
131 scoped_ptr<SyncChangeProcessor> sync_processor, | 149 scoped_ptr<SyncChangeProcessor> sync_processor, |
132 scoped_ptr<SyncErrorFactory> error_handler) { | 150 scoped_ptr<SyncErrorFactory> error_handler) { |
133 DCHECK_EQ(MANAGED_USERS, type); | 151 DCHECK_EQ(MANAGED_USERS, type); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 change_list.push_back( | 195 change_list.push_back( |
178 SyncChange(FROM_HERE, SyncChange::ACTION_ADD, | 196 SyncChange(FROM_HERE, SyncChange::ACTION_ADD, |
179 CreateLocalSyncData(it.key(), name, acknowledged, master_key))); | 197 CreateLocalSyncData(it.key(), name, acknowledged, master_key))); |
180 } | 198 } |
181 result.set_error(sync_processor_->ProcessSyncChanges(FROM_HERE, change_list)); | 199 result.set_error(sync_processor_->ProcessSyncChanges(FROM_HERE, change_list)); |
182 | 200 |
183 result.set_num_items_modified(num_items_modified); | 201 result.set_num_items_modified(num_items_modified); |
184 result.set_num_items_added(num_items_added); | 202 result.set_num_items_added(num_items_added); |
185 result.set_num_items_after_association(dict->size()); | 203 result.set_num_items_after_association(dict->size()); |
186 | 204 |
| 205 DispatchCallbacks(); |
| 206 |
187 return result; | 207 return result; |
188 } | 208 } |
189 | 209 |
190 void ManagedUserSyncService::StopSyncing(ModelType type) { | 210 void ManagedUserSyncService::StopSyncing(ModelType type) { |
191 DCHECK_EQ(MANAGED_USERS, type); | 211 DCHECK_EQ(MANAGED_USERS, type); |
192 // The observers may want to change the Sync data, so notify them before | 212 // The observers may want to change the Sync data, so notify them before |
193 // resetting the |sync_processor_|. | 213 // resetting the |sync_processor_|. |
194 NotifyManagedUsersSyncingStopped(); | 214 NotifyManagedUsersSyncingStopped(); |
195 sync_processor_.reset(); | 215 sync_processor_.reset(); |
196 error_handler_.reset(); | 216 error_handler_.reset(); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 void ManagedUserSyncService::NotifyManagedUserAcknowledged( | 300 void ManagedUserSyncService::NotifyManagedUserAcknowledged( |
281 const std::string& managed_user_id) { | 301 const std::string& managed_user_id) { |
282 FOR_EACH_OBSERVER(ManagedUserSyncServiceObserver, observers_, | 302 FOR_EACH_OBSERVER(ManagedUserSyncServiceObserver, observers_, |
283 OnManagedUserAcknowledged(managed_user_id)); | 303 OnManagedUserAcknowledged(managed_user_id)); |
284 } | 304 } |
285 | 305 |
286 void ManagedUserSyncService::NotifyManagedUsersSyncingStopped() { | 306 void ManagedUserSyncService::NotifyManagedUsersSyncingStopped() { |
287 FOR_EACH_OBSERVER(ManagedUserSyncServiceObserver, observers_, | 307 FOR_EACH_OBSERVER(ManagedUserSyncServiceObserver, observers_, |
288 OnManagedUsersSyncingStopped()); | 308 OnManagedUsersSyncingStopped()); |
289 } | 309 } |
| 310 |
| 311 void ManagedUserSyncService::DispatchCallbacks() { |
| 312 const DictionaryValue* managed_users = |
| 313 prefs_->GetDictionary(prefs::kManagedUsers); |
| 314 for (std::vector<ManagedUsersCallback>::iterator it = callbacks_.begin(); |
| 315 it != callbacks_.end(); ++it) { |
| 316 it->Run(managed_users); |
| 317 } |
| 318 callbacks_.clear(); |
| 319 } |
OLD | NEW |