Chromium Code Reviews| 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 ff9d4b0a07212f90dfaa94bd0cd66aae29008472..7a40b2e7004561bff86d2a514d56a53a67ecab88 100644 |
| --- a/components/signin/core/browser/gaia_cookie_manager_service.h |
| +++ b/components/signin/core/browser/gaia_cookie_manager_service.h |
| @@ -16,6 +16,7 @@ |
| #include "net/url_request/url_fetcher_delegate.h" |
| class GaiaAuthFetcher; |
| +class GaiaCookieRequest; |
| class GoogleServiceAuthError; |
| class OAuth2TokenService; |
| @@ -36,11 +37,6 @@ 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, |
| @@ -54,28 +50,19 @@ class GaiaCookieManagerService : public KeyedService, |
| 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); |
| + static GaiaCookieRequest CreateListAccountsRequest(); |
| private: |
| GaiaCookieRequest( |
| GaiaCookieRequestType request_type, |
| - const std::string& account_id, |
| - const GaiaCookieManagerService::ListAccountsCallback& |
| - list_accounts_callback); |
| + const std::string& account_id); |
| GaiaCookieRequestType request_type_; |
| std::string account_id_; |
| - GaiaCookieManagerService::ListAccountsCallback list_accounts_callback_; |
| }; |
| class Observer { |
| @@ -85,7 +72,18 @@ class GaiaCookieManagerService : public KeyedService, |
| // GoogleServiceAuthError::AuthErrorNone() then the merge succeeeded. |
| virtual void OnAddAccountToCookieCompleted( |
| const std::string& account_id, |
| - const GoogleServiceAuthError& error) = 0; |
| + const GoogleServiceAuthError& error) {} |
| + |
| + // Called whenever the GaiaCookieManagerService's list of GAIA accounts is |
| + // updated. The GCMS monitors the APISID cookie and triggers a /ListAccounts |
| + // call on change. The GCMS will also call ListAccounts upon the first call |
| + // to ListAccounts(). The GCMS will delay calling ListAccounts if other |
| + // requests are in queue that would modify the APISID cookie. |
| + // If the ListAccounts call fails and the GCMS cannot recover, the reason |
| + // is passed in |error|. |
| + virtual void OnGaiaAccountsInCookieUpdated( |
| + const std::vector<std::pair<std::string, bool> >& accounts, |
| + const GoogleServiceAuthError& error) {} |
| protected: |
| virtual ~Observer() {} |
| @@ -158,9 +156,16 @@ class GaiaCookieManagerService : public KeyedService, |
| SigninClient* signin_client); |
| ~GaiaCookieManagerService() override; |
| + void Init(); |
| + void Shutdown() override; |
| + |
| void AddAccountToCookie(const std::string& account_id); |
| - void ListAccounts(const ListAccountsCallback& callback); |
| + // Returns if the listed accounts are up to date or not (ignore the out |
| + // parameter if return is false). The parameter will be assigned the current |
| + // cached accounts. If the accounts are not up to date, a ListAccounts fetch |
| + // is sent GAIA and Observer::OnGaiaAccountsInCookieUpdated will be called. |
| + bool ListAccounts(std::vector<std::pair<std::string,bool> >* accounts); |
| // Add or remove observers of this helper. |
| void AddObserver(Observer* observer); |
| @@ -186,11 +191,19 @@ class GaiaCookieManagerService : public KeyedService, |
| return &external_cc_result_fetcher_; |
| } |
| + void set_list_accounts_fetched_once_for_testing(bool fetched) { |
| + list_accounts_fetched_once_ = fetched; |
| + } |
| + |
| private: |
| net::URLRequestContextGetter* request_context() { |
| return signin_client_->GetURLRequestContext(); |
| } |
| + // Called when a cookie changes. If the cookie relates to a GAIA LSID cookie, |
| + // then we call ListAccounts and update the UI element. |
|
Roger Tawa OOO till Jul 10th
2015/04/15 18:51:06
nit: comment should probably not say UI element bu
Mike Lerman
2015/04/16 13:13:46
copy paste error. Done.
|
| + void OnCookieChanged(const net::CanonicalCookie& cookie, bool removed); |
| + |
| // Overridden from UbertokenConsumer. |
| void OnUbertokenSuccess(const std::string& token) override; |
| void OnUbertokenFailure(const GoogleServiceAuthError& error) override; |
| @@ -198,6 +211,8 @@ class GaiaCookieManagerService : public KeyedService, |
| // Overridden from GaiaAuthConsumer. |
| void OnMergeSessionSuccess(const std::string& data) override; |
| void OnMergeSessionFailure(const GoogleServiceAuthError& error) override; |
| + void OnListAccountsSuccess(const std::string& data) override; |
| + void OnListAccountsFailure(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. |
| @@ -209,6 +224,9 @@ class GaiaCookieManagerService : public KeyedService, |
| // Virtual for testing purpose. |
| virtual void StartLogOutUrlFetch(); |
| + // Virtual for testing purposes. |
| + virtual void StartFetchingListAccounts(); |
| + |
| // Start the next request, if needed. |
| void HandleNextRequest(); |
| @@ -229,6 +247,10 @@ class GaiaCookieManagerService : public KeyedService, |
| // The last fetched ubertoken, for use in MergeSession retries. |
| std::string uber_token_; |
| + // Subscription to be called whenever the GAIA cookies change. |
| + scoped_ptr<SigninClient::CookieChangedSubscription> |
| + cookie_changed_subscription_; |
| + |
| // 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. |
| @@ -244,6 +266,10 @@ class GaiaCookieManagerService : public KeyedService, |
| // True once the ExternalCCResultFetcher has completed once. |
| bool external_cc_result_fetched_; |
| + std::vector<std::pair<std::string, bool> > listed_accounts_; |
| + |
| + bool list_accounts_fetched_once_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(GaiaCookieManagerService); |
| }; |