| Index: components/signin/core/browser/gaia_cookie_manager_service.h
|
| diff --git a/components/signin/core/browser/gaia_cookie_manager_service.h b/components/signin/core/browser/gaia_cookie_manager_service.h
|
| index 6eef9db4618e018851a2aac93e2376c7de30e4ce..c288f44844cca70e02b7d9b04c6e9b18fc8f9f12 100644
|
| --- a/components/signin/core/browser/gaia_cookie_manager_service.h
|
| +++ b/components/signin/core/browser/gaia_cookie_manager_service.h
|
| @@ -36,6 +36,48 @@ class GaiaCookieManagerService : public KeyedService,
|
| public UbertokenConsumer,
|
| public net::URLFetcherDelegate {
|
| public:
|
| + typedef base::Callback<void(const std::string& data,
|
| + const GoogleServiceAuthError& error)>
|
| + ListAccountsCallback;
|
| +
|
| +
|
| + enum GaiaCookieRequestType {
|
| + ADD_ACCOUNT,
|
| + LOG_OUT,
|
| + LIST_ACCOUNTS
|
| + };
|
| +
|
| + // Contains the information and parameters for any request.
|
| + class GaiaCookieRequest {
|
| + public:
|
| + ~GaiaCookieRequest();
|
| +
|
| + GaiaCookieRequestType request_type() const { return request_type_; }
|
| + const std::string& account_id() const {return account_id_; }
|
| + const GaiaCookieManagerService::ListAccountsCallback&
|
| + list_accounts_callback() const {
|
| + return list_accounts_callback_;
|
| + }
|
| +
|
| + static GaiaCookieRequest CreateAddAccountRequest(
|
| + const std::string& account_id);
|
| + static GaiaCookieRequest CreateLogOutRequest();
|
| + static GaiaCookieRequest CreateListAccountsRequest(
|
| + const GaiaCookieManagerService::ListAccountsCallback&
|
| + list_accounts_callback);
|
| +
|
| + private:
|
| + GaiaCookieRequest(
|
| + GaiaCookieRequestType request_type,
|
| + const std::string& account_id,
|
| + const GaiaCookieManagerService::ListAccountsCallback&
|
| + list_accounts_callback);
|
| +
|
| + GaiaCookieRequestType request_type_;
|
| + std::string account_id_;
|
| + GaiaCookieManagerService::ListAccountsCallback list_accounts_callback_;
|
| + };
|
| +
|
| class Observer {
|
| public:
|
| // Called whenever a merge session is completed. The account that was
|
| @@ -124,6 +166,8 @@ class GaiaCookieManagerService : public KeyedService,
|
|
|
| void AddAccountToCookie(const std::string& account_id);
|
|
|
| + void ListAccounts(const ListAccountsCallback& callback);
|
| +
|
| // Add or remove observers of this helper.
|
| void AddObserver(Observer* observer);
|
| void RemoveObserver(Observer* observer);
|
| @@ -131,13 +175,6 @@ class GaiaCookieManagerService : public KeyedService,
|
| // Cancel all login requests.
|
| void CancelAll();
|
|
|
| - // Signout of |account_id| given a list of accounts already signed in.
|
| - // Since this involves signing out of all accounts and resigning back in,
|
| - // the order which |accounts| are given is important as it will dictate
|
| - // the sign in order. |account_id| does not have to be in |accounts|.
|
| - void LogOut(const std::string& account_id,
|
| - const std::vector<std::string>& accounts);
|
| -
|
| // Signout all accounts.
|
| void LogOutAllAccounts();
|
|
|
| @@ -148,7 +185,7 @@ class GaiaCookieManagerService : public KeyedService,
|
| const GoogleServiceAuthError& error);
|
|
|
| // Returns true of there are pending log ins or outs.
|
| - bool is_running() const { return accounts_.size() > 0; }
|
| + bool is_running() const { return requests_.size() > 0; }
|
|
|
| // Start the process of fetching the external check connection result so that
|
| // its ready when we try to perform a merge session.
|
| @@ -167,12 +204,9 @@ class GaiaCookieManagerService : public KeyedService,
|
| void OnMergeSessionSuccess(const std::string& data) override;
|
| void OnMergeSessionFailure(const GoogleServiceAuthError& error) override;
|
|
|
| - void LogOutInternal(const std::string& account_id,
|
| - const std::vector<std::string>& accounts);
|
| -
|
| - // Starts the process of fetching the uber token and then performing a merge
|
| - // session for the next account. Virtual so that it can be overriden in tests.
|
| - virtual void StartFetching();
|
| + // 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 StartFetchingUbertoken();
|
|
|
| // Virtual for testing purposes.
|
| virtual void StartFetchingMergeSession();
|
| @@ -180,8 +214,8 @@ class GaiaCookieManagerService : public KeyedService,
|
| // Virtual for testing purpose.
|
| virtual void StartLogOutUrlFetch();
|
|
|
| - // Start the next merge session, if needed.
|
| - void HandleNextAccount();
|
| + // Start the next request, if needed.
|
| + void HandleNextRequest();
|
|
|
| // Overridden from URLFetcherDelgate.
|
| void OnURLFetchComplete(const net::URLFetcher* source) override;
|
| @@ -200,10 +234,10 @@ class GaiaCookieManagerService : public KeyedService,
|
| // The last fetched ubertoken, for use in MergeSession retries.
|
| std::string uber_token_;
|
|
|
| - // A worklist for this class. Accounts names are stored here if
|
| - // we are pending a signin action for that account. Empty strings
|
| - // represent a signout request.
|
| - std::deque<std::string> accounts_;
|
| + // A worklist for this class. Stores any pending requests that couldn't be
|
| + // executed right away, since this class only permits one request to be
|
| + // executed at a time.
|
| + std::deque<GaiaCookieRequest> requests_;
|
|
|
| // List of observers to notify when merge session completes.
|
| // Makes sure list is empty on destruction.
|
|
|