| Index: chrome/browser/managed_mode/managed_user_registration_utility.cc
|
| diff --git a/chrome/browser/managed_mode/managed_user_registration_utility.cc b/chrome/browser/managed_mode/managed_user_registration_utility.cc
|
| deleted file mode 100644
|
| index 6d2d8e166e7ec4f1e62e9e70eb41ffe9245b3a15..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/managed_mode/managed_user_registration_utility.cc
|
| +++ /dev/null
|
| @@ -1,402 +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/managed_mode/managed_user_registration_utility.h"
|
| -
|
| -#include "base/base64.h"
|
| -#include "base/bind.h"
|
| -#include "base/command_line.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/prefs/pref_service.h"
|
| -#include "base/rand_util.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/browser/managed_mode/managed_user_constants.h"
|
| -#include "chrome/browser/managed_mode/managed_user_refresh_token_fetcher.h"
|
| -#include "chrome/browser/managed_mode/managed_user_shared_settings_service.h"
|
| -#include "chrome/browser/managed_mode/managed_user_shared_settings_service_factory.h"
|
| -#include "chrome/browser/managed_mode/managed_user_shared_settings_update.h"
|
| -#include "chrome/browser/managed_mode/managed_user_sync_service.h"
|
| -#include "chrome/browser/managed_mode/managed_user_sync_service_factory.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
|
| -#include "chrome/browser/signin/signin_manager_factory.h"
|
| -#include "chrome/browser/sync/glue/device_info.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "components/signin/core/browser/profile_oauth2_token_service.h"
|
| -#include "components/signin/core/browser/signin_manager.h"
|
| -#include "google_apis/gaia/gaia_urls.h"
|
| -#include "google_apis/gaia/google_service_auth_error.h"
|
| -
|
| -using base::DictionaryValue;
|
| -
|
| -namespace {
|
| -
|
| -ManagedUserRegistrationUtility* g_instance_for_tests = NULL;
|
| -
|
| -// Actual implementation of ManagedUserRegistrationUtility.
|
| -class ManagedUserRegistrationUtilityImpl
|
| - : public ManagedUserRegistrationUtility,
|
| - public ManagedUserSyncServiceObserver {
|
| - public:
|
| - ManagedUserRegistrationUtilityImpl(
|
| - PrefService* prefs,
|
| - scoped_ptr<ManagedUserRefreshTokenFetcher> token_fetcher,
|
| - ManagedUserSyncService* service,
|
| - ManagedUserSharedSettingsService* shared_settings_service);
|
| -
|
| - virtual ~ManagedUserRegistrationUtilityImpl();
|
| -
|
| - // Registers a new managed user with the server. |managed_user_id| is a new
|
| - // unique ID for the new managed user. If its value is the same as that of
|
| - // of one of the existing managed users, then the same user will be created
|
| - // on this machine (and if he has no avatar in sync, his avatar will
|
| - // be updated). |info| contains necessary information like
|
| - // the display name of the user and his avatar. |callback| is called
|
| - // with the result of the registration. We use the info here and not the
|
| - // profile, because on Chrome OS the profile of the managed user does not
|
| - // yet exist.
|
| - virtual void Register(const std::string& managed_user_id,
|
| - const ManagedUserRegistrationInfo& info,
|
| - const RegistrationCallback& callback) OVERRIDE;
|
| -
|
| - // ManagedUserSyncServiceObserver:
|
| - virtual void OnManagedUserAcknowledged(const std::string& managed_user_id)
|
| - OVERRIDE;
|
| - virtual void OnManagedUsersSyncingStopped() OVERRIDE;
|
| - virtual void OnManagedUsersChanged() OVERRIDE;
|
| -
|
| - private:
|
| - // Fetches the managed user token when we have the device name.
|
| - void FetchToken(const std::string& client_name);
|
| -
|
| - // Called when we have received a token for the managed user.
|
| - void OnReceivedToken(const GoogleServiceAuthError& error,
|
| - const std::string& token);
|
| -
|
| - // Dispatches the callback and cleans up if all the conditions have been met.
|
| - void CompleteRegistrationIfReady();
|
| -
|
| - // Aborts any registration currently in progress. If |run_callback| is true,
|
| - // calls the callback specified in Register() with the given |error|.
|
| - void AbortPendingRegistration(bool run_callback,
|
| - const GoogleServiceAuthError& error);
|
| -
|
| - // If |run_callback| is true, dispatches the callback with the saved token
|
| - // (which may be empty) and the given |error|. In any case, resets internal
|
| - // variables to be ready for the next registration.
|
| - void CompleteRegistration(bool run_callback,
|
| - const GoogleServiceAuthError& error);
|
| -
|
| - // Cancels any registration currently in progress, without calling the
|
| - // callback or reporting an error.
|
| - void CancelPendingRegistration();
|
| -
|
| - // ManagedUserSharedSettingsUpdate acknowledgment callback for password data
|
| - // in shared settings.
|
| - void OnPasswordChangeAcknowledged(bool success);
|
| -
|
| - PrefService* prefs_;
|
| - scoped_ptr<ManagedUserRefreshTokenFetcher> token_fetcher_;
|
| -
|
| - // A |KeyedService| owned by the custodian profile.
|
| - ManagedUserSyncService* managed_user_sync_service_;
|
| -
|
| - // A |KeyedService| owned by the custodian profile.
|
| - ManagedUserSharedSettingsService* managed_user_shared_settings_service_;
|
| -
|
| - std::string pending_managed_user_id_;
|
| - std::string pending_managed_user_token_;
|
| - bool pending_managed_user_acknowledged_;
|
| - bool is_existing_managed_user_;
|
| - bool avatar_updated_;
|
| - RegistrationCallback callback_;
|
| - scoped_ptr<ManagedUserSharedSettingsUpdate> password_update_;
|
| -
|
| - base::WeakPtrFactory<ManagedUserRegistrationUtilityImpl> weak_ptr_factory_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ManagedUserRegistrationUtilityImpl);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -ManagedUserRegistrationInfo::ManagedUserRegistrationInfo(
|
| - const base::string16& name,
|
| - int avatar_index)
|
| - : avatar_index(avatar_index),
|
| - name(name) {
|
| -}
|
| -
|
| -ManagedUserRegistrationInfo::~ManagedUserRegistrationInfo() {}
|
| -
|
| -ScopedTestingManagedUserRegistrationUtility::
|
| - ScopedTestingManagedUserRegistrationUtility(
|
| - ManagedUserRegistrationUtility* instance) {
|
| - ManagedUserRegistrationUtility::SetUtilityForTests(instance);
|
| -}
|
| -
|
| -ScopedTestingManagedUserRegistrationUtility::
|
| - ~ScopedTestingManagedUserRegistrationUtility() {
|
| - ManagedUserRegistrationUtility::SetUtilityForTests(NULL);
|
| -}
|
| -
|
| -// static
|
| -scoped_ptr<ManagedUserRegistrationUtility>
|
| -ManagedUserRegistrationUtility::Create(Profile* profile) {
|
| - if (g_instance_for_tests) {
|
| - ManagedUserRegistrationUtility* result = g_instance_for_tests;
|
| - g_instance_for_tests = NULL;
|
| - return make_scoped_ptr(result);
|
| - }
|
| -
|
| - ProfileOAuth2TokenService* token_service =
|
| - ProfileOAuth2TokenServiceFactory::GetForProfile(profile);
|
| - SigninManagerBase* signin_manager =
|
| - SigninManagerFactory::GetForProfile(profile);
|
| - scoped_ptr<ManagedUserRefreshTokenFetcher> token_fetcher =
|
| - ManagedUserRefreshTokenFetcher::Create(
|
| - token_service,
|
| - signin_manager->GetAuthenticatedAccountId(),
|
| - profile->GetRequestContext());
|
| - ManagedUserSyncService* managed_user_sync_service =
|
| - ManagedUserSyncServiceFactory::GetForProfile(profile);
|
| - ManagedUserSharedSettingsService* managed_user_shared_settings_service =
|
| - ManagedUserSharedSettingsServiceFactory::GetForBrowserContext(profile);
|
| - return make_scoped_ptr(ManagedUserRegistrationUtility::CreateImpl(
|
| - profile->GetPrefs(),
|
| - token_fetcher.Pass(),
|
| - managed_user_sync_service,
|
| - managed_user_shared_settings_service));
|
| -}
|
| -
|
| -// static
|
| -std::string ManagedUserRegistrationUtility::GenerateNewManagedUserId() {
|
| - std::string new_managed_user_id;
|
| - base::Base64Encode(base::RandBytesAsString(8), &new_managed_user_id);
|
| - return new_managed_user_id;
|
| -}
|
| -
|
| -// static
|
| -void ManagedUserRegistrationUtility::SetUtilityForTests(
|
| - ManagedUserRegistrationUtility* utility) {
|
| - if (g_instance_for_tests)
|
| - delete g_instance_for_tests;
|
| - g_instance_for_tests = utility;
|
| -}
|
| -
|
| -// static
|
| -ManagedUserRegistrationUtility* ManagedUserRegistrationUtility::CreateImpl(
|
| - PrefService* prefs,
|
| - scoped_ptr<ManagedUserRefreshTokenFetcher> token_fetcher,
|
| - ManagedUserSyncService* service,
|
| - ManagedUserSharedSettingsService* shared_settings_service) {
|
| - return new ManagedUserRegistrationUtilityImpl(prefs,
|
| - token_fetcher.Pass(),
|
| - service,
|
| - shared_settings_service);
|
| -}
|
| -
|
| -namespace {
|
| -
|
| -ManagedUserRegistrationUtilityImpl::ManagedUserRegistrationUtilityImpl(
|
| - PrefService* prefs,
|
| - scoped_ptr<ManagedUserRefreshTokenFetcher> token_fetcher,
|
| - ManagedUserSyncService* service,
|
| - ManagedUserSharedSettingsService* shared_settings_service)
|
| - : prefs_(prefs),
|
| - token_fetcher_(token_fetcher.Pass()),
|
| - managed_user_sync_service_(service),
|
| - managed_user_shared_settings_service_(shared_settings_service),
|
| - pending_managed_user_acknowledged_(false),
|
| - is_existing_managed_user_(false),
|
| - avatar_updated_(false),
|
| - weak_ptr_factory_(this) {
|
| - managed_user_sync_service_->AddObserver(this);
|
| -}
|
| -
|
| -ManagedUserRegistrationUtilityImpl::~ManagedUserRegistrationUtilityImpl() {
|
| - managed_user_sync_service_->RemoveObserver(this);
|
| - CancelPendingRegistration();
|
| -}
|
| -
|
| -void ManagedUserRegistrationUtilityImpl::Register(
|
| - const std::string& managed_user_id,
|
| - const ManagedUserRegistrationInfo& info,
|
| - const RegistrationCallback& callback) {
|
| - DCHECK(pending_managed_user_id_.empty());
|
| - callback_ = callback;
|
| - pending_managed_user_id_ = managed_user_id;
|
| -
|
| - bool need_password_update = !info.password_data.empty();
|
| - const base::DictionaryValue* dict =
|
| - prefs_->GetDictionary(prefs::kSupervisedUsers);
|
| - is_existing_managed_user_ = dict->HasKey(managed_user_id);
|
| - if (!is_existing_managed_user_) {
|
| - managed_user_sync_service_->AddManagedUser(pending_managed_user_id_,
|
| - base::UTF16ToUTF8(info.name),
|
| - info.master_key,
|
| - info.password_signature_key,
|
| - info.password_encryption_key,
|
| - info.avatar_index);
|
| - } else {
|
| - const base::DictionaryValue* value = NULL;
|
| - bool success =
|
| - dict->GetDictionaryWithoutPathExpansion(managed_user_id, &value);
|
| - DCHECK(success);
|
| - std::string key;
|
| - bool need_keys = !info.password_signature_key.empty() ||
|
| - !info.password_encryption_key.empty();
|
| - bool have_keys =
|
| - value->GetString(ManagedUserSyncService::kPasswordSignatureKey, &key) &&
|
| - !key.empty() &&
|
| - value->GetString(ManagedUserSyncService::kPasswordEncryptionKey,
|
| - &key) &&
|
| - !key.empty();
|
| -
|
| - bool keys_need_update = need_keys && !have_keys;
|
| -
|
| - if (keys_need_update) {
|
| - managed_user_sync_service_->UpdateManagedUser(
|
| - pending_managed_user_id_,
|
| - base::UTF16ToUTF8(info.name),
|
| - info.master_key,
|
| - info.password_signature_key,
|
| - info.password_encryption_key,
|
| - info.avatar_index);
|
| - } else {
|
| - // The user already exists and does not need to be updated.
|
| - need_password_update = false;
|
| - OnManagedUserAcknowledged(managed_user_id);
|
| - }
|
| - avatar_updated_ =
|
| - managed_user_sync_service_->UpdateManagedUserAvatarIfNeeded(
|
| - managed_user_id,
|
| - info.avatar_index);
|
| - }
|
| -#if defined(OS_CHROMEOS)
|
| - const char* kAvatarKey = managed_users::kChromeOSAvatarIndex;
|
| -#else
|
| - const char* kAvatarKey = managed_users::kChromeAvatarIndex;
|
| -#endif
|
| - managed_user_shared_settings_service_->SetValue(
|
| - pending_managed_user_id_, kAvatarKey,
|
| - base::FundamentalValue(info.avatar_index));
|
| - if (need_password_update) {
|
| - password_update_.reset(new ManagedUserSharedSettingsUpdate(
|
| - managed_user_shared_settings_service_,
|
| - pending_managed_user_id_,
|
| - managed_users::kChromeOSPasswordData,
|
| - scoped_ptr<base::Value>(info.password_data.DeepCopy()),
|
| - base::Bind(
|
| - &ManagedUserRegistrationUtilityImpl::OnPasswordChangeAcknowledged,
|
| - weak_ptr_factory_.GetWeakPtr())));
|
| - }
|
| -
|
| - browser_sync::DeviceInfo::GetClientName(
|
| - base::Bind(&ManagedUserRegistrationUtilityImpl::FetchToken,
|
| - weak_ptr_factory_.GetWeakPtr()));
|
| -}
|
| -
|
| -void ManagedUserRegistrationUtilityImpl::CancelPendingRegistration() {
|
| - AbortPendingRegistration(
|
| - false, // Don't run the callback. The error will be ignored.
|
| - GoogleServiceAuthError(GoogleServiceAuthError::NONE));
|
| -}
|
| -
|
| -void ManagedUserRegistrationUtilityImpl::OnManagedUserAcknowledged(
|
| - const std::string& managed_user_id) {
|
| - DCHECK_EQ(pending_managed_user_id_, managed_user_id);
|
| - DCHECK(!pending_managed_user_acknowledged_);
|
| - pending_managed_user_acknowledged_ = true;
|
| - CompleteRegistrationIfReady();
|
| -}
|
| -
|
| -void ManagedUserRegistrationUtilityImpl::OnPasswordChangeAcknowledged(
|
| - bool success) {
|
| - DCHECK(password_update_);
|
| - DCHECK(success);
|
| - password_update_.reset();
|
| - CompleteRegistrationIfReady();
|
| -}
|
| -
|
| -void ManagedUserRegistrationUtilityImpl::OnManagedUsersSyncingStopped() {
|
| - AbortPendingRegistration(
|
| - true, // Run the callback.
|
| - GoogleServiceAuthError(GoogleServiceAuthError::REQUEST_CANCELED));
|
| -}
|
| -
|
| -void ManagedUserRegistrationUtilityImpl::OnManagedUsersChanged() {}
|
| -
|
| -void ManagedUserRegistrationUtilityImpl::FetchToken(
|
| - const std::string& client_name) {
|
| - token_fetcher_->Start(
|
| - pending_managed_user_id_, client_name,
|
| - base::Bind(&ManagedUserRegistrationUtilityImpl::OnReceivedToken,
|
| - weak_ptr_factory_.GetWeakPtr()));
|
| -}
|
| -
|
| -void ManagedUserRegistrationUtilityImpl::OnReceivedToken(
|
| - const GoogleServiceAuthError& error,
|
| - const std::string& token) {
|
| - if (error.state() != GoogleServiceAuthError::NONE) {
|
| - CompleteRegistration(true, error);
|
| - return;
|
| - }
|
| -
|
| - DCHECK(!token.empty());
|
| - pending_managed_user_token_ = token;
|
| - CompleteRegistrationIfReady();
|
| -}
|
| -
|
| -void ManagedUserRegistrationUtilityImpl::CompleteRegistrationIfReady() {
|
| - bool skip_check = CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kNoSupervisedUserAcknowledgmentCheck);
|
| -
|
| - if (!pending_managed_user_acknowledged_ && !skip_check)
|
| - return;
|
| - if (password_update_ && !skip_check)
|
| - return;
|
| - if (pending_managed_user_token_.empty())
|
| - return;
|
| -
|
| - GoogleServiceAuthError error(GoogleServiceAuthError::NONE);
|
| - CompleteRegistration(true, error);
|
| -}
|
| -
|
| -void ManagedUserRegistrationUtilityImpl::AbortPendingRegistration(
|
| - bool run_callback,
|
| - const GoogleServiceAuthError& error) {
|
| - pending_managed_user_token_.clear();
|
| - CompleteRegistration(run_callback, error);
|
| -}
|
| -
|
| -void ManagedUserRegistrationUtilityImpl::CompleteRegistration(
|
| - bool run_callback,
|
| - const GoogleServiceAuthError& error) {
|
| - if (callback_.is_null())
|
| - return;
|
| -
|
| - if (pending_managed_user_token_.empty()) {
|
| - DCHECK(!pending_managed_user_id_.empty());
|
| -
|
| - if (!is_existing_managed_user_) {
|
| - // Remove the pending managed user if we weren't successful.
|
| - // However, check that we are not importing a managed user
|
| - // before deleting it from sync to avoid accidental deletion of
|
| - // existing managed users by just canceling the registration for example.
|
| - managed_user_sync_service_->DeleteManagedUser(pending_managed_user_id_);
|
| - } else if (avatar_updated_) {
|
| - // Canceling (or failing) a managed user import that did set the avatar
|
| - // should undo this change.
|
| - managed_user_sync_service_->ClearManagedUserAvatar(
|
| - pending_managed_user_id_);
|
| - }
|
| - }
|
| -
|
| - if (run_callback)
|
| - callback_.Run(error, pending_managed_user_token_);
|
| - callback_.Reset();
|
| -}
|
| -
|
| -} // namespace
|
|
|