| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/run_loop.h" | 5 #include "base/run_loop.h" |
| 6 #include "chrome/browser/signin/profile_oauth2_token_service.h" | 6 #include "chrome/browser/signin/profile_oauth2_token_service.h" |
| 7 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 7 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
| 8 #include "chrome/browser/signin/token_service_unittest.h" | 8 #include "chrome/browser/signin/token_service_unittest.h" |
| 9 #include "content/public/browser/browser_thread.h" | 9 #include "content/public/browser/browser_thread.h" |
| 10 #include "google_apis/gaia/gaia_constants.h" | 10 #include "google_apis/gaia/gaia_constants.h" |
| 11 #include "google_apis/gaia/oauth2_token_service.h" | 11 #include "google_apis/gaia/oauth2_token_service.h" |
| 12 #include "google_apis/gaia/oauth2_token_service_test_util.h" | 12 #include "google_apis/gaia/oauth2_token_service_test_util.h" |
| 13 #include "net/http/http_status_code.h" | 13 #include "net/http/http_status_code.h" |
| 14 #include "net/url_request/test_url_fetcher_factory.h" | 14 #include "net/url_request/test_url_fetcher_factory.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 16 | 16 |
| 17 using content::BrowserThread; | 17 using content::BrowserThread; |
| 18 | 18 |
| 19 // Defining constant here to handle backward compatiblity tests, but this | 19 // Defining constant here to handle backward compatiblity tests, but this |
| 20 // constant is no longer used in current versions of chrome. | 20 // constant is no longer used in current versions of chrome. |
| 21 static const char kLSOService[] = "lso"; | 21 static const char kLSOService[] = "lso"; |
| 22 | 22 |
| 23 class ProfileOAuth2TokenServiceTest : public TokenServiceTestHarness, | 23 class ProfileOAuth2TokenServiceTest : public TokenServiceTestHarness, |
| 24 public OAuth2TokenService::Observer { | 24 public OAuth2TokenService::Observer { |
| 25 public: | 25 public: |
| 26 ProfileOAuth2TokenServiceTest() | 26 ProfileOAuth2TokenServiceTest() |
| 27 : token_available_count_(0), | 27 : token_available_count_(0), |
| 28 token_revoked_count_(0), | 28 token_revoked_count_(0), |
| 29 tokens_loaded_count_(0), | 29 tokens_loaded_count_(0) { |
| 30 tokens_cleared_count_(0) { | |
| 31 } | 30 } |
| 32 | 31 |
| 33 virtual void SetUp() OVERRIDE { | 32 virtual void SetUp() OVERRIDE { |
| 34 TokenServiceTestHarness::SetUp(); | 33 TokenServiceTestHarness::SetUp(); |
| 35 UpdateCredentialsOnService(); | 34 UpdateCredentialsOnService(); |
| 36 oauth2_service_ = ProfileOAuth2TokenServiceFactory::GetForProfile( | 35 oauth2_service_ = ProfileOAuth2TokenServiceFactory::GetForProfile( |
| 37 profile()); | 36 profile()); |
| 38 | 37 |
| 39 oauth2_service_->AddObserver(this); | 38 oauth2_service_->AddObserver(this); |
| 40 } | 39 } |
| 41 | 40 |
| 42 virtual void TearDown() OVERRIDE { | 41 virtual void TearDown() OVERRIDE { |
| 43 oauth2_service_->RemoveObserver(this); | 42 oauth2_service_->RemoveObserver(this); |
| 44 TokenServiceTestHarness::TearDown(); | 43 TokenServiceTestHarness::TearDown(); |
| 45 } | 44 } |
| 46 | 45 |
| 47 // OAuth2TokenService::Observer implementation. | 46 // OAuth2TokenService::Observer implementation. |
| 48 virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE { | 47 virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE { |
| 49 ++token_available_count_; | 48 ++token_available_count_; |
| 50 } | 49 } |
| 51 virtual void OnRefreshTokenRevoked(const std::string& account_id) OVERRIDE { | 50 virtual void OnRefreshTokenRevoked(const std::string& account_id) OVERRIDE { |
| 52 ++token_revoked_count_; | 51 ++token_revoked_count_; |
| 53 } | 52 } |
| 54 virtual void OnRefreshTokensLoaded() OVERRIDE { | 53 virtual void OnRefreshTokensLoaded() OVERRIDE { |
| 55 ++tokens_loaded_count_; | 54 ++tokens_loaded_count_; |
| 56 } | 55 } |
| 57 virtual void OnRefreshTokensCleared() OVERRIDE { | |
| 58 ++tokens_cleared_count_; | |
| 59 } | |
| 60 | 56 |
| 61 void ResetObserverCounts() { | 57 void ResetObserverCounts() { |
| 62 token_available_count_ = 0; | 58 token_available_count_ = 0; |
| 63 token_revoked_count_ = 0; | 59 token_revoked_count_ = 0; |
| 64 tokens_loaded_count_ = 0; | 60 tokens_loaded_count_ = 0; |
| 65 tokens_cleared_count_ = 0; | |
| 66 } | 61 } |
| 67 | 62 |
| 68 void ExpectNoNotifications() { | 63 void ExpectNoNotifications() { |
| 69 EXPECT_EQ(0, token_available_count_); | 64 EXPECT_EQ(0, token_available_count_); |
| 70 EXPECT_EQ(0, token_revoked_count_); | 65 EXPECT_EQ(0, token_revoked_count_); |
| 71 EXPECT_EQ(0, tokens_loaded_count_); | 66 EXPECT_EQ(0, tokens_loaded_count_); |
| 72 EXPECT_EQ(0, tokens_cleared_count_); | |
| 73 ResetObserverCounts(); | 67 ResetObserverCounts(); |
| 74 } | 68 } |
| 75 | 69 |
| 76 void ExpectOneTokenAvailableNotification() { | 70 void ExpectOneTokenAvailableNotification() { |
| 77 EXPECT_EQ(1, token_available_count_); | 71 EXPECT_EQ(1, token_available_count_); |
| 78 EXPECT_EQ(0, token_revoked_count_); | 72 EXPECT_EQ(0, token_revoked_count_); |
| 79 EXPECT_EQ(0, tokens_loaded_count_); | 73 EXPECT_EQ(0, tokens_loaded_count_); |
| 80 EXPECT_EQ(0, tokens_cleared_count_); | |
| 81 ResetObserverCounts(); | 74 ResetObserverCounts(); |
| 82 } | 75 } |
| 83 | 76 |
| 84 void ExpectOneTokenRevokedNotification() { | 77 void ExpectOneTokenRevokedNotification() { |
| 85 EXPECT_EQ(0, token_available_count_); | 78 EXPECT_EQ(0, token_available_count_); |
| 86 EXPECT_EQ(1, token_revoked_count_); | 79 EXPECT_EQ(1, token_revoked_count_); |
| 87 EXPECT_EQ(0, tokens_loaded_count_); | 80 EXPECT_EQ(0, tokens_loaded_count_); |
| 88 EXPECT_EQ(0, tokens_cleared_count_); | |
| 89 ResetObserverCounts(); | 81 ResetObserverCounts(); |
| 90 } | 82 } |
| 91 | 83 |
| 92 void ExpectOneTokensLoadedNotification() { | 84 void ExpectOneTokensLoadedNotification() { |
| 93 EXPECT_EQ(0, token_available_count_); | 85 EXPECT_EQ(0, token_available_count_); |
| 94 EXPECT_EQ(0, token_revoked_count_); | 86 EXPECT_EQ(0, token_revoked_count_); |
| 95 EXPECT_EQ(1, tokens_loaded_count_); | 87 EXPECT_EQ(1, tokens_loaded_count_); |
| 96 EXPECT_EQ(0, tokens_cleared_count_); | |
| 97 ResetObserverCounts(); | 88 ResetObserverCounts(); |
| 98 } | 89 } |
| 99 | 90 |
| 100 void ExpectOneTokensClearedNotification() { | |
| 101 EXPECT_EQ(0, token_available_count_); | |
| 102 EXPECT_EQ(0, token_revoked_count_); | |
| 103 EXPECT_EQ(0, tokens_loaded_count_); | |
| 104 EXPECT_EQ(1, tokens_cleared_count_); | |
| 105 ResetObserverCounts(); | |
| 106 } | |
| 107 | |
| 108 protected: | 91 protected: |
| 109 net::TestURLFetcherFactory factory_; | 92 net::TestURLFetcherFactory factory_; |
| 110 ProfileOAuth2TokenService* oauth2_service_; | 93 ProfileOAuth2TokenService* oauth2_service_; |
| 111 TestingOAuth2TokenServiceConsumer consumer_; | 94 TestingOAuth2TokenServiceConsumer consumer_; |
| 112 int token_available_count_; | 95 int token_available_count_; |
| 113 int token_revoked_count_; | 96 int token_revoked_count_; |
| 114 int tokens_loaded_count_; | 97 int tokens_loaded_count_; |
| 115 int tokens_cleared_count_; | |
| 116 }; | 98 }; |
| 117 | 99 |
| 118 TEST_F(ProfileOAuth2TokenServiceTest, Notifications) { | 100 TEST_F(ProfileOAuth2TokenServiceTest, Notifications) { |
| 119 EXPECT_EQ(0, oauth2_service_->cache_size_for_testing()); | 101 EXPECT_EQ(0, oauth2_service_->cache_size_for_testing()); |
| 120 service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, | 102 service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
| 121 "refreshToken"); | 103 "refreshToken"); |
| 122 ExpectOneTokenAvailableNotification(); | 104 ExpectOneTokenAvailableNotification(); |
| 123 | 105 |
| 124 service()->EraseTokensFromDB(); | 106 service()->EraseTokensFromDB(); |
| 125 service()->ResetCredentialsInMemory(); | 107 service()->ResetCredentialsInMemory(); |
| 126 ExpectOneTokensClearedNotification(); | |
| 127 } | 108 } |
| 128 | 109 |
| 129 TEST_F(ProfileOAuth2TokenServiceTest, PersistenceDBUpgrade) { | 110 TEST_F(ProfileOAuth2TokenServiceTest, PersistenceDBUpgrade) { |
| 130 // No username for profile in unit tests, defaulting to empty string. | 111 // No username for profile in unit tests, defaulting to empty string. |
| 131 std::string main_account_id; | 112 std::string main_account_id; |
| 132 std::string main_refresh_token("old_refresh_token"); | 113 std::string main_refresh_token("old_refresh_token"); |
| 133 | 114 |
| 134 // Populate DB with legacy tokens. | 115 // Populate DB with legacy tokens. |
| 135 service()->OnIssueAuthTokenSuccess(GaiaConstants::kSyncService, | 116 service()->OnIssueAuthTokenSuccess(GaiaConstants::kSyncService, |
| 136 "syncServiceToken"); | 117 "syncServiceToken"); |
| 137 service()->OnIssueAuthTokenSuccess(kLSOService, "lsoToken"); | 118 service()->OnIssueAuthTokenSuccess(kLSOService, "lsoToken"); |
| 138 service()->OnIssueAuthTokenSuccess( | 119 service()->OnIssueAuthTokenSuccess( |
| 139 GaiaConstants::kGaiaOAuth2LoginRefreshToken, | 120 GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
| 140 main_refresh_token); | 121 main_refresh_token); |
| 141 // Add a token using the new API. | 122 // Add a token using the new API. |
| 142 ResetObserverCounts(); | 123 ResetObserverCounts(); |
| 143 | 124 |
| 144 // Force LoadCredentials. | 125 // Force LoadCredentials. |
| 145 oauth2_service_->LoadCredentials(); | 126 oauth2_service_->LoadCredentials(); |
| 146 base::RunLoop().RunUntilIdle(); | 127 base::RunLoop().RunUntilIdle(); |
| 147 | 128 |
| 148 // Legacy tokens get discarded, but the old refresh token is kept. | 129 // Legacy tokens get discarded, but the old refresh token is kept. |
| 149 EXPECT_EQ(1, tokens_loaded_count_); | 130 EXPECT_EQ(1, tokens_loaded_count_); |
| 150 EXPECT_EQ(1, token_available_count_); | 131 EXPECT_EQ(1, token_available_count_); |
| 151 EXPECT_TRUE(oauth2_service_->RefreshTokenIsAvailable()); | 132 EXPECT_TRUE(oauth2_service_->RefreshTokenIsAvailable(main_account_id)); |
| 152 EXPECT_EQ(1U, oauth2_service_->refresh_tokens_.size()); | 133 EXPECT_EQ(1U, oauth2_service_->refresh_tokens_.size()); |
| 153 EXPECT_EQ(main_refresh_token, | 134 EXPECT_EQ(main_refresh_token, |
| 154 oauth2_service_->refresh_tokens_[main_account_id]); | 135 oauth2_service_->refresh_tokens_[main_account_id]); |
| 155 | 136 |
| 156 // Add an old legacy token to the DB, to ensure it will not overwrite existing | 137 // Add an old legacy token to the DB, to ensure it will not overwrite existing |
| 157 // credentials for main account. | 138 // credentials for main account. |
| 158 service()->OnIssueAuthTokenSuccess( | 139 service()->OnIssueAuthTokenSuccess( |
| 159 GaiaConstants::kGaiaOAuth2LoginRefreshToken, | 140 GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
| 160 "secondOldRefreshToken"); | 141 "secondOldRefreshToken"); |
| 161 // Add some other legacy token. (Expected to get discarded). | 142 // Add some other legacy token. (Expected to get discarded). |
| 162 service()->OnIssueAuthTokenSuccess(kLSOService, "lsoToken"); | 143 service()->OnIssueAuthTokenSuccess(kLSOService, "lsoToken"); |
| 163 // Also add a token using PO2TS.UpdateCredentials and make sure upgrade does | 144 // Also add a token using PO2TS.UpdateCredentials and make sure upgrade does |
| 164 // not wipe it. | 145 // not wipe it. |
| 165 std::string other_account_id("other_account_id"); | 146 std::string other_account_id("other_account_id"); |
| 166 std::string other_refresh_token("other_refresh_token"); | 147 std::string other_refresh_token("other_refresh_token"); |
| 167 oauth2_service_->UpdateCredentials(other_account_id, other_refresh_token); | 148 oauth2_service_->UpdateCredentials(other_account_id, other_refresh_token); |
| 168 ResetObserverCounts(); | 149 ResetObserverCounts(); |
| 169 | 150 |
| 170 // Force LoadCredentials. | 151 // Force LoadCredentials. |
| 171 oauth2_service_->LoadCredentials(); | 152 oauth2_service_->LoadCredentials(); |
| 172 base::RunLoop().RunUntilIdle(); | 153 base::RunLoop().RunUntilIdle(); |
| 173 | 154 |
| 174 // Again legacy tokens get discarded, but since the main porfile account | 155 // Again legacy tokens get discarded, but since the main porfile account |
| 175 // token is present it is not overwritten. | 156 // token is present it is not overwritten. |
| 176 EXPECT_EQ(2, token_available_count_); | 157 EXPECT_EQ(2, token_available_count_); |
| 177 EXPECT_EQ(1, tokens_loaded_count_); | 158 EXPECT_EQ(1, tokens_loaded_count_); |
| 178 EXPECT_TRUE(oauth2_service_->RefreshTokenIsAvailable()); | 159 EXPECT_TRUE(oauth2_service_->RefreshTokenIsAvailable(main_account_id)); |
| 160 // TODO(fgorski): cover both using RefreshTokenIsAvailable() and then get the |
| 161 // tokens using GetRefreshToken() |
| 179 EXPECT_EQ(2U, oauth2_service_->refresh_tokens_.size()); | 162 EXPECT_EQ(2U, oauth2_service_->refresh_tokens_.size()); |
| 180 EXPECT_EQ(main_refresh_token, | 163 EXPECT_EQ(main_refresh_token, |
| 181 oauth2_service_->refresh_tokens_[main_account_id]); | 164 oauth2_service_->refresh_tokens_[main_account_id]); |
| 182 EXPECT_EQ(other_refresh_token, | 165 EXPECT_EQ(other_refresh_token, |
| 183 oauth2_service_->refresh_tokens_[other_account_id]); | 166 oauth2_service_->refresh_tokens_[other_account_id]); |
| 184 | 167 |
| 185 oauth2_service_->RevokeAllCredentials(); | 168 oauth2_service_->RevokeAllCredentials(); |
| 186 } | 169 } |
| 187 | 170 |
| 188 TEST_F(ProfileOAuth2TokenServiceTest, PersistenceRevokeCredentials) { | 171 TEST_F(ProfileOAuth2TokenServiceTest, PersistenceRevokeCredentials) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 207 ExpectOneTokenRevokedNotification(); | 190 ExpectOneTokenRevokedNotification(); |
| 208 | 191 |
| 209 // TODO(fgorski): Enable below when implemented: | 192 // TODO(fgorski): Enable below when implemented: |
| 210 // EXPECT_FALSE(oauth2_servive_->RefreshTokenIsAvailable(account_id_1)); | 193 // EXPECT_FALSE(oauth2_servive_->RefreshTokenIsAvailable(account_id_1)); |
| 211 // EXPECT_TRUE(oauth2_service_->RefreshTokenIsAvailable(account_id_2)); | 194 // EXPECT_TRUE(oauth2_service_->RefreshTokenIsAvailable(account_id_2)); |
| 212 | 195 |
| 213 oauth2_service_->RevokeAllCredentials(); | 196 oauth2_service_->RevokeAllCredentials(); |
| 214 EXPECT_EQ(0, token_available_count_); | 197 EXPECT_EQ(0, token_available_count_); |
| 215 EXPECT_EQ(1, token_revoked_count_); | 198 EXPECT_EQ(1, token_revoked_count_); |
| 216 EXPECT_EQ(0, tokens_loaded_count_); | 199 EXPECT_EQ(0, tokens_loaded_count_); |
| 217 EXPECT_EQ(1, tokens_cleared_count_); | |
| 218 ResetObserverCounts(); | 200 ResetObserverCounts(); |
| 219 } | 201 } |
| 220 | 202 |
| 221 TEST_F(ProfileOAuth2TokenServiceTest, PersistenceLoadCredentials) { | 203 TEST_F(ProfileOAuth2TokenServiceTest, PersistenceLoadCredentials) { |
| 222 // Ensure DB is clean. | 204 // Ensure DB is clean. |
| 223 oauth2_service_->RevokeAllCredentials(); | 205 oauth2_service_->RevokeAllCredentials(); |
| 224 ExpectOneTokensClearedNotification(); | 206 ResetObserverCounts(); |
| 225 // Perform a load from an empty DB. | 207 // Perform a load from an empty DB. |
| 226 oauth2_service_->LoadCredentials(); | 208 oauth2_service_->LoadCredentials(); |
| 227 base::RunLoop().RunUntilIdle(); | 209 base::RunLoop().RunUntilIdle(); |
| 228 ExpectOneTokensLoadedNotification(); | 210 ExpectOneTokensLoadedNotification(); |
| 229 EXPECT_EQ(0U, oauth2_service_->refresh_tokens_.size()); | 211 EXPECT_EQ(0U, oauth2_service_->refresh_tokens_.size()); |
| 230 // Setup a DB with tokens that don't require upgrade and clear memory. | 212 // Setup a DB with tokens that don't require upgrade and clear memory. |
| 231 oauth2_service_->UpdateCredentials("account_id", "refresh_token"); | 213 oauth2_service_->UpdateCredentials("account_id", "refresh_token"); |
| 232 oauth2_service_->UpdateCredentials("account_id2", "refresh_token2"); | 214 oauth2_service_->UpdateCredentials("account_id2", "refresh_token2"); |
| 233 oauth2_service_->refresh_tokens_.clear(); | 215 oauth2_service_->refresh_tokens_.clear(); |
| 234 ResetObserverCounts(); | 216 ResetObserverCounts(); |
| 235 | 217 |
| 236 oauth2_service_->LoadCredentials(); | 218 oauth2_service_->LoadCredentials(); |
| 237 base::RunLoop().RunUntilIdle(); | 219 base::RunLoop().RunUntilIdle(); |
| 238 EXPECT_EQ(2, token_available_count_); | 220 EXPECT_EQ(2, token_available_count_); |
| 239 EXPECT_EQ(0, token_revoked_count_); | 221 EXPECT_EQ(0, token_revoked_count_); |
| 240 EXPECT_EQ(1, tokens_loaded_count_); | 222 EXPECT_EQ(1, tokens_loaded_count_); |
| 241 EXPECT_EQ(0, tokens_cleared_count_); | |
| 242 ResetObserverCounts(); | 223 ResetObserverCounts(); |
| 243 | 224 |
| 244 // TODO(fgorski): Enable below when implemented: | 225 // TODO(fgorski): Enable below when implemented: |
| 245 // EXPECT_TRUE(oauth2_servive_->RefreshTokenIsAvailable("account_id")); | 226 // EXPECT_TRUE(oauth2_servive_->RefreshTokenIsAvailable("account_id")); |
| 246 // EXPECT_TRUE(oauth2_service_->RefreshTokenIsAvailable("account_id2")); | 227 // EXPECT_TRUE(oauth2_service_->RefreshTokenIsAvailable("account_id2")); |
| 247 | 228 |
| 248 oauth2_service_->RevokeAllCredentials(); | 229 oauth2_service_->RevokeAllCredentials(); |
| 249 EXPECT_EQ(0, token_available_count_); | 230 EXPECT_EQ(0, token_available_count_); |
| 250 EXPECT_EQ(2, token_revoked_count_); | 231 EXPECT_EQ(2, token_revoked_count_); |
| 251 EXPECT_EQ(0, tokens_loaded_count_); | 232 EXPECT_EQ(0, tokens_loaded_count_); |
| 252 EXPECT_EQ(1, tokens_cleared_count_); | |
| 253 ResetObserverCounts(); | 233 ResetObserverCounts(); |
| 254 } | 234 } |
| 255 | 235 |
| 256 TEST_F(ProfileOAuth2TokenServiceTest, PersistanceNotifications) { | 236 TEST_F(ProfileOAuth2TokenServiceTest, PersistanceNotifications) { |
| 257 EXPECT_EQ(0, oauth2_service_->cache_size_for_testing()); | 237 EXPECT_EQ(0, oauth2_service_->cache_size_for_testing()); |
| 258 oauth2_service_->UpdateCredentials("account_id", "refresh_token"); | 238 oauth2_service_->UpdateCredentials("account_id", "refresh_token"); |
| 259 ExpectOneTokenAvailableNotification(); | 239 ExpectOneTokenAvailableNotification(); |
| 260 | 240 |
| 261 oauth2_service_->UpdateCredentials("account_id", "refresh_token"); | 241 oauth2_service_->UpdateCredentials("account_id", "refresh_token"); |
| 262 ExpectNoNotifications(); | 242 ExpectNoNotifications(); |
| 263 | 243 |
| 264 oauth2_service_->UpdateCredentials("account_id", "refresh_token2"); | 244 oauth2_service_->UpdateCredentials("account_id", "refresh_token2"); |
| 265 ExpectOneTokenAvailableNotification(); | 245 ExpectOneTokenAvailableNotification(); |
| 266 | 246 |
| 267 oauth2_service_->RevokeCredentials("account_id"); | 247 oauth2_service_->RevokeCredentials("account_id"); |
| 268 ExpectOneTokenRevokedNotification(); | 248 ExpectOneTokenRevokedNotification(); |
| 269 | 249 |
| 270 oauth2_service_->UpdateCredentials("account_id", "refresh_token2"); | 250 oauth2_service_->UpdateCredentials("account_id", "refresh_token2"); |
| 271 ExpectOneTokenAvailableNotification(); | 251 ExpectOneTokenAvailableNotification(); |
| 272 | 252 |
| 273 oauth2_service_->RevokeAllCredentials(); | 253 oauth2_service_->RevokeAllCredentials(); |
| 274 EXPECT_EQ(1, tokens_cleared_count_); | |
| 275 ResetObserverCounts(); | 254 ResetObserverCounts(); |
| 276 } | 255 } |
| 277 | 256 |
| 257 TEST_F(ProfileOAuth2TokenServiceTest, GetAccounts) { |
| 258 EXPECT_TRUE(oauth2_service_->GetAccounts().empty()); |
| 259 oauth2_service_->UpdateCredentials("account_id1", "refresh_token1"); |
| 260 oauth2_service_->UpdateCredentials("account_id2", "refresh_token2"); |
| 261 std::vector<std::string> accounts = oauth2_service_->GetAccounts(); |
| 262 EXPECT_EQ(2u, accounts.size()); |
| 263 EXPECT_TRUE(find(accounts.begin(), accounts.end(), "account_id1") != |
| 264 accounts.end()); |
| 265 EXPECT_TRUE(find(accounts.begin(), accounts.end(), "account_id2") != |
| 266 accounts.end()); |
| 267 oauth2_service_->RevokeCredentials("account_id2"); |
| 268 EXPECT_EQ(1u, oauth2_service_->GetAccounts().size()); |
| 269 EXPECT_TRUE(find(accounts.begin(), accounts.end(), "account_id1") != |
| 270 accounts.end()); |
| 271 } |
| 272 |
| 278 // Until the TokenService class is removed, finish token loading in TokenService | 273 // Until the TokenService class is removed, finish token loading in TokenService |
| 279 // should translate to finish token loading in ProfileOAuth2TokenService. | 274 // should translate to finish token loading in ProfileOAuth2TokenService. |
| 280 TEST_F(ProfileOAuth2TokenServiceTest, TokensLoaded) { | 275 TEST_F(ProfileOAuth2TokenServiceTest, TokensLoaded) { |
| 281 EXPECT_EQ(0, oauth2_service_->cache_size_for_testing()); | 276 EXPECT_EQ(0, oauth2_service_->cache_size_for_testing()); |
| 282 service()->LoadTokensFromDB(); | 277 service()->LoadTokensFromDB(); |
| 283 base::RunLoop().RunUntilIdle(); | 278 base::RunLoop().RunUntilIdle(); |
| 284 ExpectOneTokensLoadedNotification(); | 279 ExpectOneTokensLoadedNotification(); |
| 285 } | 280 } |
| 286 | 281 |
| 287 TEST_F(ProfileOAuth2TokenServiceTest, UnknownNotificationsAreNoops) { | 282 TEST_F(ProfileOAuth2TokenServiceTest, UnknownNotificationsAreNoops) { |
| 288 EXPECT_EQ(0, oauth2_service_->cache_size_for_testing()); | 283 EXPECT_EQ(0, oauth2_service_->cache_size_for_testing()); |
| 289 service()->IssueAuthTokenForTest("foo", "toto"); | 284 service()->IssueAuthTokenForTest("foo", "toto"); |
| 290 ExpectNoNotifications(); | 285 ExpectNoNotifications(); |
| 291 | 286 |
| 292 // Get a valid token. | 287 // Get a valid token. |
| 293 service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, | 288 service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, |
| 294 "refreshToken"); | 289 "refreshToken"); |
| 295 ExpectOneTokenAvailableNotification(); | 290 ExpectOneTokenAvailableNotification(); |
| 296 | 291 |
| 297 service()->IssueAuthTokenForTest("bar", "baz"); | 292 service()->IssueAuthTokenForTest("bar", "baz"); |
| 298 ExpectNoNotifications(); | 293 ExpectNoNotifications(); |
| 299 } | 294 } |
| 300 | 295 |
| 301 TEST_F(ProfileOAuth2TokenServiceTest, TokenServiceUpdateClearsCache) { | 296 TEST_F(ProfileOAuth2TokenServiceTest, DISABLED_TokenServiceUpdateClearsCache) { |
| 297 // TODO(fgorski): Disabled for now, as we need to make cache dependent on |
| 298 // account_id or a refresh_token before that starts working. |
| 302 EXPECT_EQ(0, oauth2_service_->cache_size_for_testing()); | 299 EXPECT_EQ(0, oauth2_service_->cache_size_for_testing()); |
| 303 std::set<std::string> scope_list; | 300 std::set<std::string> scope_list; |
| 304 scope_list.insert("scope"); | 301 scope_list.insert("scope"); |
| 305 service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, | 302 oauth2_service_->UpdateCredentials(oauth2_service_->GetPrimaryAccountId(), |
| 306 "refreshToken"); | 303 "refreshToken"); |
| 307 ExpectOneTokenAvailableNotification(); | 304 ExpectOneTokenAvailableNotification(); |
| 305 |
| 308 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( | 306 scoped_ptr<OAuth2TokenService::Request> request(oauth2_service_->StartRequest( |
| 309 scope_list, &consumer_)); | 307 oauth2_service_->GetPrimaryAccountId(), scope_list, &consumer_)); |
| 310 base::RunLoop().RunUntilIdle(); | 308 base::RunLoop().RunUntilIdle(); |
| 311 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 309 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 312 fetcher->set_response_code(net::HTTP_OK); | 310 fetcher->set_response_code(net::HTTP_OK); |
| 313 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); | 311 fetcher->SetResponseString(GetValidTokenResponse("token", 3600)); |
| 314 fetcher->delegate()->OnURLFetchComplete(fetcher); | 312 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 315 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); | 313 EXPECT_EQ(1, consumer_.number_of_successful_tokens_); |
| 316 EXPECT_EQ(0, consumer_.number_of_errors_); | 314 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 317 EXPECT_EQ("token", consumer_.last_token_); | 315 EXPECT_EQ("token", consumer_.last_token_); |
| 318 EXPECT_EQ(1, oauth2_service_->cache_size_for_testing()); | 316 EXPECT_EQ(1, oauth2_service_->cache_size_for_testing()); |
| 319 | 317 |
| 320 // Signs out and signs in | 318 // Signs out and signs in |
| 321 service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, | 319 oauth2_service_->RevokeCredentials(oauth2_service_->GetPrimaryAccountId()); |
| 322 ""); | 320 ExpectOneTokenRevokedNotification(); |
| 323 ExpectOneTokenAvailableNotification(); | |
| 324 service()->EraseTokensFromDB(); | |
| 325 ExpectOneTokensClearedNotification(); | |
| 326 | 321 |
| 327 EXPECT_EQ(0, oauth2_service_->cache_size_for_testing()); | 322 EXPECT_EQ(0, oauth2_service_->cache_size_for_testing()); |
| 328 service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, | 323 oauth2_service_->UpdateCredentials(oauth2_service_->GetPrimaryAccountId(), |
| 329 "refreshToken"); | 324 "refreshToken"); |
| 330 ExpectOneTokenAvailableNotification(); | 325 ExpectOneTokenAvailableNotification(); |
| 331 | 326 |
| 332 request = oauth2_service_->StartRequest(scope_list, &consumer_); | 327 request = oauth2_service_->StartRequest( |
| 328 oauth2_service_->GetPrimaryAccountId(), scope_list, &consumer_); |
| 333 base::RunLoop().RunUntilIdle(); | 329 base::RunLoop().RunUntilIdle(); |
| 334 fetcher = factory_.GetFetcherByID(0); | 330 fetcher = factory_.GetFetcherByID(0); |
| 335 fetcher->set_response_code(net::HTTP_OK); | 331 fetcher->set_response_code(net::HTTP_OK); |
| 336 fetcher->SetResponseString(GetValidTokenResponse("another token", 3600)); | 332 fetcher->SetResponseString(GetValidTokenResponse("another token", 3600)); |
| 337 fetcher->delegate()->OnURLFetchComplete(fetcher); | 333 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 338 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); | 334 EXPECT_EQ(2, consumer_.number_of_successful_tokens_); |
| 339 EXPECT_EQ(0, consumer_.number_of_errors_); | 335 EXPECT_EQ(0, consumer_.number_of_errors_); |
| 340 EXPECT_EQ("another token", consumer_.last_token_); | 336 EXPECT_EQ("another token", consumer_.last_token_); |
| 341 EXPECT_EQ(1, oauth2_service_->cache_size_for_testing()); | 337 EXPECT_EQ(1, oauth2_service_->cache_size_for_testing()); |
| 342 } | 338 } |
| 343 | 339 |
| 344 // Android doesn't use the current profile's TokenService login refresh token. | 340 // Android doesn't use the current profile's TokenService login refresh token. |
| 345 #if !defined(OS_ANDROID) | 341 #if !defined(OS_ANDROID) |
| 346 TEST_F(ProfileOAuth2TokenServiceTest, StaleRefreshTokensNotCached) { | 342 TEST_F(ProfileOAuth2TokenServiceTest, StaleRefreshTokensNotCached) { |
| 347 EXPECT_FALSE(service()->HasOAuthLoginToken()); | 343 EXPECT_FALSE(oauth2_service_->ShouldCacheForRefreshToken("T1")); |
| 348 EXPECT_FALSE(oauth2_service_->ShouldCacheForRefreshToken(service(), "T1")); | |
| 349 | 344 |
| 350 service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, | 345 oauth2_service_->UpdateCredentials(oauth2_service_->GetPrimaryAccountId(), |
| 351 "T1"); | 346 "T1"); |
| 352 ExpectOneTokenAvailableNotification(); | 347 ExpectOneTokenAvailableNotification(); |
| 353 EXPECT_TRUE(oauth2_service_->ShouldCacheForRefreshToken(service(), "T1")); | 348 EXPECT_TRUE(oauth2_service_->ShouldCacheForRefreshToken("T1")); |
| 354 EXPECT_FALSE(oauth2_service_->ShouldCacheForRefreshToken(service(), "T2")); | 349 EXPECT_FALSE(oauth2_service_->ShouldCacheForRefreshToken("T2")); |
| 355 | 350 |
| 356 service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken, | 351 oauth2_service_->UpdateCredentials(oauth2_service_->GetPrimaryAccountId(), |
| 357 "T2"); | 352 "T2"); |
| 358 ExpectOneTokenAvailableNotification(); | 353 ExpectOneTokenAvailableNotification(); |
| 359 EXPECT_TRUE(oauth2_service_->ShouldCacheForRefreshToken(service(), "T2")); | 354 EXPECT_TRUE(oauth2_service_->ShouldCacheForRefreshToken("T2")); |
| 360 EXPECT_FALSE(oauth2_service_->ShouldCacheForRefreshToken(NULL, "T2")); | 355 EXPECT_FALSE(oauth2_service_->ShouldCacheForRefreshToken("T1")); |
| 361 } | 356 } |
| 362 #endif | 357 #endif |
| OLD | NEW |