fake_profile_oauth2_token_service.cc revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
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) {
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  FakeProfileOAuth2TokenService* service = new FakeProfileOAuth2TokenService();
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  service->Initialize(reinterpret_cast<Profile*>(profile));
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return service;
193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::FakeProfileOAuth2TokenService() {
223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::~FakeProfileOAuth2TokenService() {
253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)bool FakeProfileOAuth2TokenService::RefreshTokenIsAvailable(
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const std::string& account_id) {
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return !GetRefreshToken(account_id).empty();
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueRefreshToken(
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& token) {
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  refresh_token_ = token;
353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (refresh_token_.empty())
363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    FireRefreshTokenRevoked("account_id");
373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  else
383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    FireRefreshTokenAvailable("account_id");
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // TODO(atwilson): Maybe we should also call FireRefreshTokensLoaded() here?
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueTokenForScope(
433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const ScopeSet& scope,
443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& access_token,
453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const base::Time& expiration) {
463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  CompleteRequests(false,
473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   scope,
483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   GoogleServiceAuthError::AuthErrorNone(),
493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   access_token,
503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   expiration);
513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueErrorForScope(
543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const ScopeSet& scope,
553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const GoogleServiceAuthError& error) {
563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  CompleteRequests(false, scope, error, std::string(), base::Time());
573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueErrorForAllPendingRequests(
603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const GoogleServiceAuthError& error) {
613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  CompleteRequests(true, ScopeSet(), error, std::string(), base::Time());
623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueTokenForAllPendingRequests(
653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& access_token,
663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const base::Time& expiration) {
673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  CompleteRequests(true,
683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   ScopeSet(),
693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   GoogleServiceAuthError::AuthErrorNone(),
703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   access_token,
713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   expiration);
723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::CompleteRequests(
753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    bool all_scopes,
763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const ScopeSet& scope,
773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const GoogleServiceAuthError& error,
783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& access_token,
793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const base::Time& expiration) {
803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  std::vector<FakeProfileOAuth2TokenService::PendingRequest> requests =
813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GetPendingRequests();
823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Walk the requests and notify the callbacks.
833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  for (std::vector<PendingRequest>::iterator it = pending_requests_.begin();
843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)       it != pending_requests_.end(); ++it) {
853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    if (it->request && (all_scopes || it->scopes == scope))
863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      it->request->InformConsumer(error, access_token, expiration);
873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
9068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)std::string FakeProfileOAuth2TokenService::GetRefreshToken(
9168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const std::string& account_id) {
923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return refresh_token_;
933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)net::URLRequestContextGetter*
963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::GetRequestContext() {
973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return NULL;
983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)std::vector<FakeProfileOAuth2TokenService::PendingRequest>
1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::GetPendingRequests() {
1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  std::vector<PendingRequest> valid_requests;
1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  for (std::vector<PendingRequest>::iterator it = pending_requests_.begin();
1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)       it != pending_requests_.end(); ++it) {
1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    if (it->request)
1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      valid_requests.push_back(*it);
1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return valid_requests;
1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::FetchOAuth2Token(
1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    RequestImpl* request,
11368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const std::string& account_id,
1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    net::URLRequestContextGetter* getter,
1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& client_id,
1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& client_secret,
1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const ScopeSet& scopes) {
1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  PendingRequest pending_request;
11968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  pending_request.account_id = account_id;
1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_request.client_id = client_id;
1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_request.client_secret = client_secret;
1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_request.scopes = scopes;
1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_request.request = request->AsWeakPtr();
1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_requests_.push_back(pending_request);
1253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
126