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

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

Issue 1422773004: [sync] Abstract most ProfileSyncService //chrome deps (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pss_chrome_signin_deps
Patch Set: Fix deps Created 5 years, 1 month 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/profile_sync_service.h" 5 #include "chrome/browser/sync/profile_sync_service.h"
6 6
7 #include <cstddef> 7 #include <cstddef>
8 #include <map> 8 #include <map>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/bind_helpers.h" 13 #include "base/bind_helpers.h"
14 #include "base/callback.h" 14 #include "base/callback.h"
15 #include "base/command_line.h" 15 #include "base/command_line.h"
16 #include "base/compiler_specific.h" 16 #include "base/compiler_specific.h"
17 #include "base/files/file_util.h" 17 #include "base/files/file_util.h"
18 #include "base/logging.h" 18 #include "base/logging.h"
19 #include "base/memory/ref_counted.h" 19 #include "base/memory/ref_counted.h"
20 #include "base/metrics/histogram.h" 20 #include "base/metrics/histogram.h"
21 #include "base/prefs/json_pref_store.h"
21 #include "base/profiler/scoped_tracker.h" 22 #include "base/profiler/scoped_tracker.h"
22 #include "base/single_thread_task_runner.h" 23 #include "base/single_thread_task_runner.h"
23 #include "base/strings/string16.h" 24 #include "base/strings/string16.h"
24 #include "base/strings/stringprintf.h" 25 #include "base/strings/stringprintf.h"
25 #include "base/thread_task_runner_handle.h" 26 #include "base/thread_task_runner_handle.h"
26 #include "base/threading/thread_restrictions.h" 27 #include "base/threading/thread_restrictions.h"
27 #include "base/time/time.h" 28 #include "base/time/time.h"
28 #include "build/build_config.h" 29 #include "build/build_config.h"
29 #include "chrome/browser/chrome_notification_types.h" 30 #include "chrome/browser/chrome_notification_types.h"
30 #include "chrome/browser/invalidation/profile_invalidation_provider_factory.h"
31 #include "chrome/browser/profiles/profile.h"
32 #include "chrome/browser/sync/glue/sync_backend_host.h" 31 #include "chrome/browser/sync/glue/sync_backend_host.h"
33 #include "chrome/browser/sync/glue/sync_backend_host_impl.h" 32 #include "chrome/browser/sync/glue/sync_backend_host_impl.h"
34 #include "chrome/browser/sync/sync_type_preference_provider.h" 33 #include "chrome/browser/sync/sync_type_preference_provider.h"
35 #include "chrome/common/channel_info.h"
36 #include "chrome/common/chrome_switches.h" 34 #include "chrome/common/chrome_switches.h"
37 #include "chrome/grit/generated_resources.h" 35 #include "chrome/grit/generated_resources.h"
38 #include "components/autofill/core/common/autofill_pref_names.h" 36 #include "components/autofill/core/common/autofill_pref_names.h"
39 #include "components/history/core/browser/typed_url_data_type_controller.h" 37 #include "components/history/core/browser/typed_url_data_type_controller.h"
40 #include "components/invalidation/impl/invalidation_prefs.h" 38 #include "components/invalidation/impl/invalidation_prefs.h"
41 #include "components/invalidation/impl/profile_invalidation_provider.h"
42 #include "components/invalidation/public/invalidation_service.h" 39 #include "components/invalidation/public/invalidation_service.h"
43 #include "components/pref_registry/pref_registry_syncable.h" 40 #include "components/pref_registry/pref_registry_syncable.h"
44 #include "components/signin/core/browser/about_signin_internals.h" 41 #include "components/signin/core/browser/about_signin_internals.h"
45 #include "components/signin/core/browser/profile_oauth2_token_service.h" 42 #include "components/signin/core/browser/profile_oauth2_token_service.h"
46 #include "components/signin/core/browser/signin_manager.h" 43 #include "components/signin/core/browser/signin_manager.h"
47 #include "components/signin/core/browser/signin_metrics.h" 44 #include "components/signin/core/browser/signin_metrics.h"
48 #include "components/sync_driver/backend_migrator.h" 45 #include "components/sync_driver/backend_migrator.h"
49 #include "components/sync_driver/change_processor.h" 46 #include "components/sync_driver/change_processor.h"
50 #include "components/sync_driver/data_type_controller.h" 47 #include "components/sync_driver/data_type_controller.h"
51 #include "components/sync_driver/device_info.h" 48 #include "components/sync_driver/device_info.h"
52 #include "components/sync_driver/glue/chrome_report_unrecoverable_error.h" 49 #include "components/sync_driver/glue/chrome_report_unrecoverable_error.h"
53 #include "components/sync_driver/pref_names.h" 50 #include "components/sync_driver/pref_names.h"
54 #include "components/sync_driver/signin_manager_wrapper.h" 51 #include "components/sync_driver/signin_manager_wrapper.h"
55 #include "components/sync_driver/sync_api_component_factory.h" 52 #include "components/sync_driver/sync_api_component_factory.h"
56 #include "components/sync_driver/sync_client.h" 53 #include "components/sync_driver/sync_client.h"
57 #include "components/sync_driver/sync_driver_switches.h" 54 #include "components/sync_driver/sync_driver_switches.h"
58 #include "components/sync_driver/sync_error_controller.h" 55 #include "components/sync_driver/sync_error_controller.h"
59 #include "components/sync_driver/sync_stopped_reporter.h" 56 #include "components/sync_driver/sync_stopped_reporter.h"
60 #include "components/sync_driver/sync_util.h" 57 #include "components/sync_driver/sync_util.h"
61 #include "components/sync_driver/system_encryptor.h" 58 #include "components/sync_driver/system_encryptor.h"
62 #include "components/sync_driver/user_selectable_sync_type.h" 59 #include "components/sync_driver/user_selectable_sync_type.h"
63 #include "components/sync_sessions/favicon_cache.h" 60 #include "components/sync_sessions/favicon_cache.h"
64 #include "components/sync_sessions/sync_sessions_client.h" 61 #include "components/sync_sessions/sync_sessions_client.h"
65 #include "components/syncable_prefs/pref_service_syncable.h" 62 #include "components/syncable_prefs/pref_service_syncable.h"
66 #include "components/version_info/version_info_values.h" 63 #include "components/version_info/version_info_values.h"
67 #include "content/public/browser/browser_thread.h"
68 #include "content/public/browser/notification_details.h" 64 #include "content/public/browser/notification_details.h"
69 #include "content/public/browser/notification_service.h" 65 #include "content/public/browser/notification_service.h"
70 #include "content/public/browser/notification_source.h" 66 #include "content/public/browser/notification_source.h"
71 #include "net/cookies/cookie_monster.h" 67 #include "net/cookies/cookie_monster.h"
72 #include "net/url_request/url_request_context_getter.h" 68 #include "net/url_request/url_request_context_getter.h"
73 #include "sync/api/sync_error.h" 69 #include "sync/api/sync_error.h"
74 #include "sync/internal_api/public/configure_reason.h" 70 #include "sync/internal_api/public/configure_reason.h"
75 #include "sync/internal_api/public/http_bridge_network_resources.h" 71 #include "sync/internal_api/public/http_bridge_network_resources.h"
76 #include "sync/internal_api/public/network_resources.h" 72 #include "sync/internal_api/public/network_resources.h"
77 #include "sync/internal_api/public/sessions/type_debug_info_observer.h" 73 #include "sync/internal_api/public/sessions/type_debug_info_observer.h"
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 Profile* profile, 173 Profile* profile,
178 scoped_ptr<SigninManagerWrapper> signin_wrapper, 174 scoped_ptr<SigninManagerWrapper> signin_wrapper,
179 ProfileOAuth2TokenService* oauth2_token_service, 175 ProfileOAuth2TokenService* oauth2_token_service,
180 ProfileSyncServiceStartBehavior start_behavior, 176 ProfileSyncServiceStartBehavior start_behavior,
181 const syncer::NetworkTimeUpdateCallback& network_time_update_callback) 177 const syncer::NetworkTimeUpdateCallback& network_time_update_callback)
182 : OAuth2TokenService::Consumer("sync"), 178 : OAuth2TokenService::Consumer("sync"),
183 last_auth_error_(AuthError::AuthErrorNone()), 179 last_auth_error_(AuthError::AuthErrorNone()),
184 passphrase_required_reason_(syncer::REASON_PASSPHRASE_NOT_REQUIRED), 180 passphrase_required_reason_(syncer::REASON_PASSPHRASE_NOT_REQUIRED),
185 sync_client_(sync_client.Pass()), 181 sync_client_(sync_client.Pass()),
186 profile_(profile), 182 profile_(profile),
187 sync_prefs_(profile_->GetPrefs()), 183 sync_prefs_(sync_client_->GetPrefService()),
188 sync_service_url_( 184 sync_service_url_(
189 GetSyncServiceURL(*base::CommandLine::ForCurrentProcess(), 185 GetSyncServiceURL(*base::CommandLine::ForCurrentProcess(),
190 chrome::GetChannel())), 186 sync_client_->GetChannel())),
191 network_time_update_callback_(network_time_update_callback), 187 network_time_update_callback_(network_time_update_callback),
192 is_first_time_sync_configure_(false), 188 is_first_time_sync_configure_(false),
193 backend_initialized_(false), 189 backend_initialized_(false),
194 sync_disabled_by_admin_(false), 190 sync_disabled_by_admin_(false),
195 is_auth_in_progress_(false), 191 is_auth_in_progress_(false),
196 signin_(signin_wrapper.Pass()), 192 signin_(signin_wrapper.Pass()),
197 unrecoverable_error_reason_(ERROR_REASON_UNSET), 193 unrecoverable_error_reason_(ERROR_REASON_UNSET),
198 expect_sync_configuration_aborted_(false), 194 expect_sync_configuration_aborted_(false),
199 encrypted_types_(syncer::SyncEncryptionHandler::SensitiveTypes()), 195 encrypted_types_(syncer::SyncEncryptionHandler::SensitiveTypes()),
200 encrypt_everything_allowed_(true), 196 encrypt_everything_allowed_(true),
201 encrypt_everything_(false), 197 encrypt_everything_(false),
202 encryption_pending_(false), 198 encryption_pending_(false),
203 configure_status_(DataTypeManager::UNKNOWN), 199 configure_status_(DataTypeManager::UNKNOWN),
204 oauth2_token_service_(oauth2_token_service), 200 oauth2_token_service_(oauth2_token_service),
205 request_access_token_backoff_(&kRequestAccessTokenBackoffPolicy), 201 request_access_token_backoff_(&kRequestAccessTokenBackoffPolicy),
206 connection_status_(syncer::CONNECTION_NOT_ATTEMPTED), 202 connection_status_(syncer::CONNECTION_NOT_ATTEMPTED),
207 last_get_token_error_(GoogleServiceAuthError::AuthErrorNone()), 203 last_get_token_error_(GoogleServiceAuthError::AuthErrorNone()),
208 network_resources_(new syncer::HttpBridgeNetworkResources), 204 network_resources_(new syncer::HttpBridgeNetworkResources),
209 backend_mode_(IDLE), 205 backend_mode_(IDLE),
210 need_backup_(false), 206 need_backup_(false),
211 backup_finished_(false), 207 backup_finished_(false),
212 clear_browsing_data_(sync_client_->GetClearBrowsingDataCallback()), 208 clear_browsing_data_(sync_client_->GetClearBrowsingDataCallback()),
213 catch_up_configure_in_progress_(false), 209 catch_up_configure_in_progress_(false),
214 passphrase_prompt_triggered_by_version_(false), 210 passphrase_prompt_triggered_by_version_(false),
215 weak_factory_(this), 211 weak_factory_(this),
216 startup_controller_weak_factory_(this) { 212 startup_controller_weak_factory_(this) {
217 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 213 DCHECK(thread_checker_.CalledOnValidThread());
218 DCHECK(profile); 214 DCHECK(profile);
219 startup_controller_.reset(new browser_sync::StartupController( 215 startup_controller_.reset(new browser_sync::StartupController(
220 start_behavior, 216 start_behavior,
221 oauth2_token_service, 217 oauth2_token_service,
222 &sync_prefs_, 218 &sync_prefs_,
223 signin_.get(), 219 signin_.get(),
224 base::Bind(&ProfileSyncService::StartUpSlowBackendComponents, 220 base::Bind(&ProfileSyncService::StartUpSlowBackendComponents,
225 startup_controller_weak_factory_.GetWeakPtr(), 221 startup_controller_weak_factory_.GetWeakPtr(),
226 SYNC))); 222 SYNC)));
227 backup_rollback_controller_.reset(new sync_driver::BackupRollbackController( 223 backup_rollback_controller_.reset(new sync_driver::BackupRollbackController(
228 &sync_prefs_, 224 &sync_prefs_,
229 signin_.get(), 225 signin_.get(),
230 base::Bind(&ProfileSyncService::StartUpSlowBackendComponents, 226 base::Bind(&ProfileSyncService::StartUpSlowBackendComponents,
231 startup_controller_weak_factory_.GetWeakPtr(), 227 startup_controller_weak_factory_.GetWeakPtr(),
232 BACKUP), 228 BACKUP),
233 base::Bind(&ProfileSyncService::StartUpSlowBackendComponents, 229 base::Bind(&ProfileSyncService::StartUpSlowBackendComponents,
234 startup_controller_weak_factory_.GetWeakPtr(), 230 startup_controller_weak_factory_.GetWeakPtr(),
235 ROLLBACK))); 231 ROLLBACK)));
236 scoped_ptr<browser_sync::LocalSessionEventRouter> router( 232 scoped_ptr<browser_sync::LocalSessionEventRouter> router(
237 sync_client_->GetSyncSessionsClient()->GetLocalSessionEventRouter()); 233 sync_client_->GetSyncSessionsClient()->GetLocalSessionEventRouter());
238 local_device_ = sync_client_->GetSyncApiComponentFactory() 234 local_device_ = sync_client_->GetSyncApiComponentFactory()
239 ->CreateLocalDeviceInfoProvider(); 235 ->CreateLocalDeviceInfoProvider();
240 sync_stopped_reporter_.reset( 236 sync_stopped_reporter_.reset(new browser_sync::SyncStoppedReporter(
241 new browser_sync::SyncStoppedReporter( 237 sync_service_url_, local_device_->GetSyncUserAgent(),
242 sync_service_url_, 238 sync_client_->GetURLRequestContext(),
243 local_device_->GetSyncUserAgent(), 239 browser_sync::SyncStoppedReporter::ResultCallback()));
244 profile_->GetRequestContext(),
245 browser_sync::SyncStoppedReporter::ResultCallback()));
246 240
247 registrar_.Add(this, chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED, 241 registrar_.Add(this, chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED,
248 content::Source<Profile>(profile)); 242 content::Source<Profile>(profile));
249 sessions_sync_manager_.reset( 243 sessions_sync_manager_.reset(
250 new SessionsSyncManager(sync_client_->GetSyncSessionsClient(), profile, 244 new SessionsSyncManager(sync_client_->GetSyncSessionsClient(), profile,
251 local_device_.get(), router.Pass())); 245 local_device_.get(), router.Pass()));
252 device_info_sync_service_.reset( 246 device_info_sync_service_.reset(
253 new DeviceInfoSyncService(local_device_.get())); 247 new DeviceInfoSyncService(local_device_.get()));
254 248
255 std::string last_version = sync_prefs_.GetLastRunVersion(); 249 std::string last_version = sync_prefs_.GetLastRunVersion();
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 void ProfileSyncService::TrySyncDatatypePrefRecovery() { 345 void ProfileSyncService::TrySyncDatatypePrefRecovery() {
352 DCHECK(!IsBackendInitialized()); 346 DCHECK(!IsBackendInitialized());
353 if (!HasSyncSetupCompleted()) 347 if (!HasSyncSetupCompleted())
354 return; 348 return;
355 349
356 // There was a bug where OnUserChoseDatatypes was not properly called on 350 // There was a bug where OnUserChoseDatatypes was not properly called on
357 // configuration (see crbug.com/154940). We detect this by checking whether 351 // configuration (see crbug.com/154940). We detect this by checking whether
358 // kSyncKeepEverythingSynced has a default value. If so, and sync setup has 352 // kSyncKeepEverythingSynced has a default value. If so, and sync setup has
359 // completed, it means sync was not properly configured, so we manually 353 // completed, it means sync was not properly configured, so we manually
360 // set kSyncKeepEverythingSynced. 354 // set kSyncKeepEverythingSynced.
361 PrefService* const pref_service = profile_->GetPrefs(); 355 PrefService* const pref_service = sync_client_->GetPrefService();
362 if (!pref_service) 356 if (!pref_service)
363 return; 357 return;
364 if (GetPreferredDataTypes().Size() > 1) 358 if (GetPreferredDataTypes().Size() > 1)
365 return; 359 return;
366 360
367 const PrefService::Preference* keep_everything_synced = 361 const PrefService::Preference* keep_everything_synced =
368 pref_service->FindPreference( 362 pref_service->FindPreference(
369 sync_driver::prefs::kSyncKeepEverythingSynced); 363 sync_driver::prefs::kSyncKeepEverythingSynced);
370 // This will be false if the preference was properly set or if it's controlled 364 // This will be false if the preference was properly set or if it's controlled
371 // by policy. 365 // by policy.
372 if (!keep_everything_synced->IsDefaultValue()) 366 if (!keep_everything_synced->IsDefaultValue())
373 return; 367 return;
374 368
375 // kSyncKeepEverythingSynced was not properly set. Set it and the preferred 369 // kSyncKeepEverythingSynced was not properly set. Set it and the preferred
376 // types now, before we configure. 370 // types now, before we configure.
377 UMA_HISTOGRAM_COUNTS("Sync.DatatypePrefRecovery", 1); 371 UMA_HISTOGRAM_COUNTS("Sync.DatatypePrefRecovery", 1);
378 sync_prefs_.SetKeepEverythingSynced(true); 372 sync_prefs_.SetKeepEverythingSynced(true);
379 syncer::ModelTypeSet registered_types = GetRegisteredDataTypes(); 373 syncer::ModelTypeSet registered_types = GetRegisteredDataTypes();
380 } 374 }
381 375
382 void ProfileSyncService::StartSyncingWithServer() { 376 void ProfileSyncService::StartSyncingWithServer() {
383 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 377 DCHECK(thread_checker_.CalledOnValidThread());
384 378
385 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 379 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
386 switches::kSyncEnableClearDataOnPassphraseEncryption) && 380 switches::kSyncEnableClearDataOnPassphraseEncryption) &&
387 backend_mode_ == SYNC && 381 backend_mode_ == SYNC &&
388 sync_prefs_.GetPassphraseEncryptionTransitionInProgress()) { 382 sync_prefs_.GetPassphraseEncryptionTransitionInProgress()) {
389 BeginConfigureCatchUpBeforeClear(); 383 BeginConfigureCatchUpBeforeClear();
390 return; 384 return;
391 } 385 }
392 386
393 if (backend_) 387 if (backend_)
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 488
495 SyncCredentials credentials = GetCredentials(); 489 SyncCredentials credentials = GetCredentials();
496 490
497 if (backend_mode_ == SYNC && delete_stale_data) 491 if (backend_mode_ == SYNC && delete_stale_data)
498 ClearStaleErrors(); 492 ClearStaleErrors();
499 493
500 SyncBackendHost::HttpPostProviderFactoryGetter 494 SyncBackendHost::HttpPostProviderFactoryGetter
501 http_post_provider_factory_getter = 495 http_post_provider_factory_getter =
502 base::Bind(&syncer::NetworkResources::GetHttpPostProviderFactory, 496 base::Bind(&syncer::NetworkResources::GetHttpPostProviderFactory,
503 base::Unretained(network_resources_.get()), 497 base::Unretained(network_resources_.get()),
504 make_scoped_refptr(profile_->GetRequestContext()), 498 make_scoped_refptr(sync_client_->GetURLRequestContext()),
505 network_time_update_callback_); 499 network_time_update_callback_);
506 500
507 backend_->Initialize( 501 backend_->Initialize(
508 this, sync_thread_.Pass(), 502 this, sync_thread_.Pass(), sync_client_->GetDBThread(),
509 content::BrowserThread::GetMessageLoopProxyForThread( 503 sync_client_->GetFileThread(), GetJsEventHandler(), sync_service_url_,
510 content::BrowserThread::DB), 504 local_device_->GetSyncUserAgent(), credentials, delete_stale_data,
511 content::BrowserThread::GetMessageLoopProxyForThread(
512 content::BrowserThread::FILE),
513 GetJsEventHandler(), sync_service_url_, local_device_->GetSyncUserAgent(),
514 credentials, delete_stale_data,
515 scoped_ptr<syncer::SyncManagerFactory>( 505 scoped_ptr<syncer::SyncManagerFactory>(
516 new syncer::SyncManagerFactory(GetManagerType())) 506 new syncer::SyncManagerFactory(GetManagerType()))
517 .Pass(), 507 .Pass(),
518 MakeWeakHandle(weak_factory_.GetWeakPtr()), 508 MakeWeakHandle(weak_factory_.GetWeakPtr()),
519 base::Bind(browser_sync::ChromeReportUnrecoverableError, 509 base::Bind(browser_sync::ChromeReportUnrecoverableError,
520 chrome::GetChannel()), 510 sync_client_->GetChannel()),
521 http_post_provider_factory_getter, saved_nigori_state_.Pass()); 511 http_post_provider_factory_getter, saved_nigori_state_.Pass());
522 } 512 }
523 513
524 bool ProfileSyncService::IsEncryptedDatatypeEnabled() const { 514 bool ProfileSyncService::IsEncryptedDatatypeEnabled() const {
525 if (encryption_pending()) 515 if (encryption_pending())
526 return true; 516 return true;
527 const syncer::ModelTypeSet preferred_types = GetPreferredDataTypes(); 517 const syncer::ModelTypeSet preferred_types = GetPreferredDataTypes();
528 const syncer::ModelTypeSet encrypted_types = GetEncryptedDataTypes(); 518 const syncer::ModelTypeSet encrypted_types = GetEncryptedDataTypes();
529 DCHECK(encrypted_types.Has(syncer::PASSWORDS)); 519 DCHECK(encrypted_types.Has(syncer::PASSWORDS));
530 return !Intersection(preferred_types, encrypted_types).Empty(); 520 return !Intersection(preferred_types, encrypted_types).Empty();
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 638
649 if (backend_mode_ == ROLLBACK) 639 if (backend_mode_ == ROLLBACK)
650 ClearBrowsingDataSinceFirstSync(); 640 ClearBrowsingDataSinceFirstSync();
651 else if (backend_mode_ == SYNC) 641 else if (backend_mode_ == SYNC)
652 CheckSyncBackupIfNeeded(); 642 CheckSyncBackupIfNeeded();
653 643
654 base::FilePath sync_folder = backend_mode_ == SYNC ? 644 base::FilePath sync_folder = backend_mode_ == SYNC ?
655 base::FilePath(kSyncDataFolderName) : 645 base::FilePath(kSyncDataFolderName) :
656 base::FilePath(kSyncBackupDataFolderName); 646 base::FilePath(kSyncBackupDataFolderName);
657 647
658 invalidation::InvalidationService* invalidator = NULL; 648 invalidation::InvalidationService* invalidator =
659 if (backend_mode_ == SYNC) { 649 backend_mode_ == SYNC ? sync_client_->GetInvalidationService() : nullptr;
660 invalidation::ProfileInvalidationProvider* provider =
661 invalidation::ProfileInvalidationProviderFactory::GetForProfile(
662 profile_);
663 if (provider)
664 invalidator = provider->GetInvalidationService();
665 }
666 650
667 directory_path_ = profile_->GetPath().Append(sync_folder); 651 directory_path_ = sync_client_->GetBaseDirectory().Append(sync_folder);
668 652
669 backend_.reset( 653 backend_.reset(
670 sync_client_->GetSyncApiComponentFactory()->CreateSyncBackendHost( 654 sync_client_->GetSyncApiComponentFactory()->CreateSyncBackendHost(
671 profile_->GetDebugName(), sync_client_.get(), invalidator, 655 sync_client_->GetDebugIdentifier(), sync_client_.get(), invalidator,
672 sync_prefs_.AsWeakPtr(), sync_folder)); 656 sync_prefs_.AsWeakPtr(), sync_folder));
673 657
674 // Initialize the backend. Every time we start up a new SyncBackendHost, 658 // Initialize the backend. Every time we start up a new SyncBackendHost,
675 // we'll want to start from a fresh SyncDB, so delete any old one that might 659 // we'll want to start from a fresh SyncDB, so delete any old one that might
676 // be there. 660 // be there.
677 InitializeBackend(ShouldDeleteSyncFolder()); 661 InitializeBackend(ShouldDeleteSyncFolder());
678 662
679 UpdateFirstSyncTimePref(); 663 UpdateFirstSyncTimePref();
680 664
681 ReportPreviousSessionMemoryWarningCount(); 665 ReportPreviousSessionMemoryWarningCount();
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
1102 sync_js_controller_.AttachJsBackend(js_backend); 1086 sync_js_controller_.AttachJsBackend(js_backend);
1103 debug_info_listener_ = debug_info_listener; 1087 debug_info_listener_ = debug_info_listener;
1104 1088
1105 SigninClient* signin_client = signin_->GetOriginal()->signin_client(); 1089 SigninClient* signin_client = signin_->GetOriginal()->signin_client();
1106 DCHECK(signin_client); 1090 DCHECK(signin_client);
1107 std::string signin_scoped_device_id = 1091 std::string signin_scoped_device_id =
1108 signin_client->GetSigninScopedDeviceId(); 1092 signin_client->GetSigninScopedDeviceId();
1109 1093
1110 // Initialize local device info. 1094 // Initialize local device info.
1111 local_device_->Initialize(cache_guid, signin_scoped_device_id, 1095 local_device_->Initialize(cache_guid, signin_scoped_device_id,
1112 content::BrowserThread::GetBlockingPool()); 1096 sync_client_->GetBlockingPool());
1113 1097
1114 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK) 1098 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK)
1115 ConfigureDataTypeManager(); 1099 ConfigureDataTypeManager();
1116 else 1100 else
1117 PostBackendInitialization(); 1101 PostBackendInitialization();
1118 } 1102 }
1119 1103
1120 void ProfileSyncService::OnSyncCycleCompleted() { 1104 void ProfileSyncService::OnSyncCycleCompleted() {
1121 UpdateLastSyncedTime(); 1105 UpdateLastSyncedTime();
1122 if (IsDataTypeControllerRunning(syncer::SESSIONS)) { 1106 if (IsDataTypeControllerRunning(syncer::SESSIONS)) {
1123 // Trigger garbage collection of old sessions now that we've downloaded 1107 // Trigger garbage collection of old sessions now that we've downloaded
1124 // any new session data. 1108 // any new session data.
1125 base::ThreadTaskRunnerHandle::Get()->PostTask( 1109 base::ThreadTaskRunnerHandle::Get()->PostTask(
1126 FROM_HERE, base::Bind(&SessionsSyncManager::DoGarbageCollection, 1110 FROM_HERE, base::Bind(&SessionsSyncManager::DoGarbageCollection,
1127 base::AsWeakPtr(sessions_sync_manager_.get()))); 1111 base::AsWeakPtr(sessions_sync_manager_.get())));
1128 } 1112 }
1129 DVLOG(2) << "Notifying observers sync cycle completed"; 1113 DVLOG(2) << "Notifying observers sync cycle completed";
1130 NotifySyncCycleCompleted(); 1114 NotifySyncCycleCompleted();
1131 } 1115 }
1132 1116
1133 void ProfileSyncService::OnExperimentsChanged( 1117 void ProfileSyncService::OnExperimentsChanged(
1134 const syncer::Experiments& experiments) { 1118 const syncer::Experiments& experiments) {
1135 if (current_experiments_.Matches(experiments)) 1119 if (current_experiments_.Matches(experiments))
1136 return; 1120 return;
1137 1121
1138 current_experiments_ = experiments; 1122 current_experiments_ = experiments;
1139 1123
1140 profile()->GetPrefs()->SetBoolean( 1124 sync_client_->GetPrefService()->SetBoolean(
1141 invalidation::prefs::kInvalidationServiceUseGCMChannel, 1125 invalidation::prefs::kInvalidationServiceUseGCMChannel,
1142 experiments.gcm_invalidations_enabled); 1126 experiments.gcm_invalidations_enabled);
1143 profile()->GetPrefs()->SetBoolean( 1127 sync_client_->GetPrefService()->SetBoolean(
1144 autofill::prefs::kAutofillWalletSyncExperimentEnabled, 1128 autofill::prefs::kAutofillWalletSyncExperimentEnabled,
1145 experiments.wallet_sync_enabled); 1129 experiments.wallet_sync_enabled);
1146 } 1130 }
1147 1131
1148 void ProfileSyncService::UpdateAuthErrorState(const AuthError& error) { 1132 void ProfileSyncService::UpdateAuthErrorState(const AuthError& error) {
1149 is_auth_in_progress_ = false; 1133 is_auth_in_progress_ = false;
1150 last_auth_error_ = error; 1134 last_auth_error_ = error;
1151 1135
1152 NotifyObservers(); 1136 NotifyObservers();
1153 } 1137 }
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
1387 CleanUpBackup(); 1371 CleanUpBackup();
1388 } else if (error.action == syncer::ROLLBACK_DONE) { 1372 } else if (error.action == syncer::ROLLBACK_DONE) {
1389 // Shut down ROLLBACK backend and delete backup DB. 1373 // Shut down ROLLBACK backend and delete backup DB.
1390 ShutdownImpl(syncer::DISABLE_SYNC); 1374 ShutdownImpl(syncer::DISABLE_SYNC);
1391 sync_prefs_.ClearFirstSyncTime(); 1375 sync_prefs_.ClearFirstSyncTime();
1392 } 1376 }
1393 } 1377 }
1394 1378
1395 void ProfileSyncService::OnLocalSetPassphraseEncryption( 1379 void ProfileSyncService::OnLocalSetPassphraseEncryption(
1396 const syncer::SyncEncryptionHandler::NigoriState& nigori_state) { 1380 const syncer::SyncEncryptionHandler::NigoriState& nigori_state) {
1397 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 1381 DCHECK(thread_checker_.CalledOnValidThread());
1398 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( 1382 if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
1399 switches::kSyncEnableClearDataOnPassphraseEncryption)) 1383 switches::kSyncEnableClearDataOnPassphraseEncryption))
1400 return; 1384 return;
1401 1385
1402 // At this point the user has set a custom passphrase and we have received the 1386 // At this point the user has set a custom passphrase and we have received the
1403 // updated nigori state. Time to cache the nigori state, and catch up the 1387 // updated nigori state. Time to cache the nigori state, and catch up the
1404 // active data types. 1388 // active data types.
1405 sync_prefs_.SetSavedNigoriStateForPassphraseEncryptionTransition( 1389 sync_prefs_.SetSavedNigoriStateForPassphraseEncryptionTransition(
1406 nigori_state); 1390 nigori_state);
1407 sync_prefs_.SetPassphraseEncryptionTransitionInProgress(true); 1391 sync_prefs_.SetPassphraseEncryptionTransitionInProgress(true);
1408 BeginConfigureCatchUpBeforeClear(); 1392 BeginConfigureCatchUpBeforeClear();
1409 } 1393 }
1410 1394
1411 void ProfileSyncService::BeginConfigureCatchUpBeforeClear() { 1395 void ProfileSyncService::BeginConfigureCatchUpBeforeClear() {
1412 DCHECK_EQ(backend_mode_, SYNC); 1396 DCHECK_EQ(backend_mode_, SYNC);
1413 DCHECK(data_type_manager_); 1397 DCHECK(data_type_manager_);
1414 DCHECK(!saved_nigori_state_); 1398 DCHECK(!saved_nigori_state_);
1415 saved_nigori_state_ = 1399 saved_nigori_state_ =
1416 sync_prefs_.GetSavedNigoriStateForPassphraseEncryptionTransition().Pass(); 1400 sync_prefs_.GetSavedNigoriStateForPassphraseEncryptionTransition().Pass();
1417 const syncer::ModelTypeSet types = GetActiveDataTypes(); 1401 const syncer::ModelTypeSet types = GetActiveDataTypes();
1418 catch_up_configure_in_progress_ = true; 1402 catch_up_configure_in_progress_ = true;
1419 data_type_manager_->Configure(types, syncer::CONFIGURE_REASON_CATCH_UP); 1403 data_type_manager_->Configure(types, syncer::CONFIGURE_REASON_CATCH_UP);
1420 } 1404 }
1421 1405
1422 void ProfileSyncService::ClearAndRestartSyncForPassphraseEncryption() { 1406 void ProfileSyncService::ClearAndRestartSyncForPassphraseEncryption() {
1423 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 1407 DCHECK(thread_checker_.CalledOnValidThread());
1424 backend_->ClearServerData(base::Bind( 1408 backend_->ClearServerData(base::Bind(
1425 &ProfileSyncService::OnClearServerDataDone, weak_factory_.GetWeakPtr())); 1409 &ProfileSyncService::OnClearServerDataDone, weak_factory_.GetWeakPtr()));
1426 } 1410 }
1427 1411
1428 void ProfileSyncService::OnClearServerDataDone() { 1412 void ProfileSyncService::OnClearServerDataDone() {
1429 DCHECK(sync_prefs_.GetPassphraseEncryptionTransitionInProgress()); 1413 DCHECK(sync_prefs_.GetPassphraseEncryptionTransitionInProgress());
1430 sync_prefs_.SetPassphraseEncryptionTransitionInProgress(false); 1414 sync_prefs_.SetPassphraseEncryptionTransitionInProgress(false);
1431 1415
1432 // Call to ClearServerData generates new keystore key on the server. This 1416 // Call to ClearServerData generates new keystore key on the server. This
1433 // makes keystore bootstrap token invalid. Let's clear it from preferences. 1417 // makes keystore bootstrap token invalid. Let's clear it from preferences.
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
1893 bool restart = false; 1877 bool restart = false;
1894 if (!data_type_manager_) { 1878 if (!data_type_manager_) {
1895 restart = true; 1879 restart = true;
1896 data_type_manager_.reset( 1880 data_type_manager_.reset(
1897 sync_client_->GetSyncApiComponentFactory()->CreateDataTypeManager( 1881 sync_client_->GetSyncApiComponentFactory()->CreateDataTypeManager(
1898 debug_info_listener_, &data_type_controllers_, this, backend_.get(), 1882 debug_info_listener_, &data_type_controllers_, this, backend_.get(),
1899 this)); 1883 this));
1900 1884
1901 // We create the migrator at the same time. 1885 // We create the migrator at the same time.
1902 migrator_.reset(new browser_sync::BackendMigrator( 1886 migrator_.reset(new browser_sync::BackendMigrator(
1903 profile_->GetDebugName(), GetUserShare(), this, 1887 sync_client_->GetDebugIdentifier(), GetUserShare(), this,
1904 data_type_manager_.get(), 1888 data_type_manager_.get(),
1905 base::Bind(&ProfileSyncService::StartSyncingWithServer, 1889 base::Bind(&ProfileSyncService::StartSyncingWithServer,
1906 base::Unretained(this)))); 1890 base::Unretained(this))));
1907 } 1891 }
1908 1892
1909 syncer::ModelTypeSet types; 1893 syncer::ModelTypeSet types;
1910 syncer::ConfigureReason reason = syncer::CONFIGURE_REASON_UNKNOWN; 1894 syncer::ConfigureReason reason = syncer::CONFIGURE_REASON_UNKNOWN;
1911 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK) { 1895 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK) {
1912 types = syncer::BackupTypes(); 1896 types = syncer::BackupTypes();
1913 reason = syncer::CONFIGURE_REASON_BACKUP_ROLLBACK; 1897 reason = syncer::CONFIGURE_REASON_BACKUP_ROLLBACK;
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after
2426 return sync_prefs_.IsSyncRequested(); 2410 return sync_prefs_.IsSyncRequested();
2427 } 2411 }
2428 2412
2429 SigninManagerBase* ProfileSyncService::signin() const { 2413 SigninManagerBase* ProfileSyncService::signin() const {
2430 if (!signin_) 2414 if (!signin_)
2431 return NULL; 2415 return NULL;
2432 return signin_->GetOriginal(); 2416 return signin_->GetOriginal();
2433 } 2417 }
2434 2418
2435 void ProfileSyncService::RequestStart() { 2419 void ProfileSyncService::RequestStart() {
2436 DCHECK(profile_); 2420 DCHECK(sync_client_);
2437 sync_prefs_.SetSyncRequested(true); 2421 sync_prefs_.SetSyncRequested(true);
2438 DCHECK(!signin_.get() || signin_->GetOriginal()->IsAuthenticated()); 2422 DCHECK(!signin_.get() || signin_->GetOriginal()->IsAuthenticated());
2439 startup_controller_->TryStart(); 2423 startup_controller_->TryStart();
2440 } 2424 }
2441 2425
2442 void ProfileSyncService::ReconfigureDatatypeManager() { 2426 void ProfileSyncService::ReconfigureDatatypeManager() {
2443 // If we haven't initialized yet, don't configure the DTM as it could cause 2427 // If we haven't initialized yet, don't configure the DTM as it could cause
2444 // association to start before a Directory has even been created. 2428 // association to start before a Directory has even been created.
2445 if (backend_initialized_) { 2429 if (backend_initialized_) {
2446 DCHECK(backend_.get()); 2430 DCHECK(backend_.get());
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
2575 if (!last_backup_time_ && 2559 if (!last_backup_time_ &&
2576 (last_synced_time.is_null() || 2560 (last_synced_time.is_null() ||
2577 base::Time::Now() - last_synced_time >= 2561 base::Time::Now() - last_synced_time >=
2578 base::TimeDelta::FromDays(1))) { 2562 base::TimeDelta::FromDays(1))) {
2579 // If sync thread is set, need to serialize check on sync thread after 2563 // If sync thread is set, need to serialize check on sync thread after
2580 // closing backup DB. 2564 // closing backup DB.
2581 if (sync_thread_) { 2565 if (sync_thread_) {
2582 sync_thread_->task_runner()->PostTask( 2566 sync_thread_->task_runner()->PostTask(
2583 FROM_HERE, 2567 FROM_HERE,
2584 base::Bind(syncer::CheckSyncDbLastModifiedTime, 2568 base::Bind(syncer::CheckSyncDbLastModifiedTime,
2585 profile_->GetPath().Append(kSyncBackupDataFolderName), 2569 sync_client_->GetBaseDirectory().Append(
2570 kSyncBackupDataFolderName),
2586 base::ThreadTaskRunnerHandle::Get(), 2571 base::ThreadTaskRunnerHandle::Get(),
2587 base::Bind(&ProfileSyncService::CheckSyncBackupCallback, 2572 base::Bind(&ProfileSyncService::CheckSyncBackupCallback,
2588 weak_factory_.GetWeakPtr()))); 2573 weak_factory_.GetWeakPtr())));
2589 } else { 2574 } else {
2590 content::BrowserThread::PostTask( 2575 sync_client_->GetFileThread()->PostTask(
2591 content::BrowserThread::FILE, FROM_HERE, 2576 FROM_HERE,
2592 base::Bind(syncer::CheckSyncDbLastModifiedTime, 2577 base::Bind(syncer::CheckSyncDbLastModifiedTime,
2593 profile_->GetPath().Append(kSyncBackupDataFolderName), 2578 sync_client_->GetBaseDirectory().Append(
2579 kSyncBackupDataFolderName),
2594 base::ThreadTaskRunnerHandle::Get(), 2580 base::ThreadTaskRunnerHandle::Get(),
2595 base::Bind(&ProfileSyncService::CheckSyncBackupCallback, 2581 base::Bind(&ProfileSyncService::CheckSyncBackupCallback,
2596 weak_factory_.GetWeakPtr()))); 2582 weak_factory_.GetWeakPtr())));
2597 } 2583 }
2598 } 2584 }
2599 #endif 2585 #endif
2600 } 2586 }
2601 2587
2602 void ProfileSyncService::CheckSyncBackupCallback(base::Time backup_time) { 2588 void ProfileSyncService::CheckSyncBackupCallback(base::Time backup_time) {
2603 last_backup_time_.reset(new base::Time(backup_time)); 2589 last_backup_time_.reset(new base::Time(backup_time));
2604 2590
2605 DCHECK(device_info_sync_service_); 2591 DCHECK(device_info_sync_service_);
2606 device_info_sync_service_->UpdateLocalDeviceBackupTime(*last_backup_time_); 2592 device_info_sync_service_->UpdateLocalDeviceBackupTime(*last_backup_time_);
2607 } 2593 }
2608 2594
2609 void ProfileSyncService::TryStartSyncAfterBackup() { 2595 void ProfileSyncService::TryStartSyncAfterBackup() {
2610 startup_controller_->Reset(GetRegisteredDataTypes()); 2596 startup_controller_->Reset(GetRegisteredDataTypes());
2611 startup_controller_->TryStart(); 2597 startup_controller_->TryStart();
2612 } 2598 }
2613 2599
2614 void ProfileSyncService::CleanUpBackup() { 2600 void ProfileSyncService::CleanUpBackup() {
2615 sync_prefs_.ClearFirstSyncTime(); 2601 sync_prefs_.ClearFirstSyncTime();
2616 profile_->GetIOTaskRunner()->PostTask( 2602
2617 FROM_HERE, 2603 // Use the client's base directory to get the blocking task runner to use in
2618 base::Bind(base::IgnoreResult(base::DeleteFile), 2604 // order to ensure ordering between the tasks posted by different invocations
2619 profile_->GetPath().Append(kSyncBackupDataFolderName), 2605 // of this method.
2620 true)); 2606 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner =
2607 JsonPrefStore::GetTaskRunnerForFile(sync_client_->GetBaseDirectory(),
2608 sync_client_->GetBlockingPool());
2609 blocking_task_runner->PostTask(
2610 FROM_HERE, base::Bind(base::IgnoreResult(base::DeleteFile),
2611 sync_client_->GetBaseDirectory().Append(
2612 kSyncBackupDataFolderName),
2613 true));
2621 } 2614 }
2622 2615
2623 bool ProfileSyncService::NeedBackup() const { 2616 bool ProfileSyncService::NeedBackup() const {
2624 return need_backup_; 2617 return need_backup_;
2625 } 2618 }
2626 2619
2627 base::Time ProfileSyncService::GetDeviceBackupTimeForTesting() const { 2620 base::Time ProfileSyncService::GetDeviceBackupTimeForTesting() const {
2628 return device_info_sync_service_->GetLocalDeviceBackupTime(); 2621 return device_info_sync_service_->GetLocalDeviceBackupTime();
2629 } 2622 }
2630 2623
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
2701 } 2694 }
2702 2695
2703 std::string ProfileSyncService::unrecoverable_error_message() const { 2696 std::string ProfileSyncService::unrecoverable_error_message() const {
2704 return unrecoverable_error_message_; 2697 return unrecoverable_error_message_;
2705 } 2698 }
2706 2699
2707 tracked_objects::Location ProfileSyncService::unrecoverable_error_location() 2700 tracked_objects::Location ProfileSyncService::unrecoverable_error_location()
2708 const { 2701 const {
2709 return unrecoverable_error_location_; 2702 return unrecoverable_error_location_;
2710 } 2703 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698