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

Side by Side Diff: chrome/browser/sync/chrome_sync_client.cc

Issue 2769113002: [Sync] Stop accessing BrowserContextKeyedServiceFactory on non-UI thread. (Closed)
Patch Set: Rebase and removing dependent patch set. Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync/chrome_sync_client.h" 5 #include "chrome/browser/sync/chrome_sync_client.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 #include "chrome/browser/chromeos/arc/arc_util.h" 113 #include "chrome/browser/chromeos/arc/arc_util.h"
114 #include "chrome/browser/chromeos/printing/printers_manager.h" 114 #include "chrome/browser/chromeos/printing/printers_manager.h"
115 #include "chrome/browser/chromeos/printing/printers_manager_factory.h" 115 #include "chrome/browser/chromeos/printing/printers_manager_factory.h"
116 #include "chrome/browser/chromeos/printing/printers_sync_bridge.h" 116 #include "chrome/browser/chromeos/printing/printers_sync_bridge.h"
117 #include "chrome/browser/ui/app_list/arc/arc_package_sync_data_type_controller.h " 117 #include "chrome/browser/ui/app_list/arc/arc_package_sync_data_type_controller.h "
118 #include "chrome/browser/ui/app_list/arc/arc_package_syncable_service.h" 118 #include "chrome/browser/ui/app_list/arc/arc_package_syncable_service.h"
119 #include "components/sync_wifi/wifi_credential_syncable_service.h" 119 #include "components/sync_wifi/wifi_credential_syncable_service.h"
120 #include "components/sync_wifi/wifi_credential_syncable_service_factory.h" 120 #include "components/sync_wifi/wifi_credential_syncable_service_factory.h"
121 #endif // defined(OS_CHROMEOS) 121 #endif // defined(OS_CHROMEOS)
122 122
123 using content::BrowserThread; 123 using base::Callback;
124 using base::WeakPtr;
124 #if BUILDFLAG(ENABLE_EXTENSIONS) 125 #if BUILDFLAG(ENABLE_EXTENSIONS)
125 using browser_sync::ExtensionDataTypeController; 126 using browser_sync::ExtensionDataTypeController;
126 using browser_sync::ExtensionSettingDataTypeController; 127 using browser_sync::ExtensionSettingDataTypeController;
127 #endif // BUILDFLAG(ENABLE_EXTENSIONS) 128 #endif // BUILDFLAG(ENABLE_EXTENSIONS)
128 using browser_sync::SearchEngineDataTypeController; 129 using browser_sync::SearchEngineDataTypeController;
130 using content::BrowserThread;
129 using syncer::AsyncDirectoryTypeController; 131 using syncer::AsyncDirectoryTypeController;
132 using syncer::SyncableService;
133
134 using ServiceProvider = syncer::SyncClient::ServiceProvider;
130 135
131 namespace browser_sync { 136 namespace browser_sync {
132 137
133 namespace { 138 namespace {
139
134 #if defined(OS_WIN) 140 #if defined(OS_WIN)
135 const base::FilePath::CharType kLoopbackServerBackendFilename[] = 141 const base::FilePath::CharType kLoopbackServerBackendFilename[] =
136 FILE_PATH_LITERAL("profile.pb"); 142 FILE_PATH_LITERAL("profile.pb");
137 #endif // defined(OS_WIN) 143 #endif // defined(OS_WIN)
144
145 // The following are a set of functions to facilitate returning SyncableServices
146 // and SyncBridges. Non-UI model types sometimes have difficulties providing a
147 // WeakPtr to their integration object on the UI thread. By instead returning a
148 // Callback we are able to give model types a little bit of flexibility.
149
150 // The preferred and simpler approach is to to retrieve your corresponding
151 // WeakPtr on the UI thread, which is where GetSyncableServiceForType() and
152 // GetSyncBridgeForModelType() are invoked. A simple Callback that just captures
153 // the WeakPtr can easy be returned. Trampoline() is all that's really required
154 // for this, with WrapInCallback() and WrapInProvider() adding syntactic sugar.
155 // All UI thread model types should be able to follow this pattern.
156
157 // The other approach is capturing an intermediate thread safe object that is
158 // subsequently used on the model thread. Most model types that follow this
159 // pattern do things a little bit uniquely, but a common problem is not having
160 // a method that's going to return exactly the right type. For example, needing
161 // to up-cast or grab a WeakPtr after the model type specific functions are run
162 // in a Callback.
163
164 template <typename T>
165 T Trampoline(T arg) {
166 return arg;
167 }
168
169 template <typename T>
170 Callback<T()> WrapInCallback(T arg) {
171 return base::Bind(&Trampoline<T>, arg);
172 }
173
174 WeakPtr<SyncableService> ServiceAsWeakPtr(SyncableService* ptr) {
175 return ptr ? ptr->AsWeakPtr() : WeakPtr<SyncableService>();
176 }
177
178 ServiceProvider WrapInProvider(SyncableService* service) {
179 return WrapInCallback(ServiceAsWeakPtr(service));
180 }
181
182 template <typename T>
183 WeakPtr<SyncableService> CallbackResultAsWeakPtr(Callback<T()> callback) {
184 return ServiceAsWeakPtr(callback.Run());
185 }
186
187 template <typename T>
188 ServiceProvider WrapInWeakPtrCallback(Callback<T()> callback) {
189 return base::Bind(&CallbackResultAsWeakPtr<T>, callback);
190 }
191
138 } // namespace 192 } // namespace
139 193
140 // Chrome implementation of SyncSessionsClient. Needs to be in a separate class 194 // Chrome implementation of SyncSessionsClient. Needs to be in a separate class
141 // due to possible multiple inheritance issues, wherein ChromeSyncClient might 195 // due to possible multiple inheritance issues, wherein ChromeSyncClient might
142 // inherit from other interfaces with same methods. 196 // inherit from other interfaces with same methods.
143 class SyncSessionsClientImpl : public sync_sessions::SyncSessionsClient { 197 class SyncSessionsClientImpl : public sync_sessions::SyncSessionsClient {
144 public: 198 public:
145 explicit SyncSessionsClientImpl(Profile* profile) : profile_(profile) { 199 explicit SyncSessionsClientImpl(Profile* profile) : profile_(profile) {
146 window_delegates_getter_.reset( 200 window_delegates_getter_.reset(
147 #if defined(OS_ANDROID) 201 #if defined(OS_ANDROID)
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 346
293 favicon::FaviconService* ChromeSyncClient::GetFaviconService() { 347 favicon::FaviconService* ChromeSyncClient::GetFaviconService() {
294 DCHECK_CURRENTLY_ON(BrowserThread::UI); 348 DCHECK_CURRENTLY_ON(BrowserThread::UI);
295 return FaviconServiceFactory::GetForProfile( 349 return FaviconServiceFactory::GetForProfile(
296 profile_, ServiceAccessType::IMPLICIT_ACCESS); 350 profile_, ServiceAccessType::IMPLICIT_ACCESS);
297 } 351 }
298 352
299 history::HistoryService* ChromeSyncClient::GetHistoryService() { 353 history::HistoryService* ChromeSyncClient::GetHistoryService() {
300 DCHECK_CURRENTLY_ON(BrowserThread::UI); 354 DCHECK_CURRENTLY_ON(BrowserThread::UI);
301 return HistoryServiceFactory::GetForProfile( 355 return HistoryServiceFactory::GetForProfile(
302 profile_, ServiceAccessType::EXPLICIT_ACCESS); 356 profile_, ServiceAccessType::IMPLICIT_ACCESS);
303 } 357 }
304 358
305 bool ChromeSyncClient::HasPasswordStore() { 359 bool ChromeSyncClient::HasPasswordStore() {
306 return password_store_ != nullptr; 360 return password_store_ != nullptr;
307 } 361 }
308 362
309 autofill::PersonalDataManager* ChromeSyncClient::GetPersonalDataManager() { 363 autofill::PersonalDataManager* ChromeSyncClient::GetPersonalDataManager() {
310 DCHECK_CURRENTLY_ON(BrowserThread::UI); 364 DCHECK_CURRENTLY_ON(BrowserThread::UI);
311 return autofill::PersonalDataManagerFactory::GetForProfile(profile_); 365 return autofill::PersonalDataManagerFactory::GetForProfile(profile_);
312 } 366 }
313 367
314 base::Closure ChromeSyncClient::GetPasswordStateChangedCallback() { 368 base::Closure ChromeSyncClient::GetPasswordStateChangedCallback() {
315 return base::Bind( 369 return base::Bind(
316 &PasswordStoreFactory::OnPasswordsSyncedStatePotentiallyChanged, 370 &PasswordStoreFactory::OnPasswordsSyncedStatePotentiallyChanged,
317 base::Unretained(profile_)); 371 base::Unretained(profile_));
318 } 372 }
319 373
320 syncer::SyncApiComponentFactory::RegisterDataTypesMethod 374 syncer::SyncApiComponentFactory::RegisterDataTypesMethod
321 ChromeSyncClient::GetRegisterPlatformTypesCallback() { 375 ChromeSyncClient::GetRegisterPlatformTypesCallback() {
322 return base::Bind( 376 return base::Bind(
323 #if defined(OS_ANDROID) 377 #if defined(OS_ANDROID)
324 &ChromeSyncClient::RegisterAndroidDataTypes, 378 &ChromeSyncClient::RegisterAndroidDataTypes,
325 #else 379 #else // defined(OS_ANDROID)
326 &ChromeSyncClient::RegisterDesktopDataTypes, 380 &ChromeSyncClient::RegisterDesktopDataTypes,
327 #endif // defined(OS_ANDROID) 381 #endif // defined(OS_ANDROID)
328 weak_ptr_factory_.GetWeakPtr()); 382 weak_ptr_factory_.GetWeakPtr());
329 } 383 }
330 384
331 BookmarkUndoService* ChromeSyncClient::GetBookmarkUndoServiceIfExists() { 385 BookmarkUndoService* ChromeSyncClient::GetBookmarkUndoServiceIfExists() {
332 return BookmarkUndoServiceFactory::GetForProfileIfExists(profile_); 386 return BookmarkUndoServiceFactory::GetForProfileIfExists(profile_);
333 } 387 }
334 388
335 invalidation::InvalidationService* ChromeSyncClient::GetInvalidationService() { 389 invalidation::InvalidationService* ChromeSyncClient::GetInvalidationService() {
336 invalidation::ProfileInvalidationProvider* provider = 390 invalidation::ProfileInvalidationProvider* provider =
337 invalidation::ProfileInvalidationProviderFactory::GetForProfile(profile_); 391 invalidation::ProfileInvalidationProviderFactory::GetForProfile(profile_);
338 if (provider) 392 if (provider)
339 return provider->GetInvalidationService(); 393 return provider->GetInvalidationService();
340 return nullptr; 394 return nullptr;
341 } 395 }
342 396
343 scoped_refptr<syncer::ExtensionsActivity> 397 scoped_refptr<syncer::ExtensionsActivity>
344 ChromeSyncClient::GetExtensionsActivity() { 398 ChromeSyncClient::GetExtensionsActivity() {
345 return extensions_activity_monitor_.GetExtensionsActivity(); 399 return extensions_activity_monitor_.GetExtensionsActivity();
346 } 400 }
347 401
348 sync_sessions::SyncSessionsClient* ChromeSyncClient::GetSyncSessionsClient() { 402 sync_sessions::SyncSessionsClient* ChromeSyncClient::GetSyncSessionsClient() {
349 return sync_sessions_client_.get(); 403 return sync_sessions_client_.get();
350 } 404 }
351 405
352 base::WeakPtr<syncer::SyncableService> 406 ServiceProvider ChromeSyncClient::GetSyncableServiceForType(
353 ChromeSyncClient::GetSyncableServiceForType(syncer::ModelType type) { 407 syncer::ModelType type) {
408 DCHECK_CURRENTLY_ON(BrowserThread::UI);
354 if (!profile_) { // For tests. 409 if (!profile_) { // For tests.
355 return base::WeakPtr<syncer::SyncableService>(); 410 return WrapInProvider(nullptr);
356 } 411 }
357 switch (type) { 412 switch (type) {
358 case syncer::DEVICE_INFO: 413 case syncer::DEVICE_INFO:
359 return ProfileSyncServiceFactory::GetForProfile(profile_) 414 return WrapInProvider(ProfileSyncServiceFactory::GetForProfile(profile_)
360 ->GetDeviceInfoSyncableService() 415 ->GetDeviceInfoSyncableService());
361 ->AsWeakPtr();
362 case syncer::PREFERENCES: 416 case syncer::PREFERENCES:
363 return PrefServiceSyncableFromProfile(profile_)
364 ->GetSyncableService(syncer::PREFERENCES)
365 ->AsWeakPtr();
366 case syncer::PRIORITY_PREFERENCES: 417 case syncer::PRIORITY_PREFERENCES:
367 return PrefServiceSyncableFromProfile(profile_) 418 return WrapInProvider(
368 ->GetSyncableService(syncer::PRIORITY_PREFERENCES) 419 PrefServiceSyncableFromProfile(profile_)->GetSyncableService(type));
369 ->AsWeakPtr();
370 case syncer::AUTOFILL: 420 case syncer::AUTOFILL:
371 case syncer::AUTOFILL_PROFILE: 421 case syncer::AUTOFILL_PROFILE:
372 case syncer::AUTOFILL_WALLET_DATA: 422 case syncer::AUTOFILL_WALLET_DATA:
373 case syncer::AUTOFILL_WALLET_METADATA: { 423 case syncer::AUTOFILL_WALLET_METADATA: {
374 if (!web_data_service_) 424 if (!web_data_service_) {
375 return base::WeakPtr<syncer::SyncableService>(); 425 return WrapInProvider(nullptr);
376 if (type == syncer::AUTOFILL) { 426 } else if (type == syncer::AUTOFILL) {
377 return autofill::AutocompleteSyncableService::FromWebDataService( 427 return WrapInWeakPtrCallback(base::Bind(
378 web_data_service_.get())->AsWeakPtr(); 428 &autofill::AutocompleteSyncableService::FromWebDataService,
429 base::RetainedRef(web_data_service_)));
379 } else if (type == syncer::AUTOFILL_PROFILE) { 430 } else if (type == syncer::AUTOFILL_PROFILE) {
380 return autofill::AutofillProfileSyncableService::FromWebDataService( 431 return WrapInWeakPtrCallback(base::Bind(
381 web_data_service_.get())->AsWeakPtr(); 432 &autofill::AutofillProfileSyncableService::FromWebDataService,
433 base::RetainedRef(web_data_service_)));
382 } else if (type == syncer::AUTOFILL_WALLET_METADATA) { 434 } else if (type == syncer::AUTOFILL_WALLET_METADATA) {
383 return autofill::AutofillWalletMetadataSyncableService:: 435 return WrapInWeakPtrCallback(
384 FromWebDataService(web_data_service_.get())->AsWeakPtr(); 436 base::Bind(&autofill::AutofillWalletMetadataSyncableService::
437 FromWebDataService,
438 base::RetainedRef(web_data_service_)));
439 } else {
440 return WrapInWeakPtrCallback(base::Bind(
441 &autofill::AutofillWalletSyncableService::FromWebDataService,
442 base::RetainedRef(web_data_service_)));
385 } 443 }
386 return autofill::AutofillWalletSyncableService::FromWebDataService(
387 web_data_service_.get())->AsWeakPtr();
388 } 444 }
389 case syncer::SEARCH_ENGINES: 445 case syncer::SEARCH_ENGINES:
390 return TemplateURLServiceFactory::GetForProfile(profile_)->AsWeakPtr(); 446 return WrapInProvider(TemplateURLServiceFactory::GetForProfile(profile_));
391 #if BUILDFLAG(ENABLE_EXTENSIONS) 447 #if BUILDFLAG(ENABLE_EXTENSIONS)
392 case syncer::APPS: 448 case syncer::APPS:
393 case syncer::EXTENSIONS: 449 case syncer::EXTENSIONS:
394 return ExtensionSyncService::Get(profile_)->AsWeakPtr(); 450 return WrapInProvider(ExtensionSyncService::Get(profile_));
395 case syncer::APP_SETTINGS: 451 case syncer::APP_SETTINGS:
396 case syncer::EXTENSION_SETTINGS: 452 case syncer::EXTENSION_SETTINGS:
397 return extensions::settings_sync_util::GetSyncableService(profile_, type) 453 return extensions::settings_sync_util::GetSyncableServiceProvider(
398 ->AsWeakPtr(); 454 profile_, type);
399 #endif // BUILDFLAG(ENABLE_EXTENSIONS) 455 #endif // BUILDFLAG(ENABLE_EXTENSIONS)
400 #if BUILDFLAG(ENABLE_APP_LIST) 456 #if BUILDFLAG(ENABLE_APP_LIST)
401 case syncer::APP_LIST: 457 case syncer::APP_LIST:
402 return app_list::AppListSyncableServiceFactory::GetForProfile(profile_)-> 458 return WrapInProvider(
403 AsWeakPtr(); 459 app_list::AppListSyncableServiceFactory::GetForProfile(profile_));
404 #endif // BUILDFLAG(ENABLE_APP_LIST) 460 #endif // BUILDFLAG(ENABLE_APP_LIST)
405 #if !defined(OS_ANDROID) 461 #if !defined(OS_ANDROID)
406 case syncer::THEMES: 462 case syncer::THEMES:
407 return ThemeServiceFactory::GetForProfile(profile_)-> 463 return WrapInProvider(ThemeServiceFactory::GetForProfile(profile_)
408 GetThemeSyncableService()->AsWeakPtr(); 464 ->GetThemeSyncableService());
409 #endif // !defined(OS_ANDROID) 465 #endif // !defined(OS_ANDROID)
410 case syncer::HISTORY_DELETE_DIRECTIVES: { 466 case syncer::HISTORY_DELETE_DIRECTIVES:
467 return WrapInProvider(GetHistoryService());
468 case syncer::TYPED_URLS: {
411 history::HistoryService* history = GetHistoryService(); 469 history::HistoryService* history = GetHistoryService();
412 return history ? history->AsWeakPtr() 470 return WrapInProvider(history ? history->GetTypedUrlSyncableService()
413 : base::WeakPtr<history::HistoryService>(); 471 : nullptr);
414 }
415 case syncer::TYPED_URLS: {
416 // We request history service with explicit access here because this
417 // codepath is executed on backend thread while HistoryServiceFactory
418 // checks preference value in implicit mode and PrefService expectes calls
419 // only from UI thread.
420 history::HistoryService* history = HistoryServiceFactory::GetForProfile(
421 profile_, ServiceAccessType::EXPLICIT_ACCESS);
422 if (!history)
423 return base::WeakPtr<history::TypedUrlSyncableService>();
424 return history->GetTypedUrlSyncableService()->AsWeakPtr();
425 } 472 }
426 #if BUILDFLAG(ENABLE_SPELLCHECK) 473 #if BUILDFLAG(ENABLE_SPELLCHECK)
427 case syncer::DICTIONARY: 474 case syncer::DICTIONARY:
428 return SpellcheckServiceFactory::GetForContext(profile_)-> 475 return WrapInProvider(SpellcheckServiceFactory::GetForContext(profile_)
429 GetCustomDictionary()->AsWeakPtr(); 476 ->GetCustomDictionary());
430 #endif // BUILDFLAG(ENABLE_SPELLCHECK) 477 #endif // BUILDFLAG(ENABLE_SPELLCHECK)
431 case syncer::FAVICON_IMAGES: 478 case syncer::FAVICON_IMAGES:
432 case syncer::FAVICON_TRACKING: { 479 case syncer::FAVICON_TRACKING:
433 sync_sessions::FaviconCache* favicons = 480 return WrapInProvider(ProfileSyncServiceFactory::GetForProfile(profile_)
434 ProfileSyncServiceFactory::GetForProfile(profile_)->GetFaviconCache(); 481 ->GetFaviconCache());
435 return favicons ? favicons->AsWeakPtr()
436 : base::WeakPtr<syncer::SyncableService>();
437 }
438 #if BUILDFLAG(ENABLE_SUPERVISED_USERS) 482 #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
439 case syncer::SUPERVISED_USER_SETTINGS: 483 case syncer::SUPERVISED_USER_SETTINGS:
440 return SupervisedUserSettingsServiceFactory::GetForProfile(profile_)-> 484 return WrapInProvider(
441 AsWeakPtr(); 485 SupervisedUserSettingsServiceFactory::GetForProfile(profile_));
442 #if !defined(OS_ANDROID) 486 #if !defined(OS_ANDROID)
443 case syncer::SUPERVISED_USERS: 487 case syncer::SUPERVISED_USERS:
444 return SupervisedUserSyncServiceFactory::GetForProfile(profile_)-> 488 return WrapInProvider(
445 AsWeakPtr(); 489 SupervisedUserSyncServiceFactory::GetForProfile(profile_));
446 case syncer::SUPERVISED_USER_SHARED_SETTINGS: 490 case syncer::SUPERVISED_USER_SHARED_SETTINGS:
447 return SupervisedUserSharedSettingsServiceFactory::GetForBrowserContext( 491 return WrapInProvider(
448 profile_)->AsWeakPtr(); 492 SupervisedUserSharedSettingsServiceFactory::GetForBrowserContext(
493 profile_));
449 #endif // !defined(OS_ANDROID) 494 #endif // !defined(OS_ANDROID)
450 case syncer::SUPERVISED_USER_WHITELISTS: 495 case syncer::SUPERVISED_USER_WHITELISTS:
451 return SupervisedUserServiceFactory::GetForProfile(profile_) 496 return WrapInProvider(
452 ->GetWhitelistService() 497 SupervisedUserServiceFactory::GetForProfile(profile_)
453 ->AsWeakPtr(); 498 ->GetWhitelistService());
454 #endif // BUILDFLAG(ENABLE_SUPERVISED_USERS) 499 #endif // BUILDFLAG(ENABLE_SUPERVISED_USERS)
455 case syncer::ARTICLES: { 500 case syncer::ARTICLES: {
456 dom_distiller::DomDistillerService* service = 501 dom_distiller::DomDistillerService* distiller_service =
457 dom_distiller::DomDistillerServiceFactory::GetForBrowserContext( 502 dom_distiller::DomDistillerServiceFactory::GetForBrowserContext(
458 profile_); 503 profile_);
459 if (service) 504 return WrapInProvider(distiller_service
460 return service->GetSyncableService()->AsWeakPtr(); 505 ? distiller_service->GetSyncableService()
461 return base::WeakPtr<syncer::SyncableService>(); 506 : nullptr);
462 } 507 }
463 case syncer::SESSIONS: { 508 case syncer::SESSIONS:
464 return ProfileSyncServiceFactory::GetForProfile(profile_)-> 509 return WrapInProvider(ProfileSyncServiceFactory::GetForProfile(profile_)
465 GetSessionsSyncableService()->AsWeakPtr(); 510 ->GetSessionsSyncableService());
466 } 511 case syncer::PASSWORDS:
467 case syncer::PASSWORDS: {
468 return password_store_.get() 512 return password_store_.get()
469 ? password_store_->GetPasswordSyncableService() 513 ? base::Bind(&password_manager::PasswordStore::
470 : base::WeakPtr<syncer::SyncableService>(); 514 GetPasswordSyncableService,
471 } 515 base::RetainedRef(password_store_))
516 : WrapInProvider(nullptr);
472 #if defined(OS_CHROMEOS) 517 #if defined(OS_CHROMEOS)
473 case syncer::WIFI_CREDENTIALS: 518 case syncer::WIFI_CREDENTIALS:
474 return sync_wifi::WifiCredentialSyncableServiceFactory:: 519 return WrapInProvider(
475 GetForBrowserContext(profile_) 520 sync_wifi::WifiCredentialSyncableServiceFactory::GetForBrowserContext(
476 ->AsWeakPtr(); 521 profile_));
477 case syncer::ARC_PACKAGE: 522 case syncer::ARC_PACKAGE:
478 return arc::ArcPackageSyncableService::Get(profile_)->AsWeakPtr(); 523 return WrapInProvider(arc::ArcPackageSyncableService::Get(profile_));
479 #endif // defined(OS_CHROMEOS) 524 #endif // defined(OS_CHROMEOS)
480 default: 525 default:
481 // The following datatypes still need to be transitioned to the 526 // The following datatypes still need to be transitioned to the
482 // syncer::SyncableService API: 527 // syncer::SyncableService API:
483 // Bookmarks 528 // Bookmarks
484 NOTREACHED(); 529 NOTREACHED();
485 return base::WeakPtr<syncer::SyncableService>(); 530 return WrapInProvider(nullptr);
486 } 531 }
487 } 532 }
488 533
489 base::WeakPtr<syncer::ModelTypeSyncBridge> 534 WeakPtr<syncer::ModelTypeSyncBridge>
490 ChromeSyncClient::GetSyncBridgeForModelType(syncer::ModelType type) { 535 ChromeSyncClient::GetSyncBridgeForModelType(syncer::ModelType type) {
491 switch (type) { 536 switch (type) {
492 case syncer::DEVICE_INFO: 537 case syncer::DEVICE_INFO:
493 return ProfileSyncServiceFactory::GetForProfile(profile_) 538 return ProfileSyncServiceFactory::GetForProfile(profile_)
494 ->GetDeviceInfoSyncBridge() 539 ->GetDeviceInfoSyncBridge()
495 ->AsWeakPtr(); 540 ->AsWeakPtr();
496 case syncer::READING_LIST: 541 case syncer::READING_LIST:
497 // Reading List is only supported on iOS at the moment. 542 // Reading List is only supported on iOS at the moment.
498 NOTREACHED(); 543 NOTREACHED();
499 return base::WeakPtr<syncer::ModelTypeSyncBridge>(); 544 return WeakPtr<syncer::ModelTypeSyncBridge>();
500 case syncer::AUTOFILL: 545 case syncer::AUTOFILL:
501 return autofill::AutocompleteSyncBridge::FromWebDataService( 546 return autofill::AutocompleteSyncBridge::FromWebDataService(
502 web_data_service_.get()); 547 web_data_service_.get());
503 #if defined(OS_CHROMEOS) 548 #if defined(OS_CHROMEOS)
504 case syncer::PRINTERS: 549 case syncer::PRINTERS:
505 return chromeos::PrintersManagerFactory::GetForBrowserContext(profile_) 550 return chromeos::PrintersManagerFactory::GetForBrowserContext(profile_)
506 ->GetSyncBridge() 551 ->GetSyncBridge()
507 ->AsWeakPtr(); 552 ->AsWeakPtr();
508 #endif // defined(OS_CHROMEOS) 553 #endif // defined(OS_CHROMEOS)
509 default: 554 default:
510 NOTREACHED(); 555 NOTREACHED();
511 return base::WeakPtr<syncer::ModelTypeSyncBridge>(); 556 return WeakPtr<syncer::ModelTypeSyncBridge>();
512 } 557 }
513 } 558 }
514 559
515 scoped_refptr<syncer::ModelSafeWorker> 560 scoped_refptr<syncer::ModelSafeWorker>
516 ChromeSyncClient::CreateModelWorkerForGroup(syncer::ModelSafeGroup group) { 561 ChromeSyncClient::CreateModelWorkerForGroup(syncer::ModelSafeGroup group) {
517 DCHECK_CURRENTLY_ON(BrowserThread::UI); 562 DCHECK_CURRENTLY_ON(BrowserThread::UI);
518 switch (group) { 563 switch (group) {
519 case syncer::GROUP_DB: 564 case syncer::GROUP_DB:
520 return new syncer::BrowserThreadModelWorker( 565 return new syncer::BrowserThreadModelWorker(
521 BrowserThread::GetTaskRunnerForThread(BrowserThread::DB), 566 BrowserThread::GetTaskRunnerForThread(BrowserThread::DB),
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 sync_service->RegisterDataTypeController( 747 sync_service->RegisterDataTypeController(
703 base::MakeUnique<SupervisedUserSyncDataTypeController>( 748 base::MakeUnique<SupervisedUserSyncDataTypeController>(
704 syncer::SUPERVISED_USER_SETTINGS, error_callback, this, profile_)); 749 syncer::SUPERVISED_USER_SETTINGS, error_callback, this, profile_));
705 sync_service->RegisterDataTypeController( 750 sync_service->RegisterDataTypeController(
706 base::MakeUnique<SupervisedUserSyncDataTypeController>( 751 base::MakeUnique<SupervisedUserSyncDataTypeController>(
707 syncer::SUPERVISED_USER_WHITELISTS, error_callback, this, profile_)); 752 syncer::SUPERVISED_USER_WHITELISTS, error_callback, this, profile_));
708 #endif // BUILDFLAG(ENABLE_SUPERVISED_USERS) 753 #endif // BUILDFLAG(ENABLE_SUPERVISED_USERS)
709 } 754 }
710 755
711 } // namespace browser_sync 756 } // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698