#include "components/browser_sync/common_controller_builder.h"
#include <memory>
#include <utility>
#include <vector>
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/memory/weak_ptr.h"
#include "base/task/sequenced_task_runner.h"
#include "base/task/task_traits.h"
#include "base/task/thread_pool.h"
#include "components/autofill/core/browser/payments/autofill_wallet_data_type_controller.h"
#include "components/autofill/core/browser/webdata/addresses/autofill_profile_sync_bridge.h"
#include "components/autofill/core/browser/webdata/addresses/contact_info_data_type_controller.h"
#include "components/autofill/core/browser/webdata/addresses/contact_info_sync_bridge.h"
#include "components/autofill/core/browser/webdata/autocomplete/autocomplete_sync_bridge.h"
#include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
#include "components/autofill/core/browser/webdata/payments/autofill_wallet_credential_sync_bridge.h"
#include "components/autofill/core/browser/webdata/payments/autofill_wallet_metadata_sync_bridge.h"
#include "components/autofill/core/browser/webdata/payments/autofill_wallet_offer_sync_bridge.h"
#include "components/autofill/core/browser/webdata/payments/autofill_wallet_sync_bridge.h"
#include "components/autofill/core/browser/webdata/payments/autofill_wallet_usage_data_sync_bridge.h"
#include "components/commerce/core/commerce_feature_list.h"
#include "components/commerce/core/product_specifications/product_specifications_service.h"
#include "components/consent_auditor/consent_auditor.h"
#include "components/data_sharing/public/data_sharing_service.h"
#include "components/data_sharing/public/features.h"
#include "components/history/core/browser/sync/history_data_type_controller.h"
#include "components/history/core/browser/sync/history_delete_directives_data_type_controller.h"
#include "components/password_manager/core/browser/password_store/password_store_interface.h"
#include "components/password_manager/core/browser/sharing/incoming_password_sharing_invitation_data_type_controller.h"
#include "components/password_manager/core/browser/sharing/outgoing_password_sharing_invitation_data_type_controller.h"
#include "components/password_manager/core/browser/sharing/password_receiver_service.h"
#include "components/password_manager/core/browser/sharing/password_sender_service.h"
#include "components/password_manager/core/browser/sync/password_data_type_controller.h"
#include "components/password_manager/core/browser/sync/password_local_data_batch_uploader.h"
#include "components/plus_addresses/settings/plus_address_setting_service.h"
#include "components/plus_addresses/sync_utils/plus_address_data_type_controller.h"
#include "components/plus_addresses/webdata/plus_address_webdata_service.h"
#include "components/power_bookmarks/core/power_bookmark_features.h"
#include "components/power_bookmarks/core/power_bookmark_service.h"
#include "components/prefs/pref_service.h"
#include "components/reading_list/core/dual_reading_list_model.h"
#include "components/reading_list/core/reading_list_local_data_batch_uploader.h"
#include "components/send_tab_to_self/send_tab_to_self_data_type_controller.h"
#include "components/send_tab_to_self/send_tab_to_self_sync_service.h"
#include "components/sync/base/features.h"
#include "components/sync/base/report_unrecoverable_error.h"
#include "components/sync/model/forwarding_data_type_controller_delegate.h"
#include "components/sync/model/proxy_data_type_controller_delegate.h"
#include "components/sync/service/data_type_controller.h"
#include "components/sync_bookmarks/bookmark_data_type_controller.h"
#include "components/sync_bookmarks/bookmark_local_data_batch_uploader.h"
#include "components/sync_bookmarks/bookmark_sync_service.h"
#include "components/sync_device_info/device_info_sync_service.h"
#include "components/sync_preferences/pref_service_syncable.h"
#include "components/sync_sessions/session_data_type_controller.h"
#include "components/sync_sessions/session_sync_service.h"
#include "components/sync_user_events/user_event_data_type_controller.h"
#include "components/sync_user_events/user_event_service.h"
#include "components/variations/service/google_groups_manager.h"
#if !BUILDFLAG(IS_ANDROID)
#include "components/webauthn/core/browser/passkey_data_type_controller.h"
#include "components/webauthn/core/browser/passkey_model.h"
#endif
#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
#include "components/supervised_user/core/browser/supervised_user_settings_data_type_controller.h"
#include "components/supervised_user/core/browser/supervised_user_settings_service.h"
#endif
namespace browser_sync {
namespace {
DataTypeController;
SyncableServiceBasedDataTypeController;
base::WeakPtr<syncer::DataTypeControllerDelegate>
AutocompleteDelegateFromDataService(autofill::AutofillWebDataService* service) { … }
base::WeakPtr<syncer::DataTypeControllerDelegate>
AutofillProfileDelegateFromDataService(
autofill::AutofillWebDataService* service) { … }
base::WeakPtr<syncer::DataTypeControllerDelegate>
AutofillWalletCredentialDataDelegateFromDataService(
autofill::AutofillWebDataService* service) { … }
base::WeakPtr<syncer::DataTypeControllerDelegate>
AutofillWalletDelegateFromDataService(
autofill::AutofillWebDataService* service) { … }
base::WeakPtr<syncer::DataTypeControllerDelegate>
AutofillWalletMetadataDelegateFromDataService(
autofill::AutofillWebDataService* service) { … }
base::WeakPtr<syncer::DataTypeControllerDelegate>
AutofillWalletOfferDelegateFromDataService(
autofill::AutofillWebDataService* service) { … }
base::WeakPtr<syncer::DataTypeControllerDelegate>
AutofillWalletUsageDataDelegateFromDataService(
autofill::AutofillWebDataService* service) { … }
base::WeakPtr<syncer::DataTypeControllerDelegate>
ContactInfoDelegateFromDataService(autofill::AutofillWebDataService* service) { … }
base::WeakPtr<syncer::SyncableService> SyncableServiceForPrefs(
sync_preferences::PrefServiceSyncable* prefs_service,
syncer::DataType type) { … }
}
CommonControllerBuilder::CommonControllerBuilder() = default;
CommonControllerBuilder::~CommonControllerBuilder() = default;
void CommonControllerBuilder::SetAutofillWebDataService(
const scoped_refptr<base::SequencedTaskRunner>& ui_thread,
const scoped_refptr<autofill::AutofillWebDataService>&
web_data_service_on_disk,
const scoped_refptr<autofill::AutofillWebDataService>&
web_data_service_in_memory) { … }
void CommonControllerBuilder::SetBookmarkModel(
bookmarks::BookmarkModel* bookmark_model) { … }
void CommonControllerBuilder::SetBookmarkSyncService(
sync_bookmarks::BookmarkSyncService*
local_or_syncable_bookmark_sync_service,
sync_bookmarks::BookmarkSyncService* account_bookmark_sync_service) { … }
void CommonControllerBuilder::SetConsentAuditor(
consent_auditor::ConsentAuditor* consent_auditor) { … }
void CommonControllerBuilder::SetDataSharingService(
data_sharing::DataSharingService* data_sharing_service) { … }
void CommonControllerBuilder::SetDeviceInfoSyncService(
syncer::DeviceInfoSyncService* device_info_sync_service) { … }
void CommonControllerBuilder::SetFaviconService(
favicon::FaviconService* favicon_service) { … }
void CommonControllerBuilder::SetGoogleGroupsManager(
GoogleGroupsManager* google_groups_manager) { … }
void CommonControllerBuilder::SetHistoryService(
history::HistoryService* history_service) { … }
void CommonControllerBuilder::SetIdentityManager(
signin::IdentityManager* identity_manager) { … }
void CommonControllerBuilder::SetDataTypeStoreService(
syncer::DataTypeStoreService* data_type_store_service) { … }
#if !BUILDFLAG(IS_ANDROID)
void CommonControllerBuilder::SetPasskeyModel(
webauthn::PasskeyModel* passkey_model) { … }
#endif
void CommonControllerBuilder::SetPasswordReceiverService(
password_manager::PasswordReceiverService* password_receiver_service) { … }
void CommonControllerBuilder::SetPasswordSenderService(
password_manager::PasswordSenderService* password_sender_service) { … }
void CommonControllerBuilder::SetPasswordStore(
const scoped_refptr<password_manager::PasswordStoreInterface>&
profile_password_store,
const scoped_refptr<password_manager::PasswordStoreInterface>&
account_password_store) { … }
void CommonControllerBuilder::SetPlusAddressServices(
plus_addresses::PlusAddressSettingService* plus_address_setting_service,
const scoped_refptr<plus_addresses::PlusAddressWebDataService>&
plus_address_webdata_service) { … }
void CommonControllerBuilder::SetPowerBookmarkService(
power_bookmarks::PowerBookmarkService* power_bookmark_service) { … }
void CommonControllerBuilder::SetPrefService(PrefService* pref_service) { … }
void CommonControllerBuilder::SetPrefServiceSyncable(
sync_preferences::PrefServiceSyncable* pref_service_syncable) { … }
void CommonControllerBuilder::SetProductSpecificationsService(
commerce::ProductSpecificationsService* product_specifications_service) { … }
void CommonControllerBuilder::SetDualReadingListModel(
reading_list::DualReadingListModel* dual_reading_list_model) { … }
void CommonControllerBuilder::SetSendTabToSelfSyncService(
send_tab_to_self::SendTabToSelfSyncService* send_tab_to_self_sync_service) { … }
void CommonControllerBuilder::SetSessionSyncService(
sync_sessions::SessionSyncService* session_sync_service) { … }
#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
void CommonControllerBuilder::SetSupervisedUserSettingsService(
supervised_user::SupervisedUserSettingsService*
supervised_user_settings_service) { … }
#endif
void CommonControllerBuilder::SetUserEventService(
syncer::UserEventService* user_event_service) { … }
std::vector<std::unique_ptr<syncer::DataTypeController>>
CommonControllerBuilder::Build(syncer::DataTypeSet disabled_types,
syncer::SyncService* sync_service,
version_info::Channel channel) { … }
std::unique_ptr<DataTypeController>
CommonControllerBuilder::CreateWalletDataTypeController(
syncer::DataType type,
const base::RepeatingCallback<
base::WeakPtr<syncer::DataTypeControllerDelegate>(
autofill::AutofillWebDataService*)>& delegate_from_web_data,
syncer::SyncService* sync_service,
bool with_transport_mode_support) { … }
}