fake_profile_oauth2_token_service.cc revision 3551c9c881056c480085172ff9840cab31610854
13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
23551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
33551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// found in the LICENSE file.
43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::PendingRequest::PendingRequest() {
83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::PendingRequest::~PendingRequest() {
113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// static
143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)BrowserContextKeyedService* FakeProfileOAuth2TokenService::Build(
153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    content::BrowserContext* profile) {
163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return new FakeProfileOAuth2TokenService();
173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::FakeProfileOAuth2TokenService() {
203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::~FakeProfileOAuth2TokenService() {
233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::Shutdown() {
263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Do not call the base class handler because it assumes that Initialize()
273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // is always called before Shutdown() and that's not the case for this mock.
283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueRefreshToken(
313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& token) {
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  refresh_token_ = token;
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (refresh_token_.empty())
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    FireRefreshTokenRevoked("account_id");
353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  else
363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    FireRefreshTokenAvailable("account_id");
373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // TODO(atwilson): Maybe we should also call FireRefreshTokensLoaded() here?
383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueTokenForScope(
413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const ScopeSet& scope,
423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& access_token,
433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const base::Time& expiration) {
443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  CompleteRequests(false,
453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   scope,
463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   GoogleServiceAuthError::AuthErrorNone(),
473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   access_token,
483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   expiration);
493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueErrorForScope(
523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const ScopeSet& scope,
533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const GoogleServiceAuthError& error) {
543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  CompleteRequests(false, scope, error, std::string(), base::Time());
553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueErrorForAllPendingRequests(
583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const GoogleServiceAuthError& error) {
593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  CompleteRequests(true, ScopeSet(), error, std::string(), base::Time());
603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueTokenForAllPendingRequests(
633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& access_token,
643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const base::Time& expiration) {
653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  CompleteRequests(true,
663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   ScopeSet(),
673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   GoogleServiceAuthError::AuthErrorNone(),
683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   access_token,
693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   expiration);
703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::CompleteRequests(
733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    bool all_scopes,
743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const ScopeSet& scope,
753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const GoogleServiceAuthError& error,
763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& access_token,
773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const base::Time& expiration) {
783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  std::vector<FakeProfileOAuth2TokenService::PendingRequest> requests =
793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GetPendingRequests();
803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Walk the requests and notify the callbacks.
813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  for (std::vector<PendingRequest>::iterator it = pending_requests_.begin();
823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)       it != pending_requests_.end(); ++it) {
833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    if (it->request && (all_scopes || it->scopes == scope))
843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      it->request->InformConsumer(error, access_token, expiration);
853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)std::string FakeProfileOAuth2TokenService::GetRefreshToken() {
893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return refresh_token_;
903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)net::URLRequestContextGetter*
933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::GetRequestContext() {
943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return NULL;
953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)std::vector<FakeProfileOAuth2TokenService::PendingRequest>
983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::GetPendingRequests() {
993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  std::vector<PendingRequest> valid_requests;
1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  for (std::vector<PendingRequest>::iterator it = pending_requests_.begin();
1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)       it != pending_requests_.end(); ++it) {
1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    if (it->request)
1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      valid_requests.push_back(*it);
1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return valid_requests;
1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::FetchOAuth2Token(
1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    RequestImpl* request,
1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    net::URLRequestContextGetter* getter,
1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& client_id,
1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& client_secret,
1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const ScopeSet& scopes) {
1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  PendingRequest pending_request;
1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_request.client_id = client_id;
1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_request.client_secret = client_secret;
1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_request.scopes = scopes;
1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_request.request = request->AsWeakPtr();
1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_requests_.push_back(pending_request);
1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
121