| Index: components/signin/ios/browser/profile_oauth2_token_service_ios_unittest.mm
|
| diff --git a/components/signin/ios/browser/profile_oauth2_token_service_ios_unittest.mm b/components/signin/ios/browser/profile_oauth2_token_service_ios_unittest.mm
|
| deleted file mode 100644
|
| index db91ff78f3bdcaf4010b2ea2cb9c026dcb3fc4d2..0000000000000000000000000000000000000000
|
| --- a/components/signin/ios/browser/profile_oauth2_token_service_ios_unittest.mm
|
| +++ /dev/null
|
| @@ -1,404 +0,0 @@
|
| -// Copyright 2014 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 "components/signin/ios/browser/profile_oauth2_token_service_ios.h"
|
| -
|
| -#include "base/prefs/pref_registry_simple.h"
|
| -#include "base/prefs/testing_pref_service.h"
|
| -#include "base/run_loop.h"
|
| -#include "components/signin/core/browser/profile_oauth2_token_service.h"
|
| -#include "components/signin/core/browser/test_signin_client.h"
|
| -#include "components/signin/core/common/signin_pref_names.h"
|
| -#include "google_apis/gaia/gaia_urls.h"
|
| -#include "google_apis/gaia/oauth2_access_token_consumer.h"
|
| -#include "google_apis/gaia/oauth2_token_service_test_util.h"
|
| -#include "ios/public/test/fake_profile_oauth2_token_service_ios_provider.h"
|
| -#include "net/url_request/test_url_fetcher_factory.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -class ProfileOAuth2TokenServiceIOSTest : public testing::Test,
|
| - public OAuth2TokenService::Consumer,
|
| - public OAuth2TokenService::Observer {
|
| - public:
|
| - ProfileOAuth2TokenServiceIOSTest()
|
| - : OAuth2TokenService::Consumer("test_consumer_id"),
|
| - factory_(NULL),
|
| - client_(&prefs_),
|
| - token_available_count_(0),
|
| - token_revoked_count_(0),
|
| - tokens_loaded_count_(0),
|
| - access_token_success_(0),
|
| - access_token_failure_(0),
|
| - last_access_token_error_(GoogleServiceAuthError::NONE) {}
|
| -
|
| - void SetUp() override {
|
| - prefs_.registry()->RegisterBooleanPref(
|
| - prefs::kTokenServiceExcludeAllSecondaryAccounts, false);
|
| - prefs_.registry()->RegisterListPref(
|
| - prefs::kTokenServiceExcludedSecondaryAccounts);
|
| -
|
| - factory_.SetFakeResponse(GaiaUrls::GetInstance()->oauth2_revoke_url(),
|
| - "",
|
| - net::HTTP_OK,
|
| - net::URLRequestStatus::SUCCESS);
|
| - fake_provider_ = client_.GetIOSProviderAsFake();
|
| - oauth2_service_.Initialize(&client_, &signin_error_controller_);
|
| - oauth2_service_.AddObserver(this);
|
| - }
|
| -
|
| - void TearDown() override {
|
| - oauth2_service_.RemoveObserver(this);
|
| - oauth2_service_.Shutdown();
|
| - }
|
| -
|
| - // OAuth2TokenService::Consumer implementation.
|
| - void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
|
| - const std::string& access_token,
|
| - const base::Time& expiration_time) override {
|
| - ++access_token_success_;
|
| - }
|
| -
|
| - void OnGetTokenFailure(const OAuth2TokenService::Request* request,
|
| - const GoogleServiceAuthError& error) override {
|
| - ++access_token_failure_;
|
| - last_access_token_error_ = error;
|
| - };
|
| -
|
| - // OAuth2TokenService::Observer implementation.
|
| - void OnRefreshTokenAvailable(const std::string& account_id) override {
|
| - ++token_available_count_;
|
| - }
|
| - void OnRefreshTokenRevoked(const std::string& account_id) override {
|
| - ++token_revoked_count_;
|
| - }
|
| - void OnRefreshTokensLoaded() override { ++tokens_loaded_count_; }
|
| -
|
| - void ResetObserverCounts() {
|
| - token_available_count_ = 0;
|
| - token_revoked_count_ = 0;
|
| - tokens_loaded_count_ = 0;
|
| - token_available_count_ = 0;
|
| - access_token_failure_ = 0;
|
| - }
|
| -
|
| - protected:
|
| - base::MessageLoop message_loop_;
|
| - net::FakeURLFetcherFactory factory_;
|
| - TestingPrefServiceSimple prefs_;
|
| - TestSigninClient client_;
|
| - SigninErrorController signin_error_controller_;
|
| - ios::FakeProfileOAuth2TokenServiceIOSProvider* fake_provider_;
|
| - ProfileOAuth2TokenServiceIOS oauth2_service_;
|
| - TestingOAuth2TokenServiceConsumer consumer_;
|
| - int token_available_count_;
|
| - int token_revoked_count_;
|
| - int tokens_loaded_count_;
|
| - int access_token_success_;
|
| - int access_token_failure_;
|
| - GoogleServiceAuthError last_access_token_error_;
|
| -};
|
| -
|
| -TEST_F(ProfileOAuth2TokenServiceIOSTest, LoadRevokeCredentialsOneAccount) {
|
| - fake_provider_->AddAccount("account_id");
|
| - oauth2_service_.LoadCredentials("account_id");
|
| - base::RunLoop().RunUntilIdle();
|
| - EXPECT_EQ(1, token_available_count_);
|
| - EXPECT_EQ(1, tokens_loaded_count_);
|
| - EXPECT_EQ(0, token_revoked_count_);
|
| - EXPECT_EQ(1U, oauth2_service_.GetAccounts().size());
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id"));
|
| -
|
| - ResetObserverCounts();
|
| - oauth2_service_.RevokeAllCredentials();
|
| - EXPECT_EQ(0, token_available_count_);
|
| - EXPECT_EQ(0, tokens_loaded_count_);
|
| - EXPECT_EQ(1, token_revoked_count_);
|
| - EXPECT_EQ(0U, oauth2_service_.GetAccounts().size());
|
| - EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
|
| -}
|
| -
|
| -TEST_F(ProfileOAuth2TokenServiceIOSTest,
|
| - LoadRevokeCredentialsMultipleAccounts) {
|
| - fake_provider_->AddAccount("account_id_1");
|
| - fake_provider_->AddAccount("account_id_2");
|
| - fake_provider_->AddAccount("account_id_3");
|
| - oauth2_service_.LoadCredentials("account_id_1");
|
| - base::RunLoop().RunUntilIdle();
|
| - EXPECT_EQ(3, token_available_count_);
|
| - EXPECT_EQ(1, tokens_loaded_count_);
|
| - EXPECT_EQ(0, token_revoked_count_);
|
| - EXPECT_EQ(3U, oauth2_service_.GetAccounts().size());
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_3"));
|
| -
|
| - ResetObserverCounts();
|
| - oauth2_service_.RevokeAllCredentials();
|
| - EXPECT_EQ(0, token_available_count_);
|
| - EXPECT_EQ(0, tokens_loaded_count_);
|
| - EXPECT_EQ(3, token_revoked_count_);
|
| - EXPECT_EQ(0U, oauth2_service_.GetAccounts().size());
|
| - EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
|
| - EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
|
| - EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_3"));
|
| -}
|
| -
|
| -TEST_F(ProfileOAuth2TokenServiceIOSTest, ReloadCredentials) {
|
| - fake_provider_->AddAccount("account_id_1");
|
| - fake_provider_->AddAccount("account_id_2");
|
| - fake_provider_->AddAccount("account_id_3");
|
| - oauth2_service_.LoadCredentials("account_id_1");
|
| - base::RunLoop().RunUntilIdle();
|
| -
|
| - // Change the accounts.
|
| - ResetObserverCounts();
|
| - fake_provider_->ClearAccounts();
|
| - fake_provider_->AddAccount("account_id_1");
|
| - fake_provider_->AddAccount("account_id_4");
|
| - oauth2_service_.ReloadCredentials();
|
| -
|
| - EXPECT_EQ(1, token_available_count_);
|
| - EXPECT_EQ(0, tokens_loaded_count_);
|
| - EXPECT_EQ(2, token_revoked_count_);
|
| - EXPECT_EQ(2U, oauth2_service_.GetAccounts().size());
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
|
| - EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
|
| - EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_3"));
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_4"));
|
| -}
|
| -
|
| -TEST_F(ProfileOAuth2TokenServiceIOSTest,
|
| - ReloadCredentialsIgnoredIfNoPrimaryAccountId) {
|
| - // Change the accounts.
|
| - ResetObserverCounts();
|
| - fake_provider_->AddAccount("account_id_1");
|
| - fake_provider_->AddAccount("account_id_2");
|
| - base::RunLoop().RunUntilIdle();
|
| -
|
| - oauth2_service_.ReloadCredentials();
|
| -
|
| - EXPECT_EQ(0, token_available_count_);
|
| - EXPECT_EQ(0, tokens_loaded_count_);
|
| - EXPECT_EQ(0, token_revoked_count_);
|
| - EXPECT_EQ(0U, oauth2_service_.GetAccounts().size());
|
| - EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
|
| - EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
|
| -}
|
| -
|
| -TEST_F(ProfileOAuth2TokenServiceIOSTest,
|
| - ReloadCredentialsWithPrimaryAccountId) {
|
| - // Change the accounts.
|
| - ResetObserverCounts();
|
| - fake_provider_->AddAccount("account_id_1");
|
| - fake_provider_->AddAccount("account_id_2");
|
| - base::RunLoop().RunUntilIdle();
|
| -
|
| - oauth2_service_.ReloadCredentials("account_id_1");
|
| - EXPECT_EQ(2, token_available_count_);
|
| - EXPECT_EQ(0, tokens_loaded_count_);
|
| - EXPECT_EQ(0, token_revoked_count_);
|
| - EXPECT_EQ(2U, oauth2_service_.GetAccounts().size());
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
|
| -}
|
| -
|
| -TEST_F(ProfileOAuth2TokenServiceIOSTest, ExcludeAllSecondaryAccounts) {
|
| - // Change the accounts.
|
| - ResetObserverCounts();
|
| - fake_provider_->AddAccount("account_id_1");
|
| - fake_provider_->AddAccount("account_id_2");
|
| - base::RunLoop().RunUntilIdle();
|
| -
|
| - oauth2_service_.ExcludeAllSecondaryAccounts();
|
| - oauth2_service_.ReloadCredentials("account_id_1");
|
| - EXPECT_EQ(1, token_available_count_);
|
| - EXPECT_EQ(0, tokens_loaded_count_);
|
| - EXPECT_EQ(0, token_revoked_count_);
|
| - EXPECT_EQ(1U, oauth2_service_.GetAccounts().size());
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
|
| - EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
|
| -}
|
| -
|
| -TEST_F(ProfileOAuth2TokenServiceIOSTest, StartRequestSuccess) {
|
| - fake_provider_->AddAccount("account_id_1");
|
| - oauth2_service_.LoadCredentials("account_id_1");
|
| - base::RunLoop().RunUntilIdle();
|
| -
|
| - // Fetch access tokens.
|
| - ResetObserverCounts();
|
| - OAuth2TokenService::ScopeSet scopes;
|
| - scopes.insert("scope");
|
| - scoped_ptr<OAuth2TokenService::Request> request(
|
| - oauth2_service_.StartRequest("account_id_1", scopes, this));
|
| - EXPECT_EQ(0, access_token_success_);
|
| - EXPECT_EQ(0, access_token_failure_);
|
| -
|
| - ResetObserverCounts();
|
| - fake_provider_->IssueAccessTokenForAllRequests();
|
| - base::RunLoop().RunUntilIdle();
|
| - EXPECT_EQ(1, access_token_success_);
|
| - EXPECT_EQ(0, access_token_failure_);
|
| -}
|
| -
|
| -TEST_F(ProfileOAuth2TokenServiceIOSTest, StartRequestFailure) {
|
| - fake_provider_->AddAccount("account_id_1");
|
| - oauth2_service_.LoadCredentials("account_id_1");
|
| - base::RunLoop().RunUntilIdle();
|
| -
|
| - // Fetch access tokens.
|
| - ResetObserverCounts();
|
| - OAuth2TokenService::ScopeSet scopes;
|
| - scopes.insert("scope");
|
| - scoped_ptr<OAuth2TokenService::Request> request(
|
| - oauth2_service_.StartRequest("account_id_1", scopes, this));
|
| - EXPECT_EQ(0, access_token_success_);
|
| - EXPECT_EQ(0, access_token_failure_);
|
| -
|
| - ResetObserverCounts();
|
| - fake_provider_->IssueAccessTokenErrorForAllRequests();
|
| - base::RunLoop().RunUntilIdle();
|
| - EXPECT_EQ(0, access_token_success_);
|
| - EXPECT_EQ(1, access_token_failure_);
|
| -}
|
| -
|
| -TEST_F(ProfileOAuth2TokenServiceIOSTest, ExcludeSecondaryAccounts) {
|
| - fake_provider_->AddAccount("account_id_1");
|
| - fake_provider_->AddAccount("account_id_2");
|
| - fake_provider_->AddAccount("account_id_3");
|
| - oauth2_service_.LoadCredentials("account_id_1");
|
| - base::RunLoop().RunUntilIdle();
|
| -
|
| - // Ignore one account should remove it from the list of accounts.
|
| - ResetObserverCounts();
|
| - oauth2_service_.ExcludeSecondaryAccount("account_id_2");
|
| - oauth2_service_.ReloadCredentials();
|
| -
|
| - EXPECT_EQ(0, token_available_count_);
|
| - EXPECT_EQ(0, tokens_loaded_count_);
|
| - EXPECT_EQ(1, token_revoked_count_);
|
| - EXPECT_EQ(2U, oauth2_service_.GetAccounts().size());
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
|
| - EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_3"));
|
| -
|
| - // Clear ignored account and the refresh token should be available again.
|
| - ResetObserverCounts();
|
| - oauth2_service_.IncludeSecondaryAccount("account_id_2");
|
| - oauth2_service_.ReloadCredentials();
|
| -
|
| - EXPECT_EQ(1, token_available_count_);
|
| - EXPECT_EQ(0, tokens_loaded_count_);
|
| - EXPECT_EQ(0, token_revoked_count_);
|
| - EXPECT_EQ(3U, oauth2_service_.GetAccounts().size());
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_3"));
|
| -}
|
| -
|
| -// Unit test for for http://crbug.com/453470 .
|
| -TEST_F(ProfileOAuth2TokenServiceIOSTest, ExcludeSecondaryAccountTwice) {
|
| - fake_provider_->AddAccount("account_id_1");
|
| - fake_provider_->AddAccount("account_id_2");
|
| - oauth2_service_.LoadCredentials("account_id_1");
|
| - base::RunLoop().RunUntilIdle();
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
|
| -
|
| - // Ignore |account_id_2| twice.
|
| - oauth2_service_.ExcludeSecondaryAccount("account_id_2");
|
| - oauth2_service_.ExcludeSecondaryAccount("account_id_2");
|
| - oauth2_service_.ReloadCredentials();
|
| -
|
| - // Include |account_id_2| once should add the account back.
|
| - ResetObserverCounts();
|
| - oauth2_service_.IncludeSecondaryAccount("account_id_2");
|
| - oauth2_service_.ReloadCredentials();
|
| -
|
| - EXPECT_EQ(1, token_available_count_);
|
| - EXPECT_EQ(0, tokens_loaded_count_);
|
| - EXPECT_EQ(0, token_revoked_count_);
|
| - EXPECT_EQ(2U, oauth2_service_.GetAccounts().size());
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
|
| -}
|
| -
|
| -TEST_F(ProfileOAuth2TokenServiceIOSTest,
|
| - LoadRevokeCredentialsClearsExcludedAccounts) {
|
| - fake_provider_->AddAccount("account_id_1");
|
| - fake_provider_->AddAccount("account_id_2");
|
| - fake_provider_->AddAccount("account_id_3");
|
| -
|
| - std::vector<std::string> excluded_accounts;
|
| - excluded_accounts.push_back("account_id_2");
|
| - oauth2_service_.ExcludeSecondaryAccounts(excluded_accounts);
|
| - oauth2_service_.ReloadCredentials("account_id_1");
|
| - base::RunLoop().RunUntilIdle();
|
| - EXPECT_EQ(2, token_available_count_);
|
| - EXPECT_EQ(0, tokens_loaded_count_);
|
| - EXPECT_EQ(0, token_revoked_count_);
|
| - EXPECT_EQ(2U, oauth2_service_.GetAccounts().size());
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_1"));
|
| - EXPECT_FALSE(oauth2_service_.RefreshTokenIsAvailable("account_id_2"));
|
| - EXPECT_TRUE(oauth2_service_.RefreshTokenIsAvailable("account_id_3"));
|
| -
|
| - ResetObserverCounts();
|
| - oauth2_service_.RevokeAllCredentials();
|
| - EXPECT_TRUE(oauth2_service_.GetExcludedSecondaryAccounts().empty());
|
| -}
|
| -
|
| -// Used for test StartRequestInRemoveAccount.
|
| -class MarkedForRemovalTester : public OAuth2TokenService::Consumer {
|
| - public:
|
| - MarkedForRemovalTester(const std::string& account_id,
|
| - OAuth2TokenService* oauth2_service)
|
| - : Consumer(account_id),
|
| - oauth2_service_(oauth2_service),
|
| - request_(),
|
| - token_failures_() {}
|
| -
|
| - void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
|
| - const std::string& access_token,
|
| - const base::Time& expiration_time) override {}
|
| - void OnGetTokenFailure(const OAuth2TokenService::Request* request,
|
| - const GoogleServiceAuthError& error) override {
|
| - token_failures_.push_back(error);
|
| - if (error.state() == GoogleServiceAuthError::REQUEST_CANCELED) {
|
| - // Restart a request on |account_id| here, which should fail as we are in
|
| - // a RemoveAccount and |account_id| should be marked for removal.
|
| - OAuth2TokenService::ScopeSet scopes;
|
| - request_ = oauth2_service_->StartRequest(id(), scopes, this);
|
| - }
|
| - }
|
| - const std::vector<GoogleServiceAuthError>& token_failures() const {
|
| - return token_failures_;
|
| - }
|
| -
|
| - private:
|
| - OAuth2TokenService* oauth2_service_;
|
| - scoped_ptr<OAuth2TokenService::Request> request_;
|
| - std::vector<GoogleServiceAuthError> token_failures_;
|
| -};
|
| -
|
| -TEST_F(ProfileOAuth2TokenServiceIOSTest, StartRequestInRemoveAccount) {
|
| - fake_provider_->AddAccount("account_id");
|
| - oauth2_service_.ReloadCredentials("account_id");
|
| - base::RunLoop().RunUntilIdle();
|
| -
|
| - MarkedForRemovalTester tester("account_id", &oauth2_service_);
|
| - OAuth2TokenService::ScopeSet scopes;
|
| - scoped_ptr<OAuth2TokenService::Request> request(
|
| - oauth2_service_.StartRequest("account_id", scopes, &tester));
|
| -
|
| - // Trigger a RemoveAccount on "account_id".
|
| - oauth2_service_.RevokeAllCredentials();
|
| - base::RunLoop().RunUntilIdle();
|
| -
|
| - EXPECT_EQ(tester.token_failures().size(), 2u);
|
| - // Request cancelled by |CancelRequestsForAccount| in |RemoveAccount|.
|
| - EXPECT_EQ(tester.token_failures()[0].state(),
|
| - GoogleServiceAuthError::REQUEST_CANCELED);
|
| - // Request failing as the account is marked for removal.
|
| - EXPECT_EQ(tester.token_failures()[1].state(),
|
| - GoogleServiceAuthError::USER_NOT_SIGNED_UP);
|
| -}
|
|
|