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

Unified Diff: chrome/browser/sync/credential_cache_service_win.h

Issue 10830239: [sync] Auto-create credential cache for users who are already signed in and go on to upgrade Chrome (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: CR Feedback; alphabetize notifications Created 8 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/signin/token_service.h ('k') | chrome/browser/sync/credential_cache_service_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/credential_cache_service_win.h
diff --git a/chrome/browser/sync/credential_cache_service_win.h b/chrome/browser/sync/credential_cache_service_win.h
index 4543d0195fe6172a70aba5c1fd00ee8cf46b1d80..f460a9349ff99ace1b622942f7285c59ec1b28be 100644
--- a/chrome/browser/sync/credential_cache_service_win.h
+++ b/chrome/browser/sync/credential_cache_service_win.h
@@ -39,8 +39,7 @@ namespace syncer {
// sync using credentials that were cached due to signing in on the other
// (alternate) mode.
class CredentialCacheService : public ProfileKeyedService,
- public content::NotificationObserver,
- public PrefStore::Observer {
+ public content::NotificationObserver {
public:
explicit CredentialCacheService(Profile* profile);
virtual ~CredentialCacheService();
@@ -48,15 +47,26 @@ class CredentialCacheService : public ProfileKeyedService,
// ProfileKeyedService implementation.
virtual void Shutdown() OVERRIDE;
- // PrefStore::Observer implementation.
- virtual void OnInitializationCompleted(bool succeeded) OVERRIDE;
- virtual void OnPrefValueChanged(const std::string& key) OVERRIDE;
-
// content::NotificationObserver implementation.
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
+ // Loads cached sync credentials from the alternate profile and applies them
+ // to the local profile if the load was successful.
+ void ReadCachedCredentialsFromAlternateProfile();
+
+ // Populates a new local credential cache file if the user is already signed
+ // in to the local profile, and there is no existing local credential cache.
+ // Used in scenarios where a user upgraded from an older version of Chrome
+ // that didn't support credential caching. This method is a no-op if local
+ // sync prefs have already been written to the local cache.
+ void WriteExistingSyncPrefsToLocalCache();
+
+ // Resets |alternate_store_| and schedules the next read from the alternate
+ // credential cache.
+ void ScheduleNextReadFromAlternateCredentialCache();
+
protected:
// Returns true if the credential cache represented by |store| contains a
// value for |pref_name|.
@@ -111,6 +121,50 @@ class CredentialCacheService : public ProfileKeyedService,
}
private:
+ // Used to track the initialization of the local credential cache.
+ class LocalStoreObserver
+ : public base::RefCounted<LocalStoreObserver>,
+ public PrefStore::Observer {
+ public:
+ LocalStoreObserver(CredentialCacheService* service,
+ scoped_refptr<JsonPrefStore> local_store);
+ virtual ~LocalStoreObserver();
+
+ // PrefStore::Observer implementation.
+ virtual void OnInitializationCompleted(bool succeeded) OVERRIDE;
+ virtual void OnPrefValueChanged(const std::string& key) OVERRIDE;
+
+ protected:
+ friend class base::RefCounted<LocalStoreObserver>;
+
+ private:
+ CredentialCacheService* service_;
+ scoped_refptr<JsonPrefStore> local_store_;
+ DISALLOW_COPY_AND_ASSIGN(LocalStoreObserver);
+ };
+
+ // Used to track the initialization of the alternate credential cache.
+ class AlternateStoreObserver
+ : public base::RefCounted<AlternateStoreObserver>,
+ public PrefStore::Observer {
+ public:
+ AlternateStoreObserver(CredentialCacheService* service,
+ scoped_refptr<JsonPrefStore> alternate_store);
+ virtual ~AlternateStoreObserver();
+
+ // PrefStore::Observer implementation.
+ virtual void OnInitializationCompleted(bool succeeded) OVERRIDE;
+ virtual void OnPrefValueChanged(const std::string& key) OVERRIDE;
+
+ protected:
+ friend class base::RefCounted<AlternateStoreObserver>;
+
+ private:
+ CredentialCacheService* service_;
+ scoped_refptr<JsonPrefStore> alternate_store_;
+ DISALLOW_COPY_AND_ASSIGN(AlternateStoreObserver);
+ };
+
// Returns the path to the sync credentials file in the current profile
// directory.
FilePath GetCredentialPathInCurrentProfile() const;
@@ -124,20 +178,9 @@ class CredentialCacheService : public ProfileKeyedService,
// writer must be initialized, and false if not.
bool ShouldInitializeLocalCredentialCacheWriter() const;
- // Determines if we must look for credentials in the alternate profile, based
- // on relevant sync preferences, in addition the to conditions in
- // ShouldInitializeLocalCredentialCacheWriter(). Returns true if we must look
- // for cached credentials, and false if not.
- bool ShouldLookForCachedCredentialsInAlternateProfile() const;
-
// Initializes the JsonPrefStore object for the local profile directory.
void InitializeLocalCredentialCacheWriter();
- // Initializes the JsonPrefStore object for the alternate profile directory
- // if |should_initialize| is true. We take a bool* instead of a bool since
- // this is a callback, and base::Owned needs to clean up the flag.
- void InitializeAlternateCredentialCacheReader(bool* should_initialize);
-
// Returns true if there is an empty value for kGoogleServicesUsername in the
// credential cache for the local profile (indicating that the user first
// signed in and then signed out). Returns false if there's no value at all
@@ -151,10 +194,6 @@ class CredentialCacheService : public ProfileKeyedService,
// cannot auto-start.
void LookForCachedCredentialsInAlternateProfile();
- // Loads cached sync credentials from the alternate profile and calls
- // ApplyCachedCredentials if the load was successful.
- void ReadCachedCredentialsFromAlternateProfile();
-
// Initiates sync sign in using credentials read from the alternate profile by
// persisting |google_services_username|, |encryption_bootstrap_token|,
// |keep_everything_synced| and |preferred_types| to the local pref store, and
@@ -211,10 +250,6 @@ class CredentialCacheService : public ProfileKeyedService,
const std::string& sid,
const std::string& encryption_bootstrap_token);
- // Resets |alternate_store_| and schedules the next read from the alternate
- // credential cache.
- void ScheduleNextReadFromAlternateCredentialCache();
-
// Profile for which credentials are being cached.
Profile* profile_;
@@ -226,10 +261,16 @@ class CredentialCacheService : public ProfileKeyedService,
// it can be accessed by unit tests.
scoped_refptr<JsonPrefStore> local_store_;
+ // Used to respond to the initialization of |local_store_|.
+ scoped_refptr<LocalStoreObserver> local_store_observer_;
+
// Used for read operations on the credential cache file in the alternate
// profile directory. This is separate from the chrome pref store.
scoped_refptr<JsonPrefStore> alternate_store_;
+ // Used to respond to the initialization of |alternate_store_|.
+ scoped_refptr<AlternateStoreObserver> alternate_store_observer_;
+
// Registrar for notifications from the PrefService.
PrefChangeRegistrar pref_registrar_;
« no previous file with comments | « chrome/browser/signin/token_service.h ('k') | chrome/browser/sync/credential_cache_service_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698