Chromium Code Reviews| Index: chrome/browser/sync/profile_sync_service.cc |
| diff --git a/chrome/browser/sync/profile_sync_service.cc b/chrome/browser/sync/profile_sync_service.cc |
| index 7fa28b89d5b21eead6ff2fe2cc757b6a56e3e707..c6ccff575f5ae3610302a4341ebee056efa45836 100644 |
| --- a/chrome/browser/sync/profile_sync_service.cc |
| +++ b/chrome/browser/sync/profile_sync_service.cc |
| @@ -21,6 +21,9 @@ |
| #include "base/string16.h" |
| #include "base/stringprintf.h" |
| #include "base/threading/thread_restrictions.h" |
| +#if defined(OS_WIN) |
| +#include "base/win/windows_version.h" |
| +#endif |
| #include "chrome/browser/about_flags.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/defaults.h" |
| @@ -31,6 +34,8 @@ |
| #include "chrome/browser/signin/token_service.h" |
| #include "chrome/browser/signin/token_service_factory.h" |
| #include "chrome/browser/sync/backend_migrator.h" |
| +#include "chrome/browser/sync/credential_cache_service_win.h" |
| +#include "chrome/browser/sync/credential_cache_service_factory_win.h" |
| #include "chrome/browser/sync/glue/change_processor.h" |
| #include "chrome/browser/sync/glue/chrome_encryptor.h" |
| #include "chrome/browser/sync/glue/chrome_report_unrecoverable_error.h" |
| @@ -139,7 +144,8 @@ ProfileSyncService::ProfileSyncService(ProfileSyncComponentsFactory* factory, |
| auto_start_enabled_(start_behavior == AUTO_START), |
| failed_datatypes_handler_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
| configure_status_(DataTypeManager::UNKNOWN), |
| - setup_in_progress_(false) { |
| + setup_in_progress_(false), |
| + credential_cache_service_(NULL) { |
| #if defined(OS_ANDROID) |
| chrome::VersionInfo version_info; |
| if (version_info.IsOfficialBuild()) { |
| @@ -208,7 +214,41 @@ void ProfileSyncService::Initialize() { |
| TryStart(); |
| } |
| +bool ProfileSyncService::ShouldInitializeCredentialCacheService() { |
| +#if defined(OS_WIN) |
| + return |
| + base::win::GetVersion() >= base::win::VERSION_WIN8 && |
|
Andrew T Wilson (Slow)
2012/07/20 01:04:05
This seems like a non-optimal pattern - why not ju
Raghu Simha
2012/07/20 23:35:22
I did this based on Roger's comment that we should
|
| + syncer::CredentialCacheService::IsDefaultProfileDir( |
| + profile()->GetPath()) && |
| + !IsManaged() && |
| + !sync_prefs_.IsStartSuppressed(); |
| +#else |
| + return false; |
| +#endif |
| +} |
| + |
| +bool ProfileSyncService::LoadedCachedCredentials() { |
| +#if defined(OS_WIN) |
| + return (credential_cache_service_ && |
| + credential_cache_service_->SuccessfullyLoadedCredentials()); |
| +#else |
| + return false; |
| +#endif |
| +} |
| + |
| void ProfileSyncService::TryStart() { |
| +#if defined(OS_WIN) |
| + if (ShouldInitializeCredentialCacheService()) { |
|
Andrew T Wilson (Slow)
2012/07/20 01:04:05
I'm not clear on why we need to do this initializa
Raghu Simha
2012/07/20 23:35:22
At first, I thought we would not initialize the cr
|
| + // Lazily instantiate the credential cache service if required. |
| + credential_cache_service_ = |
| + CredentialCacheServiceFactory::GetInstance()->GetForProfile(profile_); |
| + if (!setup_in_progress_ && signin_->GetAuthenticatedUsername().empty()) { |
| + credential_cache_service_->LookForCachedCredentialsInAlternateProfile(); |
| + } |
| + return; |
| + } |
| +#endif |
| + |
| if (!IsSyncEnabledAndLoggedIn()) |
| return; |
| TokenService* token_service = TokenServiceFactory::GetForProfile(profile_); |
| @@ -696,10 +736,12 @@ void ProfileSyncService::OnBackendInitialized( |
| } |
| NotifyObservers(); |
| - if (auto_start_enabled_ && !FirstSetupInProgress()) { |
| - // Backend is initialized but we're not in sync setup, so this must be an |
| - // autostart - mark our sync setup as completed and we'll start syncing |
| - // below. |
| + if ((auto_start_enabled_ && !FirstSetupInProgress()) || |
| + LoadedCachedCredentials()) { |
|
Andrew T Wilson (Slow)
2012/07/20 01:04:05
I think a better way to do this would be for the C
Raghu Simha
2012/07/20 23:35:22
Agreed. Done.
|
| + // If one of following is true, mark setup as completed and start syncing. |
| + // 1) Backend is initialized but we're not in sync setup, so this must be an |
| + // autostart. |
| + // 2) We are starting up using cached credentials. |
| SetSyncSetupCompleted(); |
| NotifyObservers(); |
| } |