Home | History | Annotate | Download | only in sync
      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 CHROME_BROWSER_SYNC_PROFILE_SYNC_AUTH_PROVIDER_H_
      6 #define CHROME_BROWSER_SYNC_PROFILE_SYNC_AUTH_PROVIDER_H_
      7 
      8 #include "base/memory/scoped_ptr.h"
      9 #include "base/memory/weak_ptr.h"
     10 #include "google_apis/gaia/oauth2_token_service.h"
     11 #include "sync/internal_api/public/sync_auth_provider.h"
     12 
     13 class ProfileOAuth2TokenService;
     14 
     15 namespace base {
     16 class SingleThreadTaskRunner;
     17 }  // namespace base
     18 
     19 // ProfileSyncAuthProvider implements function for SyncAuthProvider. It doesn't
     20 // inherit from SyncAuthProvider because it lives on UI thread while requests
     21 // originate from sync thread. SyncThreadProxy implements SyncAuthProvider and
     22 // forwards all requests.
     23 class ProfileSyncAuthProvider : public OAuth2TokenService::Consumer,
     24                                 public base::NonThreadSafe {
     25  public:
     26   ProfileSyncAuthProvider(ProfileOAuth2TokenService* token_service,
     27                           const std::string& account_id,
     28                           const std::string& scope);
     29   virtual ~ProfileSyncAuthProvider();
     30 
     31   // OAuth2TokenService::Consumer implementation.
     32   virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
     33                                  const std::string& access_token,
     34                                  const base::Time& expiration_time) OVERRIDE;
     35   virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
     36                                  const GoogleServiceAuthError& error) OVERRIDE;
     37 
     38   // Request access token from OAuth2TokenService. Once access token is received
     39   // result should be posted to callback on task_runner thread.
     40   void RequestAccessToken(
     41       const syncer::SyncAuthProvider::RequestTokenCallback& callback,
     42       scoped_refptr<base::SingleThreadTaskRunner> task_runner);
     43 
     44   void InvalidateAccessToken(const std::string& token);
     45 
     46   scoped_ptr<syncer::SyncAuthProvider> CreateProviderForSyncThread();
     47 
     48  private:
     49   class SyncThreadProxy;
     50 
     51   void RespondToTokenRequest(const GoogleServiceAuthError& error,
     52                              const std::string& token);
     53 
     54   ProfileOAuth2TokenService* token_service_;
     55   std::string account_id_;
     56   OAuth2TokenService::ScopeSet oauth2_scope_;
     57 
     58   // Only one outstanding request is allowed. Previous request is reported
     59   // cancelled if new one arrives.
     60   scoped_ptr<OAuth2TokenService::Request> access_token_request_;
     61   syncer::SyncAuthProvider::RequestTokenCallback request_token_callback_;
     62   scoped_refptr<base::SingleThreadTaskRunner> callback_task_runner_;
     63 
     64   base::WeakPtrFactory<ProfileSyncAuthProvider> weak_factory_;
     65 
     66   DISALLOW_COPY_AND_ASSIGN(ProfileSyncAuthProvider);
     67 };
     68 
     69 #endif  // CHROME_BROWSER_SYNC_PROFILE_SYNC_AUTH_PROVIDER_H_
     70