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

Unified Diff: chrome/browser/extensions/api/identity/identity_api.cc

Issue 99173004: Identity API: add multi-account support to token cache and request queues (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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
Index: chrome/browser/extensions/api/identity/identity_api.cc
diff --git a/chrome/browser/extensions/api/identity/identity_api.cc b/chrome/browser/extensions/api/identity/identity_api.cc
index 650f250a4e738486275cf1a04508fe86c212bc5a..e97ba0d93256a0f2e2ae7ee0c9a324c2e15f4a26 100644
--- a/chrome/browser/extensions/api/identity/identity_api.cc
+++ b/chrome/browser/extensions/api/identity/identity_api.cc
@@ -103,6 +103,14 @@ bool IdentityGetAuthTokenFunction::RunImpl() {
return false;
}
+ ProfileOAuth2TokenService* token_service =
+ ProfileOAuth2TokenServiceFactory::GetForProfile(GetProfile());
+
+ std::set<std::string> scopes(oauth2_info.scopes.begin(),
+ oauth2_info.scopes.end());
+ token_key_.reset(new ExtensionTokenKey(
+ GetExtension()->id(), token_service->GetPrimaryAccountId(), scopes));
+
// Balanced in CompleteFunctionWithResult|CompleteFunctionWithError
AddRef();
@@ -161,9 +169,6 @@ void IdentityGetAuthTokenFunction::StartMintTokenFlow(
// Flows are serialized to prevent excessive traffic to GAIA, and
// to consolidate UI pop-ups.
- const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(GetExtension());
- std::set<std::string> scopes(oauth2_info.scopes.begin(),
- oauth2_info.scopes.end());
IdentityAPI* id_api =
extensions::IdentityAPI::GetFactoryInstance()->GetForProfile(
GetProfile());
@@ -177,17 +182,13 @@ void IdentityGetAuthTokenFunction::StartMintTokenFlow(
return;
}
if (!id_api->mint_queue()->empty(
- IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE,
- GetExtension()->id(), scopes)) {
+ IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE, *token_key_)) {
// Another call is going through a consent UI.
CompleteFunctionWithError(identity_constants::kNoGrant);
return;
}
}
- id_api->mint_queue()->RequestStart(type,
- GetExtension()->id(),
- scopes,
- this);
+ id_api->mint_queue()->RequestStart(type, *token_key_, this);
}
void IdentityGetAuthTokenFunction::CompleteMintTokenFlow() {
@@ -200,7 +201,7 @@ void IdentityGetAuthTokenFunction::CompleteMintTokenFlow() {
extensions::IdentityAPI::GetFactoryInstance()
->GetForProfile(GetProfile())
->mint_queue()
- ->RequestComplete(type, GetExtension()->id(), scopes, this);
+ ->RequestComplete(type, *token_key_, this);
}
void IdentityGetAuthTokenFunction::StartMintToken(
@@ -208,8 +209,7 @@ void IdentityGetAuthTokenFunction::StartMintToken(
const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(GetExtension());
IdentityAPI* id_api =
IdentityAPI::GetFactoryInstance()->GetForProfile(GetProfile());
- IdentityTokenCacheValue cache_entry = id_api->GetCachedToken(
- GetExtension()->id(), oauth2_info.scopes);
+ IdentityTokenCacheValue cache_entry = id_api->GetCachedToken(*token_key_);
IdentityTokenCacheValue::CacheValueStatus cache_status =
cache_entry.status();
@@ -266,12 +266,11 @@ void IdentityGetAuthTokenFunction::StartMintToken(
void IdentityGetAuthTokenFunction::OnMintTokenSuccess(
const std::string& access_token, int time_to_live) {
- const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(GetExtension());
IdentityTokenCacheValue token(access_token,
base::TimeDelta::FromSeconds(time_to_live));
IdentityAPI::GetFactoryInstance()
->GetForProfile(GetProfile())
- ->SetCachedToken(GetExtension()->id(), oauth2_info.scopes, token);
+ ->SetCachedToken(*token_key_, token);
CompleteMintTokenFlow();
CompleteFunctionWithResult(access_token);
@@ -306,11 +305,9 @@ void IdentityGetAuthTokenFunction::OnMintTokenFailure(
void IdentityGetAuthTokenFunction::OnIssueAdviceSuccess(
const IssueAdviceInfo& issue_advice) {
- const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(GetExtension());
IdentityAPI::GetFactoryInstance()
->GetForProfile(GetProfile())
- ->SetCachedToken(GetExtension()->id(),
- oauth2_info.scopes,
+ ->SetCachedToken(*token_key_,
IdentityTokenCacheValue(issue_advice));
CompleteMintTokenFlow();
@@ -373,12 +370,11 @@ void IdentityGetAuthTokenFunction::OnGaiaFlowCompleted(
int time_to_live;
if (!expiration.empty() && base::StringToInt(expiration, &time_to_live)) {
- const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(GetExtension());
IdentityTokenCacheValue token_value(
access_token, base::TimeDelta::FromSeconds(time_to_live));
IdentityAPI::GetFactoryInstance()
->GetForProfile(GetProfile())
- ->SetCachedToken(GetExtension()->id(), oauth2_info.scopes, token_value);
+ ->SetCachedToken(*token_key_, token_value);
}
CompleteMintTokenFlow();
@@ -682,12 +678,8 @@ IdentityMintRequestQueue* IdentityAPI::mint_queue() {
return &mint_queue_;
}
-void IdentityAPI::SetCachedToken(const std::string& extension_id,
- const std::vector<std::string> scopes,
+void IdentityAPI::SetCachedToken(const ExtensionTokenKey& key,
const IdentityTokenCacheValue& token_data) {
- std::set<std::string> scopeset(scopes.begin(), scopes.end());
- TokenCacheKey key(extension_id, scopeset);
-
CachedTokens::iterator it = token_cache_.find(key);
if (it != token_cache_.end() && it->second.status() <= token_data.status())
token_cache_.erase(it);
@@ -713,9 +705,7 @@ void IdentityAPI::EraseAllCachedTokens() {
}
const IdentityTokenCacheValue& IdentityAPI::GetCachedToken(
- const std::string& extension_id, const std::vector<std::string> scopes) {
- std::set<std::string> scopeset(scopes.begin(), scopes.end());
- TokenCacheKey key(extension_id, scopeset);
+ const ExtensionTokenKey& key) {
return token_cache_[key];
}
@@ -765,23 +755,4 @@ void ProfileKeyedAPIFactory<IdentityAPI>::DeclareFactoryDependencies() {
DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance());
}
-IdentityAPI::TokenCacheKey::TokenCacheKey(const std::string& extension_id,
- const std::set<std::string> scopes)
- : extension_id(extension_id),
- scopes(scopes) {
-}
-
-IdentityAPI::TokenCacheKey::~TokenCacheKey() {
-}
-
-bool IdentityAPI::TokenCacheKey::operator<(
- const IdentityAPI::TokenCacheKey& rhs) const {
- if (extension_id < rhs.extension_id)
- return true;
- else if (rhs.extension_id < extension_id)
- return false;
-
- return scopes < rhs.scopes;
-}
-
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698