1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SIGNIN_OAUTH2_TOKEN_FETCHER_H_ 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_LOGIN_SIGNIN_OAUTH2_TOKEN_FETCHER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback_forward.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "google_apis/gaia/gaia_auth_consumer.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "google_apis/gaia/gaia_auth_fetcher.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace net { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class URLRequestContextGetter; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// OAuth2TokenFetcher is used to convert authenticated cookie jar from the 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// authentication profile into OAuth2 tokens and GAIA credentials that will be 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// used to kick off other token retrieval tasks. 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class OAuth2TokenFetcher : public base::SupportsWeakPtr<OAuth2TokenFetcher>, 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public GaiaAuthConsumer { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class Delegate { 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~Delegate() {} 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnOAuth2TokensAvailable( 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GaiaAuthConsumer::ClientOAuthResult& oauth2_tokens) = 0; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnOAuth2TokensFetchFailed() = 0; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OAuth2TokenFetcher(OAuth2TokenFetcher::Delegate* delegate, 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequestContextGetter* context_getter); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~OAuth2TokenFetcher(); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void StartExchangeFromCookies(const std::string& session_index, 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& signin_scoped_device_id); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void StartExchangeFromAuthCode(const std::string& auth_code); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Decides how to proceed on GAIA |error|. If the error looks temporary, 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // retries |task| until max retry count is reached. 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If retry count runs out, or error condition is unrecoverable, it runs 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |error_handler|. 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RetryOnError(const GoogleServiceAuthError& error, 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& task, 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& error_handler); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // GaiaAuthConsumer overrides. 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnClientOAuthSuccess( 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GaiaAuthConsumer::ClientOAuthResult& result) OVERRIDE; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnClientOAuthFailure( 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GoogleServiceAuthError& error) OVERRIDE; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OAuth2TokenFetcher::Delegate* delegate_; 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GaiaAuthConsumer::ClientOAuthResult oauth_tokens_; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GaiaAuthFetcher auth_fetcher_; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The retry counter. Increment this only when failure happened. 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int retry_count_; 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string session_index_; 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string signin_scoped_device_id_; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string auth_code_; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(OAuth2TokenFetcher); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SIGNIN_OAUTH2_TOKEN_FETCHER_H_ 76