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

Unified Diff: chrome/browser/signin/google_auto_login_helper.h

Issue 110373007: Delay loading the NTP after sign in until MergeSession has been performed in (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix typo in chromeos Created 6 years, 11 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
Index: chrome/browser/signin/google_auto_login_helper.h
diff --git a/chrome/browser/signin/google_auto_login_helper.h b/chrome/browser/signin/google_auto_login_helper.h
index 914f49d25bd453006cf8872a7f73d031f9382f08..ed73f59037528869b6dccf8cb7a7092500731f24 100644
--- a/chrome/browser/signin/google_auto_login_helper.h
+++ b/chrome/browser/signin/google_auto_login_helper.h
@@ -2,48 +2,84 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_ANDROID_SIGNIN_GOOGLE_AUTO_LOGIN_HELPER_H_
-#define CHROME_BROWSER_ANDROID_SIGNIN_GOOGLE_AUTO_LOGIN_HELPER_H_
+#ifndef CHROME_BROWSER_SIGNIN_GOOGLE_AUTO_LOGIN_HELPER_H_
+#define CHROME_BROWSER_SIGNIN_GOOGLE_AUTO_LOGIN_HELPER_H_
#include <deque>
+#include "base/observer_list.h"
#include "chrome/browser/signin/ubertoken_fetcher.h"
#include "google_apis/gaia/gaia_auth_consumer.h"
class GaiaAuthFetcher;
+class GoogleServiceAuthError;
class Profile;
-// Logs in the current signed in user into Google services. Populates the cookie
-// jar with Google credentials of the signed in user.
+// Merges a Google account known to Chrome into the cookie jar. Once the
+// account is merged, successfully or not, a NOTIFICATION_MERGE_SESSION_COMPLETE
+// notification is sent out. When merging multiple accounts, one instance of
+// the helper is better than multiple instances if there is the possibility
+// that they run concurrently, since changes to the cookie must be serialized.
+//
+// By default instances of GoogleAutoLoginHelper delete themselves when done.
class GoogleAutoLoginHelper : public GaiaAuthConsumer,
public UbertokenConsumer {
public:
- explicit GoogleAutoLoginHelper(Profile* profile);
+ class Observer {
+ public:
+ // Called whenever a merge session is completed. The account that was
+ // merged is given by |account_id|. If |error| is equal to
+ // GoogleServiceAuthError::AuthErrorNone() then the merge succeeeded.
+ virtual void MergeSessionCompleted(const std::string& account_id,
+ const GoogleServiceAuthError& error) = 0;
+ protected:
+ virtual ~Observer() {}
+ };
+
+ GoogleAutoLoginHelper(Profile* profile, Observer* observer);
virtual ~GoogleAutoLoginHelper();
void LogIn();
void LogIn(const std::string& account_id);
+ // Add or remove observers of this helper.
+ void AddObserver(Observer* observer);
+ void RemoveObserver(Observer* observer);
+
+ // Cancel all login requests.
+ void CancelAll();
+
+ private:
+ // Overridden from UbertokenConsumer.
+ virtual void OnUbertokenSuccess(const std::string& token) OVERRIDE;
+ virtual void OnUbertokenFailure(const GoogleServiceAuthError& error) OVERRIDE;
+
// Overridden from GaiaAuthConsumer.
virtual void OnMergeSessionSuccess(const std::string& data) OVERRIDE;
virtual void OnMergeSessionFailure(const GoogleServiceAuthError& error)
OVERRIDE;
- // Overridden from UbertokenConsumer.
- virtual void OnUbertokenSuccess(const std::string& token) OVERRIDE;
- virtual void OnUbertokenFailure(const GoogleServiceAuthError& error) OVERRIDE;
+ // Starts the proess of fetching the uber token and performing a merge session
+ // for the next account. Virtual so that it can be overriden in tests.
+ virtual void StartFetching();
- // For testing.
- virtual UbertokenFetcher* CreateNewUbertokenFetcher();
- virtual GaiaAuthFetcher* CreateNewGaiaAuthFetcher();
+ // Call observer when merge session completes.
+ void SignalComplete(const std::string& account_id,
+ const GoogleServiceAuthError& error);
+
+ // Start the next merge session, if needed.
+ void MergeNextAccount();
- private:
Profile* profile_;
scoped_ptr<GaiaAuthFetcher> gaia_auth_fetcher_;
scoped_ptr<UbertokenFetcher> uber_token_fetcher_;
std::deque<std::string> accounts_;
+ // List of observers to notify when merge session completes.
+ // Makes sure list is empty on destruction.
+ ObserverList<Observer, true> observer_list_;
+
DISALLOW_COPY_AND_ASSIGN(GoogleAutoLoginHelper);
};
-#endif // CHROME_BROWSER_ANDROID_SIGNIN_GOOGLE_AUTO_LOGIN_HELPER_H_
+#endif // CHROME_BROWSER_SIGNIN_GOOGLE_AUTO_LOGIN_HELPER_H_
« no previous file with comments | « chrome/browser/signin/account_reconcilor_unittest.cc ('k') | chrome/browser/signin/google_auto_login_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698