Home | History | Annotate | Download | only in browser
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef COMPONENTS_SIGNIN_CORE_BROWSER_PROFILE_OAUTH2_TOKEN_SERVICE_H_
      6 #define COMPONENTS_SIGNIN_CORE_BROWSER_PROFILE_OAUTH2_TOKEN_SERVICE_H_
      7 
      8 #include <string>
      9 
     10 #include "base/gtest_prod_util.h"
     11 #include "base/memory/linked_ptr.h"
     12 #include "components/keyed_service/core/keyed_service.h"
     13 #include "components/signin/core/browser/signin_error_controller.h"
     14 #include "google_apis/gaia/oauth2_token_service.h"
     15 
     16 namespace net {
     17 class URLRequestContextGetter;
     18 }
     19 
     20 class GoogleServiceAuthError;
     21 class SigninClient;
     22 
     23 // ProfileOAuth2TokenService is a KeyedService that retrieves
     24 // OAuth2 access tokens for a given set of scopes using the OAuth2 login
     25 // refresh tokens.
     26 //
     27 // See |OAuth2TokenService| for usage details.
     28 //
     29 // Note: after StartRequest returns, in-flight requests will continue
     30 // even if the TokenService refresh token that was used to initiate
     31 // the request changes or is cleared.  When the request completes,
     32 // Consumer::OnGetTokenSuccess will be invoked, but the access token
     33 // won't be cached.
     34 //
     35 // Note: requests should be started from the UI thread. To start a
     36 // request from other thread, please use OAuth2TokenServiceRequest.
     37 class ProfileOAuth2TokenService : public OAuth2TokenService,
     38                                   public KeyedService {
     39  public:
     40   virtual ~ProfileOAuth2TokenService();
     41 
     42   // Initializes this token service with the SigninClient.
     43   virtual void Initialize(SigninClient* client);
     44 
     45   // KeyedService implementation.
     46   virtual void Shutdown() OVERRIDE;
     47 
     48   // Lists account IDs of all accounts with a refresh token.
     49   virtual std::vector<std::string> GetAccounts() OVERRIDE;
     50 
     51   // Loads credentials from a backing persistent store to make them available
     52   // after service is used between profile restarts.
     53   //
     54   // Only call this method if there is at least one account connected to the
     55   // profile, otherwise startup will cause unneeded work on the IO thread.  The
     56   // primary account is specified with the |primary_account_id| argument and
     57   // should not be empty.  For a regular profile, the primary account id comes
     58   // from SigninManager.  For a supervised user, the id comes from
     59   // SupervisedUserService.
     60   virtual void LoadCredentials(const std::string& primary_account_id);
     61 
     62   // Updates a |refresh_token| for an |account_id|. Credentials are persisted,
     63   // and available through |LoadCredentials| after service is restarted.
     64   virtual void UpdateCredentials(const std::string& account_id,
     65                                  const std::string& refresh_token);
     66 
     67   // Revokes all credentials handled by the object.
     68   virtual void RevokeAllCredentials();
     69 
     70   SigninErrorController* signin_error_controller() {
     71     return signin_error_controller_.get();
     72   }
     73 
     74   const SigninErrorController* signin_error_controller() const {
     75     return signin_error_controller_.get();
     76   }
     77 
     78   SigninClient* client() const { return client_; }
     79 
     80  protected:
     81   ProfileOAuth2TokenService();
     82 
     83   // OAuth2TokenService overrides.
     84   // Note: These methods are overriden so that ProfileOAuth2TokenService is a
     85   // concrete class.
     86 
     87   // Simply returns NULL and should be overriden by subsclasses.
     88   virtual net::URLRequestContextGetter* GetRequestContext() OVERRIDE;
     89 
     90   // Updates the internal cache of the result from the most-recently-completed
     91   // auth request (used for reporting errors to the user).
     92   virtual void UpdateAuthError(
     93       const std::string& account_id,
     94       const GoogleServiceAuthError& error) OVERRIDE;
     95 
     96  private:
     97   // The client with which this instance was initialized, or NULL.
     98   SigninClient* client_;
     99 
    100   // Used to expose auth errors to the UI.
    101   scoped_ptr<SigninErrorController> signin_error_controller_;
    102 
    103   DISALLOW_COPY_AND_ASSIGN(ProfileOAuth2TokenService);
    104 };
    105 
    106 #endif  // COMPONENTS_SIGNIN_CORE_BROWSER_PROFILE_OAUTH2_TOKEN_SERVICE_H_
    107