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

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: Response to review 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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 error.action != syncer::ROLLBACK_DONE && 167 error.action != syncer::ROLLBACK_DONE &&
172 error.action != syncer::RESET_LOCAL_SYNC_DATA); 168 error.action != syncer::RESET_LOCAL_SYNC_DATA);
173 } 169 }
174 170
175 ProfileSyncService::ProfileSyncService( 171 ProfileSyncService::ProfileSyncService(
176 scoped_ptr<sync_driver::SyncClient> sync_client, 172 scoped_ptr<sync_driver::SyncClient> sync_client,
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,
178 base::FilePath base_directory,
179 net::URLRequestContextGetter* url_request_context,
Nicolas Zea 2015/11/02 19:36:56 The url request context getter is actually RefCoun
blundell 2015/11/03 12:37:32 Done.
180 std::string debug_identifier,
181 version_info::Channel channel,
182 scoped_refptr<base::SingleThreadTaskRunner> db_thread,
183 scoped_refptr<base::SingleThreadTaskRunner> file_thread,
184 base::SequencedWorkerPool* blocking_pool)
182 : OAuth2TokenService::Consumer("sync"), 185 : OAuth2TokenService::Consumer("sync"),
183 last_auth_error_(AuthError::AuthErrorNone()), 186 last_auth_error_(AuthError::AuthErrorNone()),
184 passphrase_required_reason_(syncer::REASON_PASSPHRASE_NOT_REQUIRED), 187 passphrase_required_reason_(syncer::REASON_PASSPHRASE_NOT_REQUIRED),
185 sync_client_(sync_client.Pass()), 188 sync_client_(sync_client.Pass()),
186 profile_(profile), 189 sync_prefs_(sync_client_->GetPrefService()),
187 sync_prefs_(profile_->GetPrefs()),
188 sync_service_url_( 190 sync_service_url_(
189 GetSyncServiceURL(*base::CommandLine::ForCurrentProcess(), 191 GetSyncServiceURL(*base::CommandLine::ForCurrentProcess(), channel)),
190 chrome::GetChannel())),
191 network_time_update_callback_(network_time_update_callback), 192 network_time_update_callback_(network_time_update_callback),
193 base_directory_(base_directory),
194 url_request_context_(url_request_context),
195 debug_identifier_(debug_identifier),
196 channel_(channel),
197 db_thread_(db_thread),
198 file_thread_(file_thread),
199 blocking_pool_(blocking_pool),
192 is_first_time_sync_configure_(false), 200 is_first_time_sync_configure_(false),
193 backend_initialized_(false), 201 backend_initialized_(false),
194 sync_disabled_by_admin_(false), 202 sync_disabled_by_admin_(false),
195 is_auth_in_progress_(false), 203 is_auth_in_progress_(false),
196 signin_(signin_wrapper.Pass()), 204 signin_(signin_wrapper.Pass()),
197 unrecoverable_error_reason_(ERROR_REASON_UNSET), 205 unrecoverable_error_reason_(ERROR_REASON_UNSET),
198 expect_sync_configuration_aborted_(false), 206 expect_sync_configuration_aborted_(false),
199 encrypted_types_(syncer::SyncEncryptionHandler::SensitiveTypes()), 207 encrypted_types_(syncer::SyncEncryptionHandler::SensitiveTypes()),
200 encrypt_everything_allowed_(true), 208 encrypt_everything_allowed_(true),
201 encrypt_everything_(false), 209 encrypt_everything_(false),
202 encryption_pending_(false), 210 encryption_pending_(false),
203 configure_status_(DataTypeManager::UNKNOWN), 211 configure_status_(DataTypeManager::UNKNOWN),
204 oauth2_token_service_(oauth2_token_service), 212 oauth2_token_service_(oauth2_token_service),
205 request_access_token_backoff_(&kRequestAccessTokenBackoffPolicy), 213 request_access_token_backoff_(&kRequestAccessTokenBackoffPolicy),
206 connection_status_(syncer::CONNECTION_NOT_ATTEMPTED), 214 connection_status_(syncer::CONNECTION_NOT_ATTEMPTED),
207 last_get_token_error_(GoogleServiceAuthError::AuthErrorNone()), 215 last_get_token_error_(GoogleServiceAuthError::AuthErrorNone()),
208 network_resources_(new syncer::HttpBridgeNetworkResources), 216 network_resources_(new syncer::HttpBridgeNetworkResources),
209 backend_mode_(IDLE), 217 backend_mode_(IDLE),
210 need_backup_(false), 218 need_backup_(false),
211 backup_finished_(false), 219 backup_finished_(false),
212 catch_up_configure_in_progress_(false), 220 catch_up_configure_in_progress_(false),
213 passphrase_prompt_triggered_by_version_(false), 221 passphrase_prompt_triggered_by_version_(false),
214 weak_factory_(this), 222 weak_factory_(this),
215 startup_controller_weak_factory_(this) { 223 startup_controller_weak_factory_(this) {
216 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 224 DCHECK(thread_checker_.CalledOnValidThread());
217 DCHECK(profile); 225 DCHECK(sync_client_);
218 startup_controller_.reset(new browser_sync::StartupController( 226 startup_controller_.reset(new browser_sync::StartupController(
219 start_behavior, 227 start_behavior,
220 oauth2_token_service, 228 oauth2_token_service,
221 &sync_prefs_, 229 &sync_prefs_,
222 signin_.get(), 230 signin_.get(),
223 base::Bind(&ProfileSyncService::StartUpSlowBackendComponents, 231 base::Bind(&ProfileSyncService::StartUpSlowBackendComponents,
224 startup_controller_weak_factory_.GetWeakPtr(), 232 startup_controller_weak_factory_.GetWeakPtr(),
225 SYNC))); 233 SYNC)));
226 backup_rollback_controller_.reset(new sync_driver::BackupRollbackController( 234 backup_rollback_controller_.reset(new sync_driver::BackupRollbackController(
227 &sync_prefs_, 235 &sync_prefs_,
228 signin_.get(), 236 signin_.get(),
229 base::Bind(&ProfileSyncService::StartUpSlowBackendComponents, 237 base::Bind(&ProfileSyncService::StartUpSlowBackendComponents,
230 startup_controller_weak_factory_.GetWeakPtr(), 238 startup_controller_weak_factory_.GetWeakPtr(),
231 BACKUP), 239 BACKUP),
232 base::Bind(&ProfileSyncService::StartUpSlowBackendComponents, 240 base::Bind(&ProfileSyncService::StartUpSlowBackendComponents,
233 startup_controller_weak_factory_.GetWeakPtr(), 241 startup_controller_weak_factory_.GetWeakPtr(),
234 ROLLBACK))); 242 ROLLBACK)));
235 scoped_ptr<browser_sync::LocalSessionEventRouter> router( 243 scoped_ptr<browser_sync::LocalSessionEventRouter> router(
236 sync_client_->GetSyncSessionsClient()->GetLocalSessionEventRouter()); 244 sync_client_->GetSyncSessionsClient()->GetLocalSessionEventRouter());
237 local_device_ = sync_client_->GetSyncApiComponentFactory() 245 local_device_ = sync_client_->GetSyncApiComponentFactory()
238 ->CreateLocalDeviceInfoProvider(); 246 ->CreateLocalDeviceInfoProvider();
239 sync_stopped_reporter_.reset( 247 sync_stopped_reporter_.reset(new browser_sync::SyncStoppedReporter(
240 new browser_sync::SyncStoppedReporter( 248 sync_service_url_, local_device_->GetSyncUserAgent(),
241 sync_service_url_, 249 url_request_context_,
242 local_device_->GetSyncUserAgent(), 250 browser_sync::SyncStoppedReporter::ResultCallback()));
243 profile_->GetRequestContext(),
244 browser_sync::SyncStoppedReporter::ResultCallback()));
245 251
246 registrar_.Add(this, chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED, 252 registrar_.Add(this, chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED,
247 content::Source<Profile>(profile)); 253 content::Source<Profile>(profile));
248 sessions_sync_manager_.reset( 254 sessions_sync_manager_.reset(
249 new SessionsSyncManager(sync_client_->GetSyncSessionsClient(), profile, 255 new SessionsSyncManager(sync_client_->GetSyncSessionsClient(), profile,
250 local_device_.get(), router.Pass())); 256 local_device_.get(), router.Pass()));
251 device_info_sync_service_.reset( 257 device_info_sync_service_.reset(
252 new DeviceInfoSyncService(local_device_.get())); 258 new DeviceInfoSyncService(local_device_.get()));
253 259
254 std::string last_version = sync_prefs_.GetLastRunVersion(); 260 std::string last_version = sync_prefs_.GetLastRunVersion();
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 void ProfileSyncService::TrySyncDatatypePrefRecovery() { 356 void ProfileSyncService::TrySyncDatatypePrefRecovery() {
351 DCHECK(!IsBackendInitialized()); 357 DCHECK(!IsBackendInitialized());
352 if (!HasSyncSetupCompleted()) 358 if (!HasSyncSetupCompleted())
353 return; 359 return;
354 360
355 // There was a bug where OnUserChoseDatatypes was not properly called on 361 // There was a bug where OnUserChoseDatatypes was not properly called on
356 // configuration (see crbug.com/154940). We detect this by checking whether 362 // configuration (see crbug.com/154940). We detect this by checking whether
357 // kSyncKeepEverythingSynced has a default value. If so, and sync setup has 363 // kSyncKeepEverythingSynced has a default value. If so, and sync setup has
358 // completed, it means sync was not properly configured, so we manually 364 // completed, it means sync was not properly configured, so we manually
359 // set kSyncKeepEverythingSynced. 365 // set kSyncKeepEverythingSynced.
360 PrefService* const pref_service = profile_->GetPrefs(); 366 PrefService* const pref_service = sync_client_->GetPrefService();
361 if (!pref_service) 367 if (!pref_service)
362 return; 368 return;
363 if (GetPreferredDataTypes().Size() > 1) 369 if (GetPreferredDataTypes().Size() > 1)
364 return; 370 return;
365 371
366 const PrefService::Preference* keep_everything_synced = 372 const PrefService::Preference* keep_everything_synced =
367 pref_service->FindPreference( 373 pref_service->FindPreference(
368 sync_driver::prefs::kSyncKeepEverythingSynced); 374 sync_driver::prefs::kSyncKeepEverythingSynced);
369 // This will be false if the preference was properly set or if it's controlled 375 // This will be false if the preference was properly set or if it's controlled
370 // by policy. 376 // by policy.
371 if (!keep_everything_synced->IsDefaultValue()) 377 if (!keep_everything_synced->IsDefaultValue())
372 return; 378 return;
373 379
374 // kSyncKeepEverythingSynced was not properly set. Set it and the preferred 380 // kSyncKeepEverythingSynced was not properly set. Set it and the preferred
375 // types now, before we configure. 381 // types now, before we configure.
376 UMA_HISTOGRAM_COUNTS("Sync.DatatypePrefRecovery", 1); 382 UMA_HISTOGRAM_COUNTS("Sync.DatatypePrefRecovery", 1);
377 sync_prefs_.SetKeepEverythingSynced(true); 383 sync_prefs_.SetKeepEverythingSynced(true);
378 syncer::ModelTypeSet registered_types = GetRegisteredDataTypes(); 384 syncer::ModelTypeSet registered_types = GetRegisteredDataTypes();
379 } 385 }
380 386
381 void ProfileSyncService::StartSyncingWithServer() { 387 void ProfileSyncService::StartSyncingWithServer() {
382 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 388 DCHECK(thread_checker_.CalledOnValidThread());
383 389
384 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 390 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
385 switches::kSyncEnableClearDataOnPassphraseEncryption) && 391 switches::kSyncEnableClearDataOnPassphraseEncryption) &&
386 backend_mode_ == SYNC && 392 backend_mode_ == SYNC &&
387 sync_prefs_.GetPassphraseEncryptionTransitionInProgress()) { 393 sync_prefs_.GetPassphraseEncryptionTransitionInProgress()) {
388 BeginConfigureCatchUpBeforeClear(); 394 BeginConfigureCatchUpBeforeClear();
389 return; 395 return;
390 } 396 }
391 397
392 if (backend_) 398 if (backend_)
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 499
494 SyncCredentials credentials = GetCredentials(); 500 SyncCredentials credentials = GetCredentials();
495 501
496 if (backend_mode_ == SYNC && delete_stale_data) 502 if (backend_mode_ == SYNC && delete_stale_data)
497 ClearStaleErrors(); 503 ClearStaleErrors();
498 504
499 SyncBackendHost::HttpPostProviderFactoryGetter 505 SyncBackendHost::HttpPostProviderFactoryGetter
500 http_post_provider_factory_getter = 506 http_post_provider_factory_getter =
501 base::Bind(&syncer::NetworkResources::GetHttpPostProviderFactory, 507 base::Bind(&syncer::NetworkResources::GetHttpPostProviderFactory,
502 base::Unretained(network_resources_.get()), 508 base::Unretained(network_resources_.get()),
503 make_scoped_refptr(profile_->GetRequestContext()), 509 make_scoped_refptr(url_request_context_),
504 network_time_update_callback_); 510 network_time_update_callback_);
505 511
506 backend_->Initialize( 512 backend_->Initialize(
507 this, sync_thread_.Pass(), 513 this, sync_thread_.Pass(), db_thread_, file_thread_, GetJsEventHandler(),
508 content::BrowserThread::GetMessageLoopProxyForThread( 514 sync_service_url_, local_device_->GetSyncUserAgent(), credentials,
509 content::BrowserThread::DB), 515 delete_stale_data, scoped_ptr<syncer::SyncManagerFactory>(
510 content::BrowserThread::GetMessageLoopProxyForThread( 516 new syncer::SyncManagerFactory(GetManagerType()))
511 content::BrowserThread::FILE), 517 .Pass(),
512 GetJsEventHandler(), sync_service_url_, local_device_->GetSyncUserAgent(),
513 credentials, delete_stale_data,
514 scoped_ptr<syncer::SyncManagerFactory>(
515 new syncer::SyncManagerFactory(GetManagerType()))
516 .Pass(),
517 MakeWeakHandle(weak_factory_.GetWeakPtr()), 518 MakeWeakHandle(weak_factory_.GetWeakPtr()),
518 base::Bind(browser_sync::ChromeReportUnrecoverableError, 519 base::Bind(browser_sync::ChromeReportUnrecoverableError, channel_),
519 chrome::GetChannel()),
520 http_post_provider_factory_getter, saved_nigori_state_.Pass()); 520 http_post_provider_factory_getter, saved_nigori_state_.Pass());
521 } 521 }
522 522
523 bool ProfileSyncService::IsEncryptedDatatypeEnabled() const { 523 bool ProfileSyncService::IsEncryptedDatatypeEnabled() const {
524 if (encryption_pending()) 524 if (encryption_pending())
525 return true; 525 return true;
526 const syncer::ModelTypeSet preferred_types = GetPreferredDataTypes(); 526 const syncer::ModelTypeSet preferred_types = GetPreferredDataTypes();
527 const syncer::ModelTypeSet encrypted_types = GetEncryptedDataTypes(); 527 const syncer::ModelTypeSet encrypted_types = GetEncryptedDataTypes();
528 DCHECK(encrypted_types.Has(syncer::PASSWORDS)); 528 DCHECK(encrypted_types.Has(syncer::PASSWORDS));
529 return !Intersection(preferred_types, encrypted_types).Empty(); 529 return !Intersection(preferred_types, encrypted_types).Empty();
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 647
648 if (backend_mode_ == ROLLBACK) 648 if (backend_mode_ == ROLLBACK)
649 ClearBrowsingDataSinceFirstSync(); 649 ClearBrowsingDataSinceFirstSync();
650 else if (backend_mode_ == SYNC) 650 else if (backend_mode_ == SYNC)
651 CheckSyncBackupIfNeeded(); 651 CheckSyncBackupIfNeeded();
652 652
653 base::FilePath sync_folder = backend_mode_ == SYNC ? 653 base::FilePath sync_folder = backend_mode_ == SYNC ?
654 base::FilePath(kSyncDataFolderName) : 654 base::FilePath(kSyncDataFolderName) :
655 base::FilePath(kSyncBackupDataFolderName); 655 base::FilePath(kSyncBackupDataFolderName);
656 656
657 invalidation::InvalidationService* invalidator = NULL; 657 invalidation::InvalidationService* invalidator =
658 if (backend_mode_ == SYNC) { 658 backend_mode_ == SYNC ? sync_client_->GetInvalidationService() : nullptr;
659 invalidation::ProfileInvalidationProvider* provider =
660 invalidation::ProfileInvalidationProviderFactory::GetForProfile(
661 profile_);
662 if (provider)
663 invalidator = provider->GetInvalidationService();
664 }
665 659
666 directory_path_ = profile_->GetPath().Append(sync_folder); 660 directory_path_ = base_directory_.Append(sync_folder);
667 661
668 backend_.reset( 662 backend_.reset(
669 sync_client_->GetSyncApiComponentFactory()->CreateSyncBackendHost( 663 sync_client_->GetSyncApiComponentFactory()->CreateSyncBackendHost(
670 profile_->GetDebugName(), sync_client_.get(), invalidator, 664 debug_identifier_, sync_client_.get(), invalidator,
671 sync_prefs_.AsWeakPtr(), sync_folder)); 665 sync_prefs_.AsWeakPtr(), sync_folder));
672 666
673 // Initialize the backend. Every time we start up a new SyncBackendHost, 667 // Initialize the backend. Every time we start up a new SyncBackendHost,
674 // we'll want to start from a fresh SyncDB, so delete any old one that might 668 // we'll want to start from a fresh SyncDB, so delete any old one that might
675 // be there. 669 // be there.
676 InitializeBackend(ShouldDeleteSyncFolder()); 670 InitializeBackend(ShouldDeleteSyncFolder());
677 671
678 UpdateFirstSyncTimePref(); 672 UpdateFirstSyncTimePref();
679 673
680 ReportPreviousSessionMemoryWarningCount(); 674 ReportPreviousSessionMemoryWarningCount();
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
1101 sync_js_controller_.AttachJsBackend(js_backend); 1095 sync_js_controller_.AttachJsBackend(js_backend);
1102 debug_info_listener_ = debug_info_listener; 1096 debug_info_listener_ = debug_info_listener;
1103 1097
1104 SigninClient* signin_client = signin_->GetOriginal()->signin_client(); 1098 SigninClient* signin_client = signin_->GetOriginal()->signin_client();
1105 DCHECK(signin_client); 1099 DCHECK(signin_client);
1106 std::string signin_scoped_device_id = 1100 std::string signin_scoped_device_id =
1107 signin_client->GetSigninScopedDeviceId(); 1101 signin_client->GetSigninScopedDeviceId();
1108 1102
1109 // Initialize local device info. 1103 // Initialize local device info.
1110 local_device_->Initialize(cache_guid, signin_scoped_device_id, 1104 local_device_->Initialize(cache_guid, signin_scoped_device_id,
1111 content::BrowserThread::GetBlockingPool()); 1105 blocking_pool_);
1112 1106
1113 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK) 1107 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK)
1114 ConfigureDataTypeManager(); 1108 ConfigureDataTypeManager();
1115 else 1109 else
1116 PostBackendInitialization(); 1110 PostBackendInitialization();
1117 } 1111 }
1118 1112
1119 void ProfileSyncService::OnSyncCycleCompleted() { 1113 void ProfileSyncService::OnSyncCycleCompleted() {
1120 UpdateLastSyncedTime(); 1114 UpdateLastSyncedTime();
1121 if (IsDataTypeControllerRunning(syncer::SESSIONS)) { 1115 if (IsDataTypeControllerRunning(syncer::SESSIONS)) {
1122 // Trigger garbage collection of old sessions now that we've downloaded 1116 // Trigger garbage collection of old sessions now that we've downloaded
1123 // any new session data. 1117 // any new session data.
1124 base::ThreadTaskRunnerHandle::Get()->PostTask( 1118 base::ThreadTaskRunnerHandle::Get()->PostTask(
1125 FROM_HERE, base::Bind(&SessionsSyncManager::DoGarbageCollection, 1119 FROM_HERE, base::Bind(&SessionsSyncManager::DoGarbageCollection,
1126 base::AsWeakPtr(sessions_sync_manager_.get()))); 1120 base::AsWeakPtr(sessions_sync_manager_.get())));
1127 } 1121 }
1128 DVLOG(2) << "Notifying observers sync cycle completed"; 1122 DVLOG(2) << "Notifying observers sync cycle completed";
1129 NotifySyncCycleCompleted(); 1123 NotifySyncCycleCompleted();
1130 } 1124 }
1131 1125
1132 void ProfileSyncService::OnExperimentsChanged( 1126 void ProfileSyncService::OnExperimentsChanged(
1133 const syncer::Experiments& experiments) { 1127 const syncer::Experiments& experiments) {
1134 if (current_experiments_.Matches(experiments)) 1128 if (current_experiments_.Matches(experiments))
1135 return; 1129 return;
1136 1130
1137 current_experiments_ = experiments; 1131 current_experiments_ = experiments;
1138 1132
1139 profile_->GetPrefs()->SetBoolean( 1133 sync_client_->GetPrefService()->SetBoolean(
1140 invalidation::prefs::kInvalidationServiceUseGCMChannel, 1134 invalidation::prefs::kInvalidationServiceUseGCMChannel,
1141 experiments.gcm_invalidations_enabled); 1135 experiments.gcm_invalidations_enabled);
1142 profile_->GetPrefs()->SetBoolean( 1136 sync_client_->GetPrefService()->SetBoolean(
1143 autofill::prefs::kAutofillWalletSyncExperimentEnabled, 1137 autofill::prefs::kAutofillWalletSyncExperimentEnabled,
1144 experiments.wallet_sync_enabled); 1138 experiments.wallet_sync_enabled);
1145 } 1139 }
1146 1140
1147 void ProfileSyncService::UpdateAuthErrorState(const AuthError& error) { 1141 void ProfileSyncService::UpdateAuthErrorState(const AuthError& error) {
1148 is_auth_in_progress_ = false; 1142 is_auth_in_progress_ = false;
1149 last_auth_error_ = error; 1143 last_auth_error_ = error;
1150 1144
1151 NotifyObservers(); 1145 NotifyObservers();
1152 } 1146 }
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
1386 CleanUpBackup(); 1380 CleanUpBackup();
1387 } else if (error.action == syncer::ROLLBACK_DONE) { 1381 } else if (error.action == syncer::ROLLBACK_DONE) {
1388 // Shut down ROLLBACK backend and delete backup DB. 1382 // Shut down ROLLBACK backend and delete backup DB.
1389 ShutdownImpl(syncer::DISABLE_SYNC); 1383 ShutdownImpl(syncer::DISABLE_SYNC);
1390 sync_prefs_.ClearFirstSyncTime(); 1384 sync_prefs_.ClearFirstSyncTime();
1391 } 1385 }
1392 } 1386 }
1393 1387
1394 void ProfileSyncService::OnLocalSetPassphraseEncryption( 1388 void ProfileSyncService::OnLocalSetPassphraseEncryption(
1395 const syncer::SyncEncryptionHandler::NigoriState& nigori_state) { 1389 const syncer::SyncEncryptionHandler::NigoriState& nigori_state) {
1396 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 1390 DCHECK(thread_checker_.CalledOnValidThread());
1397 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( 1391 if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
1398 switches::kSyncEnableClearDataOnPassphraseEncryption)) 1392 switches::kSyncEnableClearDataOnPassphraseEncryption))
1399 return; 1393 return;
1400 1394
1401 // At this point the user has set a custom passphrase and we have received the 1395 // At this point the user has set a custom passphrase and we have received the
1402 // updated nigori state. Time to cache the nigori state, and catch up the 1396 // updated nigori state. Time to cache the nigori state, and catch up the
1403 // active data types. 1397 // active data types.
1404 sync_prefs_.SetSavedNigoriStateForPassphraseEncryptionTransition( 1398 sync_prefs_.SetSavedNigoriStateForPassphraseEncryptionTransition(
1405 nigori_state); 1399 nigori_state);
1406 sync_prefs_.SetPassphraseEncryptionTransitionInProgress(true); 1400 sync_prefs_.SetPassphraseEncryptionTransitionInProgress(true);
1407 BeginConfigureCatchUpBeforeClear(); 1401 BeginConfigureCatchUpBeforeClear();
1408 } 1402 }
1409 1403
1410 void ProfileSyncService::BeginConfigureCatchUpBeforeClear() { 1404 void ProfileSyncService::BeginConfigureCatchUpBeforeClear() {
1411 DCHECK_EQ(backend_mode_, SYNC); 1405 DCHECK_EQ(backend_mode_, SYNC);
1412 DCHECK(data_type_manager_); 1406 DCHECK(data_type_manager_);
1413 DCHECK(!saved_nigori_state_); 1407 DCHECK(!saved_nigori_state_);
1414 saved_nigori_state_ = 1408 saved_nigori_state_ =
1415 sync_prefs_.GetSavedNigoriStateForPassphraseEncryptionTransition().Pass(); 1409 sync_prefs_.GetSavedNigoriStateForPassphraseEncryptionTransition().Pass();
1416 const syncer::ModelTypeSet types = GetActiveDataTypes(); 1410 const syncer::ModelTypeSet types = GetActiveDataTypes();
1417 catch_up_configure_in_progress_ = true; 1411 catch_up_configure_in_progress_ = true;
1418 data_type_manager_->Configure(types, syncer::CONFIGURE_REASON_CATCH_UP); 1412 data_type_manager_->Configure(types, syncer::CONFIGURE_REASON_CATCH_UP);
1419 } 1413 }
1420 1414
1421 void ProfileSyncService::ClearAndRestartSyncForPassphraseEncryption() { 1415 void ProfileSyncService::ClearAndRestartSyncForPassphraseEncryption() {
1422 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 1416 DCHECK(thread_checker_.CalledOnValidThread());
1423 backend_->ClearServerData(base::Bind( 1417 backend_->ClearServerData(base::Bind(
1424 &ProfileSyncService::OnClearServerDataDone, weak_factory_.GetWeakPtr())); 1418 &ProfileSyncService::OnClearServerDataDone, weak_factory_.GetWeakPtr()));
1425 } 1419 }
1426 1420
1427 void ProfileSyncService::OnClearServerDataDone() { 1421 void ProfileSyncService::OnClearServerDataDone() {
1428 DCHECK(sync_prefs_.GetPassphraseEncryptionTransitionInProgress()); 1422 DCHECK(sync_prefs_.GetPassphraseEncryptionTransitionInProgress());
1429 sync_prefs_.SetPassphraseEncryptionTransitionInProgress(false); 1423 sync_prefs_.SetPassphraseEncryptionTransitionInProgress(false);
1430 1424
1431 // Call to ClearServerData generates new keystore key on the server. This 1425 // Call to ClearServerData generates new keystore key on the server. This
1432 // makes keystore bootstrap token invalid. Let's clear it from preferences. 1426 // makes keystore bootstrap token invalid. Let's clear it from preferences.
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
1892 bool restart = false; 1886 bool restart = false;
1893 if (!data_type_manager_) { 1887 if (!data_type_manager_) {
1894 restart = true; 1888 restart = true;
1895 data_type_manager_.reset( 1889 data_type_manager_.reset(
1896 sync_client_->GetSyncApiComponentFactory()->CreateDataTypeManager( 1890 sync_client_->GetSyncApiComponentFactory()->CreateDataTypeManager(
1897 debug_info_listener_, &data_type_controllers_, this, backend_.get(), 1891 debug_info_listener_, &data_type_controllers_, this, backend_.get(),
1898 this)); 1892 this));
1899 1893
1900 // We create the migrator at the same time. 1894 // We create the migrator at the same time.
1901 migrator_.reset(new browser_sync::BackendMigrator( 1895 migrator_.reset(new browser_sync::BackendMigrator(
1902 profile_->GetDebugName(), GetUserShare(), this, 1896 debug_identifier_, GetUserShare(), this, data_type_manager_.get(),
1903 data_type_manager_.get(),
1904 base::Bind(&ProfileSyncService::StartSyncingWithServer, 1897 base::Bind(&ProfileSyncService::StartSyncingWithServer,
1905 base::Unretained(this)))); 1898 base::Unretained(this))));
1906 } 1899 }
1907 1900
1908 syncer::ModelTypeSet types; 1901 syncer::ModelTypeSet types;
1909 syncer::ConfigureReason reason = syncer::CONFIGURE_REASON_UNKNOWN; 1902 syncer::ConfigureReason reason = syncer::CONFIGURE_REASON_UNKNOWN;
1910 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK) { 1903 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK) {
1911 types = syncer::BackupTypes(); 1904 types = syncer::BackupTypes();
1912 reason = syncer::CONFIGURE_REASON_BACKUP_ROLLBACK; 1905 reason = syncer::CONFIGURE_REASON_BACKUP_ROLLBACK;
1913 } else { 1906 } else {
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after
2425 return sync_prefs_.IsSyncRequested(); 2418 return sync_prefs_.IsSyncRequested();
2426 } 2419 }
2427 2420
2428 SigninManagerBase* ProfileSyncService::signin() const { 2421 SigninManagerBase* ProfileSyncService::signin() const {
2429 if (!signin_) 2422 if (!signin_)
2430 return NULL; 2423 return NULL;
2431 return signin_->GetOriginal(); 2424 return signin_->GetOriginal();
2432 } 2425 }
2433 2426
2434 void ProfileSyncService::RequestStart() { 2427 void ProfileSyncService::RequestStart() {
2435 DCHECK(profile_); 2428 DCHECK(sync_client_);
2436 sync_prefs_.SetSyncRequested(true); 2429 sync_prefs_.SetSyncRequested(true);
2437 DCHECK(!signin_.get() || signin_->GetOriginal()->IsAuthenticated()); 2430 DCHECK(!signin_.get() || signin_->GetOriginal()->IsAuthenticated());
2438 startup_controller_->TryStart(); 2431 startup_controller_->TryStart();
2439 } 2432 }
2440 2433
2441 void ProfileSyncService::ReconfigureDatatypeManager() { 2434 void ProfileSyncService::ReconfigureDatatypeManager() {
2442 // If we haven't initialized yet, don't configure the DTM as it could cause 2435 // If we haven't initialized yet, don't configure the DTM as it could cause
2443 // association to start before a Directory has even been created. 2436 // association to start before a Directory has even been created.
2444 if (backend_initialized_) { 2437 if (backend_initialized_) {
2445 DCHECK(backend_.get()); 2438 DCHECK(backend_.get());
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
2570 if (!last_backup_time_ && 2563 if (!last_backup_time_ &&
2571 (last_synced_time.is_null() || 2564 (last_synced_time.is_null() ||
2572 base::Time::Now() - last_synced_time >= 2565 base::Time::Now() - last_synced_time >=
2573 base::TimeDelta::FromDays(1))) { 2566 base::TimeDelta::FromDays(1))) {
2574 // If sync thread is set, need to serialize check on sync thread after 2567 // If sync thread is set, need to serialize check on sync thread after
2575 // closing backup DB. 2568 // closing backup DB.
2576 if (sync_thread_) { 2569 if (sync_thread_) {
2577 sync_thread_->task_runner()->PostTask( 2570 sync_thread_->task_runner()->PostTask(
2578 FROM_HERE, 2571 FROM_HERE,
2579 base::Bind(syncer::CheckSyncDbLastModifiedTime, 2572 base::Bind(syncer::CheckSyncDbLastModifiedTime,
2580 profile_->GetPath().Append(kSyncBackupDataFolderName), 2573 base_directory_.Append(kSyncBackupDataFolderName),
2581 base::ThreadTaskRunnerHandle::Get(), 2574 base::ThreadTaskRunnerHandle::Get(),
2582 base::Bind(&ProfileSyncService::CheckSyncBackupCallback, 2575 base::Bind(&ProfileSyncService::CheckSyncBackupCallback,
2583 weak_factory_.GetWeakPtr()))); 2576 weak_factory_.GetWeakPtr())));
2584 } else { 2577 } else {
2585 content::BrowserThread::PostTask( 2578 file_thread_->PostTask(
2586 content::BrowserThread::FILE, FROM_HERE, 2579 FROM_HERE,
2587 base::Bind(syncer::CheckSyncDbLastModifiedTime, 2580 base::Bind(syncer::CheckSyncDbLastModifiedTime,
2588 profile_->GetPath().Append(kSyncBackupDataFolderName), 2581 base_directory_.Append(kSyncBackupDataFolderName),
2589 base::ThreadTaskRunnerHandle::Get(), 2582 base::ThreadTaskRunnerHandle::Get(),
2590 base::Bind(&ProfileSyncService::CheckSyncBackupCallback, 2583 base::Bind(&ProfileSyncService::CheckSyncBackupCallback,
2591 weak_factory_.GetWeakPtr()))); 2584 weak_factory_.GetWeakPtr())));
2592 } 2585 }
2593 } 2586 }
2594 #endif 2587 #endif
2595 } 2588 }
2596 2589
2597 void ProfileSyncService::CheckSyncBackupCallback(base::Time backup_time) { 2590 void ProfileSyncService::CheckSyncBackupCallback(base::Time backup_time) {
2598 last_backup_time_.reset(new base::Time(backup_time)); 2591 last_backup_time_.reset(new base::Time(backup_time));
2599 2592
2600 DCHECK(device_info_sync_service_); 2593 DCHECK(device_info_sync_service_);
2601 device_info_sync_service_->UpdateLocalDeviceBackupTime(*last_backup_time_); 2594 device_info_sync_service_->UpdateLocalDeviceBackupTime(*last_backup_time_);
2602 } 2595 }
2603 2596
2604 void ProfileSyncService::TryStartSyncAfterBackup() { 2597 void ProfileSyncService::TryStartSyncAfterBackup() {
2605 startup_controller_->Reset(GetRegisteredDataTypes()); 2598 startup_controller_->Reset(GetRegisteredDataTypes());
2606 startup_controller_->TryStart(); 2599 startup_controller_->TryStart();
2607 } 2600 }
2608 2601
2609 void ProfileSyncService::CleanUpBackup() { 2602 void ProfileSyncService::CleanUpBackup() {
2610 sync_prefs_.ClearFirstSyncTime(); 2603 sync_prefs_.ClearFirstSyncTime();
2611 profile_->GetIOTaskRunner()->PostTask( 2604
2605 // Use the client's base directory to get the blocking task runner to use in
2606 // order to ensure ordering between the tasks posted by different invocations
2607 // of this method.
2608 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner =
2609 JsonPrefStore::GetTaskRunnerForFile(base_directory_, blocking_pool_);
2610 blocking_task_runner->PostTask(
2612 FROM_HERE, 2611 FROM_HERE,
2613 base::Bind(base::IgnoreResult(base::DeleteFile), 2612 base::Bind(base::IgnoreResult(base::DeleteFile),
2614 profile_->GetPath().Append(kSyncBackupDataFolderName), 2613 base_directory_.Append(kSyncBackupDataFolderName), true));
2615 true));
2616 } 2614 }
2617 2615
2618 bool ProfileSyncService::NeedBackup() const { 2616 bool ProfileSyncService::NeedBackup() const {
2619 return need_backup_; 2617 return need_backup_;
2620 } 2618 }
2621 2619
2622 base::Time ProfileSyncService::GetDeviceBackupTimeForTesting() const { 2620 base::Time ProfileSyncService::GetDeviceBackupTimeForTesting() const {
2623 return device_info_sync_service_->GetLocalDeviceBackupTime(); 2621 return device_info_sync_service_->GetLocalDeviceBackupTime();
2624 } 2622 }
2625 2623
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
2696 } 2694 }
2697 2695
2698 std::string ProfileSyncService::unrecoverable_error_message() const { 2696 std::string ProfileSyncService::unrecoverable_error_message() const {
2699 return unrecoverable_error_message_; 2697 return unrecoverable_error_message_;
2700 } 2698 }
2701 2699
2702 tracked_objects::Location ProfileSyncService::unrecoverable_error_location() 2700 tracked_objects::Location ProfileSyncService::unrecoverable_error_location()
2703 const { 2701 const {
2704 return unrecoverable_error_location_; 2702 return unrecoverable_error_location_;
2705 } 2703 }
OLDNEW
« no previous file with comments | « chrome/browser/sync/profile_sync_service.h ('k') | chrome/browser/sync/profile_sync_service_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698