OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/extensions/extension_service.h" | 5 #include "chrome/browser/extensions/extension_service.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 1240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1251 } else { | 1251 } else { |
1252 LOG(WARNING) << "CheckForUpdatesSoon() called with auto-update turned off"; | 1252 LOG(WARNING) << "CheckForUpdatesSoon() called with auto-update turned off"; |
1253 } | 1253 } |
1254 } | 1254 } |
1255 | 1255 |
1256 namespace { | 1256 namespace { |
1257 bool IsSyncableNone(const Extension& extension) { return false; } | 1257 bool IsSyncableNone(const Extension& extension) { return false; } |
1258 } // namespace | 1258 } // namespace |
1259 | 1259 |
1260 ExtensionService::SyncBundle::SyncBundle() | 1260 ExtensionService::SyncBundle::SyncBundle() |
1261 : filter(IsSyncableNone), | 1261 : filter(IsSyncableNone) { |
1262 sync_processor(NULL) { | |
1263 } | 1262 } |
1264 | 1263 |
1265 ExtensionService::SyncBundle::~SyncBundle() { | 1264 ExtensionService::SyncBundle::~SyncBundle() { |
1266 } | 1265 } |
1267 | 1266 |
| 1267 void ExtensionService::SyncBundle::Reset() { |
| 1268 filter = IsSyncableNone; |
| 1269 synced_extensions.clear(); |
| 1270 pending_sync_data.clear(); |
| 1271 sync_processor.reset(); |
| 1272 } |
| 1273 |
1268 bool ExtensionService::SyncBundle::HasExtensionId(const std::string& id) const { | 1274 bool ExtensionService::SyncBundle::HasExtensionId(const std::string& id) const { |
1269 return synced_extensions.find(id) != synced_extensions.end(); | 1275 return synced_extensions.find(id) != synced_extensions.end(); |
1270 } | 1276 } |
1271 | 1277 |
1272 bool ExtensionService::SyncBundle::HasPendingExtensionId(const std::string& id) | 1278 bool ExtensionService::SyncBundle::HasPendingExtensionId(const std::string& id) |
1273 const { | 1279 const { |
1274 return pending_sync_data.find(id) != pending_sync_data.end(); | 1280 return pending_sync_data.find(id) != pending_sync_data.end(); |
1275 } | 1281 } |
1276 | 1282 |
1277 void ExtensionService::SyncExtensionChangeIfNeeded(const Extension& extension) { | 1283 void ExtensionService::SyncExtensionChangeIfNeeded(const Extension& extension) { |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1342 ExtensionService::SyncBundle* ExtensionService::GetSyncBundleForModelType( | 1348 ExtensionService::SyncBundle* ExtensionService::GetSyncBundleForModelType( |
1343 syncable::ModelType type) { | 1349 syncable::ModelType type) { |
1344 GET_SYNC_BUNDLE_FOR_MODEL_TYPE_BODY(); | 1350 GET_SYNC_BUNDLE_FOR_MODEL_TYPE_BODY(); |
1345 } | 1351 } |
1346 | 1352 |
1347 #undef GET_SYNC_BUNDLE_FOR_MODEL_TYPE_BODY | 1353 #undef GET_SYNC_BUNDLE_FOR_MODEL_TYPE_BODY |
1348 | 1354 |
1349 SyncError ExtensionService::MergeDataAndStartSyncing( | 1355 SyncError ExtensionService::MergeDataAndStartSyncing( |
1350 syncable::ModelType type, | 1356 syncable::ModelType type, |
1351 const SyncDataList& initial_sync_data, | 1357 const SyncDataList& initial_sync_data, |
1352 SyncChangeProcessor* sync_processor) { | 1358 scoped_ptr<SyncChangeProcessor> sync_processor) { |
1353 CHECK(sync_processor); | |
1354 | |
1355 SyncBundle* bundle = NULL; | 1359 SyncBundle* bundle = NULL; |
1356 | 1360 |
1357 switch (type) { | 1361 switch (type) { |
1358 case syncable::EXTENSIONS: | 1362 case syncable::EXTENSIONS: |
1359 bundle = &extension_sync_bundle_; | 1363 bundle = &extension_sync_bundle_; |
1360 bundle->filter = IsSyncableExtension; | 1364 bundle->filter = IsSyncableExtension; |
1361 break; | 1365 break; |
1362 | 1366 |
1363 case syncable::APPS: | 1367 case syncable::APPS: |
1364 bundle = &app_sync_bundle_; | 1368 bundle = &app_sync_bundle_; |
1365 bundle->filter = IsSyncableApp; | 1369 bundle->filter = IsSyncableApp; |
1366 break; | 1370 break; |
1367 | 1371 |
1368 default: | 1372 default: |
1369 LOG(FATAL) << "Got " << type << " ModelType"; | 1373 LOG(FATAL) << "Got " << type << " ModelType"; |
1370 } | 1374 } |
1371 | 1375 DCHECK(!bundle->sync_processor.get()); |
1372 bundle->sync_processor = sync_processor; | 1376 DCHECK(sync_processor.get()); |
| 1377 bundle->sync_processor = sync_processor.Pass(); |
1373 | 1378 |
1374 // Process extensions from sync. | 1379 // Process extensions from sync. |
1375 for (SyncDataList::const_iterator i = initial_sync_data.begin(); | 1380 for (SyncDataList::const_iterator i = initial_sync_data.begin(); |
1376 i != initial_sync_data.end(); | 1381 i != initial_sync_data.end(); |
1377 ++i) { | 1382 ++i) { |
1378 ExtensionSyncData extension_sync_data = ExtensionSyncData(*i); | 1383 ExtensionSyncData extension_sync_data = ExtensionSyncData(*i); |
1379 bundle->synced_extensions.insert(extension_sync_data.id()); | 1384 bundle->synced_extensions.insert(extension_sync_data.id()); |
1380 ProcessExtensionSyncData(extension_sync_data, *bundle); | 1385 ProcessExtensionSyncData(extension_sync_data, *bundle); |
1381 } | 1386 } |
1382 | 1387 |
(...skipping 15 matching lines...) Expand all Loading... |
1398 bundle->sync_processor->ProcessSyncChanges(FROM_HERE, sync_change_list); | 1403 bundle->sync_processor->ProcessSyncChanges(FROM_HERE, sync_change_list); |
1399 | 1404 |
1400 extension_prefs_->extension_sorting()->FixNTPOrdinalCollisions(); | 1405 extension_prefs_->extension_sorting()->FixNTPOrdinalCollisions(); |
1401 | 1406 |
1402 return SyncError(); | 1407 return SyncError(); |
1403 } | 1408 } |
1404 | 1409 |
1405 void ExtensionService::StopSyncing(syncable::ModelType type) { | 1410 void ExtensionService::StopSyncing(syncable::ModelType type) { |
1406 SyncBundle* bundle = GetSyncBundleForModelType(type); | 1411 SyncBundle* bundle = GetSyncBundleForModelType(type); |
1407 CHECK(bundle); | 1412 CHECK(bundle); |
1408 // This is the simplest way to clear out the bundle. | 1413 bundle->Reset(); |
1409 *bundle = SyncBundle(); | |
1410 } | 1414 } |
1411 | 1415 |
1412 SyncDataList ExtensionService::GetAllSyncData(syncable::ModelType type) const { | 1416 SyncDataList ExtensionService::GetAllSyncData(syncable::ModelType type) const { |
1413 const SyncBundle* bundle = GetSyncBundleForModelTypeConst(type); | 1417 const SyncBundle* bundle = GetSyncBundleForModelTypeConst(type); |
1414 CHECK(bundle); | 1418 CHECK(bundle); |
1415 std::vector<ExtensionSyncData> extension_sync_data = GetSyncDataList(*bundle); | 1419 std::vector<ExtensionSyncData> extension_sync_data = GetSyncDataList(*bundle); |
1416 SyncDataList result(extension_sync_data.size()); | 1420 SyncDataList result(extension_sync_data.size()); |
1417 for (int i = 0; i < static_cast<int>(extension_sync_data.size()); ++i) { | 1421 for (int i = 0; i < static_cast<int>(extension_sync_data.size()); ++i) { |
1418 result[i] = extension_sync_data[i].GetSyncData(); | 1422 result[i] = extension_sync_data[i].GetSyncData(); |
1419 } | 1423 } |
(...skipping 1248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2668 return api_resource_controller_; | 2672 return api_resource_controller_; |
2669 } | 2673 } |
2670 | 2674 |
2671 extensions::RulesRegistryService* ExtensionService::GetRulesRegistryService() { | 2675 extensions::RulesRegistryService* ExtensionService::GetRulesRegistryService() { |
2672 if (!rules_registry_service_.get()) { | 2676 if (!rules_registry_service_.get()) { |
2673 rules_registry_service_.reset( | 2677 rules_registry_service_.reset( |
2674 new extensions::RulesRegistryService(profile_)); | 2678 new extensions::RulesRegistryService(profile_)); |
2675 } | 2679 } |
2676 return rules_registry_service_.get(); | 2680 return rules_registry_service_.get(); |
2677 } | 2681 } |
OLD | NEW |