1// Copyright (c) 2012 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 GOOGLE_APIS_DRIVE_AUTH_SERVICE_H_ 6#define GOOGLE_APIS_DRIVE_AUTH_SERVICE_H_ 7 8#include <string> 9#include <vector> 10 11#include "base/memory/weak_ptr.h" 12#include "base/observer_list.h" 13#include "base/threading/thread_checker.h" 14#include "google_apis/drive/auth_service_interface.h" 15#include "google_apis/gaia/oauth2_token_service.h" 16 17namespace net { 18class URLRequestContextGetter; 19} 20 21namespace google_apis { 22 23class AuthServiceObserver; 24 25// This class provides authentication for Google services. 26// It integrates specific service integration with OAuth2 stack 27// (OAuth2TokenService) and provides OAuth2 token refresh infrastructure. 28// All public functions must be called on UI thread. 29class AuthService : public AuthServiceInterface, 30 public OAuth2TokenService::Observer { 31 public: 32 // |url_request_context_getter| is used to perform authentication with 33 // URLFetcher. 34 // 35 // |scopes| specifies OAuth2 scopes. 36 AuthService(OAuth2TokenService* oauth2_token_service, 37 const std::string& account_id, 38 net::URLRequestContextGetter* url_request_context_getter, 39 const std::vector<std::string>& scopes); 40 virtual ~AuthService(); 41 42 // Overriden from AuthServiceInterface: 43 virtual void AddObserver(AuthServiceObserver* observer) OVERRIDE; 44 virtual void RemoveObserver(AuthServiceObserver* observer) OVERRIDE; 45 virtual void StartAuthentication(const AuthStatusCallback& callback) OVERRIDE; 46 virtual bool HasAccessToken() const OVERRIDE; 47 virtual bool HasRefreshToken() const OVERRIDE; 48 virtual const std::string& access_token() const OVERRIDE; 49 virtual void ClearAccessToken() OVERRIDE; 50 virtual void ClearRefreshToken() OVERRIDE; 51 52 // Overridden from OAuth2TokenService::Observer: 53 virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE; 54 virtual void OnRefreshTokenRevoked(const std::string& account_id) OVERRIDE; 55 56 private: 57 // Called when the state of the refresh token changes. 58 void OnHandleRefreshToken(bool has_refresh_token); 59 60 // Called when authentication request from StartAuthentication() is 61 // completed. 62 void OnAuthCompleted(const AuthStatusCallback& callback, 63 GDataErrorCode error, 64 const std::string& access_token); 65 66 OAuth2TokenService* oauth2_token_service_; 67 std::string account_id_; 68 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; 69 bool has_refresh_token_; 70 std::string access_token_; 71 std::vector<std::string> scopes_; 72 ObserverList<AuthServiceObserver> observers_; 73 base::ThreadChecker thread_checker_; 74 75 // Note: This should remain the last member so it'll be destroyed and 76 // invalidate its weak pointers before any other members are destroyed. 77 base::WeakPtrFactory<AuthService> weak_ptr_factory_; 78 79 DISALLOW_COPY_AND_ASSIGN(AuthService); 80}; 81 82} // namespace google_apis 83 84#endif // GOOGLE_APIS_DRIVE_AUTH_SERVICE_H_ 85