OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h" | 5 #include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "chrome/browser/policy/cloud/mock_cloud_external_data_manager.h" | 21 #include "chrome/browser/policy/cloud/mock_cloud_external_data_manager.h" |
22 #include "chrome/browser/policy/cloud/mock_cloud_policy_store.h" | 22 #include "chrome/browser/policy/cloud/mock_cloud_policy_store.h" |
23 #include "chrome/browser/policy/cloud/mock_device_management_service.h" | 23 #include "chrome/browser/policy/cloud/mock_device_management_service.h" |
24 #include "chrome/browser/policy/cloud/resource_cache.h" | 24 #include "chrome/browser/policy/cloud/resource_cache.h" |
25 #include "chrome/browser/policy/external_data_fetcher.h" | 25 #include "chrome/browser/policy/external_data_fetcher.h" |
26 #include "chrome/browser/policy/mock_configuration_policy_provider.h" | 26 #include "chrome/browser/policy/mock_configuration_policy_provider.h" |
27 #include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h" | 27 #include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h" |
28 #include "chrome/browser/policy/schema_registry.h" | 28 #include "chrome/browser/policy/schema_registry.h" |
29 #include "chrome/browser/prefs/browser_prefs.h" | 29 #include "chrome/browser/prefs/browser_prefs.h" |
30 #include "chrome/browser/prefs/pref_service_syncable.h" | 30 #include "chrome/browser/prefs/pref_service_syncable.h" |
| 31 #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" |
31 #include "chrome/browser/signin/profile_oauth2_token_service.h" | 32 #include "chrome/browser/signin/profile_oauth2_token_service.h" |
32 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 33 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
33 #include "chrome/browser/signin/signin_manager.h" | |
34 #include "chrome/browser/signin/signin_manager_factory.h" | |
35 #include "chrome/browser/signin/token_service.h" | |
36 #include "chrome/browser/signin/token_service_factory.h" | |
37 #include "chrome/common/chrome_constants.h" | 34 #include "chrome/common/chrome_constants.h" |
38 #include "chrome/test/base/testing_browser_process.h" | 35 #include "chrome/test/base/testing_browser_process.h" |
39 #include "chrome/test/base/testing_profile.h" | 36 #include "chrome/test/base/testing_profile.h" |
40 #include "chrome/test/base/testing_profile_manager.h" | 37 #include "chrome/test/base/testing_profile_manager.h" |
41 #include "content/public/test/test_browser_thread_bundle.h" | 38 #include "content/public/test/test_browser_thread_bundle.h" |
42 #include "google_apis/gaia/gaia_auth_consumer.h" | 39 #include "google_apis/gaia/gaia_auth_consumer.h" |
| 40 #include "google_apis/gaia/gaia_constants.h" |
43 #include "google_apis/gaia/gaia_urls.h" | 41 #include "google_apis/gaia/gaia_urls.h" |
44 #include "net/url_request/test_url_fetcher_factory.h" | 42 #include "net/url_request/test_url_fetcher_factory.h" |
45 #include "net/url_request/url_fetcher_delegate.h" | 43 #include "net/url_request/url_fetcher_delegate.h" |
46 #include "net/url_request/url_request_context_getter.h" | 44 #include "net/url_request/url_request_context_getter.h" |
47 #include "net/url_request/url_request_status.h" | 45 #include "net/url_request/url_request_status.h" |
48 #include "policy/policy_constants.h" | 46 #include "policy/policy_constants.h" |
49 #include "testing/gmock/include/gmock/gmock.h" | 47 #include "testing/gmock/include/gmock/gmock.h" |
50 #include "testing/gtest/include/gtest/gtest.h" | 48 #include "testing/gtest/include/gtest/gtest.h" |
51 | 49 |
52 namespace em = enterprise_management; | 50 namespace em = enterprise_management; |
53 | 51 |
54 using testing::AnyNumber; | 52 using testing::AnyNumber; |
55 using testing::AtLeast; | 53 using testing::AtLeast; |
56 using testing::Mock; | 54 using testing::Mock; |
57 using testing::_; | 55 using testing::_; |
58 | 56 |
59 namespace policy { | 57 namespace policy { |
60 | 58 |
61 namespace { | 59 namespace { |
62 | 60 |
63 const char kOAuthTokenCookie[] = "oauth_token=1234"; | 61 const char kOAuthTokenCookie[] = "oauth_token=1234"; |
| 62 const char kTestAccountId[] = "user@gmail.com"; |
64 | 63 |
65 const char kOAuth2TokenPairData[] = | 64 const char kOAuth2TokenPairData[] = |
66 "{" | 65 "{" |
67 " \"refresh_token\": \"1234\"," | 66 " \"refresh_token\": \"1234\"," |
68 " \"access_token\": \"5678\"," | 67 " \"access_token\": \"5678\"," |
69 " \"expires_in\": 3600" | 68 " \"expires_in\": 3600" |
70 "}"; | 69 "}"; |
71 | 70 |
72 const char kOAuth2AccessTokenData[] = | 71 const char kOAuth2AccessTokenData[] = |
73 "{" | 72 "{" |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 fetcher->set_response_code(200); | 195 fetcher->set_response_code(200); |
197 fetcher->set_status(net::URLRequestStatus()); | 196 fetcher->set_status(net::URLRequestStatus()); |
198 return fetcher; | 197 return fetcher; |
199 } | 198 } |
200 | 199 |
201 // Issues the OAuth2 tokens and returns the device management register job | 200 // Issues the OAuth2 tokens and returns the device management register job |
202 // if the flow succeeded. | 201 // if the flow succeeded. |
203 MockDeviceManagementJob* IssueOAuthToken(bool has_request_token) { | 202 MockDeviceManagementJob* IssueOAuthToken(bool has_request_token) { |
204 EXPECT_FALSE(manager_->core()->client()->is_registered()); | 203 EXPECT_FALSE(manager_->core()->client()->is_registered()); |
205 | 204 |
206 GaiaUrls* gaia_urls = GaiaUrls::GetInstance(); | 205 // Issuing this token triggers the callback of the OAuth2PolicyFetcher, |
207 net::TestURLFetcher* fetcher = NULL; | 206 // which triggers the registration request. |
| 207 MockDeviceManagementJob* register_request = NULL; |
| 208 EXPECT_CALL(device_management_service_, |
| 209 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) |
| 210 .WillOnce(device_management_service_.CreateAsyncJob(®ister_request)); |
208 | 211 |
209 if (!has_request_token) { | 212 if (!has_request_token) { |
| 213 GaiaUrls* gaia_urls = GaiaUrls::GetInstance(); |
| 214 net::TestURLFetcher* fetcher = NULL; |
| 215 |
210 // Issue the oauth_token cookie first. | 216 // Issue the oauth_token cookie first. |
211 fetcher = PrepareOAuthFetcher(gaia_urls->client_login_to_oauth2_url()); | 217 fetcher = PrepareOAuthFetcher(gaia_urls->client_login_to_oauth2_url()); |
212 if (!fetcher) | 218 if (!fetcher) |
213 return NULL; | 219 return NULL; |
214 net::ResponseCookies cookies; | 220 net::ResponseCookies cookies; |
215 cookies.push_back(kOAuthTokenCookie); | 221 cookies.push_back(kOAuthTokenCookie); |
216 fetcher->set_cookies(cookies); | 222 fetcher->set_cookies(cookies); |
217 fetcher->delegate()->OnURLFetchComplete(fetcher); | 223 fetcher->delegate()->OnURLFetchComplete(fetcher); |
218 | 224 |
219 // Issue the refresh token. | 225 // Issue the refresh token. |
220 fetcher = PrepareOAuthFetcher(gaia_urls->oauth2_token_url()); | 226 fetcher = PrepareOAuthFetcher(gaia_urls->oauth2_token_url()); |
221 if (!fetcher) | 227 if (!fetcher) |
222 return NULL; | 228 return NULL; |
223 fetcher->SetResponseString(kOAuth2TokenPairData); | 229 fetcher->SetResponseString(kOAuth2TokenPairData); |
224 fetcher->delegate()->OnURLFetchComplete(fetcher); | 230 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 231 |
| 232 // Issue the access token. |
| 233 fetcher = PrepareOAuthFetcher(gaia_urls->oauth2_token_url()); |
| 234 if (!fetcher) |
| 235 return NULL; |
| 236 fetcher->SetResponseString(kOAuth2AccessTokenData); |
| 237 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 238 } else { |
| 239 // Since the refresh token is available, OAuth2TokenService was used |
| 240 // to request the access token and not UserCloudPolicyTokenForwarder. |
| 241 // Issue the access token with the former. |
| 242 FakeProfileOAuth2TokenService* token_service = |
| 243 static_cast<FakeProfileOAuth2TokenService*>( |
| 244 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)); |
| 245 EXPECT_TRUE(token_service); |
| 246 OAuth2TokenService::ScopeSet scopes; |
| 247 scopes.insert(GaiaConstants::kDeviceManagementServiceOAuth); |
| 248 token_service->IssueTokenForScope( |
| 249 scopes, "5678", |
| 250 base::Time::Now() + base::TimeDelta::FromSeconds(3600)); |
225 } | 251 } |
226 | 252 |
227 // Issue the access token. | |
228 fetcher = PrepareOAuthFetcher(gaia_urls->oauth2_token_url()); | |
229 if (!fetcher) | |
230 return NULL; | |
231 fetcher->SetResponseString(kOAuth2AccessTokenData); | |
232 | |
233 // Issuing this token triggers the callback of the OAuth2PolicyFetcher, | |
234 // which triggers the registration request. | |
235 MockDeviceManagementJob* register_request = NULL; | |
236 EXPECT_CALL(device_management_service_, | |
237 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) | |
238 .WillOnce(device_management_service_.CreateAsyncJob(®ister_request)); | |
239 fetcher->delegate()->OnURLFetchComplete(fetcher); | |
240 EXPECT_TRUE(register_request); | 253 EXPECT_TRUE(register_request); |
241 EXPECT_FALSE(manager_->core()->client()->is_registered()); | 254 EXPECT_FALSE(manager_->core()->client()->is_registered()); |
242 | 255 |
243 Mock::VerifyAndClearExpectations(&device_management_service_); | 256 Mock::VerifyAndClearExpectations(&device_management_service_); |
244 EXPECT_CALL(device_management_service_, StartJob(_, _, _, _, _, _, _)) | 257 EXPECT_CALL(device_management_service_, StartJob(_, _, _, _, _, _, _)) |
245 .Times(AnyNumber()); | 258 .Times(AnyNumber()); |
246 | 259 |
247 return register_request; | 260 return register_request; |
248 } | 261 } |
249 | 262 |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
503 store_->NotifyStoreLoaded(); | 516 store_->NotifyStoreLoaded(); |
504 Mock::VerifyAndClearExpectations(&observer_); | 517 Mock::VerifyAndClearExpectations(&observer_); |
505 EXPECT_TRUE(manager_->core()->service()->IsInitializationComplete()); | 518 EXPECT_TRUE(manager_->core()->service()->IsInitializationComplete()); |
506 EXPECT_TRUE(manager_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); | 519 EXPECT_TRUE(manager_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); |
507 EXPECT_FALSE(manager_->core()->client()->is_registered()); | 520 EXPECT_FALSE(manager_->core()->client()->is_registered()); |
508 | 521 |
509 // The manager is waiting for the refresh token, and hasn't started any | 522 // The manager is waiting for the refresh token, and hasn't started any |
510 // fetchers. | 523 // fetchers. |
511 EXPECT_FALSE(test_url_fetcher_factory_.GetFetcherByID(0)); | 524 EXPECT_FALSE(test_url_fetcher_factory_.GetFetcherByID(0)); |
512 | 525 |
513 // Set a fake user in signin manager. This can be removed once TokenService | 526 // Set a fake refresh token at the OAuth2TokenService. |
514 // is removed. | 527 FakeProfileOAuth2TokenService* token_service = |
515 SigninManagerBase* signin_manager = | 528 static_cast<FakeProfileOAuth2TokenService*>( |
516 SigninManagerFactory::GetForProfile(profile_); | 529 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)); |
517 ASSERT_TRUE(signin_manager); | |
518 signin_manager->SetAuthenticatedUsername("user@gmail.com"); | |
519 | |
520 // Set a fake refresh token at the TokenService. | |
521 TokenService* token_service = TokenServiceFactory::GetForProfile(profile_); | |
522 ASSERT_TRUE(token_service); | 530 ASSERT_TRUE(token_service); |
523 GaiaAuthConsumer::ClientOAuthResult tokens("refresh", "access", 3600); | 531 EXPECT_FALSE(token_service->RefreshTokenIsAvailable(kTestAccountId)); |
524 EXPECT_FALSE(token_service->HasOAuthLoginToken()); | 532 token_service->IssueRefreshToken(kTestAccountId); |
525 token_service->UpdateCredentialsWithOAuth2(tokens); | 533 EXPECT_TRUE(token_service->RefreshTokenIsAvailable(kTestAccountId)); |
526 EXPECT_TRUE(token_service->HasOAuthLoginToken()); | |
527 | 534 |
528 // That should have notified the manager, which now issues the request for the | 535 // That should have notified the manager, which now issues the request for the |
529 // policy oauth token. | 536 // policy oauth token. |
530 MockDeviceManagementJob* register_request = IssueOAuthToken(true); | 537 MockDeviceManagementJob* register_request = IssueOAuthToken(true); |
531 ASSERT_TRUE(register_request); | 538 ASSERT_TRUE(register_request); |
532 register_request->SendResponse(DM_STATUS_SUCCESS, register_blob_); | 539 register_request->SendResponse(DM_STATUS_SUCCESS, register_blob_); |
533 | 540 |
534 // The refresh scheduler takes care of the initial fetch for unmanaged users. | 541 // The refresh scheduler takes care of the initial fetch for unmanaged users. |
535 // Running the task runner issues the initial fetch. | 542 // Running the task runner issues the initial fetch. |
536 FetchPolicy( | 543 FetchPolicy( |
(...skipping 17 matching lines...) Expand all Loading... |
554 EXPECT_TRUE(manager_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); | 561 EXPECT_TRUE(manager_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); |
555 EXPECT_TRUE(manager_->core()->client()->is_registered()); | 562 EXPECT_TRUE(manager_->core()->client()->is_registered()); |
556 | 563 |
557 // The refresh scheduler takes care of the initial fetch for unmanaged users. | 564 // The refresh scheduler takes care of the initial fetch for unmanaged users. |
558 // Running the task runner issues the initial fetch. | 565 // Running the task runner issues the initial fetch. |
559 FetchPolicy( | 566 FetchPolicy( |
560 base::Bind(&base::TestSimpleTaskRunner::RunUntilIdle, task_runner_)); | 567 base::Bind(&base::TestSimpleTaskRunner::RunUntilIdle, task_runner_)); |
561 } | 568 } |
562 | 569 |
563 } // namespace policy | 570 } // namespace policy |
OLD | NEW |