base: Use scoped_ptr for ownership of pointers in unittests.
[chromium-blink-merge.git] / components / proximity_auth / cryptauth / cryptauth_access_token_fetcher_impl.cc
blob294b2ba80f49cfb1602694974a696ff503ca4af2
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.
5 #include "components/proximity_auth/cryptauth/cryptauth_access_token_fetcher_impl.h"
7 namespace proximity_auth {
9 namespace {
11 // Returns the set of OAuth2 scopes that CryptAuth uses.
12 OAuth2TokenService::ScopeSet GetScopes() {
13 OAuth2TokenService::ScopeSet scopes;
14 scopes.insert("https://www.googleapis.com/auth/cryptauth");
15 return scopes;
18 } // namespace
20 CryptAuthAccessTokenFetcherImpl::CryptAuthAccessTokenFetcherImpl(
21 OAuth2TokenService* token_service,
22 const std::string& account_id)
23 : OAuth2TokenService::Consumer("cryptauth_access_token_fetcher"),
24 token_service_(token_service),
25 account_id_(account_id),
26 fetch_started_(false) {
29 CryptAuthAccessTokenFetcherImpl::~CryptAuthAccessTokenFetcherImpl() {
32 void CryptAuthAccessTokenFetcherImpl::FetchAccessToken(
33 const AccessTokenCallback& callback) {
34 if (fetch_started_) {
35 LOG(WARNING) << "Create an instance for each token fetched. Do not reuse.";
36 callback.Run(std::string());
37 return;
40 fetch_started_ = true;
41 callback_ = callback;
42 // This request will return a cached result if it is available, saving a
43 // network round trip every time we fetch the access token.
44 token_request_ = token_service_->StartRequest(account_id_, GetScopes(), this);
47 void CryptAuthAccessTokenFetcherImpl::OnGetTokenSuccess(
48 const OAuth2TokenService::Request* request,
49 const std::string& access_token,
50 const base::Time& expiration_time) {
51 callback_.Run(access_token);
54 void CryptAuthAccessTokenFetcherImpl::OnGetTokenFailure(
55 const OAuth2TokenService::Request* request,
56 const GoogleServiceAuthError& error) {
57 callback_.Run(std::string());
60 } // namespace proximity_auth