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

Side by Side Diff: ios/chrome/browser/sync/ios_chrome_sync_client.mm

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
« no previous file with comments | « ios/chrome/browser/sync/ios_chrome_sync_client.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "ios/chrome/browser/sync/ios_chrome_sync_client.h" 5 #include "ios/chrome/browser/sync/ios_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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 #include "ios/chrome/browser/undo/bookmark_undo_service_factory.h" 62 #include "ios/chrome/browser/undo/bookmark_undo_service_factory.h"
63 #include "ios/chrome/browser/web_data_service_factory.h" 63 #include "ios/chrome/browser/web_data_service_factory.h"
64 #include "ios/chrome/common/channel_info.h" 64 #include "ios/chrome/common/channel_info.h"
65 #include "ios/web/public/web_thread.h" 65 #include "ios/web/public/web_thread.h"
66 #include "ui/base/device_form_factor.h" 66 #include "ui/base/device_form_factor.h"
67 67
68 #if !defined(__has_feature) || !__has_feature(objc_arc) 68 #if !defined(__has_feature) || !__has_feature(objc_arc)
69 #error "This file requires ARC support." 69 #error "This file requires ARC support."
70 #endif 70 #endif
71 71
72 using autofill::AutocompleteSyncableService;
73 using autofill::AutofillProfileSyncableService;
74 using autofill::AutofillWalletMetadataSyncableService;
75 using autofill::AutofillWalletSyncableService;
76 using base::Callback;
77 using base::WeakPtr;
78 using syncer::SyncableService;
79
80 using ServiceProvider = syncer::SyncClient::ServiceProvider;
81
72 namespace { 82 namespace {
73 83
84 template <typename T>
85 T Trampoline(T arg) {
86 return arg;
87 }
88
89 template <typename T>
90 Callback<T()> WrapInCallback(T arg) {
91 return base::Bind(&Trampoline<T>, arg);
92 }
93
94 WeakPtr<SyncableService> ServiceAsWeakPtr(SyncableService* ptr) {
95 return ptr ? ptr->AsWeakPtr() : WeakPtr<SyncableService>();
96 }
97
98 ServiceProvider WrapInProvider(SyncableService* service) {
99 return WrapInCallback(ServiceAsWeakPtr(service));
100 }
101
102 template <typename T>
103 WeakPtr<SyncableService> CallbackResultAsWeakPtr(Callback<T()> callback) {
104 return ServiceAsWeakPtr(callback.Run());
105 }
106
107 template <typename T>
108 ServiceProvider WrapInWeakPtrCallback(Callback<T()> callback) {
109 return base::Bind(&CallbackResultAsWeakPtr<T>, callback);
110 }
111
74 // iOS implementation of SyncSessionsClient. Needs to be in a separate class 112 // iOS implementation of SyncSessionsClient. Needs to be in a separate class
75 // due to possible multiple inheritance issues, wherein IOSChromeSyncClient 113 // due to possible multiple inheritance issues, wherein IOSChromeSyncClient
76 // might inherit from other interfaces with same methods. 114 // might inherit from other interfaces with same methods.
77 class SyncSessionsClientImpl : public sync_sessions::SyncSessionsClient { 115 class SyncSessionsClientImpl : public sync_sessions::SyncSessionsClient {
78 public: 116 public:
79 explicit SyncSessionsClientImpl(ios::ChromeBrowserState* browser_state) 117 explicit SyncSessionsClientImpl(ios::ChromeBrowserState* browser_state)
80 : browser_state_(browser_state), 118 : browser_state_(browser_state),
81 window_delegates_getter_( 119 window_delegates_getter_(
82 base::MakeUnique<TabModelSyncedWindowDelegatesGetter>()), 120 base::MakeUnique<TabModelSyncedWindowDelegatesGetter>()),
83 local_session_event_router_( 121 local_session_event_router_(
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 scoped_refptr<syncer::ExtensionsActivity> 293 scoped_refptr<syncer::ExtensionsActivity>
256 IOSChromeSyncClient::GetExtensionsActivity() { 294 IOSChromeSyncClient::GetExtensionsActivity() {
257 return nullptr; 295 return nullptr;
258 } 296 }
259 297
260 sync_sessions::SyncSessionsClient* 298 sync_sessions::SyncSessionsClient*
261 IOSChromeSyncClient::GetSyncSessionsClient() { 299 IOSChromeSyncClient::GetSyncSessionsClient() {
262 return sync_sessions_client_.get(); 300 return sync_sessions_client_.get();
263 } 301 }
264 302
265 base::WeakPtr<syncer::SyncableService> 303 ServiceProvider IOSChromeSyncClient::GetSyncableServiceForType(
266 IOSChromeSyncClient::GetSyncableServiceForType(syncer::ModelType type) { 304 syncer::ModelType type) {
267 switch (type) { 305 switch (type) {
268 case syncer::DEVICE_INFO: 306 case syncer::DEVICE_INFO:
269 return IOSChromeProfileSyncServiceFactory::GetForBrowserState( 307 return WrapInProvider(
270 browser_state_) 308 IOSChromeProfileSyncServiceFactory::GetForBrowserState(browser_state_)
271 ->GetDeviceInfoSyncableService() 309 ->GetDeviceInfoSyncableService());
272 ->AsWeakPtr();
273 case syncer::PREFERENCES: 310 case syncer::PREFERENCES:
274 return browser_state_->GetSyncablePrefs()
275 ->GetSyncableService(syncer::PREFERENCES)
276 ->AsWeakPtr();
277 case syncer::PRIORITY_PREFERENCES: 311 case syncer::PRIORITY_PREFERENCES:
278 return browser_state_->GetSyncablePrefs() 312 return WrapInProvider(
279 ->GetSyncableService(syncer::PRIORITY_PREFERENCES) 313 browser_state_->GetSyncablePrefs()->GetSyncableService(type));
280 ->AsWeakPtr();
281 case syncer::AUTOFILL: 314 case syncer::AUTOFILL:
282 case syncer::AUTOFILL_PROFILE: 315 case syncer::AUTOFILL_PROFILE:
283 case syncer::AUTOFILL_WALLET_DATA: 316 case syncer::AUTOFILL_WALLET_DATA:
284 case syncer::AUTOFILL_WALLET_METADATA: { 317 case syncer::AUTOFILL_WALLET_METADATA: {
285 if (!web_data_service_) 318 if (!web_data_service_)
286 return base::WeakPtr<syncer::SyncableService>(); 319 return WrapInProvider(nullptr);
287 if (type == syncer::AUTOFILL) { 320 if (type == syncer::AUTOFILL) {
288 return autofill::AutocompleteSyncableService::FromWebDataService( 321 return WrapInWeakPtrCallback(
289 web_data_service_.get()) 322 base::Bind(&AutocompleteSyncableService::FromWebDataService,
290 ->AsWeakPtr(); 323 base::RetainedRef(web_data_service_)));
291 } else if (type == syncer::AUTOFILL_PROFILE) { 324 } else if (type == syncer::AUTOFILL_PROFILE) {
292 return autofill::AutofillProfileSyncableService::FromWebDataService( 325 return WrapInWeakPtrCallback(
293 web_data_service_.get()) 326 base::Bind(&AutofillProfileSyncableService::FromWebDataService,
294 ->AsWeakPtr(); 327 base::RetainedRef(web_data_service_)));
295 } else if (type == syncer::AUTOFILL_WALLET_METADATA) { 328 } else if (type == syncer::AUTOFILL_WALLET_METADATA) {
296 return autofill::AutofillWalletMetadataSyncableService:: 329 return WrapInWeakPtrCallback(base::Bind(
297 FromWebDataService(web_data_service_.get()) 330 &AutofillWalletMetadataSyncableService::FromWebDataService,
298 ->AsWeakPtr(); 331 base::RetainedRef(web_data_service_)));
299 } 332 }
300 return autofill::AutofillWalletSyncableService::FromWebDataService( 333 return WrapInWeakPtrCallback(
301 web_data_service_.get()) 334 base::Bind(&AutofillWalletSyncableService::FromWebDataService,
302 ->AsWeakPtr(); 335 base::RetainedRef(web_data_service_)));
303 } 336 }
304 case syncer::HISTORY_DELETE_DIRECTIVES: { 337 case syncer::HISTORY_DELETE_DIRECTIVES: {
305 history::HistoryService* history = 338 return WrapInProvider(ios::HistoryServiceFactory::GetForBrowserState(
306 ios::HistoryServiceFactory::GetForBrowserState( 339 browser_state_, ServiceAccessType::EXPLICIT_ACCESS));
307 browser_state_, ServiceAccessType::EXPLICIT_ACCESS);
308 return history ? history->AsWeakPtr()
309 : base::WeakPtr<history::HistoryService>();
310 } 340 }
311 case syncer::TYPED_URLS: { 341 case syncer::TYPED_URLS: {
312 history::HistoryService* history = 342 history::HistoryService* history =
313 ios::HistoryServiceFactory::GetForBrowserState( 343 ios::HistoryServiceFactory::GetForBrowserState(
314 browser_state_, ServiceAccessType::EXPLICIT_ACCESS); 344 browser_state_, ServiceAccessType::EXPLICIT_ACCESS);
315 return history ? history->GetTypedUrlSyncableService()->AsWeakPtr() 345 return WrapInProvider(history ? history->GetTypedUrlSyncableService()
316 : base::WeakPtr<syncer::SyncableService>(); 346 : nullptr);
317 } 347 }
318 case syncer::FAVICON_IMAGES: 348 case syncer::FAVICON_IMAGES:
319 case syncer::FAVICON_TRACKING: { 349 case syncer::FAVICON_TRACKING: {
320 sync_sessions::FaviconCache* favicons = 350 return WrapInProvider(
321 IOSChromeProfileSyncServiceFactory::GetForBrowserState(browser_state_) 351 IOSChromeProfileSyncServiceFactory::GetForBrowserState(browser_state_)
322 ->GetFaviconCache(); 352 ->GetFaviconCache());
323 return favicons ? favicons->AsWeakPtr()
324 : base::WeakPtr<syncer::SyncableService>();
325 } 353 }
326 case syncer::ARTICLES: { 354 case syncer::ARTICLES: {
327 // DomDistillerService is used in iOS ReadingList. The distilled articles 355 // DomDistillerService is used in iOS ReadingList. The distilled articles
328 // are saved separately and must not be synced. 356 // are saved separately and must not be synced.
329 // Add a not reached to avoid having ARTICLES sync be enabled silently. 357 // Add a not reached to avoid having ARTICLES sync be enabled silently.
330 NOTREACHED(); 358 NOTREACHED();
331 return base::WeakPtr<syncer::SyncableService>(); 359 return WrapInProvider(nullptr);
332 } 360 }
333 case syncer::SESSIONS: { 361 case syncer::SESSIONS: {
334 return IOSChromeProfileSyncServiceFactory::GetForBrowserState( 362 return WrapInProvider(
335 browser_state_) 363 IOSChromeProfileSyncServiceFactory::GetForBrowserState(browser_state_)
336 ->GetSessionsSyncableService() 364 ->GetSessionsSyncableService());
337 ->AsWeakPtr();
338 } 365 }
339 case syncer::PASSWORDS: { 366 case syncer::PASSWORDS: {
340 return password_store_ ? password_store_->GetPasswordSyncableService() 367 return password_store_ ? base::Bind(&password_manager::PasswordStore::
341 : base::WeakPtr<syncer::SyncableService>(); 368 GetPasswordSyncableService,
369 base::RetainedRef(password_store_))
370 : WrapInProvider(nullptr);
342 } 371 }
343 default: 372 default:
344 NOTREACHED(); 373 NOTREACHED();
345 return base::WeakPtr<syncer::SyncableService>(); 374 return WrapInProvider(nullptr);
346 } 375 }
347 } 376 }
348 377
349 base::WeakPtr<syncer::ModelTypeSyncBridge> 378 base::WeakPtr<syncer::ModelTypeSyncBridge>
350 IOSChromeSyncClient::GetSyncBridgeForModelType(syncer::ModelType type) { 379 IOSChromeSyncClient::GetSyncBridgeForModelType(syncer::ModelType type) {
351 switch (type) { 380 switch (type) {
352 case syncer::DEVICE_INFO: 381 case syncer::DEVICE_INFO:
353 return IOSChromeProfileSyncServiceFactory::GetForBrowserState( 382 return IOSChromeProfileSyncServiceFactory::GetForBrowserState(
354 browser_state_) 383 browser_state_)
355 ->GetDeviceInfoSyncBridge() 384 ->GetDeviceInfoSyncBridge()
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 IOSChromeProfileSyncServiceFactory::GetForBrowserState(browser_state); 456 IOSChromeProfileSyncServiceFactory::GetForBrowserState(browser_state);
428 if (profile_sync_service != nullptr) { 457 if (profile_sync_service != nullptr) {
429 const syncer::DeviceInfoTracker* tracker = 458 const syncer::DeviceInfoTracker* tracker =
430 profile_sync_service->GetDeviceInfoTracker(); 459 profile_sync_service->GetDeviceInfoTracker();
431 if (tracker != nullptr) { 460 if (tracker != nullptr) {
432 trackers->push_back(tracker); 461 trackers->push_back(tracker);
433 } 462 }
434 } 463 }
435 } 464 }
436 } 465 }
OLDNEW
« no previous file with comments | « ios/chrome/browser/sync/ios_chrome_sync_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698