Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2604)

Unified Diff: chrome/browser/signin/oauth2_token_service.cc

Issue 12880014: Get OAuth2TokenService working on Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Disable unit test on Android -- it doesn't make sense. Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/signin/oauth2_token_service.h ('k') | chrome/browser/sync/profile_sync_service_android.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/signin/oauth2_token_service.cc
diff --git a/chrome/browser/signin/oauth2_token_service.cc b/chrome/browser/signin/oauth2_token_service.cc
index a0392973e75af8b59e79b4aa44f5846f764cb029..7886054a7bf5e7173a2ebbfc326a3b1a484fd69e 100644
--- a/chrome/browser/signin/oauth2_token_service.cc
+++ b/chrome/browser/signin/oauth2_token_service.cc
@@ -29,6 +29,10 @@
#include "google_apis/gaia/oauth2_access_token_consumer.h"
#include "google_apis/gaia/oauth2_access_token_fetcher.h"
+#if defined(OS_ANDROID)
+#include "chrome/browser/sync/profile_sync_service_android.h"
+#endif
+
namespace {
// Maximum number of retries in fetching an OAuth2 access token.
@@ -362,9 +366,9 @@ void OAuth2TokenService::Shutdown() {
// static
void OAuth2TokenService::InformConsumer(
base::WeakPtr<OAuth2TokenService::RequestImpl> request,
- GoogleServiceAuthError error,
- std::string access_token,
- base::Time expiration_date) {
+ const GoogleServiceAuthError& error,
+ const std::string& access_token,
+ const base::Time& expiration_date) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
if (request)
@@ -378,6 +382,7 @@ scoped_ptr<OAuth2TokenService::Request> OAuth2TokenService::StartRequest(
scoped_ptr<RequestImpl> request(new RequestImpl(consumer));
+#if !defined(OS_ANDROID)
TokenService* token_service = TokenServiceFactory::GetForProfile(profile_);
if (!token_service || !token_service->HasOAuthLoginToken()) {
MessageLoop::current()->PostTask(FROM_HERE, base::Bind(
@@ -388,6 +393,7 @@ scoped_ptr<OAuth2TokenService::Request> OAuth2TokenService::StartRequest(
base::Time()));
return request.PassAs<Request>();
}
+#endif
const CacheEntry* cache_entry = GetCacheEntry(scopes);
if (cache_entry && cache_entry->access_token.length()) {
@@ -400,6 +406,17 @@ scoped_ptr<OAuth2TokenService::Request> OAuth2TokenService::StartRequest(
return request.PassAs<Request>();
}
+#if defined(OS_ANDROID)
+ DCHECK_EQ(scopes.size(), 1U);
+ std::vector<std::string> scope_list(scopes.begin(), scopes.end());
+ ProfileSyncServiceAndroid* sync_service =
+ ProfileSyncServiceAndroid::GetProfileSyncServiceAndroid();
+ sync_service->FetchOAuth2Token(
+ scope_list.front(),
+ base::Bind(&OAuth2TokenService::InformConsumer,
+ request->AsWeakPtr()));
+ return request.PassAs<Request>();
+#else
std::string refresh_token = token_service->GetOAuth2LoginRefreshToken();
if (!refresh_token.length()) {
MessageLoop::current()->PostTask(FROM_HERE, base::Bind(
@@ -425,6 +442,22 @@ scoped_ptr<OAuth2TokenService::Request> OAuth2TokenService::StartRequest(
pending_fetchers_[fetch_parameters] = Fetcher::CreateAndStart(
profile_, getter_, refresh_token, scopes, request->AsWeakPtr());
return request.PassAs<Request>();
+#endif // defined(OS_ANDROID)
+}
+
+void OAuth2TokenService::InvalidateToken(const ScopeSet& scopes,
+ const std::string& invalid_token) {
+ RemoveCacheEntry(scopes, invalid_token);
+
+#if defined(OS_ANDROID)
+ DCHECK_EQ(scopes.size(), 1U);
+ std::vector<std::string> scope_list(scopes.begin(), scopes.end());
+ ProfileSyncServiceAndroid* sync_service =
+ ProfileSyncServiceAndroid::GetProfileSyncServiceAndroid();
+ sync_service->InvalidateOAuth2Token(
+ scope_list.front(),
+ invalid_token);
+#endif
}
void OAuth2TokenService::OnFetchComplete(Fetcher* fetcher) {
@@ -482,6 +515,19 @@ const OAuth2TokenService::CacheEntry* OAuth2TokenService::GetCacheEntry(
return &token_iterator->second;
}
+bool OAuth2TokenService::RemoveCacheEntry(
+ const OAuth2TokenService::ScopeSet& scopes,
+ const std::string& token_to_remove) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+ TokenCache::iterator token_iterator = token_cache_.find(scopes);
+ if (token_iterator == token_cache_.end() &&
+ token_iterator->second.access_token == token_to_remove) {
+ token_cache_.erase(token_iterator);
+ return true;
+ }
+ return false;
+}
+
void OAuth2TokenService::RegisterCacheEntry(
const std::string& refresh_token,
const OAuth2TokenService::ScopeSet& scopes,
@@ -489,6 +535,7 @@ void OAuth2TokenService::RegisterCacheEntry(
const base::Time& expiration_date) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+#if !defined(OS_ANDROID)
// Only register OAuth2 access tokens for the refresh token held by
// TokenService.
TokenService* token_service = TokenServiceFactory::GetForProfile(profile_);
@@ -499,6 +546,7 @@ void OAuth2TokenService::RegisterCacheEntry(
"Received a token with a refresh token not maintained by TokenService.";
return;
}
+#endif
CacheEntry& token = token_cache_[scopes];
token.access_token = access_token;
« no previous file with comments | « chrome/browser/signin/oauth2_token_service.h ('k') | chrome/browser/sync/profile_sync_service_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698