| 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
 | 
| index 8f5bae7a9744bf3315fec423114b4d5f94320bd8..a96b1ee316a87c30d338d15631f9a877aa4d3bb8 100644
 | 
| --- a/components/browser_sync/browser/profile_sync_components_factory_impl.cc
 | 
| +++ b/components/browser_sync/browser/profile_sync_components_factory_impl.cc
 | 
| @@ -61,7 +61,6 @@ using browser_sync::SessionDataTypeController;
 | 
|  using browser_sync::SyncBackendHost;
 | 
|  using browser_sync::TypedUrlDataTypeController;
 | 
|  using sync_driver::DataTypeController;
 | 
| -using syncer::DataTypeErrorHandler;
 | 
|  using sync_driver::DataTypeManager;
 | 
|  using sync_driver::DataTypeManagerImpl;
 | 
|  using sync_driver::DataTypeManagerObserver;
 | 
| @@ -153,29 +152,30 @@ void ProfileSyncComponentsFactoryImpl::RegisterCommonDataTypes(
 | 
|    // TODO(stanisc): can DEVICE_INFO be one of disabled datatypes?
 | 
|    if (channel_ == version_info::Channel::UNKNOWN &&
 | 
|        command_line_.HasSwitch(switches::kSyncEnableUSSDeviceInfo)) {
 | 
| -    sync_service->RegisterDataTypeController(new UIModelTypeController(
 | 
| -        ui_thread_, error_callback, syncer::DEVICE_INFO, sync_client_));
 | 
| +    sync_service->RegisterDataTypeController(
 | 
| +        base::MakeUnique<UIModelTypeController>(syncer::DEVICE_INFO,
 | 
| +                                                error_callback, sync_client_));
 | 
|    } else {
 | 
| -    sync_service->RegisterDataTypeController(new DeviceInfoDataTypeController(
 | 
| -        ui_thread_, error_callback, sync_client_,
 | 
| -        sync_service->GetLocalDeviceInfoProvider()));
 | 
| +    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(
 | 
| -        new AutofillDataTypeController(ui_thread_, db_thread_, error_callback,
 | 
| -                                       sync_client_, web_data_service_));
 | 
| +        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(
 | 
| -        new AutofillProfileDataTypeController(ui_thread_, db_thread_,
 | 
| -                                              error_callback, sync_client_,
 | 
| -                                              web_data_service_));
 | 
| +        base::MakeUnique<AutofillProfileDataTypeController>(
 | 
| +            db_thread_, error_callback, sync_client_, web_data_service_));
 | 
|    }
 | 
|  
 | 
|    // Wallet data sync is enabled by default, but behind a syncer experiment
 | 
| @@ -183,9 +183,9 @@ void ProfileSyncComponentsFactoryImpl::RegisterCommonDataTypes(
 | 
|    bool wallet_disabled = disabled_types.Has(syncer::AUTOFILL_WALLET_DATA);
 | 
|    if (!wallet_disabled) {
 | 
|      sync_service->RegisterDataTypeController(
 | 
| -        new browser_sync::AutofillWalletDataTypeController(
 | 
| -            ui_thread_, db_thread_, error_callback, sync_client_,
 | 
| -            syncer::AUTOFILL_WALLET_DATA, web_data_service_));
 | 
| +        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
 | 
| @@ -193,16 +193,17 @@ void ProfileSyncComponentsFactoryImpl::RegisterCommonDataTypes(
 | 
|    if (!wallet_disabled &&
 | 
|        !disabled_types.Has(syncer::AUTOFILL_WALLET_METADATA)) {
 | 
|      sync_service->RegisterDataTypeController(
 | 
| -        new browser_sync::AutofillWalletDataTypeController(
 | 
| -            ui_thread_, db_thread_, error_callback, sync_client_,
 | 
| -            syncer::AUTOFILL_WALLET_METADATA, web_data_service_));
 | 
| +        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(new BookmarkDataTypeController(
 | 
| -        ui_thread_, error_callback, sync_client_));
 | 
| +    sync_service->RegisterDataTypeController(
 | 
| +        base::MakeUnique<BookmarkDataTypeController>(error_callback,
 | 
| +                                                     sync_client_));
 | 
|    }
 | 
|  
 | 
|    const bool history_disabled =
 | 
| @@ -210,8 +211,9 @@ void ProfileSyncComponentsFactoryImpl::RegisterCommonDataTypes(
 | 
|    // 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(new TypedUrlDataTypeController(
 | 
| -        ui_thread_, error_callback, sync_client_, history_disabled_pref_));
 | 
| +    sync_service->RegisterDataTypeController(
 | 
| +        base::MakeUnique<TypedUrlDataTypeController>(
 | 
| +            error_callback, sync_client_, history_disabled_pref_));
 | 
|    }
 | 
|  
 | 
|    // Delete directive sync is enabled by default.  Register unless full history
 | 
| @@ -219,8 +221,8 @@ void ProfileSyncComponentsFactoryImpl::RegisterCommonDataTypes(
 | 
|    if (!disabled_types.Has(syncer::HISTORY_DELETE_DIRECTIVES) &&
 | 
|        !history_disabled) {
 | 
|      sync_service->RegisterDataTypeController(
 | 
| -        new HistoryDeleteDirectivesDataTypeController(
 | 
| -            ui_thread_, error_callback, sync_client_));
 | 
| +        base::MakeUnique<HistoryDeleteDirectivesDataTypeController>(
 | 
| +            error_callback, sync_client_));
 | 
|    }
 | 
|  
 | 
|    // Session sync is enabled by default.  Register unless explicitly disabled.
 | 
| @@ -228,46 +230,53 @@ void ProfileSyncComponentsFactoryImpl::RegisterCommonDataTypes(
 | 
|    // tab sync data is added to the web history on the server.
 | 
|    if (!disabled_types.Has(syncer::PROXY_TABS) && !history_disabled) {
 | 
|      sync_service->RegisterDataTypeController(
 | 
| -        new ProxyDataTypeController(ui_thread_, syncer::PROXY_TABS));
 | 
| -    sync_service->RegisterDataTypeController(new SessionDataTypeController(
 | 
| -        ui_thread_, error_callback, sync_client_,
 | 
| -        sync_service->GetLocalDeviceInfoProvider(), history_disabled_pref_));
 | 
| +        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(new UIDataTypeController(
 | 
| -        ui_thread_, base::Closure(), syncer::FAVICON_IMAGES, sync_client_));
 | 
| -    sync_service->RegisterDataTypeController(new UIDataTypeController(
 | 
| -        ui_thread_, base::Closure(), syncer::FAVICON_TRACKING, sync_client_));
 | 
| +    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(new PasswordDataTypeController(
 | 
| -        ui_thread_, error_callback, sync_client_,
 | 
| -        sync_client_->GetPasswordStateChangedCallback(), password_store_));
 | 
| +    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)) {
 | 
| -    sync_service->RegisterDataTypeController(new UIDataTypeController(
 | 
| -        ui_thread_, error_callback, syncer::PREFERENCES, sync_client_));
 | 
| +    sync_service->RegisterDataTypeController(
 | 
| +        base::MakeUnique<UIDataTypeController>(syncer::PREFERENCES,
 | 
| +                                               error_callback, sync_client_));
 | 
|    }
 | 
|  
 | 
|    if (!disabled_types.Has(syncer::PRIORITY_PREFERENCES)) {
 | 
|      sync_service->RegisterDataTypeController(
 | 
| -        new UIDataTypeController(ui_thread_, error_callback,
 | 
| -                                 syncer::PRIORITY_PREFERENCES, sync_client_));
 | 
| +        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(new UIDataTypeController(
 | 
| -        ui_thread_, error_callback, syncer::ARTICLES, sync_client_));
 | 
| +    sync_service->RegisterDataTypeController(
 | 
| +        base::MakeUnique<UIDataTypeController>(syncer::ARTICLES, error_callback,
 | 
| +                                               sync_client_));
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -386,7 +395,7 @@ ProfileSyncComponentsFactoryImpl::CreateAttachmentService(
 | 
|  sync_driver::SyncApiComponentFactory::SyncComponents
 | 
|  ProfileSyncComponentsFactoryImpl::CreateBookmarkSyncComponents(
 | 
|      sync_driver::SyncService* sync_service,
 | 
| -    syncer::DataTypeErrorHandler* error_handler) {
 | 
| +    std::unique_ptr<syncer::DataTypeErrorHandler> error_handler) {
 | 
|    BookmarkModel* bookmark_model =
 | 
|        sync_service->GetSyncClient()->GetBookmarkModel();
 | 
|    syncer::UserShare* user_share = sync_service->GetUserShare();
 | 
| @@ -397,9 +406,10 @@ ProfileSyncComponentsFactoryImpl::CreateBookmarkSyncComponents(
 | 
|    const bool kExpectMobileBookmarksFolder = false;
 | 
|  #endif
 | 
|    BookmarkModelAssociator* model_associator = new BookmarkModelAssociator(
 | 
| -      bookmark_model, sync_service->GetSyncClient(), user_share, error_handler,
 | 
| -      kExpectMobileBookmarksFolder);
 | 
| -  BookmarkChangeProcessor* change_processor = new BookmarkChangeProcessor(
 | 
| -      sync_service->GetSyncClient(), model_associator, error_handler);
 | 
| +      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);
 | 
|  }
 | 
| 
 |