fake_profile_oauth2_token_service.cc revision 8bcbed890bc3ce4d7a057a8f32cab53fa534672e
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) {
348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  IssueRefreshTokenForUser("account_id", token);
358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeProfileOAuth2TokenService::IssueRefreshTokenForUser(
388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    const std::string& account_id,
398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    const std::string& token) {
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  refresh_token_ = token;
413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (refresh_token_.empty())
428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    FireRefreshTokenRevoked(account_id);
433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  else
448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    FireRefreshTokenAvailable(account_id);
453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // TODO(atwilson): Maybe we should also call FireRefreshTokensLoaded() here?
463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueTokenForScope(
493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const ScopeSet& scope,
503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& access_token,
513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const base::Time& expiration) {
523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  CompleteRequests(false,
533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   scope,
543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   GoogleServiceAuthError::AuthErrorNone(),
553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   access_token,
563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   expiration);
573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueErrorForScope(
603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const ScopeSet& scope,
613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const GoogleServiceAuthError& error) {
623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  CompleteRequests(false, scope, error, std::string(), base::Time());
633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueErrorForAllPendingRequests(
663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const GoogleServiceAuthError& error) {
673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  CompleteRequests(true, ScopeSet(), error, std::string(), base::Time());
683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::IssueTokenForAllPendingRequests(
713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& access_token,
723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const base::Time& expiration) {
733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  CompleteRequests(true,
743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   ScopeSet(),
753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   GoogleServiceAuthError::AuthErrorNone(),
763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   access_token,
773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                   expiration);
783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::CompleteRequests(
813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    bool all_scopes,
823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const ScopeSet& scope,
833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const GoogleServiceAuthError& error,
843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& access_token,
853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const base::Time& expiration) {
863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  std::vector<FakeProfileOAuth2TokenService::PendingRequest> requests =
873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      GetPendingRequests();
888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Walk the requests and notify the callbacks.
903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  for (std::vector<PendingRequest>::iterator it = pending_requests_.begin();
913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)       it != pending_requests_.end(); ++it) {
923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    if (it->request && (all_scopes || it->scopes == scope))
933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      it->request->InformConsumer(error, access_token, expiration);
943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
9768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)std::string FakeProfileOAuth2TokenService::GetRefreshToken(
9868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const std::string& account_id) {
993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return refresh_token_;
1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)net::URLRequestContextGetter*
1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::GetRequestContext() {
1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return NULL;
1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)std::vector<FakeProfileOAuth2TokenService::PendingRequest>
1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)FakeProfileOAuth2TokenService::GetPendingRequests() {
1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  std::vector<PendingRequest> valid_requests;
1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  for (std::vector<PendingRequest>::iterator it = pending_requests_.begin();
1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)       it != pending_requests_.end(); ++it) {
1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    if (it->request)
1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      valid_requests.push_back(*it);
1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return valid_requests;
1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void FakeProfileOAuth2TokenService::FetchOAuth2Token(
1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    RequestImpl* request,
12068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const std::string& account_id,
1213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    net::URLRequestContextGetter* getter,
1223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& client_id,
1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const std::string& client_secret,
1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    const ScopeSet& scopes) {
1253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  PendingRequest pending_request;
12668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  pending_request.account_id = account_id;
1273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_request.client_id = client_id;
1283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_request.client_secret = client_secret;
1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_request.scopes = scopes;
1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_request.request = request->AsWeakPtr();
1313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  pending_requests_.push_back(pending_request);
1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
133