| Index: components/browser_sync/browser/profile_sync_components_factory_impl.cc
|
| diff --git a/components/browser_sync/browser/profile_sync_components_factory_impl.cc b/components/browser_sync/browser/profile_sync_components_factory_impl.cc
|
| deleted file mode 100644
|
| index 7422c6b8a573b0f568337e256db833f86e7f6230..0000000000000000000000000000000000000000
|
| --- a/components/browser_sync/browser/profile_sync_components_factory_impl.cc
|
| +++ /dev/null
|
| @@ -1,428 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "components/browser_sync/browser/profile_sync_components_factory_impl.h"
|
| -
|
| -#include <utility>
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/feature_list.h"
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "build/build_config.h"
|
| -#include "components/autofill/core/browser/autofill_wallet_data_type_controller.h"
|
| -#include "components/autofill/core/browser/webdata/autofill_data_type_controller.h"
|
| -#include "components/autofill/core/browser/webdata/autofill_profile_data_type_controller.h"
|
| -#include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
|
| -#include "components/autofill/core/common/autofill_pref_names.h"
|
| -#include "components/autofill/core/common/autofill_switches.h"
|
| -#include "components/browser_sync/browser/profile_sync_service.h"
|
| -#include "components/browser_sync/common/browser_sync_switches.h"
|
| -#include "components/dom_distiller/core/dom_distiller_features.h"
|
| -#include "components/history/core/browser/history_delete_directives_data_type_controller.h"
|
| -#include "components/history/core/browser/typed_url_data_type_controller.h"
|
| -#include "components/password_manager/core/browser/password_store.h"
|
| -#include "components/password_manager/sync/browser/password_data_type_controller.h"
|
| -#include "components/prefs/pref_service.h"
|
| -#include "components/sync/core/attachments/attachment_downloader.h"
|
| -#include "components/sync/core/attachments/attachment_service.h"
|
| -#include "components/sync/core/attachments/attachment_service_impl.h"
|
| -#include "components/sync/core/attachments/attachment_uploader_impl.h"
|
| -#include "components/sync/device_info/device_info_data_type_controller.h"
|
| -#include "components/sync/device_info/local_device_info_provider_impl.h"
|
| -#include "components/sync/driver/data_type_manager_impl.h"
|
| -#include "components/sync/driver/glue/chrome_report_unrecoverable_error.h"
|
| -#include "components/sync/driver/glue/sync_backend_host.h"
|
| -#include "components/sync/driver/glue/sync_backend_host_impl.h"
|
| -#include "components/sync/driver/proxy_data_type_controller.h"
|
| -#include "components/sync/driver/sync_client.h"
|
| -#include "components/sync/driver/sync_driver_switches.h"
|
| -#include "components/sync/driver/ui_data_type_controller.h"
|
| -#include "components/sync/driver/ui_model_type_controller.h"
|
| -#include "components/sync_bookmarks/bookmark_change_processor.h"
|
| -#include "components/sync_bookmarks/bookmark_data_type_controller.h"
|
| -#include "components/sync_bookmarks/bookmark_model_associator.h"
|
| -#include "components/sync_sessions/session_data_type_controller.h"
|
| -#include "google_apis/gaia/oauth2_token_service.h"
|
| -#include "google_apis/gaia/oauth2_token_service_request.h"
|
| -#include "net/url_request/url_request_context_getter.h"
|
| -
|
| -using bookmarks::BookmarkModel;
|
| -using browser_sync::AutofillDataTypeController;
|
| -using browser_sync::AutofillProfileDataTypeController;
|
| -using browser_sync::ChromeReportUnrecoverableError;
|
| -using browser_sync::HistoryDeleteDirectivesDataTypeController;
|
| -using browser_sync::PasswordDataTypeController;
|
| -using browser_sync::SyncBackendHost;
|
| -using browser_sync::TypedUrlDataTypeController;
|
| -using sync_bookmarks::BookmarkChangeProcessor;
|
| -using sync_bookmarks::BookmarkDataTypeController;
|
| -using sync_bookmarks::BookmarkModelAssociator;
|
| -using sync_driver::DataTypeController;
|
| -using sync_driver::DataTypeManager;
|
| -using sync_driver::DataTypeManagerImpl;
|
| -using sync_driver::DataTypeManagerObserver;
|
| -using sync_driver::DeviceInfoDataTypeController;
|
| -using sync_driver::ProxyDataTypeController;
|
| -using sync_driver::UIDataTypeController;
|
| -using sync_driver_v2::UIModelTypeController;
|
| -using sync_sessions::SessionDataTypeController;
|
| -
|
| -namespace {
|
| -
|
| -syncer::ModelTypeSet GetDisabledTypesFromCommandLine(
|
| - const base::CommandLine& command_line) {
|
| - syncer::ModelTypeSet disabled_types;
|
| - std::string disabled_types_str =
|
| - command_line.GetSwitchValueASCII(switches::kDisableSyncTypes);
|
| -
|
| - disabled_types = syncer::ModelTypeSetFromString(disabled_types_str);
|
| - return disabled_types;
|
| -}
|
| -
|
| -syncer::ModelTypeSet GetEnabledTypesFromCommandLine(
|
| - const base::CommandLine& command_line) {
|
| - return syncer::ModelTypeSet();
|
| -}
|
| -
|
| -// Used to gate syncing preferences, see crbug.com/374865 for more information.
|
| -// Has always been on for desktop/ChromeOS, so default to on. This feature is
|
| -// mainly to give us a kill switch should something go wrong with starting to
|
| -// sync prefs on mobile.
|
| -const base::Feature kSyncPreferencesFeature{"SyncPreferences",
|
| - base::FEATURE_ENABLED_BY_DEFAULT};
|
| -
|
| -} // namespace
|
| -
|
| -ProfileSyncComponentsFactoryImpl::ProfileSyncComponentsFactoryImpl(
|
| - sync_driver::SyncClient* sync_client,
|
| - version_info::Channel channel,
|
| - const std::string& version,
|
| - bool is_tablet,
|
| - const base::CommandLine& command_line,
|
| - const char* history_disabled_pref,
|
| - const GURL& sync_service_url,
|
| - const scoped_refptr<base::SingleThreadTaskRunner>& ui_thread,
|
| - const scoped_refptr<base::SingleThreadTaskRunner>& db_thread,
|
| - OAuth2TokenService* token_service,
|
| - net::URLRequestContextGetter* url_request_context_getter,
|
| - const scoped_refptr<autofill::AutofillWebDataService>& web_data_service,
|
| - const scoped_refptr<password_manager::PasswordStore>& password_store)
|
| - : sync_client_(sync_client),
|
| - channel_(channel),
|
| - version_(version),
|
| - is_tablet_(is_tablet),
|
| - command_line_(command_line),
|
| - history_disabled_pref_(history_disabled_pref),
|
| - sync_service_url_(sync_service_url),
|
| - ui_thread_(ui_thread),
|
| - db_thread_(db_thread),
|
| - token_service_(token_service),
|
| - url_request_context_getter_(url_request_context_getter),
|
| - web_data_service_(web_data_service),
|
| - password_store_(password_store),
|
| - weak_factory_(this) {
|
| - DCHECK(token_service_);
|
| - DCHECK(url_request_context_getter_);
|
| -}
|
| -
|
| -ProfileSyncComponentsFactoryImpl::~ProfileSyncComponentsFactoryImpl() {}
|
| -
|
| -void ProfileSyncComponentsFactoryImpl::RegisterDataTypes(
|
| - sync_driver::SyncService* sync_service,
|
| - const RegisterDataTypesMethod& register_platform_types_method) {
|
| - syncer::ModelTypeSet disabled_types =
|
| - GetDisabledTypesFromCommandLine(command_line_);
|
| - syncer::ModelTypeSet enabled_types =
|
| - GetEnabledTypesFromCommandLine(command_line_);
|
| - RegisterCommonDataTypes(sync_service, disabled_types, enabled_types);
|
| - if (!register_platform_types_method.is_null())
|
| - register_platform_types_method.Run(sync_service, disabled_types,
|
| - enabled_types);
|
| -}
|
| -
|
| -void ProfileSyncComponentsFactoryImpl::RegisterCommonDataTypes(
|
| - sync_driver::SyncService* sync_service,
|
| - syncer::ModelTypeSet disabled_types,
|
| - syncer::ModelTypeSet enabled_types) {
|
| - base::Closure error_callback =
|
| - base::Bind(&ChromeReportUnrecoverableError, channel_);
|
| -
|
| - // TODO(stanisc): can DEVICE_INFO be one of disabled datatypes?
|
| - if (base::FeatureList::IsEnabled(switches::kSyncUSSDeviceInfo)) {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<UIModelTypeController>(syncer::DEVICE_INFO,
|
| - error_callback, sync_client_));
|
| - } else {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<DeviceInfoDataTypeController>(
|
| - error_callback, sync_client_,
|
| - sync_service->GetLocalDeviceInfoProvider()));
|
| - }
|
| -
|
| - // Autofill sync is enabled by default. Register unless explicitly
|
| - // disabled.
|
| - if (!disabled_types.Has(syncer::AUTOFILL)) {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<AutofillDataTypeController>(
|
| - db_thread_, error_callback, sync_client_, web_data_service_));
|
| - }
|
| -
|
| - // Autofill profile sync is enabled by default. Register unless explicitly
|
| - // disabled.
|
| - if (!disabled_types.Has(syncer::AUTOFILL_PROFILE)) {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<AutofillProfileDataTypeController>(
|
| - db_thread_, error_callback, sync_client_, web_data_service_));
|
| - }
|
| -
|
| - // Wallet data sync is enabled by default, but behind a syncer experiment
|
| - // enforced by the datatype controller. Register unless explicitly disabled.
|
| - bool wallet_disabled = disabled_types.Has(syncer::AUTOFILL_WALLET_DATA);
|
| - if (!wallet_disabled) {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<browser_sync::AutofillWalletDataTypeController>(
|
| - syncer::AUTOFILL_WALLET_DATA, db_thread_, error_callback,
|
| - sync_client_, web_data_service_));
|
| - }
|
| -
|
| - // Wallet metadata sync depends on Wallet data sync. Register if Wallet data
|
| - // is syncing and metadata sync is not explicitly disabled.
|
| - if (!wallet_disabled &&
|
| - !disabled_types.Has(syncer::AUTOFILL_WALLET_METADATA)) {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<browser_sync::AutofillWalletDataTypeController>(
|
| - syncer::AUTOFILL_WALLET_METADATA, db_thread_, error_callback,
|
| - sync_client_, web_data_service_));
|
| - }
|
| -
|
| - // Bookmark sync is enabled by default. Register unless explicitly
|
| - // disabled.
|
| - if (!disabled_types.Has(syncer::BOOKMARKS)) {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<BookmarkDataTypeController>(error_callback,
|
| - sync_client_));
|
| - }
|
| -
|
| - const bool history_disabled =
|
| - sync_client_->GetPrefService()->GetBoolean(history_disabled_pref_);
|
| - // TypedUrl sync is enabled by default. Register unless explicitly disabled,
|
| - // or if saving history is disabled.
|
| - if (!disabled_types.Has(syncer::TYPED_URLS) && !history_disabled) {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<TypedUrlDataTypeController>(
|
| - error_callback, sync_client_, history_disabled_pref_));
|
| - }
|
| -
|
| - // Delete directive sync is enabled by default. Register unless full history
|
| - // sync is disabled.
|
| - if (!disabled_types.Has(syncer::HISTORY_DELETE_DIRECTIVES) &&
|
| - !history_disabled) {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<HistoryDeleteDirectivesDataTypeController>(
|
| - error_callback, sync_client_));
|
| - }
|
| -
|
| - // Session sync is enabled by default. Register unless explicitly disabled.
|
| - // This is also disabled if the browser history is disabled, because the
|
| - // tab sync data is added to the web history on the server.
|
| - if (!disabled_types.Has(syncer::PROXY_TABS) && !history_disabled) {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<ProxyDataTypeController>(syncer::PROXY_TABS));
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<SessionDataTypeController>(
|
| - error_callback, sync_client_,
|
| - sync_service->GetLocalDeviceInfoProvider(),
|
| - history_disabled_pref_));
|
| - }
|
| -
|
| - // Favicon sync is enabled by default. Register unless explicitly disabled.
|
| - if (!disabled_types.Has(syncer::FAVICON_IMAGES) &&
|
| - !disabled_types.Has(syncer::FAVICON_TRACKING) && !history_disabled) {
|
| - // crbug/384552. We disable error uploading for this data types for now.
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<UIDataTypeController>(syncer::FAVICON_IMAGES,
|
| - base::Closure(), sync_client_));
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<UIDataTypeController>(syncer::FAVICON_TRACKING,
|
| - base::Closure(), sync_client_));
|
| - }
|
| -
|
| - // Password sync is enabled by default. Register unless explicitly
|
| - // disabled.
|
| - if (!disabled_types.Has(syncer::PASSWORDS)) {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<PasswordDataTypeController>(
|
| - error_callback, sync_client_,
|
| - sync_client_->GetPasswordStateChangedCallback(), password_store_));
|
| - }
|
| -
|
| - if (!disabled_types.Has(syncer::PREFERENCES) &&
|
| - base::FeatureList::IsEnabled(kSyncPreferencesFeature)) {
|
| - if (!override_prefs_controller_to_uss_for_test_) {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<UIDataTypeController>(syncer::PREFERENCES,
|
| - error_callback, sync_client_));
|
| - } else {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<UIModelTypeController>(
|
| - syncer::PREFERENCES, error_callback, sync_client_));
|
| - }
|
| - }
|
| -
|
| - if (!disabled_types.Has(syncer::PRIORITY_PREFERENCES)) {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<UIDataTypeController>(syncer::PRIORITY_PREFERENCES,
|
| - error_callback, sync_client_));
|
| - }
|
| -
|
| - // Article sync is disabled by default. Register only if explicitly enabled.
|
| - if (dom_distiller::IsEnableSyncArticlesSet()) {
|
| - sync_service->RegisterDataTypeController(
|
| - base::MakeUnique<UIDataTypeController>(syncer::ARTICLES, error_callback,
|
| - sync_client_));
|
| - }
|
| -}
|
| -
|
| -DataTypeManager* ProfileSyncComponentsFactoryImpl::CreateDataTypeManager(
|
| - const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>&
|
| - debug_info_listener,
|
| - const DataTypeController::TypeMap* controllers,
|
| - const sync_driver::DataTypeEncryptionHandler* encryption_handler,
|
| - SyncBackendHost* backend,
|
| - DataTypeManagerObserver* observer) {
|
| - return new DataTypeManagerImpl(debug_info_listener, controllers,
|
| - encryption_handler, backend, observer);
|
| -}
|
| -
|
| -browser_sync::SyncBackendHost*
|
| -ProfileSyncComponentsFactoryImpl::CreateSyncBackendHost(
|
| - const std::string& name,
|
| - invalidation::InvalidationService* invalidator,
|
| - const base::WeakPtr<sync_driver::SyncPrefs>& sync_prefs,
|
| - const base::FilePath& sync_folder) {
|
| - return new browser_sync::SyncBackendHostImpl(
|
| - name, sync_client_, ui_thread_, invalidator, sync_prefs, sync_folder);
|
| -}
|
| -
|
| -std::unique_ptr<sync_driver::LocalDeviceInfoProvider>
|
| -ProfileSyncComponentsFactoryImpl::CreateLocalDeviceInfoProvider() {
|
| - return base::MakeUnique<browser_sync::LocalDeviceInfoProviderImpl>(
|
| - channel_, version_, is_tablet_);
|
| -}
|
| -
|
| -class TokenServiceProvider
|
| - : public OAuth2TokenServiceRequest::TokenServiceProvider {
|
| - public:
|
| - TokenServiceProvider(
|
| - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
|
| - OAuth2TokenService* token_service);
|
| -
|
| - // OAuth2TokenServiceRequest::TokenServiceProvider implementation.
|
| - scoped_refptr<base::SingleThreadTaskRunner> GetTokenServiceTaskRunner()
|
| - override;
|
| - OAuth2TokenService* GetTokenService() override;
|
| -
|
| - private:
|
| - ~TokenServiceProvider() override;
|
| -
|
| - scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
| - OAuth2TokenService* token_service_;
|
| -};
|
| -
|
| -TokenServiceProvider::TokenServiceProvider(
|
| - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
|
| - OAuth2TokenService* token_service)
|
| - : task_runner_(task_runner), token_service_(token_service) {}
|
| -
|
| -TokenServiceProvider::~TokenServiceProvider() {}
|
| -
|
| -scoped_refptr<base::SingleThreadTaskRunner>
|
| -TokenServiceProvider::GetTokenServiceTaskRunner() {
|
| - return task_runner_;
|
| -}
|
| -
|
| -OAuth2TokenService* TokenServiceProvider::GetTokenService() {
|
| - return token_service_;
|
| -}
|
| -
|
| -std::unique_ptr<syncer::AttachmentService>
|
| -ProfileSyncComponentsFactoryImpl::CreateAttachmentService(
|
| - std::unique_ptr<syncer::AttachmentStoreForSync> attachment_store,
|
| - const syncer::UserShare& user_share,
|
| - const std::string& store_birthday,
|
| - syncer::ModelType model_type,
|
| - syncer::AttachmentService::Delegate* delegate) {
|
| - std::unique_ptr<syncer::AttachmentUploader> attachment_uploader;
|
| - std::unique_ptr<syncer::AttachmentDownloader> attachment_downloader;
|
| - // Only construct an AttachmentUploader and AttachmentDownload if we have sync
|
| - // credentials. We may not have sync credentials because there may not be a
|
| - // signed in sync user.
|
| - if (!user_share.sync_credentials.account_id.empty() &&
|
| - !user_share.sync_credentials.scope_set.empty()) {
|
| - scoped_refptr<OAuth2TokenServiceRequest::TokenServiceProvider>
|
| - token_service_provider(
|
| - new TokenServiceProvider(ui_thread_, token_service_));
|
| - // TODO(maniscalco): Use shared (one per profile) thread-safe instances of
|
| - // AttachmentUploader and AttachmentDownloader instead of creating a new one
|
| - // per AttachmentService (bug 369536).
|
| - attachment_uploader.reset(new syncer::AttachmentUploaderImpl(
|
| - sync_service_url_, url_request_context_getter_,
|
| - user_share.sync_credentials.account_id,
|
| - user_share.sync_credentials.scope_set, token_service_provider,
|
| - store_birthday, model_type));
|
| -
|
| - token_service_provider =
|
| - new TokenServiceProvider(ui_thread_, token_service_);
|
| - attachment_downloader = syncer::AttachmentDownloader::Create(
|
| - sync_service_url_, url_request_context_getter_,
|
| - user_share.sync_credentials.account_id,
|
| - user_share.sync_credentials.scope_set, token_service_provider,
|
| - store_birthday, model_type);
|
| - }
|
| -
|
| - // It is important that the initial backoff delay is relatively large. For
|
| - // whatever reason, the server may fail all requests for a short period of
|
| - // time. When this happens we don't want to overwhelm the server with
|
| - // requests so we use a large initial backoff.
|
| - const base::TimeDelta initial_backoff_delay =
|
| - base::TimeDelta::FromMinutes(30);
|
| - const base::TimeDelta max_backoff_delay = base::TimeDelta::FromHours(4);
|
| - std::unique_ptr<syncer::AttachmentService> attachment_service(
|
| - new syncer::AttachmentServiceImpl(
|
| - std::move(attachment_store), std::move(attachment_uploader),
|
| - std::move(attachment_downloader), delegate, initial_backoff_delay,
|
| - max_backoff_delay));
|
| - return attachment_service;
|
| -}
|
| -
|
| -sync_driver::SyncApiComponentFactory::SyncComponents
|
| -ProfileSyncComponentsFactoryImpl::CreateBookmarkSyncComponents(
|
| - sync_driver::SyncService* sync_service,
|
| - std::unique_ptr<syncer::DataTypeErrorHandler> error_handler) {
|
| - BookmarkModel* bookmark_model =
|
| - sync_service->GetSyncClient()->GetBookmarkModel();
|
| - syncer::UserShare* user_share = sync_service->GetUserShare();
|
| -// TODO(akalin): We may want to propagate this switch up eventually.
|
| -#if defined(OS_ANDROID) || defined(OS_IOS)
|
| - const bool kExpectMobileBookmarksFolder = true;
|
| -#else
|
| - const bool kExpectMobileBookmarksFolder = false;
|
| -#endif
|
| - BookmarkModelAssociator* model_associator = new BookmarkModelAssociator(
|
| - bookmark_model, sync_service->GetSyncClient(), user_share,
|
| - error_handler->Copy(), kExpectMobileBookmarksFolder);
|
| - BookmarkChangeProcessor* change_processor =
|
| - new BookmarkChangeProcessor(sync_service->GetSyncClient(),
|
| - model_associator, std::move(error_handler));
|
| - return SyncComponents(model_associator, change_processor);
|
| -}
|
| -
|
| -// static
|
| -void ProfileSyncComponentsFactoryImpl::OverridePrefsForUssTest(bool use_uss) {
|
| - override_prefs_controller_to_uss_for_test_ = use_uss;
|
| -}
|
| -
|
| -bool ProfileSyncComponentsFactoryImpl::
|
| - override_prefs_controller_to_uss_for_test_ = false;
|
|
|