Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(606)

Unified Diff: chrome/browser/sync/profile_sync_service.cc

Issue 428143002: Sync: Add a SyncTypePreferenceProvider interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync/profile_sync_service.cc
diff --git a/chrome/browser/sync/profile_sync_service.cc b/chrome/browser/sync/profile_sync_service.cc
index 69bc581d9abeccfa8233afa56100ae147dc40ac7..fda9acc450725320e8a45eef47a8fb09cc4b690d 100644
--- a/chrome/browser/sync/profile_sync_service.cc
+++ b/chrome/browser/sync/profile_sync_service.cc
@@ -51,6 +51,7 @@
#include "chrome/browser/sync/glue/synced_device_tracker.h"
#include "chrome/browser/sync/glue/typed_url_data_type_controller.h"
#include "chrome/browser/sync/profile_sync_components_factory_impl.h"
+#include "chrome/browser/sync/profile_sync_service_data_type_provider.h"
#include "chrome/browser/sync/sessions/notification_service_sessions_router.h"
#include "chrome/browser/sync/sessions/sessions_sync_manager.h"
#include "chrome/browser/sync/supervised_user_signin_manager_wrapper.h"
@@ -1934,7 +1935,7 @@ void ProfileSyncService::ConfigureDataTypeManager() {
types = syncer::BackupTypes();
reason = syncer::CONFIGURE_REASON_BACKUP_ROLLBACK;
} else {
- types = GetPreferredDirectoryDataTypes();
+ types = Union(GetPreferredDirectoryDataTypes(), GetRequiredDataTypes());
if (!HasSyncSetupCompleted()) {
reason = syncer::CONFIGURE_REASON_NEW_CLIENT;
} else if (restart) {
@@ -2293,6 +2294,24 @@ void ProfileSyncService::RemoveTypeDebugInfoObserver(
}
}
+void ProfileSyncService::AddDataTypeProvider(
+ ProfileSyncServiceDataTypeProvider* provider) {
+ DCHECK(!HasDataTypeProvider(provider)) << "Providers may only be added once!";
+ data_type_providers_.push_back(provider);
+}
+
+void ProfileSyncService::RemoveDataTypeProvider(
+ ProfileSyncServiceDataTypeProvider* provider) {
+ data_type_providers_.remove(provider);
Bernhard Bauer 2014/07/30 12:38:51 DCHECK the result?
Marc Treib 2014/07/30 13:10:39 There is no result :P We could DCHECK(HasDataTypeP
Bernhard Bauer 2014/07/30 14:13:20 Yeah, I meant checking whether there is one regist
Marc Treib 2014/08/07 13:05:55 Done.
+}
+
+bool ProfileSyncService::HasDataTypeProvider(
+ ProfileSyncServiceDataTypeProvider* provider) const {
+ return std::find(data_type_providers_.begin(),
+ data_type_providers_.end(),
+ provider) != data_type_providers_.end();
+}
+
namespace {
class GetAllNodesRequestHelper
@@ -2481,6 +2500,21 @@ void ProfileSyncService::ReconfigureDatatypeManager() {
}
}
+syncer::ModelTypeSet ProfileSyncService::GetRequiredDataTypes() {
+ syncer::ModelTypeSet types;
+ std::list<ProfileSyncServiceDataTypeProvider*>::iterator it =
+ data_type_providers_.begin();
+ while (it != data_type_providers_.end()) {
+ // Dereference and increment the iterator *before* calling the callback,
+ // because the provider might remove itself from the list in the callback.
Bernhard Bauer 2014/07/30 12:38:51 I think an easier solution here would be to requir
Marc Treib 2014/07/30 13:10:39 I guess we could. OTOH, this is a fairly common pa
Bernhard Bauer 2014/07/30 14:13:20 Not as common as a standard for loop ;-) If you k
Marc Treib 2014/08/07 13:05:55 Alright. Bonus side-effect: It doesn't have to be
+ ProfileSyncServiceDataTypeProvider* provider = *it;
+ ++it;
+ types.PutAll(provider->GetRequiredSyncDataTypes());
+ }
+ // TODO(treib): Resolve pref groups?
Marc Treib 2014/07/30 11:42:50 It'd be easiest to expose SyncPrefs::ResolvePrefGr
Bernhard Bauer 2014/07/30 12:38:51 Do we actually need that? Required data types coul
Marc Treib 2014/07/30 13:10:39 We could also specify the types explicitly, but I
Bernhard Bauer 2014/07/30 14:13:20 At the very least we would need to change the conc
+ return types;
+}
+
const FailedDataTypesHandler& ProfileSyncService::failed_data_types_handler()
const {
return failed_data_types_handler_;

Powered by Google App Engine
This is Rietveld 408576698