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 7f26bd73c2693559fa738e434c81fa3fff492a24..4f5353e5e67fac1d7e0134e25327d22009f12dfc 100644 |
--- a/chrome/browser/sync/profile_sync_service.cc |
+++ b/chrome/browser/sync/profile_sync_service.cc |
@@ -6,8 +6,7 @@ |
#include <cstddef> |
#include <map> |
-#include <set> |
-#include <utility> |
+#include <vector> |
#include "base/basictypes.h" |
#include "base/bind.h" |
@@ -55,6 +54,7 @@ |
#include "chrome/browser/sync/sessions/sessions_sync_manager.h" |
#include "chrome/browser/sync/supervised_user_signin_manager_wrapper.h" |
#include "chrome/browser/sync/sync_error_controller.h" |
+#include "chrome/browser/sync/sync_type_preference_provider.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/browser_list.h" |
#include "chrome/browser/ui/browser_window.h" |
@@ -1824,7 +1824,8 @@ ProfileSyncService::GetPreferredDirectoryDataTypes() const { |
GetRegisteredDirectoryDataTypes(); |
const syncer::ModelTypeSet preferred_types = |
sync_prefs_.GetPreferredDataTypes(registered_directory_types); |
- return preferred_types; |
+ |
+ return Union(preferred_types, GetDataTypesFromPreferenceProviders()); |
} |
syncer::ModelTypeSet |
@@ -2280,6 +2281,25 @@ void ProfileSyncService::RemoveTypeDebugInfoObserver( |
} |
} |
+void ProfileSyncService::AddPreferenceProvider( |
+ SyncTypePreferenceProvider* provider) { |
+ DCHECK(!HasPreferenceProvider(provider)) |
+ << "Providers may only be added once!"; |
+ preference_providers_.insert(provider); |
+} |
+ |
+void ProfileSyncService::RemovePreferenceProvider( |
+ SyncTypePreferenceProvider* provider) { |
+ DCHECK(HasPreferenceProvider(provider)) |
+ << "Only providers that have been added before can be removed!"; |
+ preference_providers_.erase(provider); |
+} |
+ |
+bool ProfileSyncService::HasPreferenceProvider( |
+ SyncTypePreferenceProvider* provider) const { |
+ return preference_providers_.count(provider) > 0; |
+} |
+ |
namespace { |
class GetAllNodesRequestHelper |
@@ -2468,6 +2488,18 @@ void ProfileSyncService::ReconfigureDatatypeManager() { |
} |
} |
+syncer::ModelTypeSet ProfileSyncService::GetDataTypesFromPreferenceProviders() |
+ const { |
+ syncer::ModelTypeSet types; |
+ for (std::set<SyncTypePreferenceProvider*>::const_iterator it = |
+ preference_providers_.begin(); |
+ it != preference_providers_.end(); |
+ ++it) { |
+ types.PutAll((*it)->GetPreferredDataTypes()); |
+ } |
+ return types; |
+} |
+ |
const FailedDataTypesHandler& ProfileSyncService::failed_data_types_handler() |
const { |
return failed_data_types_handler_; |