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

Unified Diff: chrome/browser/policy/cloud/user_policy_signin_service_unittest.cc

Issue 23068005: Convert UserPolicySigninService to use OAuth2TokenService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge with ToT Created 7 years, 4 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
Index: chrome/browser/policy/cloud/user_policy_signin_service_unittest.cc
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_unittest.cc b/chrome/browser/policy/cloud/user_policy_signin_service_unittest.cc
index 5094030cff8a03c71678059ee8027910e87ba137..8da3550ea65d9f0c29e172360facefadb042db20 100644
--- a/chrome/browser/policy/cloud/user_policy_signin_service_unittest.cc
+++ b/chrome/browser/policy/cloud/user_policy_signin_service_unittest.cc
@@ -19,6 +19,7 @@
#include "chrome/browser/prefs/browser_prefs.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/signin/fake_signin_manager.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/test/base/testing_browser_process.h"
@@ -41,11 +42,9 @@
#if defined(OS_ANDROID)
#include "chrome/browser/policy/cloud/user_policy_signin_service_android.h"
#include "chrome/browser/signin/android_profile_oauth2_token_service.h"
-#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
#else
#include "chrome/browser/policy/cloud/user_policy_signin_service.h"
-#include "chrome/browser/signin/token_service.h"
-#include "chrome/browser/signin/token_service_factory.h"
+#include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
#endif
namespace em = enterprise_management;
@@ -72,10 +71,6 @@ const char kHostedDomainResponse[] =
" \"hd\": \"test.com\""
"}";
-const char kCombinedScopes[] =
- "https://www.googleapis.com/auth/chromeosdevicemanagement "
- "https://www.googleapis.com/auth/userinfo.email";
-
class SigninManagerFake : public FakeSigninManager {
public:
explicit SigninManagerFake(Profile* profile)
@@ -95,26 +90,32 @@ class SigninManagerFake : public FakeSigninManager {
};
#if defined(OS_ANDROID)
-
-class FakeProfileOAuth2TokenService : public AndroidProfileOAuth2TokenService {
+// TODO(atwilson): Remove this when ProfileOAuth2TokenService supports
+// usernames.
+class FakeAndroidProfileOAuth2TokenService
+ : public AndroidProfileOAuth2TokenService {
public:
- explicit FakeProfileOAuth2TokenService(Profile* profile) {
+ explicit FakeAndroidProfileOAuth2TokenService(Profile* profile) {
Initialize(profile);
}
static BrowserContextKeyedService* Build(content::BrowserContext* profile) {
- return new FakeProfileOAuth2TokenService(static_cast<Profile*>(profile));
+ return new FakeAndroidProfileOAuth2TokenService(
+ static_cast<Profile*>(profile));
}
// AndroidProfileOAuth2TokenService overrides:
- virtual void FetchOAuth2Token(
+ virtual void FetchOAuth2TokenWithUsername(
+ RequestImpl* request,
const std::string& username,
- const std::string& scope,
- const FetchOAuth2TokenCallback& callback) OVERRIDE {
+ const OAuth2TokenService::ScopeSet& scope) OVERRIDE {
ASSERT_TRUE(!HasPendingRequest());
ASSERT_EQ(kTestUser, username);
- ASSERT_EQ(kCombinedScopes, scope);
- pending_callback_ = callback;
+ ASSERT_EQ(2U, scope.size());
+ EXPECT_EQ(1U, scope.count(GaiaConstants::kDeviceManagementServiceOAuth));
+ EXPECT_EQ(1U, scope.count(
+ "https://www.googleapis.com/auth/userinfo.email"));
+ pending_request_ = request->AsWeakPtr();
}
void IssueToken(const std::string& token) {
@@ -122,17 +123,21 @@ class FakeProfileOAuth2TokenService : public AndroidProfileOAuth2TokenService {
GoogleServiceAuthError error = GoogleServiceAuthError::AuthErrorNone();
if (token.empty())
error = GoogleServiceAuthError::FromServiceError("fail");
- pending_callback_.Run(
- error, token, base::Time::Now() + base::TimeDelta::FromDays(1));
- pending_callback_.Reset();
+ if (pending_request_) {
+ pending_request_->InformConsumer(
+ error,
+ token,
+ base::Time::Now() + base::TimeDelta::FromDays(1));
+ }
+ pending_request_.reset();
}
bool HasPendingRequest() const {
- return !pending_callback_.is_null();
+ return pending_request_;
}
private:
- FetchOAuth2TokenCallback pending_callback_;
+ base::WeakPtr<RequestImpl> pending_request_;
};
#endif
@@ -180,26 +185,25 @@ class UserPolicySigninServiceTest : public testing::Test {
chrome::RegisterUserProfilePrefs(prefs->registry());
TestingProfile::Builder builder;
builder.SetPrefService(scoped_ptr<PrefServiceSyncable>(prefs.Pass()));
+ builder.AddTestingFactory(SigninManagerFactory::GetInstance(),
+ SigninManagerFake::Build);
+#if defined(OS_ANDROID)
+ builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(),
+ FakeAndroidProfileOAuth2TokenService::Build);
+#else
+ builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(),
+ FakeProfileOAuth2TokenService::Build);
+#endif
+
profile_ = builder.Build().Pass();
+ signin_manager_ = static_cast<SigninManagerFake*>(
+ SigninManagerFactory::GetForProfile(profile_.get()));
mock_store_ = new MockUserCloudPolicyStore();
EXPECT_CALL(*mock_store_, Load()).Times(AnyNumber());
manager_.reset(new UserCloudPolicyManager(
profile_.get(), scoped_ptr<UserCloudPolicyStore>(mock_store_)));
- signin_manager_ = static_cast<SigninManagerFake*>(
- SigninManagerFactory::GetInstance()->SetTestingFactoryAndUse(
- profile_.get(), SigninManagerFake::Build));
-
-#if defined(OS_ANDROID)
- ProfileOAuth2TokenServiceFactory* factory =
- ProfileOAuth2TokenServiceFactory::GetInstance();
- token_service_ = static_cast<FakeProfileOAuth2TokenService*>(
- factory->SetTestingFactoryAndUse(profile_.get(),
- FakeProfileOAuth2TokenService::Build));
-#endif
- // Make sure the UserPolicySigninService is created.
- UserPolicySigninServiceFactory::GetForProfile(profile_.get());
Mock::VerifyAndClearExpectations(mock_store_);
url_factory_.set_remove_fetcher_on_delete(true);
}
@@ -217,9 +221,26 @@ class UserPolicySigninServiceTest : public testing::Test {
run_loop.RunUntilIdle();
}
+#if defined(OS_ANDROID)
+ FakeAndroidProfileOAuth2TokenService* GetTokenService() {
+ ProfileOAuth2TokenService* service =
+ ProfileOAuth2TokenServiceFactory::GetForProfile(profile_.get());
+ return static_cast<FakeAndroidProfileOAuth2TokenService*>(service);
+ }
+#else
+ FakeProfileOAuth2TokenService* GetTokenService() {
+ ProfileOAuth2TokenService* service =
+ ProfileOAuth2TokenServiceFactory::GetForProfile(profile_.get());
+ return static_cast<FakeProfileOAuth2TokenService*>(service);
+ }
+#endif
+
bool IsRequestActive() {
#if defined(OS_ANDROID)
- if (token_service_->HasPendingRequest())
+ if (GetTokenService()->HasPendingRequest())
+ return true;
+#else
+ if (!GetTokenService()->GetPendingRequests().empty())
return true;
#endif
return url_factory_.GetFetcherByID(0);
@@ -227,8 +248,8 @@ class UserPolicySigninServiceTest : public testing::Test {
void MakeOAuthTokenFetchSucceed() {
#if defined(OS_ANDROID)
- ASSERT_TRUE(token_service_->HasPendingRequest());
- token_service_->IssueToken("fake_token");
+ ASSERT_TRUE(GetTokenService()->HasPendingRequest());
+ GetTokenService()->IssueToken("fake_token");
#else
ASSERT_TRUE(IsRequestActive());
net::TestURLFetcher* fetcher = url_factory_.GetFetcherByID(0);
@@ -340,9 +361,6 @@ class UserPolicySigninServiceTest : public testing::Test {
net::TestURLFetcherFactory url_factory_;
SigninManagerFake* signin_manager_;
-#if defined(OS_ANDROID)
- FakeProfileOAuth2TokenService* token_service_; // Not owned.
-#endif
// Used in conjunction with OnRegisterCompleted() to test client registration
// callbacks.
@@ -400,11 +418,43 @@ TEST_F(UserPolicySigninServiceTest, InitWhileSignedIn) {
ASSERT_FALSE(IsRequestActive());
// Make oauth token available.
- TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
- GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth_login_refresh_token");
+ GetTokenService()->IssueRefreshToken("oauth_login_refresh_token");
+
+ // Client registration should be in progress since we now have an oauth token.
+ ASSERT_TRUE(IsRequestActive());
+}
+
+TEST_F(UserPolicySigninServiceTest, InitWhileSignedInOAuthError) {
+ // Set the user as signed in.
+ SigninManagerFactory::GetForProfile(profile_.get())->SetAuthenticatedUsername(
+ kTestUser);
+
+ // Let the SigninService know that the profile has been created.
+ content::NotificationService::current()->Notify(
+ chrome::NOTIFICATION_PROFILE_ADDED,
+ content::Source<Profile>(profile_.get()),
+ content::NotificationService::NoDetails());
+
+ // UserCloudPolicyManager should be initialized.
+ ASSERT_TRUE(manager_->core()->service());
+
+ // Complete initialization of the store.
+ mock_store_->NotifyStoreLoaded();
+
+ // No oauth access token yet, so client registration should be deferred.
+ ASSERT_FALSE(IsRequestActive());
+
+ // Make oauth token available.
+ GetTokenService()->IssueRefreshToken("oauth_login_refresh_token");
// Client registration should be in progress since we now have an oauth token.
ASSERT_TRUE(IsRequestActive());
+
+ // Now fail the access token fetch.
+ GoogleServiceAuthError error(
+ GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
+ GetTokenService()->IssueErrorForAllPendingRequests(error);
+ ASSERT_FALSE(IsRequestActive());
}
TEST_F(UserPolicySigninServiceTest, SignInAfterInit) {
@@ -427,8 +477,7 @@ TEST_F(UserPolicySigninServiceTest, SignInAfterInit) {
mock_store_->NotifyStoreLoaded();
// Make oauth token available.
- TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
- GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth_login_refresh_token");
+ GetTokenService()->IssueRefreshToken("oauth_login_refresh_token");
// UserCloudPolicyManager should be initialized.
ASSERT_TRUE(manager_->core()->service());
@@ -457,8 +506,7 @@ TEST_F(UserPolicySigninServiceTest, SignInWithNonEnterpriseUser) {
mock_store_->NotifyStoreLoaded();
// Make oauth token available.
- TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
- GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth_login_refresh_token");
+ GetTokenService()->IssueRefreshToken("oauth_login_refresh_token");
// UserCloudPolicyManager should not be initialized and there should be no
// DMToken request active.
@@ -483,8 +531,7 @@ TEST_F(UserPolicySigninServiceTest, UnregisteredClient) {
kTestUser);
// Make oauth token available.
- TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
- GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth_login_refresh_token");
+ GetTokenService()->IssueRefreshToken("oauth_login_refresh_token");
// UserCloudPolicyManager should be initialized.
ASSERT_TRUE(manager_->core()->service());
@@ -517,8 +564,7 @@ TEST_F(UserPolicySigninServiceTest, RegisteredClient) {
kTestUser);
// Make oauth token available.
- TokenServiceFactory::GetForProfile(profile_.get())->IssueAuthTokenForTest(
- GaiaConstants::kGaiaOAuth2LoginRefreshToken, "oauth_login_refresh_token");
+ GetTokenService()->IssueRefreshToken("oauth_login_refresh_token");
// UserCloudPolicyManager should be initialized.
ASSERT_TRUE(manager_->core()->service());
@@ -578,8 +624,8 @@ TEST_F(UserPolicySigninServiceTest, RegisterPolicyClientOAuthFailure) {
// Cause the access token fetch to fail - callback should be invoked.
#if defined(OS_ANDROID)
- ASSERT_TRUE(token_service_->HasPendingRequest());
- token_service_->IssueToken("");
+ ASSERT_TRUE(GetTokenService()->HasPendingRequest());
+ GetTokenService()->IssueToken("");
#else
net::TestURLFetcher* fetcher = url_factory_.GetFetcherByID(0);
fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED, -1));

Powered by Google App Engine
This is Rietveld 408576698