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

Unified Diff: chrome/browser/extensions/api/identity/identity_apitest.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_apitest.cc
diff --git a/chrome/browser/extensions/api/identity/identity_apitest.cc b/chrome/browser/extensions/api/identity/identity_apitest.cc
index 42d641f30127fa786d3116bafd9a5560b7ba1fcb..1dbcb13b8439061d06b16667ae17c43062804a39 100644
--- a/chrome/browser/extensions/api/identity/identity_apitest.cc
+++ b/chrome/browser/extensions/api/identity/identity_apitest.cc
@@ -14,6 +14,8 @@
#include "chrome/browser/extensions/extension_function_test_utils.h"
#include "chrome/browser/extensions/extension_service.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/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/common/chrome_switches.h"
@@ -356,6 +358,10 @@ class GetAuthTokenFunctionTest : public AsyncExtensionBrowserTest {
oauth2_info.scopes.push_back("scope1");
oauth2_info.scopes.push_back("scope2");
}
+
+ extension_id_ = ext->id();
+ oauth_scopes_ = std::set<std::string>(oauth2_info.scopes.begin(),
+ oauth2_info.scopes.end());
return ext;
}
@@ -363,6 +369,38 @@ class GetAuthTokenFunctionTest : public AsyncExtensionBrowserTest {
return IdentityAPI::GetFactoryInstance()->GetForProfile(
browser()->profile());
}
+
+ const std::string GetPrimaryAccountId() {
+ ProfileOAuth2TokenService* token_service =
+ ProfileOAuth2TokenServiceFactory::GetForProfile(browser()->profile());
+ return token_service->GetPrimaryAccountId();
+ }
+
+ void SetCachedToken(const IdentityTokenCacheValue& token_data) {
+ ExtensionTokenKey key(extension_id_, GetPrimaryAccountId(), oauth_scopes_);
+ id_api()->SetCachedToken(key, token_data);
+ }
+
+ const IdentityTokenCacheValue& GetCachedToken() {
+ ExtensionTokenKey key(extension_id_, GetPrimaryAccountId(), oauth_scopes_);
+ return id_api()->GetCachedToken(key);
+ }
+
+ void QueueRequestStart(IdentityMintRequestQueue::MintType type,
+ IdentityMintRequestQueue::Request* request) {
+ ExtensionTokenKey key(extension_id_, GetPrimaryAccountId(), oauth_scopes_);
+ id_api()->mint_queue()->RequestStart(type, key, request);
+ }
+
+ void QueueRequestComplete(IdentityMintRequestQueue::MintType type,
+ IdentityMintRequestQueue::Request* request) {
+ ExtensionTokenKey key(extension_id_, GetPrimaryAccountId(), oauth_scopes_);
+ id_api()->mint_queue()->RequestComplete(type, key, request);
+ }
+
+ private:
+ std::string extension_id_;
+ std::set<std::string> oauth_scopes_;
};
IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
@@ -442,10 +480,8 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
EXPECT_FALSE(func->login_ui_shown());
EXPECT_FALSE(func->scope_ui_shown());
- const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension.get());
- EXPECT_EQ(
- IdentityTokenCacheValue::CACHE_STATUS_ADVICE,
- id_api()->GetCachedToken(extension->id(), oauth2_info.scopes).status());
+ EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_ADVICE,
+ GetCachedToken().status());
}
IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
@@ -475,7 +511,6 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction());
scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES));
func->set_extension(extension.get());
- const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension.get());
EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true));
TestOAuth2MintTokenFlow* flow = new TestOAuth2MintTokenFlow(
TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get());
@@ -488,8 +523,7 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
EXPECT_FALSE(func->login_ui_shown());
EXPECT_FALSE(func->scope_ui_shown());
EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN,
- id_api()->GetCachedToken(extension->id(),
- oauth2_info.scopes).status());
+ GetCachedToken().status());
}
IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
@@ -728,7 +762,6 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
InteractiveApprovalSuccess) {
scoped_refptr<const Extension> extension(CreateExtension(CLIENT_ID | SCOPES));
- const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension.get());
scoped_refptr<MockGetAuthTokenFunction> func(new MockGetAuthTokenFunction());
func->set_extension(extension.get());
EXPECT_CALL(*func.get(), HasLoginToken()).WillOnce(Return(true));
@@ -746,8 +779,7 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
EXPECT_TRUE(func->scope_ui_shown());
EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN,
- id_api()->GetCachedToken(extension->id(),
- oauth2_info.scopes).status());
+ GetCachedToken().status());
}
IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, NoninteractiveQueue) {
@@ -756,19 +788,12 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, NoninteractiveQueue) {
func->set_extension(extension.get());
// Create a fake request to block the queue.
- const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension.get());
- std::set<std::string> scopes(oauth2_info.scopes.begin(),
- oauth2_info.scopes.end());
- IdentityAPI* id_api =
- extensions::IdentityAPI::GetFactoryInstance()->GetForProfile(
- browser()->profile());
- IdentityMintRequestQueue* queue = id_api->mint_queue();
MockQueuedMintRequest queued_request;
IdentityMintRequestQueue::MintType type =
IdentityMintRequestQueue::MINT_TYPE_NONINTERACTIVE;
EXPECT_CALL(queued_request, StartMintToken(type)).Times(1);
- queue->RequestStart(type, extension->id(), scopes, &queued_request);
+ QueueRequestStart(type, &queued_request);
// The real request will start processing, but wait in the queue behind
// the blocker.
@@ -782,7 +807,7 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, NoninteractiveQueue) {
TestOAuth2MintTokenFlow::MINT_TOKEN_SUCCESS, func.get());
EXPECT_CALL(*func.get(), CreateMintTokenFlow(_)).WillOnce(Return(flow));
- queue->RequestComplete(type, extension->id(), scopes, &queued_request);
+ QueueRequestComplete(type, &queued_request);
scoped_ptr<base::Value> value(WaitForSingleResult(func.get()));
std::string access_token;
@@ -798,19 +823,12 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, InteractiveQueue) {
func->set_extension(extension.get());
// Create a fake request to block the queue.
- const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension.get());
- std::set<std::string> scopes(oauth2_info.scopes.begin(),
- oauth2_info.scopes.end());
- IdentityAPI* id_api =
- extensions::IdentityAPI::GetFactoryInstance()->GetForProfile(
- browser()->profile());
- IdentityMintRequestQueue* queue = id_api->mint_queue();
MockQueuedMintRequest queued_request;
IdentityMintRequestQueue::MintType type =
IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE;
EXPECT_CALL(queued_request, StartMintToken(type)).Times(1);
- queue->RequestStart(type, extension->id(), scopes, &queued_request);
+ QueueRequestStart(type, &queued_request);
// The real request will start processing, but wait in the queue behind
// the blocker.
@@ -825,7 +843,7 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, InteractiveQueue) {
// The UI will be displayed and a token retrieved after the first
// queued request clears.
- queue->RequestComplete(type, extension->id(), scopes, &queued_request);
+ QueueRequestComplete(type, &queued_request);
scoped_ptr<base::Value> value(WaitForSingleResult(func.get()));
std::string access_token;
@@ -842,19 +860,12 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
func->set_extension(extension.get());
// Create a fake request to block the interactive queue.
- const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension.get());
- std::set<std::string> scopes(oauth2_info.scopes.begin(),
- oauth2_info.scopes.end());
- IdentityAPI* id_api =
- extensions::IdentityAPI::GetFactoryInstance()->GetForProfile(
- browser()->profile());
- IdentityMintRequestQueue* queue = id_api->mint_queue();
MockQueuedMintRequest queued_request;
IdentityMintRequestQueue::MintType type =
IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE;
EXPECT_CALL(queued_request, StartMintToken(type)).Times(1);
- queue->RequestStart(type, extension->id(), scopes, &queued_request);
+ QueueRequestStart(type, &queued_request);
// Non-interactive requests fail without hitting GAIA, because a
// consent UI is known to be up.
@@ -865,7 +876,7 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
EXPECT_FALSE(func->login_ui_shown());
EXPECT_FALSE(func->scope_ui_shown());
- queue->RequestComplete(type, extension->id(), scopes, &queued_request);
+ QueueRequestComplete(type, &queued_request);
}
IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
@@ -875,10 +886,9 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
func->set_extension(extension.get());
// pre-populate the cache with a token
- const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension.get());
IdentityTokenCacheValue token(kAccessToken,
base::TimeDelta::FromSeconds(3600));
- id_api()->SetCachedToken(extension->id(), oauth2_info.scopes, token);
+ SetCachedToken(token);
// Get a token. Should not require a GAIA request.
EXPECT_CALL(*func.get(), HasLoginToken())
@@ -899,10 +909,9 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
func->set_extension(extension.get());
// pre-populate the cache with advice
- const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension.get());
IssueAdviceInfo info;
IdentityTokenCacheValue token(info);
- id_api()->SetCachedToken(extension->id(), oauth2_info.scopes, token);
+ SetCachedToken(token);
// Should return an error without a GAIA request.
EXPECT_CALL(*func.get(), HasLoginToken())
@@ -921,16 +930,12 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
func->set_extension(extension.get());
// Create a fake request to block the queue.
- const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension.get());
- std::set<std::string> scopes(oauth2_info.scopes.begin(),
- oauth2_info.scopes.end());
- IdentityMintRequestQueue* queue = id_api()->mint_queue();
MockQueuedMintRequest queued_request;
IdentityMintRequestQueue::MintType type =
IdentityMintRequestQueue::MINT_TYPE_INTERACTIVE;
EXPECT_CALL(queued_request, StartMintToken(type)).Times(1);
- queue->RequestStart(type, extension->id(), scopes, &queued_request);
+ QueueRequestStart(type, &queued_request);
// The real request will start processing, but wait in the queue behind
// the blocker.
@@ -943,12 +948,12 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
// Populate the cache with a token while the request is blocked.
IdentityTokenCacheValue token(kAccessToken,
base::TimeDelta::FromSeconds(3600));
- id_api()->SetCachedToken(extension->id(), oauth2_info.scopes, token);
+ SetCachedToken(token);
// When we wake up the request, it returns the cached token without
// displaying a UI, or hitting GAIA.
- queue->RequestComplete(type, extension->id(), scopes, &queued_request);
+ QueueRequestComplete(type, &queued_request);
scoped_ptr<base::Value> value(WaitForSingleResult(func.get()));
std::string access_token;
@@ -965,10 +970,9 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
func->set_extension(extension.get());
// pre-populate the cache with a token
- const OAuth2Info& oauth2_info = OAuth2Info::GetOAuth2Info(extension.get());
IdentityTokenCacheValue token(kAccessToken,
base::TimeDelta::FromSeconds(3600));
- id_api()->SetCachedToken(extension->id(), oauth2_info.scopes, token);
+ SetCachedToken(token);
// Because the user is not signed in, the token will be removed,
// and we'll hit GAIA for new tokens.
@@ -988,8 +992,7 @@ IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest,
EXPECT_TRUE(func->login_ui_shown());
EXPECT_TRUE(func->scope_ui_shown());
EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN,
- id_api()->GetCachedToken(extension->id(),
- oauth2_info.scopes).status());
+ GetCachedToken().status());
}
IN_PROC_BROWSER_TEST_F(GetAuthTokenFunctionTest, ComponentWithChromeClientId) {
@@ -1030,14 +1033,17 @@ class RemoveCachedAuthTokenFunctionTest : public ExtensionBrowserTest {
}
void SetCachedToken(IdentityTokenCacheValue& token_data) {
- id_api()->SetCachedToken(extensions::id_util::GenerateId(kExtensionId),
- std::vector<std::string>(), token_data);
+ ExtensionTokenKey key(extensions::id_util::GenerateId(kExtensionId),
+ "test@example.com",
+ std::set<std::string>());
+ id_api()->SetCachedToken(key, token_data);
}
const IdentityTokenCacheValue& GetCachedToken() {
return id_api()->GetCachedToken(
- extensions::id_util::GenerateId(kExtensionId),
- std::vector<std::string>());
+ ExtensionTokenKey(extensions::id_util::GenerateId(kExtensionId),
+ "test@example.com",
+ std::set<std::string>()));
}
};
@@ -1070,6 +1076,8 @@ IN_PROC_BROWSER_TEST_F(RemoveCachedAuthTokenFunctionTest, MatchingToken) {
IdentityTokenCacheValue token(kAccessToken,
base::TimeDelta::FromSeconds(3600));
SetCachedToken(token);
+ EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_TOKEN,
+ GetCachedToken().status());
EXPECT_TRUE(InvalidateDefaultToken());
EXPECT_EQ(IdentityTokenCacheValue::CACHE_STATUS_NOTFOUND,
GetCachedToken().status());

Powered by Google App Engine
This is Rietveld 408576698