| 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
|
| deleted file mode 100644
|
| index 8fdc3b8162d68c3075d800167530765b9fbf7055..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/policy/cloud/cloud_policy_client_registration_helper.cc
|
| +++ /dev/null
|
| @@ -1,300 +0,0 @@
|
| -// Copyright 2013 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 "chrome/browser/policy/cloud/cloud_policy_client_registration_helper.h"
|
| -
|
| -#include <vector>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/bind_helpers.h"
|
| -#include "base/logging.h"
|
| -#include "base/time/time.h"
|
| -#include "base/values.h"
|
| -#include "google_apis/gaia/gaia_constants.h"
|
| -#include "google_apis/gaia/gaia_urls.h"
|
| -#include "google_apis/gaia/google_service_auth_error.h"
|
| -#include "google_apis/gaia/oauth2_token_service.h"
|
| -#include "net/url_request/url_request_context_getter.h"
|
| -
|
| -#if !defined(OS_ANDROID)
|
| -#include "google_apis/gaia/oauth2_access_token_consumer.h"
|
| -#include "google_apis/gaia/oauth2_access_token_fetcher.h"
|
| -#endif
|
| -
|
| -namespace policy {
|
| -
|
| -// OAuth2 scope for the userinfo service.
|
| -const char kServiceScopeGetUserInfo[] =
|
| - "https://www.googleapis.com/auth/userinfo.email";
|
| -
|
| -// The key under which the hosted-domain value is stored in the UserInfo
|
| -// response.
|
| -const char kGetHostedDomainKey[] = "hd";
|
| -
|
| -typedef base::Callback<void(const std::string&)> StringCallback;
|
| -
|
| -// This class fetches an OAuth2 token scoped for the userinfo and DM services.
|
| -// 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:
|
| - TokenServiceHelper();
|
| -
|
| - void FetchAccessToken(
|
| - OAuth2TokenService* token_service,
|
| - const std::string& username,
|
| - const StringCallback& callback);
|
| -
|
| - private:
|
| - // OAuth2TokenService::Consumer implementation:
|
| - virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
|
| - const std::string& access_token,
|
| - const base::Time& expiration_time) OVERRIDE;
|
| - virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
|
| - const GoogleServiceAuthError& error) OVERRIDE;
|
| -
|
| - StringCallback callback_;
|
| - scoped_ptr<OAuth2TokenService::Request> token_request_;
|
| -};
|
| -
|
| -CloudPolicyClientRegistrationHelper::TokenServiceHelper::TokenServiceHelper() {}
|
| -
|
| -void CloudPolicyClientRegistrationHelper::TokenServiceHelper::FetchAccessToken(
|
| - OAuth2TokenService* token_service,
|
| - const std::string& account_id,
|
| - const StringCallback& callback) {
|
| - DCHECK(!token_request_);
|
| - // Either the caller must supply a username, or the user must be signed in
|
| - // already.
|
| - DCHECK(!account_id.empty());
|
| - DCHECK(token_service->RefreshTokenIsAvailable(account_id));
|
| -
|
| - callback_ = callback;
|
| -
|
| - OAuth2TokenService::ScopeSet scopes;
|
| - scopes.insert(GaiaConstants::kDeviceManagementServiceOAuth);
|
| - scopes.insert(kServiceScopeGetUserInfo);
|
| - token_request_ = token_service->StartRequest(account_id, scopes, this);
|
| -}
|
| -
|
| -void CloudPolicyClientRegistrationHelper::TokenServiceHelper::OnGetTokenSuccess(
|
| - const OAuth2TokenService::Request* request,
|
| - const std::string& access_token,
|
| - const base::Time& expiration_time) {
|
| - DCHECK_EQ(token_request_.get(), request);
|
| - callback_.Run(access_token);
|
| -}
|
| -
|
| -void CloudPolicyClientRegistrationHelper::TokenServiceHelper::OnGetTokenFailure(
|
| - const OAuth2TokenService::Request* request,
|
| - const GoogleServiceAuthError& error) {
|
| - DCHECK_EQ(token_request_.get(), request);
|
| - callback_.Run("");
|
| -}
|
| -
|
| -#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. 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:
|
| - LoginTokenHelper();
|
| -
|
| - void FetchAccessToken(const std::string& login_refresh_token,
|
| - net::URLRequestContextGetter* context,
|
| - const StringCallback& callback);
|
| -
|
| - private:
|
| - // OAuth2AccessTokenConsumer implementation:
|
| - virtual void OnGetTokenSuccess(const std::string& access_token,
|
| - const base::Time& expiration_time) OVERRIDE;
|
| - virtual void OnGetTokenFailure(
|
| - const GoogleServiceAuthError& error) OVERRIDE;
|
| -
|
| - StringCallback callback_;
|
| - scoped_ptr<OAuth2AccessTokenFetcher> oauth2_access_token_fetcher_;
|
| -};
|
| -
|
| -CloudPolicyClientRegistrationHelper::LoginTokenHelper::LoginTokenHelper() {}
|
| -
|
| -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
|
| - // userinfo services.
|
| - oauth2_access_token_fetcher_.reset(
|
| - new OAuth2AccessTokenFetcher(this, context));
|
| - std::vector<std::string> scopes;
|
| - scopes.push_back(GaiaConstants::kDeviceManagementServiceOAuth);
|
| - scopes.push_back(kServiceScopeGetUserInfo);
|
| - GaiaUrls* gaia_urls = GaiaUrls::GetInstance();
|
| - oauth2_access_token_fetcher_->Start(
|
| - gaia_urls->oauth2_chrome_client_id(),
|
| - gaia_urls->oauth2_chrome_client_secret(),
|
| - login_refresh_token,
|
| - scopes);
|
| -}
|
| -
|
| -void CloudPolicyClientRegistrationHelper::LoginTokenHelper::OnGetTokenSuccess(
|
| - const std::string& access_token,
|
| - const base::Time& expiration_time) {
|
| - callback_.Run(access_token);
|
| -}
|
| -
|
| -void CloudPolicyClientRegistrationHelper::LoginTokenHelper::OnGetTokenFailure(
|
| - const GoogleServiceAuthError& error) {
|
| - callback_.Run("");
|
| -}
|
| -
|
| -#endif
|
| -
|
| -CloudPolicyClientRegistrationHelper::CloudPolicyClientRegistrationHelper(
|
| - CloudPolicyClient* client,
|
| - bool should_force_load_policy,
|
| - enterprise_management::DeviceRegisterRequest::Type registration_type)
|
| - : context_(client->GetRequestContext()),
|
| - client_(client),
|
| - should_force_load_policy_(should_force_load_policy),
|
| - registration_type_(registration_type) {
|
| - DCHECK(context_);
|
| - DCHECK(client_);
|
| -}
|
| -
|
| -CloudPolicyClientRegistrationHelper::~CloudPolicyClientRegistrationHelper() {
|
| - // Clean up any pending observers in case the browser is shutdown while
|
| - // trying to register for policy.
|
| - if (client_)
|
| - client_->RemoveObserver(this);
|
| -}
|
| -
|
| -
|
| -void CloudPolicyClientRegistrationHelper::StartRegistration(
|
| - OAuth2TokenService* token_service,
|
| - const std::string& account_id,
|
| - const base::Closure& callback) {
|
| - DVLOG(1) << "Starting registration process with username";
|
| - DCHECK(!client_->is_registered());
|
| - callback_ = callback;
|
| - client_->AddObserver(this);
|
| -
|
| - token_service_helper_.reset(new TokenServiceHelper());
|
| - token_service_helper_->FetchAccessToken(
|
| - token_service,
|
| - account_id,
|
| - base::Bind(&CloudPolicyClientRegistrationHelper::OnTokenFetched,
|
| - base::Unretained(this)));
|
| -}
|
| -
|
| -#if !defined(OS_ANDROID)
|
| -void CloudPolicyClientRegistrationHelper::StartRegistrationWithLoginToken(
|
| - const std::string& login_refresh_token,
|
| - const base::Closure& callback) {
|
| - DVLOG(1) << "Starting registration process with login token";
|
| - DCHECK(!client_->is_registered());
|
| - callback_ = callback;
|
| - client_->AddObserver(this);
|
| -
|
| - 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) {
|
| -#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 "
|
| - << GaiaConstants::kDeviceManagementServiceOAuth;
|
| - RequestCompleted();
|
| - return;
|
| - }
|
| -
|
| - // Cache the access token to be used after the GetUserInfo call.
|
| - oauth_access_token_ = access_token;
|
| - DVLOG(1) << "Fetched new scoped OAuth token:" << oauth_access_token_;
|
| - // Now we've gotten our access token - contact GAIA to see if this is a
|
| - // hosted domain.
|
| - user_info_fetcher_.reset(new UserInfoFetcher(this, context_));
|
| - user_info_fetcher_->Start(oauth_access_token_);
|
| -}
|
| -
|
| -void CloudPolicyClientRegistrationHelper::OnGetUserInfoFailure(
|
| - const GoogleServiceAuthError& error) {
|
| - DVLOG(1) << "Failed to fetch user info from GAIA: " << error.state();
|
| - user_info_fetcher_.reset();
|
| - RequestCompleted();
|
| -}
|
| -
|
| -void CloudPolicyClientRegistrationHelper::OnGetUserInfoSuccess(
|
| - const base::DictionaryValue* data) {
|
| - user_info_fetcher_.reset();
|
| - if (!data->HasKey(kGetHostedDomainKey) && !should_force_load_policy_) {
|
| - DVLOG(1) << "User not from a hosted domain - skipping registration";
|
| - RequestCompleted();
|
| - return;
|
| - }
|
| - DVLOG(1) << "Registering CloudPolicyClient for user from hosted domain";
|
| - // The user is from a hosted domain, so it's OK to register the
|
| - // CloudPolicyClient and make requests to DMServer.
|
| - if (client_->is_registered()) {
|
| - // Client should not be registered yet.
|
| - NOTREACHED();
|
| - RequestCompleted();
|
| - return;
|
| - }
|
| -
|
| - // Kick off registration of the CloudPolicyClient with our newly minted
|
| - // oauth_access_token_.
|
| - client_->Register(registration_type_, oauth_access_token_,
|
| - std::string(), false, std::string());
|
| -}
|
| -
|
| -void CloudPolicyClientRegistrationHelper::OnPolicyFetched(
|
| - CloudPolicyClient* client) {
|
| - // Ignored.
|
| -}
|
| -
|
| -void CloudPolicyClientRegistrationHelper::OnRegistrationStateChanged(
|
| - CloudPolicyClient* client) {
|
| - DVLOG(1) << "Client registration succeeded";
|
| - DCHECK_EQ(client, client_);
|
| - DCHECK(client->is_registered());
|
| - RequestCompleted();
|
| -}
|
| -
|
| -void CloudPolicyClientRegistrationHelper::OnClientError(
|
| - CloudPolicyClient* client) {
|
| - DVLOG(1) << "Client registration failed";
|
| - DCHECK_EQ(client, client_);
|
| - RequestCompleted();
|
| -}
|
| -
|
| -void CloudPolicyClientRegistrationHelper::RequestCompleted() {
|
| - if (client_) {
|
| - client_->RemoveObserver(this);
|
| - // |client_| may be freed by the callback so clear it now.
|
| - client_ = NULL;
|
| - callback_.Run();
|
| - }
|
| -}
|
| -
|
| -} // namespace policy
|
|
|