// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/signin/token_service.h" #include "base/basictypes.h" #include "base/command_line.h" #include "base/prefs/pref_service.h" #include "base/strings/string_util.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/profile_oauth2_token_service.h" #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" #include "chrome/browser/signin/signin_manager.h" #include "chrome/browser/signin/signin_manager_factory.h" #include "chrome/browser/webdata/token_web_data.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/notification_source.h" #include "google_apis/gaia/gaia_auth_fetcher.h" #include "google_apis/gaia/gaia_constants.h" #include "net/url_request/url_request_context_getter.h" #if defined(OS_CHROMEOS) #include "base/metrics/histogram.h" #endif #if defined(ENABLE_MANAGED_USERS) #include "chrome/browser/managed_mode/managed_user_constants.h" #endif TokenService::TokenService() : profile_(NULL) { } TokenService::~TokenService() { } void TokenService::Shutdown() { } void TokenService::Initialize(const char* const source, Profile* profile) { if (Initialized()) return; DCHECK(!profile_); profile_ = profile; } void TokenService::AddAuthTokenManually(const std::string& service, const std::string& auth_token) { scoped_refptr token_web_data = TokenWebData::FromBrowserContext(profile_); if (token_web_data.get()) token_web_data->SetTokenForService(service, auth_token); } void TokenService::ResetCredentialsInMemory() { // Nothing left to reset. } void TokenService::UpdateCredentials( const GaiaAuthConsumer::ClientLoginResult& credentials) { // No longer use ClientLogin creds. } void TokenService::UpdateCredentialsWithOAuth2( const GaiaAuthConsumer::ClientOAuthResult& oauth2_tokens) { ProfileOAuth2TokenService* service = ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); service->UpdateCredentials(service->GetPrimaryAccountId(), oauth2_tokens.refresh_token); } void TokenService::LoadTokensFromDB() { // Profile pointer can be null in some tests. if (profile_) { ProfileOAuth2TokenService* service = ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); service->LoadCredentials(); } } void TokenService::EraseTokensFromDB() { ProfileOAuth2TokenService* service = ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); service->RevokeAllCredentials(); } bool TokenService::TokensLoadedFromDB() const { return true; } bool TokenService::AreCredentialsValid() const { return HasOAuthLoginToken(); } void TokenService::StartFetchingTokens() { // There are no tokens to fetch. } // Services dependent on a token will check if a token is available. // If it isn't, they'll go to sleep until they get a token event. bool TokenService::HasTokenForService(const char* service) const { return false; } const std::string& TokenService::GetTokenForService( const char* const service) const { return EmptyString(); } bool TokenService::HasOAuthLoginToken() const { ProfileOAuth2TokenService* service = ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); return service->RefreshTokenIsAvailable(service->GetPrimaryAccountId()); } void TokenService::IssueAuthTokenForTest(const std::string& service, const std::string& auth_token) { // Only issue oauth2 tokens. if (profile_ && service == GaiaConstants::kGaiaOAuth2LoginRefreshToken) { ProfileOAuth2TokenService* token_service = ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); #if defined(ENABLE_MANAGED_USERS) std::string account_id = profile_->IsManaged() ? managed_users::kManagedUserPseudoEmail : token_service->GetPrimaryAccountId(); #else std::string account_id = token_service->GetPrimaryAccountId(); #endif DCHECK(!account_id.empty()); token_service->UpdateCredentials(account_id, auth_token); } }