Chromium Code Reviews| Index: chrome/browser/policy/cloud/user_policy_signin_service.cc |
| diff --git a/chrome/browser/policy/cloud/user_policy_signin_service.cc b/chrome/browser/policy/cloud/user_policy_signin_service.cc |
| index 56d712cb561fa63d7ba6c90e06b28b6f53865974..12e5fee7cc6f56e3cfb8de07854a1776c9e06cbb 100644 |
| --- a/chrome/browser/policy/cloud/user_policy_signin_service.cc |
| +++ b/chrome/browser/policy/cloud/user_policy_signin_service.cc |
| @@ -14,10 +14,10 @@ |
| #include "chrome/browser/policy/cloud/user_cloud_policy_manager.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/profiles/profile_manager.h" |
| +#include "chrome/browser/signin/profile_oauth2_token_service.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/browser/signin/token_service.h" |
| -#include "chrome/browser/signin/token_service_factory.h" |
| #include "chrome/common/pref_names.h" |
| #include "content/public/browser/notification_details.h" |
| #include "content/public/browser/notification_source.h" |
| @@ -35,28 +35,37 @@ UserPolicySigninService::UserPolicySigninService( |
| if (profile->GetPrefs()->GetBoolean(prefs::kDisableCloudPolicyOnSignin)) |
| return; |
| + ProfileOAuth2TokenService* oauth_token_service = |
| + ProfileOAuth2TokenServiceFactory::GetForProfile(profile); |
|
Mattias Nissler (ping if slow)
2013/08/19 14:03:22
Can we inject this pointer from the factory via a
Andrew T Wilson (Slow)
2013/08/20 09:28:35
Yep, we discussed this and I was planning to do th
|
| + |
| + // ProfileOAuth2TokenService should not yet have loaded its tokens since this |
| + // happens in the background after PKS initialization - so this service |
| + // should always be created before the oauth token is available. |
| + DCHECK(!oauth_token_service->RefreshTokenIsAvailable()); |
| + |
| // Listen for an OAuth token to become available so we can register a client |
| // if for some reason the client is not already registered (for example, if |
| // the policy load failed during initial signin). |
| - registrar()->Add(this, |
| - chrome::NOTIFICATION_TOKEN_AVAILABLE, |
| - content::Source<TokenService>( |
| - TokenServiceFactory::GetForProfile(profile))); |
| - |
| - // TokenService should not yet have loaded its tokens since this happens in |
| - // the background after PKS initialization - so this service should always be |
| - // created before the oauth token is available. |
| - DCHECK(!TokenServiceFactory::GetForProfile(profile)->HasOAuthLoginToken()); |
| + oauth_token_service->AddObserver(this); |
| } |
| -UserPolicySigninService::~UserPolicySigninService() {} |
| +UserPolicySigninService::~UserPolicySigninService() { |
| +} |
| -void UserPolicySigninService::Shutdown() { |
| +void UserPolicySigninService::PrepareForUserCloudPolicyManagerShutdown() { |
| // Stop any pending registration helper activity. We do this here instead of |
| // in the destructor because we want to shutdown the registration helper |
| // before UserCloudPolicyManager shuts down the CloudPolicyClient. |
| registration_helper_.reset(); |
| + |
| + UserPolicySigninServiceBase::PrepareForUserCloudPolicyManagerShutdown(); |
| +} |
| + |
| +void UserPolicySigninService::Shutdown() { |
| UserPolicySigninServiceBase::Shutdown(); |
| + ProfileOAuth2TokenService* oauth_token_service = |
| + ProfileOAuth2TokenServiceFactory::GetForProfile(profile()); |
|
Mattias Nissler (ping if slow)
2013/08/19 14:03:22
pass pointer via ctor (also below)?
Andrew T Wilson (Slow)
2013/08/20 09:28:35
Done.
|
| + oauth_token_service->RemoveObserver(this); |
| } |
| void UserPolicySigninService::RegisterPolicyClient( |
| @@ -98,44 +107,23 @@ void UserPolicySigninService::CallPolicyRegistrationCallback( |
| callback.Run(client.Pass()); |
| } |
| -void UserPolicySigninService::Observe( |
| - int type, |
| - const content::NotificationSource& source, |
| - const content::NotificationDetails& details) { |
| - |
| - if (profile()->IsManaged()) { |
| - registrar()->RemoveAll(); |
| - return; |
| - } |
| - |
| - // If using a TestingProfile with no SigninManager or UserCloudPolicyManager, |
| - // skip initialization. |
| - if (!GetManager() || !SigninManagerFactory::GetForProfile(profile())) { |
| +void UserPolicySigninService::OnRefreshTokenAvailable( |
| + const std::string& account_id) { |
| + // If using a TestingProfile with no UserCloudPolicyManager, skip |
| + // initialization. |
| + if (!GetManager()) { |
| DVLOG(1) << "Skipping initialization for tests due to missing components."; |
| return; |
| } |
| - switch (type) { |
| - case chrome::NOTIFICATION_TOKEN_AVAILABLE: { |
| - const TokenService::TokenAvailableDetails& token_details = |
| - *(content::Details<const TokenService::TokenAvailableDetails>( |
| - details).ptr()); |
| - if (token_details.service() == |
| - GaiaConstants::kGaiaOAuth2LoginRefreshToken) { |
| - SigninManager* signin_manager = |
| - SigninManagerFactory::GetForProfile(profile()); |
| - std::string username = signin_manager->GetAuthenticatedUsername(); |
| - // Should not have GAIA tokens if the user isn't signed in. |
| - DCHECK(!username.empty()); |
| - // TokenService now has a refresh token (implying that the user is |
| - // signed in) so initialize the UserCloudPolicyManager. |
| - InitializeForSignedInUser(username); |
| - } |
| - break; |
| - } |
| - default: |
| - UserPolicySigninServiceBase::Observe(type, source, details); |
| - } |
| + SigninManager* signin_manager = |
| + SigninManagerFactory::GetForProfile(profile()); |
|
Mattias Nissler (ping if slow)
2013/08/19 14:03:22
ditto, can we pass the pointer via ctor (also belo
Andrew T Wilson (Slow)
2013/08/20 09:28:35
Done.
Andrew T Wilson (Slow)
2013/08/20 12:24:22
Actually, I take it back - we can't inject this at
|
| + std::string username = signin_manager->GetAuthenticatedUsername(); |
| + // Should not have OAuth tokens if the user isn't signed in. |
| + DCHECK(!username.empty()); |
| + // ProfileOAuth2TokenService now has a refresh token so initialize the |
| + // UserCloudPolicyManager. |
| + InitializeForSignedInUser(username); |
| } |
| void UserPolicySigninService::InitializeUserCloudPolicyManager( |
| @@ -164,22 +152,21 @@ void UserPolicySigninService::OnInitializationCompleted( |
| DVLOG_IF(1, manager->IsClientRegistered()) |
| << "Client already registered - not fetching DMToken"; |
| if (!manager->IsClientRegistered()) { |
| - std::string token = TokenServiceFactory::GetForProfile(profile())-> |
| - GetOAuth2LoginRefreshToken(); |
| - if (token.empty()) { |
| - // No token yet - this class listens for NOTIFICATION_TOKEN_AVAILABLE |
| + ProfileOAuth2TokenService* oauth_token_service = |
| + ProfileOAuth2TokenServiceFactory::GetForProfile(profile()); |
| + if (!oauth_token_service->RefreshTokenIsAvailable()) { |
| + // No token yet - this class listens for OnRefreshTokenAvailable() |
| // and will re-attempt registration once the token is available. |
| DLOG(WARNING) << "No OAuth Refresh Token - delaying policy download"; |
| return; |
| } |
| - RegisterCloudPolicyService(token); |
| + RegisterCloudPolicyService(); |
| } |
| // If client is registered now, prohibit signout. |
| ProhibitSignoutIfNeeded(); |
| } |
| -void UserPolicySigninService::RegisterCloudPolicyService( |
| - const std::string& login_token) { |
| +void UserPolicySigninService::RegisterCloudPolicyService() { |
| DCHECK(!GetManager()->IsClientRegistered()); |
| DVLOG(1) << "Fetching new DM Token"; |
| // Do nothing if already starting the registration process. |
| @@ -193,8 +180,11 @@ void UserPolicySigninService::RegisterCloudPolicyService( |
| GetManager()->core()->client(), |
| ShouldForceLoadPolicy(), |
| enterprise_management::DeviceRegisterRequest::BROWSER)); |
| - registration_helper_->StartRegistrationWithLoginToken( |
| - login_token, |
| + SigninManager* signin_manager = |
| + SigninManagerFactory::GetForProfile(profile()); |
| + registration_helper_->StartRegistration( |
| + ProfileOAuth2TokenServiceFactory::GetForProfile(profile()), |
| + signin_manager->GetAuthenticatedUsername(), |
| base::Bind(&UserPolicySigninService::OnRegistrationComplete, |
| base::Unretained(this))); |
| } |