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

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

Issue 398423002: Sync: Refactoring of DEVICE_INFO syncable type - Part 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: ProfileSyncComponentsFactoryMock memory leak fix Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (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 <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 } // anonymous namespace 181 } // anonymous namespace
182 182
183 bool ShouldShowActionOnUI( 183 bool ShouldShowActionOnUI(
184 const syncer::SyncProtocolError& error) { 184 const syncer::SyncProtocolError& error) {
185 return (error.action != syncer::UNKNOWN_ACTION && 185 return (error.action != syncer::UNKNOWN_ACTION &&
186 error.action != syncer::DISABLE_SYNC_ON_CLIENT && 186 error.action != syncer::DISABLE_SYNC_ON_CLIENT &&
187 error.action != syncer::STOP_SYNC_FOR_DISABLED_ACCOUNT); 187 error.action != syncer::STOP_SYNC_FOR_DISABLED_ACCOUNT);
188 } 188 }
189 189
190 ProfileSyncService::ProfileSyncService( 190 ProfileSyncService::ProfileSyncService(
191 ProfileSyncComponentsFactory* factory, 191 scoped_ptr<ProfileSyncComponentsFactory> factory,
192 Profile* profile, 192 Profile* profile,
193 scoped_ptr<SupervisedUserSigninManagerWrapper> signin_wrapper, 193 scoped_ptr<SupervisedUserSigninManagerWrapper> signin_wrapper,
194 ProfileOAuth2TokenService* oauth2_token_service, 194 ProfileOAuth2TokenService* oauth2_token_service,
195 ProfileSyncServiceStartBehavior start_behavior) 195 ProfileSyncServiceStartBehavior start_behavior)
196 : OAuth2TokenService::Consumer("sync"), 196 : OAuth2TokenService::Consumer("sync"),
197 last_auth_error_(AuthError::AuthErrorNone()), 197 last_auth_error_(AuthError::AuthErrorNone()),
198 passphrase_required_reason_(syncer::REASON_PASSPHRASE_NOT_REQUIRED), 198 passphrase_required_reason_(syncer::REASON_PASSPHRASE_NOT_REQUIRED),
199 factory_(factory), 199 factory_(factory.Pass()),
200 profile_(profile), 200 profile_(profile),
201 sync_prefs_(profile_->GetPrefs()), 201 sync_prefs_(profile_->GetPrefs()),
202 sync_service_url_(GetSyncServiceURL(*CommandLine::ForCurrentProcess())), 202 sync_service_url_(GetSyncServiceURL(*CommandLine::ForCurrentProcess())),
203 is_first_time_sync_configure_(false), 203 is_first_time_sync_configure_(false),
204 backend_initialized_(false), 204 backend_initialized_(false),
205 sync_disabled_by_admin_(false), 205 sync_disabled_by_admin_(false),
206 is_auth_in_progress_(false), 206 is_auth_in_progress_(false),
207 signin_(signin_wrapper.Pass()), 207 signin_(signin_wrapper.Pass()),
208 unrecoverable_error_reason_(ERROR_REASON_UNSET), 208 unrecoverable_error_reason_(ERROR_REASON_UNSET),
209 expect_sync_configuration_aborted_(false), 209 expect_sync_configuration_aborted_(false),
(...skipping 26 matching lines...) Expand all
236 startup_controller_weak_factory_.GetWeakPtr(), 236 startup_controller_weak_factory_.GetWeakPtr(),
237 ROLLBACK)), 237 ROLLBACK)),
238 backend_mode_(IDLE), 238 backend_mode_(IDLE),
239 backup_start_delay_(base::TimeDelta::FromSeconds(kBackupStartDelay)), 239 backup_start_delay_(base::TimeDelta::FromSeconds(kBackupStartDelay)),
240 clear_browsing_data_(base::Bind(&ClearBrowsingData)) { 240 clear_browsing_data_(base::Bind(&ClearBrowsingData)) {
241 DCHECK(profile); 241 DCHECK(profile);
242 syncer::SyncableService::StartSyncFlare flare( 242 syncer::SyncableService::StartSyncFlare flare(
243 sync_start_util::GetFlareForSyncableService(profile->GetPath())); 243 sync_start_util::GetFlareForSyncableService(profile->GetPath()));
244 scoped_ptr<browser_sync::LocalSessionEventRouter> router( 244 scoped_ptr<browser_sync::LocalSessionEventRouter> router(
245 new NotificationServiceSessionsRouter(profile, flare)); 245 new NotificationServiceSessionsRouter(profile, flare));
246
247 DCHECK(factory_.get());
248 local_device_ = factory_->CreateLocalDeviceInfoProvider();
246 sessions_sync_manager_.reset( 249 sessions_sync_manager_.reset(
247 new SessionsSyncManager(profile, this, router.Pass())); 250 new SessionsSyncManager(profile, local_device_.get(), router.Pass()));
248 } 251 }
249 252
250 ProfileSyncService::~ProfileSyncService() { 253 ProfileSyncService::~ProfileSyncService() {
251 sync_prefs_.RemoveSyncPrefObserver(this); 254 sync_prefs_.RemoveSyncPrefObserver(this);
252 // Shutdown() should have been called before destruction. 255 // Shutdown() should have been called before destruction.
253 CHECK(!backend_initialized_); 256 CHECK(!backend_initialized_);
254 } 257 }
255 258
256 bool ProfileSyncService::IsSyncEnabledAndLoggedIn() { 259 bool ProfileSyncService::IsSyncEnabledAndLoggedIn() {
257 // Exit if sync is disabled. 260 // Exit if sync is disabled.
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 browser_sync::OpenTabsUIDelegate* ProfileSyncService::GetOpenTabsUIDelegate() { 420 browser_sync::OpenTabsUIDelegate* ProfileSyncService::GetOpenTabsUIDelegate() {
418 if (!IsSessionsDataTypeControllerRunning()) 421 if (!IsSessionsDataTypeControllerRunning())
419 return NULL; 422 return NULL;
420 return sessions_sync_manager_.get(); 423 return sessions_sync_manager_.get();
421 } 424 }
422 425
423 browser_sync::FaviconCache* ProfileSyncService::GetFaviconCache() { 426 browser_sync::FaviconCache* ProfileSyncService::GetFaviconCache() {
424 return sessions_sync_manager_->GetFaviconCache(); 427 return sessions_sync_manager_->GetFaviconCache();
425 } 428 }
426 429
427 scoped_ptr<browser_sync::DeviceInfo> 430 browser_sync::SyncedWindowDelegatesGetter*
428 ProfileSyncService::GetLocalDeviceInfo() const { 431 ProfileSyncService::GetSyncedWindowDelegatesGetter() const {
429 if (HasSyncingBackend()) { 432 return sessions_sync_manager_->GetSyncedWindowDelegatesGetter();
430 browser_sync::SyncedDeviceTracker* device_tracker = 433 }
431 backend_->GetSyncedDeviceTracker(); 434
432 if (device_tracker) 435 browser_sync::LocalDeviceInfoProvider*
433 return device_tracker->ReadLocalDeviceInfo(); 436 ProfileSyncService::GetLocalDeviceInfoProvider() {
434 } 437 return local_device_.get();
435 return scoped_ptr<browser_sync::DeviceInfo>();
436 } 438 }
437 439
438 scoped_ptr<browser_sync::DeviceInfo> 440 scoped_ptr<browser_sync::DeviceInfo>
439 ProfileSyncService::GetDeviceInfo(const std::string& client_id) const { 441 ProfileSyncService::GetDeviceInfo(const std::string& client_id) const {
440 if (HasSyncingBackend()) { 442 if (HasSyncingBackend()) {
441 browser_sync::SyncedDeviceTracker* device_tracker = 443 browser_sync::SyncedDeviceTracker* device_tracker =
442 backend_->GetSyncedDeviceTracker(); 444 backend_->GetSyncedDeviceTracker();
443 if (device_tracker) 445 if (device_tracker)
444 return device_tracker->ReadDeviceInfo(client_id); 446 return device_tracker->ReadDeviceInfo(client_id);
445 } 447 }
446 return scoped_ptr<browser_sync::DeviceInfo>(); 448 return scoped_ptr<browser_sync::DeviceInfo>();
447 } 449 }
448 450
449 ScopedVector<browser_sync::DeviceInfo> 451 ScopedVector<browser_sync::DeviceInfo>
450 ProfileSyncService::GetAllSignedInDevices() const { 452 ProfileSyncService::GetAllSignedInDevices() const {
451 ScopedVector<browser_sync::DeviceInfo> devices; 453 ScopedVector<browser_sync::DeviceInfo> devices;
452 if (HasSyncingBackend()) { 454 if (HasSyncingBackend()) {
453 browser_sync::SyncedDeviceTracker* device_tracker = 455 browser_sync::SyncedDeviceTracker* device_tracker =
454 backend_->GetSyncedDeviceTracker(); 456 backend_->GetSyncedDeviceTracker();
455 if (device_tracker) { 457 if (device_tracker) {
456 // TODO(lipalani) - Make device tracker return a scoped vector. 458 // TODO(lipalani) - Make device tracker return a scoped vector.
457 device_tracker->GetAllSyncedDeviceInfo(&devices); 459 device_tracker->GetAllSyncedDeviceInfo(&devices);
458 } 460 }
459 } 461 }
460 return devices.Pass(); 462 return devices.Pass();
461 } 463 }
462 464
463 std::string ProfileSyncService::GetLocalSyncCacheGUID() const {
464 if (HasSyncingBackend()) {
465 browser_sync::SyncedDeviceTracker* device_tracker =
466 backend_->GetSyncedDeviceTracker();
467 if (device_tracker) {
468 return device_tracker->cache_guid();
469 }
470 }
471 return std::string();
472 }
473
474 // Notifies the observer of any device info changes. 465 // Notifies the observer of any device info changes.
475 void ProfileSyncService::AddObserverForDeviceInfoChange( 466 void ProfileSyncService::AddObserverForDeviceInfoChange(
476 browser_sync::SyncedDeviceTracker::Observer* observer) { 467 browser_sync::SyncedDeviceTracker::Observer* observer) {
477 if (HasSyncingBackend()) { 468 if (HasSyncingBackend()) {
478 browser_sync::SyncedDeviceTracker* device_tracker = 469 browser_sync::SyncedDeviceTracker* device_tracker =
479 backend_->GetSyncedDeviceTracker(); 470 backend_->GetSyncedDeviceTracker();
480 if (device_tracker) { 471 if (device_tracker) {
481 device_tracker->AddObserver(observer); 472 device_tracker->AddObserver(observer);
482 } 473 }
483 } 474 }
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 DCHECK(FirstSetupInProgress()); 1063 DCHECK(FirstSetupInProgress());
1073 } 1064 }
1074 1065
1075 NotifyObservers(); 1066 NotifyObservers();
1076 } 1067 }
1077 1068
1078 void ProfileSyncService::OnBackendInitialized( 1069 void ProfileSyncService::OnBackendInitialized(
1079 const syncer::WeakHandle<syncer::JsBackend>& js_backend, 1070 const syncer::WeakHandle<syncer::JsBackend>& js_backend,
1080 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& 1071 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>&
1081 debug_info_listener, 1072 debug_info_listener,
1073 const std::string& cache_guid,
1082 bool success) { 1074 bool success) {
1083 UpdateBackendInitUMA(success); 1075 UpdateBackendInitUMA(success);
1084 1076
1085 if (!success) { 1077 if (!success) {
1086 // Something went unexpectedly wrong. Play it safe: stop syncing at once 1078 // Something went unexpectedly wrong. Play it safe: stop syncing at once
1087 // and surface error UI to alert the user sync has stopped. 1079 // and surface error UI to alert the user sync has stopped.
1088 // Keep the directory around for now so that on restart we will retry 1080 // Keep the directory around for now so that on restart we will retry
1089 // again and potentially succeed in presence of transient file IO failures 1081 // again and potentially succeed in presence of transient file IO failures
1090 // or permissions issues, etc. 1082 // or permissions issues, etc.
1091 // 1083 //
1092 // TODO(rlarocque): Consider making this UnrecoverableError less special. 1084 // TODO(rlarocque): Consider making this UnrecoverableError less special.
1093 // Unlike every other UnrecoverableError, it does not delete our sync data. 1085 // Unlike every other UnrecoverableError, it does not delete our sync data.
1094 // This exception made sense at the time it was implemented, but our new 1086 // This exception made sense at the time it was implemented, but our new
1095 // directory corruption recovery mechanism makes it obsolete. By the time 1087 // directory corruption recovery mechanism makes it obsolete. By the time
1096 // we get here, we will have already tried and failed to delete the 1088 // we get here, we will have already tried and failed to delete the
1097 // directory. It would be no big deal if we tried to delete it again. 1089 // directory. It would be no big deal if we tried to delete it again.
1098 OnInternalUnrecoverableError(FROM_HERE, 1090 OnInternalUnrecoverableError(FROM_HERE,
1099 "BackendInitialize failure", 1091 "BackendInitialize failure",
1100 false, 1092 false,
1101 ERROR_REASON_BACKEND_INIT_FAILURE); 1093 ERROR_REASON_BACKEND_INIT_FAILURE);
1102 return; 1094 return;
1103 } 1095 }
1104 1096
1105 backend_initialized_ = true; 1097 backend_initialized_ = true;
1106 1098
1107 sync_js_controller_.AttachJsBackend(js_backend); 1099 sync_js_controller_.AttachJsBackend(js_backend);
1108 debug_info_listener_ = debug_info_listener; 1100 debug_info_listener_ = debug_info_listener;
1109 1101
1102 // Initialize local device info.
1103 local_device_->Initialize(cache_guid);
1104
1110 // Give the DataTypeControllers a handle to the now initialized backend 1105 // Give the DataTypeControllers a handle to the now initialized backend
1111 // as a UserShare. 1106 // as a UserShare.
1112 for (DataTypeController::TypeMap::iterator it = 1107 for (DataTypeController::TypeMap::iterator it =
1113 directory_data_type_controllers_.begin(); 1108 directory_data_type_controllers_.begin();
1114 it != directory_data_type_controllers_.end(); ++it) { 1109 it != directory_data_type_controllers_.end(); ++it) {
1115 it->second->OnUserShareReady(GetUserShare()); 1110 it->second->OnUserShareReady(GetUserShare());
1116 } 1111 }
1117 1112
1118 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK) 1113 if (backend_mode_ == BACKUP || backend_mode_ == ROLLBACK)
1119 ConfigureDataTypeManager(); 1114 ConfigureDataTypeManager();
(...skipping 1528 matching lines...) Expand 10 before | Expand all | Expand 10 after
2648 browser_sync::SyncedDeviceTracker* device_tracker = 2643 browser_sync::SyncedDeviceTracker* device_tracker =
2649 backend_->GetSyncedDeviceTracker(); 2644 backend_->GetSyncedDeviceTracker();
2650 if (device_tracker) 2645 if (device_tracker)
2651 device_tracker->UpdateLocalDeviceBackupTime(*last_backup_time_); 2646 device_tracker->UpdateLocalDeviceBackupTime(*last_backup_time_);
2652 } 2647 }
2653 } 2648 }
2654 2649
2655 base::Time ProfileSyncService::GetDeviceBackupTimeForTesting() const { 2650 base::Time ProfileSyncService::GetDeviceBackupTimeForTesting() const {
2656 return backend_->GetSyncedDeviceTracker()->GetLocalDeviceBackupTime(); 2651 return backend_->GetSyncedDeviceTracker()->GetLocalDeviceBackupTime();
2657 } 2652 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698