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

Unified Diff: chrome/browser/managed_mode/managed_user_registration_utility.cc

Issue 335833003: Rename "managed (mode|user)" to "supervised user" (part 2) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review comments (+ a few other cleanups) Created 6 years, 6 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/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

Powered by Google App Engine
This is Rietveld 408576698