OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |