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

Unified Diff: chrome/browser/policy/cloud/cloud_policy_client_registration_helper.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/cloud_policy_client_registration_helper.cc
diff --git a/chrome/browser/policy/cloud/cloud_policy_client_registration_helper.cc b/chrome/browser/policy/cloud/cloud_policy_client_registration_helper.cc
index 224977f651b3dc0e671cd55a82fbaccf6296a8ae..0f0e7be373e6a1050c4ddd715cf2af4a2e4e379c 100644
--- a/chrome/browser/policy/cloud/cloud_policy_client_registration_helper.cc
+++ b/chrome/browser/policy/cloud/cloud_policy_client_registration_helper.cc
@@ -11,13 +11,13 @@
#include "base/logging.h"
#include "base/time/time.h"
#include "base/values.h"
+#include "chrome/browser/signin/oauth2_token_service.h"
#include "google_apis/gaia/gaia_constants.h"
#include "google_apis/gaia/gaia_urls.h"
#include "google_apis/gaia/google_service_auth_error.h"
#if defined(OS_ANDROID)
#include "chrome/browser/signin/android_profile_oauth2_token_service.h"
-#include "chrome/browser/signin/oauth2_token_service.h"
#else
#include "google_apis/gaia/oauth2_access_token_consumer.h"
#include "google_apis/gaia/oauth2_access_token_fetcher.h"
@@ -25,8 +25,6 @@
namespace policy {
-namespace {
-
// OAuth2 scope for the userinfo service.
const char kServiceScopeGetUserInfo[] =
"https://www.googleapis.com/auth/userinfo.email";
@@ -37,22 +35,25 @@ const char kGetHostedDomainKey[] = "hd";
typedef base::Callback<void(const std::string&)> StringCallback;
-} // namespace
-
-#if defined(OS_ANDROID)
-
// This class fetches an OAuth2 token scoped for the userinfo and DM services.
-// The AccountManager is used to mint the token on the Java side, given the
-// username of an account that is known to exist on the device.
-// This allows fetching the token before the sign-in process is finished.
-class CloudPolicyClientRegistrationHelper::TokenHelperAndroid
+// On Android, we use a special API to allow us to fetch a token for an account
+// that is not yet logged in to allow fetching the token before the sign-in
+// process is finished.
+class CloudPolicyClientRegistrationHelper::TokenServiceHelper
: public OAuth2TokenService::Consumer {
public:
- TokenHelperAndroid();
+ TokenServiceHelper();
- void FetchAccessToken(AndroidProfileOAuth2TokenService* token_service,
- const std::string& username,
- const StringCallback& callback);
+ void FetchAccessToken(
+#if defined(OS_ANDROID)
+ // TODO(atwilson): Remove this when StartRequestForUsername() is merged
+ // into the base OAuth2TokenService class.
+ AndroidProfileOAuth2TokenService* token_service,
+#else
+ OAuth2TokenService* token_service,
+#endif
+ const std::string& username,
+ const StringCallback& callback);
private:
// OAuth2TokenService::Consumer implementation:
@@ -66,23 +67,35 @@ class CloudPolicyClientRegistrationHelper::TokenHelperAndroid
scoped_ptr<OAuth2TokenService::Request> token_request_;
};
-CloudPolicyClientRegistrationHelper::TokenHelperAndroid::TokenHelperAndroid() {}
+CloudPolicyClientRegistrationHelper::TokenServiceHelper::TokenServiceHelper() {}
-void CloudPolicyClientRegistrationHelper::TokenHelperAndroid::FetchAccessToken(
+void CloudPolicyClientRegistrationHelper::TokenServiceHelper::FetchAccessToken(
+#if defined(OS_ANDROID)
AndroidProfileOAuth2TokenService* token_service,
+#else
+ OAuth2TokenService* token_service,
+#endif
const std::string& username,
const StringCallback& callback) {
+ DCHECK(!token_request_);
+ // Either the caller must supply a username, or the user must be signed in
+ // already.
+ DCHECK(!username.empty() || token_service->RefreshTokenIsAvailable());
callback_ = callback;
OAuth2TokenService::ScopeSet scopes;
scopes.insert(GaiaConstants::kDeviceManagementServiceOAuth);
scopes.insert(kServiceScopeGetUserInfo);
+#if defined(OS_ANDROID)
token_request_ =
token_service->StartRequestForUsername(username, scopes, this);
+#else
+ token_request_ = token_service->StartRequest(scopes, this);
+#endif
}
-void CloudPolicyClientRegistrationHelper::TokenHelperAndroid::OnGetTokenSuccess(
+void CloudPolicyClientRegistrationHelper::TokenServiceHelper::OnGetTokenSuccess(
const OAuth2TokenService::Request* request,
const std::string& access_token,
const base::Time& expiration_time) {
@@ -90,22 +103,23 @@ void CloudPolicyClientRegistrationHelper::TokenHelperAndroid::OnGetTokenSuccess(
callback_.Run(access_token);
}
-void CloudPolicyClientRegistrationHelper::TokenHelperAndroid::OnGetTokenFailure(
+void CloudPolicyClientRegistrationHelper::TokenServiceHelper::OnGetTokenFailure(
const OAuth2TokenService::Request* request,
const GoogleServiceAuthError& error) {
DCHECK_EQ(token_request_.get(), request);
callback_.Run("");
}
-#else
-
+#if !defined(OS_ANDROID)
// This class fetches the OAuth2 token scoped for the userinfo and DM services.
// It uses an OAuth2AccessTokenFetcher to fetch it, given a login refresh token
-// that can be used to authorize that request.
-class CloudPolicyClientRegistrationHelper::TokenHelper
+// that can be used to authorize that request. This class is not needed on
+// Android because we can use OAuth2TokenService to fetch tokens for accounts
+// even before they are signed in.
+class CloudPolicyClientRegistrationHelper::LoginTokenHelper
: public OAuth2AccessTokenConsumer {
public:
- TokenHelper();
+ LoginTokenHelper();
void FetchAccessToken(const std::string& login_refresh_token,
net::URLRequestContextGetter* context,
@@ -122,12 +136,13 @@ class CloudPolicyClientRegistrationHelper::TokenHelper
scoped_ptr<OAuth2AccessTokenFetcher> oauth2_access_token_fetcher_;
};
-CloudPolicyClientRegistrationHelper::TokenHelper::TokenHelper() {}
+CloudPolicyClientRegistrationHelper::LoginTokenHelper::LoginTokenHelper() {}
-void CloudPolicyClientRegistrationHelper::TokenHelper::FetchAccessToken(
+void CloudPolicyClientRegistrationHelper::LoginTokenHelper::FetchAccessToken(
const std::string& login_refresh_token,
net::URLRequestContextGetter* context,
const StringCallback& callback) {
+ DCHECK(!oauth2_access_token_fetcher_);
callback_ = callback;
// Start fetching an OAuth2 access token for the device management and
@@ -145,13 +160,13 @@ void CloudPolicyClientRegistrationHelper::TokenHelper::FetchAccessToken(
scopes);
}
-void CloudPolicyClientRegistrationHelper::TokenHelper::OnGetTokenSuccess(
+void CloudPolicyClientRegistrationHelper::LoginTokenHelper::OnGetTokenSuccess(
const std::string& access_token,
const base::Time& expiration_time) {
callback_.Run(access_token);
}
-void CloudPolicyClientRegistrationHelper::TokenHelper::OnGetTokenFailure(
+void CloudPolicyClientRegistrationHelper::LoginTokenHelper::OnGetTokenFailure(
const GoogleServiceAuthError& error) {
callback_.Run("");
}
@@ -178,10 +193,13 @@ CloudPolicyClientRegistrationHelper::~CloudPolicyClientRegistrationHelper() {
client_->RemoveObserver(this);
}
-#if defined(OS_ANDROID)
void CloudPolicyClientRegistrationHelper::StartRegistration(
+#if defined(OS_ANDROID)
AndroidProfileOAuth2TokenService* token_service,
+#else
+ OAuth2TokenService* token_service,
+#endif
const std::string& username,
const base::Closure& callback) {
DVLOG(1) << "Starting registration process with username";
@@ -189,16 +207,15 @@ void CloudPolicyClientRegistrationHelper::StartRegistration(
callback_ = callback;
client_->AddObserver(this);
- token_helper_.reset(new TokenHelperAndroid());
- token_helper_->FetchAccessToken(
+ token_service_helper_.reset(new TokenServiceHelper());
+ token_service_helper_->FetchAccessToken(
token_service,
username,
base::Bind(&CloudPolicyClientRegistrationHelper::OnTokenFetched,
base::Unretained(this)));
}
-#else
-
+#if !defined(OS_ANDROID)
void CloudPolicyClientRegistrationHelper::StartRegistrationWithLoginToken(
const std::string& login_refresh_token,
const base::Closure& callback) {
@@ -207,19 +224,22 @@ void CloudPolicyClientRegistrationHelper::StartRegistrationWithLoginToken(
callback_ = callback;
client_->AddObserver(this);
- token_helper_.reset(new TokenHelper());
- token_helper_->FetchAccessToken(
+ login_token_helper_.reset(
+ new CloudPolicyClientRegistrationHelper::LoginTokenHelper());
+ login_token_helper_->FetchAccessToken(
login_refresh_token,
context_,
base::Bind(&CloudPolicyClientRegistrationHelper::OnTokenFetched,
base::Unretained(this)));
}
-
#endif
void CloudPolicyClientRegistrationHelper::OnTokenFetched(
const std::string& access_token) {
- token_helper_.reset();
+#if !defined(OS_ANDROID)
+ login_token_helper_.reset();
+#endif
+ token_service_helper_.reset();
if (access_token.empty()) {
DLOG(WARNING) << "Could not fetch access token for "

Powered by Google App Engine
This is Rietveld 408576698