| Index: chromeos/login/auth/cryptohome_authenticator.cc
|
| diff --git a/chrome/browser/chromeos/login/auth/parallel_authenticator.cc b/chromeos/login/auth/cryptohome_authenticator.cc
|
| similarity index 66%
|
| rename from chrome/browser/chromeos/login/auth/parallel_authenticator.cc
|
| rename to chromeos/login/auth/cryptohome_authenticator.cc
|
| index f73b56c5feea3e02503bc6275f2ff095bf1e3959..91dc5f77e980d71f1206e020e07d071c8378de54 100644
|
| --- a/chrome/browser/chromeos/login/auth/parallel_authenticator.cc
|
| +++ b/chromeos/login/auth/cryptohome_authenticator.cc
|
| @@ -2,15 +2,12 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "chrome/browser/chromeos/login/auth/parallel_authenticator.h"
|
| +#include "chromeos/login/auth/cryptohome_authenticator.h"
|
|
|
| #include "base/bind.h"
|
| -#include "base/command_line.h"
|
| #include "base/files/file_path.h"
|
| +#include "base/location.h"
|
| #include "base/logging.h"
|
| -#include "chrome/browser/chromeos/ownership/owner_settings_service.h"
|
| -#include "chrome/browser/chromeos/settings/cros_settings.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| #include "chromeos/cryptohome/async_method_caller.h"
|
| #include "chromeos/cryptohome/system_salt_getter.h"
|
| #include "chromeos/dbus/cryptohome_client.h"
|
| @@ -21,13 +18,9 @@
|
| #include "chromeos/login/login_state.h"
|
| #include "chromeos/login/user_names.h"
|
| #include "chromeos/login_event_recorder.h"
|
| -#include "components/user_manager/user_manager.h"
|
| #include "components/user_manager/user_type.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| #include "third_party/cros_system_api/dbus/service_constants.h"
|
|
|
| -using content::BrowserThread;
|
| -
|
| namespace chromeos {
|
|
|
| namespace {
|
| @@ -45,20 +38,18 @@ scoped_ptr<Key> TransformKeyIfNeeded(const Key& key,
|
|
|
| // Records status and calls resolver->Resolve().
|
| void TriggerResolve(AuthAttemptState* attempt,
|
| - scoped_refptr<ParallelAuthenticator> resolver,
|
| + scoped_refptr<CryptohomeAuthenticator> resolver,
|
| bool success,
|
| cryptohome::MountError return_code) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| attempt->RecordCryptohomeStatus(success, return_code);
|
| resolver->Resolve();
|
| }
|
|
|
| // Records get hash status and calls resolver->Resolve().
|
| void TriggerResolveHash(AuthAttemptState* attempt,
|
| - scoped_refptr<ParallelAuthenticator> resolver,
|
| + scoped_refptr<CryptohomeAuthenticator> resolver,
|
| bool success,
|
| const std::string& username_hash) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| if (success)
|
| attempt->RecordUsernameHash(username_hash);
|
| else
|
| @@ -70,7 +61,7 @@ void TriggerResolveHash(AuthAttemptState* attempt,
|
| void TriggerResolveWithLoginTimeMarker(
|
| const std::string& marker_name,
|
| AuthAttemptState* attempt,
|
| - scoped_refptr<ParallelAuthenticator> resolver,
|
| + scoped_refptr<CryptohomeAuthenticator> resolver,
|
| bool success,
|
| cryptohome::MountError return_code) {
|
| chromeos::LoginEventRecorder::Get()->AddLoginTimeMarker(marker_name, false);
|
| @@ -79,10 +70,9 @@ void TriggerResolveWithLoginTimeMarker(
|
|
|
| // Calls cryptohome's mount method.
|
| void Mount(AuthAttemptState* attempt,
|
| - scoped_refptr<ParallelAuthenticator> resolver,
|
| + scoped_refptr<CryptohomeAuthenticator> resolver,
|
| int flags,
|
| const std::string& system_salt) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| chromeos::LoginEventRecorder::Get()->AddLoginTimeMarker(
|
| "CryptohomeMount-Start", false);
|
| // Set state that username_hash is requested here so that test implementation
|
| @@ -101,27 +91,13 @@ void Mount(AuthAttemptState* attempt,
|
| resolver));
|
| cryptohome::AsyncMethodCaller::GetInstance()->AsyncGetSanitizedUsername(
|
| attempt->user_context.GetUserID(),
|
| - base::Bind(&TriggerResolveHash,
|
| - attempt,
|
| - resolver));
|
| -}
|
| -
|
| -// Calls cryptohome's mount method for guest.
|
| -void MountGuest(AuthAttemptState* attempt,
|
| - scoped_refptr<ParallelAuthenticator> resolver) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - cryptohome::AsyncMethodCaller::GetInstance()->AsyncMountGuest(
|
| - base::Bind(&TriggerResolveWithLoginTimeMarker,
|
| - "CryptohomeMount-End",
|
| - attempt,
|
| - resolver));
|
| + base::Bind(&TriggerResolveHash, attempt, resolver));
|
| }
|
|
|
| // Calls cryptohome's mount method for guest and also get the user hash from
|
| // cryptohome.
|
| void MountGuestAndGetHash(AuthAttemptState* attempt,
|
| - scoped_refptr<ParallelAuthenticator> resolver) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + scoped_refptr<CryptohomeAuthenticator> resolver) {
|
| attempt->UsernameHashRequested();
|
| cryptohome::AsyncMethodCaller::GetInstance()->AsyncMountGuest(
|
| base::Bind(&TriggerResolveWithLoginTimeMarker,
|
| @@ -130,16 +106,13 @@ void MountGuestAndGetHash(AuthAttemptState* attempt,
|
| resolver));
|
| cryptohome::AsyncMethodCaller::GetInstance()->AsyncGetSanitizedUsername(
|
| attempt->user_context.GetUserID(),
|
| - base::Bind(&TriggerResolveHash,
|
| - attempt,
|
| - resolver));
|
| + base::Bind(&TriggerResolveHash, attempt, resolver));
|
| }
|
|
|
| // Calls cryptohome's MountPublic method
|
| void MountPublic(AuthAttemptState* attempt,
|
| - scoped_refptr<ParallelAuthenticator> resolver,
|
| + scoped_refptr<CryptohomeAuthenticator> resolver,
|
| int flags) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| cryptohome::AsyncMethodCaller::GetInstance()->AsyncMountPublic(
|
| attempt->user_context.GetUserID(),
|
| flags,
|
| @@ -149,18 +122,15 @@ void MountPublic(AuthAttemptState* attempt,
|
| resolver));
|
| cryptohome::AsyncMethodCaller::GetInstance()->AsyncGetSanitizedUsername(
|
| attempt->user_context.GetUserID(),
|
| - base::Bind(&TriggerResolveHash,
|
| - attempt,
|
| - resolver));
|
| + base::Bind(&TriggerResolveHash, attempt, resolver));
|
| }
|
|
|
| // Calls cryptohome's key migration method.
|
| void Migrate(AuthAttemptState* attempt,
|
| - scoped_refptr<ParallelAuthenticator> resolver,
|
| + scoped_refptr<CryptohomeAuthenticator> resolver,
|
| bool passing_old_hash,
|
| const std::string& old_password,
|
| const std::string& system_salt) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| chromeos::LoginEventRecorder::Get()->AddLoginTimeMarker(
|
| "CryptohomeMigrate-Start", false);
|
| cryptohome::AsyncMethodCaller* caller =
|
| @@ -193,8 +163,7 @@ void Migrate(AuthAttemptState* attempt,
|
|
|
| // Calls cryptohome's remove method.
|
| void Remove(AuthAttemptState* attempt,
|
| - scoped_refptr<ParallelAuthenticator> resolver) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + scoped_refptr<CryptohomeAuthenticator> resolver) {
|
| chromeos::LoginEventRecorder::Get()->AddLoginTimeMarker(
|
| "CryptohomeRemove-Start", false);
|
| cryptohome::AsyncMethodCaller::GetInstance()->AsyncRemove(
|
| @@ -207,9 +176,8 @@ void Remove(AuthAttemptState* attempt,
|
|
|
| // Calls cryptohome's key check method.
|
| void CheckKey(AuthAttemptState* attempt,
|
| - scoped_refptr<ParallelAuthenticator> resolver,
|
| + scoped_refptr<CryptohomeAuthenticator> resolver,
|
| const std::string& system_salt) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| scoped_ptr<Key> key =
|
| TransformKeyIfNeeded(*attempt->user_context.GetKey(), system_salt);
|
| cryptohome::AsyncMethodCaller::GetInstance()->AsyncCheckKey(
|
| @@ -220,8 +188,11 @@ void CheckKey(AuthAttemptState* attempt,
|
|
|
| } // namespace
|
|
|
| -ParallelAuthenticator::ParallelAuthenticator(AuthStatusConsumer* consumer)
|
| +CryptohomeAuthenticator::CryptohomeAuthenticator(
|
| + scoped_refptr<base::TaskRunner> task_runner,
|
| + AuthStatusConsumer* consumer)
|
| : Authenticator(consumer),
|
| + task_runner_(task_runner),
|
| migrate_attempted_(false),
|
| remove_attempted_(false),
|
| resync_attempted_(false),
|
| @@ -234,37 +205,33 @@ ParallelAuthenticator::ParallelAuthenticator(AuthStatusConsumer* consumer)
|
| delayed_login_failure_(NULL) {
|
| }
|
|
|
| -void ParallelAuthenticator::AuthenticateToLogin(
|
| +void CryptohomeAuthenticator::AuthenticateToLogin(
|
| Profile* profile,
|
| const UserContext& user_context) {
|
| authentication_profile_ = profile;
|
| - current_state_.reset(
|
| - new AuthAttemptState(user_context,
|
| - user_manager::USER_TYPE_REGULAR,
|
| - false, // unlock
|
| - false, // online_complete
|
| - !user_manager::UserManager::Get()->IsKnownUser(
|
| - user_context.GetUserID())));
|
| + current_state_.reset(new AuthAttemptState(user_context,
|
| + user_manager::USER_TYPE_REGULAR,
|
| + false, // unlock
|
| + false, // online_complete
|
| + !IsKnownUser(user_context)));
|
| // Reset the verified flag.
|
| owner_is_verified_ = false;
|
|
|
| SystemSaltGetter::Get()->GetSystemSalt(
|
| base::Bind(&Mount,
|
| current_state_.get(),
|
| - scoped_refptr<ParallelAuthenticator>(this),
|
| + scoped_refptr<CryptohomeAuthenticator>(this),
|
| cryptohome::MOUNT_FLAGS_NONE));
|
| }
|
|
|
| -void ParallelAuthenticator::CompleteLogin(Profile* profile,
|
| - const UserContext& user_context) {
|
| +void CryptohomeAuthenticator::CompleteLogin(Profile* profile,
|
| + const UserContext& user_context) {
|
| authentication_profile_ = profile;
|
| - current_state_.reset(
|
| - new AuthAttemptState(user_context,
|
| - user_manager::USER_TYPE_REGULAR,
|
| - true, // unlock
|
| - false, // online_complete
|
| - !user_manager::UserManager::Get()->IsKnownUser(
|
| - user_context.GetUserID())));
|
| + current_state_.reset(new AuthAttemptState(user_context,
|
| + user_manager::USER_TYPE_REGULAR,
|
| + true, // unlock
|
| + false, // online_complete
|
| + !IsKnownUser(user_context)));
|
|
|
| // Reset the verified flag.
|
| owner_is_verified_ = false;
|
| @@ -272,18 +239,18 @@ void ParallelAuthenticator::CompleteLogin(Profile* profile,
|
| SystemSaltGetter::Get()->GetSystemSalt(
|
| base::Bind(&Mount,
|
| current_state_.get(),
|
| - scoped_refptr<ParallelAuthenticator>(this),
|
| + scoped_refptr<CryptohomeAuthenticator>(this),
|
| cryptohome::MOUNT_FLAGS_NONE));
|
|
|
| // For login completion from extension, we just need to resolve the current
|
| // auth attempt state, the rest of OAuth related tasks will be done in
|
| // parallel.
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::ResolveLoginCompletionStatus, this));
|
| + task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&CryptohomeAuthenticator::ResolveLoginCompletionStatus, this));
|
| }
|
|
|
| -void ParallelAuthenticator::AuthenticateToUnlock(
|
| +void CryptohomeAuthenticator::AuthenticateToUnlock(
|
| const UserContext& user_context) {
|
| current_state_.reset(new AuthAttemptState(user_context,
|
| user_manager::USER_TYPE_REGULAR,
|
| @@ -295,29 +262,28 @@ void ParallelAuthenticator::AuthenticateToUnlock(
|
| SystemSaltGetter::Get()->GetSystemSalt(
|
| base::Bind(&CheckKey,
|
| current_state_.get(),
|
| - scoped_refptr<ParallelAuthenticator>(this)));
|
| + scoped_refptr<CryptohomeAuthenticator>(this)));
|
| }
|
|
|
| -void ParallelAuthenticator::LoginAsSupervisedUser(
|
| +void CryptohomeAuthenticator::LoginAsSupervisedUser(
|
| const UserContext& user_context) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
| // TODO(nkostylev): Pass proper value for |user_is_new| or remove (not used).
|
| - current_state_.reset(
|
| - new AuthAttemptState(user_context,
|
| - user_manager::USER_TYPE_SUPERVISED,
|
| - false, // unlock
|
| - false, // online_complete
|
| - false)); // user_is_new
|
| + current_state_.reset(new AuthAttemptState(user_context,
|
| + user_manager::USER_TYPE_SUPERVISED,
|
| + false, // unlock
|
| + false, // online_complete
|
| + false)); // user_is_new
|
| remove_user_data_on_failure_ = false;
|
| SystemSaltGetter::Get()->GetSystemSalt(
|
| base::Bind(&Mount,
|
| current_state_.get(),
|
| - scoped_refptr<ParallelAuthenticator>(this),
|
| + scoped_refptr<CryptohomeAuthenticator>(this),
|
| cryptohome::MOUNT_FLAGS_NONE));
|
| }
|
|
|
| -void ParallelAuthenticator::LoginRetailMode() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +void CryptohomeAuthenticator::LoginRetailMode() {
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
| // Note: |kRetailModeUserEMail| is used in other places to identify a retail
|
| // mode session.
|
| current_state_.reset(
|
| @@ -329,11 +295,11 @@ void ParallelAuthenticator::LoginRetailMode() {
|
| remove_user_data_on_failure_ = false;
|
| ephemeral_mount_attempted_ = true;
|
| MountGuestAndGetHash(current_state_.get(),
|
| - scoped_refptr<ParallelAuthenticator>(this));
|
| + scoped_refptr<CryptohomeAuthenticator>(this));
|
| }
|
|
|
| -void ParallelAuthenticator::LoginOffTheRecord() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +void CryptohomeAuthenticator::LoginOffTheRecord() {
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
| current_state_.reset(
|
| new AuthAttemptState(UserContext(chromeos::login::kGuestUserName),
|
| user_manager::USER_TYPE_GUEST,
|
| @@ -342,13 +308,13 @@ void ParallelAuthenticator::LoginOffTheRecord() {
|
| false)); // user_is_new
|
| remove_user_data_on_failure_ = false;
|
| ephemeral_mount_attempted_ = true;
|
| - MountGuest(current_state_.get(),
|
| - scoped_refptr<ParallelAuthenticator>(this));
|
| + MountGuestAndGetHash(current_state_.get(),
|
| + scoped_refptr<CryptohomeAuthenticator>(this));
|
| }
|
|
|
| -void ParallelAuthenticator::LoginAsPublicSession(
|
| +void CryptohomeAuthenticator::LoginAsPublicSession(
|
| const UserContext& user_context) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
| current_state_.reset(
|
| new AuthAttemptState(user_context,
|
| user_manager::USER_TYPE_PUBLIC_ACCOUNT,
|
| @@ -360,14 +326,14 @@ void ParallelAuthenticator::LoginAsPublicSession(
|
| SystemSaltGetter::Get()->GetSystemSalt(
|
| base::Bind(&Mount,
|
| current_state_.get(),
|
| - scoped_refptr<ParallelAuthenticator>(this),
|
| + scoped_refptr<CryptohomeAuthenticator>(this),
|
| cryptohome::CREATE_IF_MISSING | cryptohome::ENSURE_EPHEMERAL));
|
| }
|
|
|
| -void ParallelAuthenticator::LoginAsKioskAccount(
|
| +void CryptohomeAuthenticator::LoginAsKioskAccount(
|
| const std::string& app_user_id,
|
| bool use_guest_mount) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
|
|
| const std::string user_id =
|
| use_guest_mount ? chromeos::login::kGuestUserName : app_user_id;
|
| @@ -380,25 +346,25 @@ void ParallelAuthenticator::LoginAsKioskAccount(
|
| remove_user_data_on_failure_ = true;
|
| if (!use_guest_mount) {
|
| MountPublic(current_state_.get(),
|
| - scoped_refptr<ParallelAuthenticator>(this),
|
| - cryptohome::CREATE_IF_MISSING);
|
| + scoped_refptr<CryptohomeAuthenticator>(this),
|
| + cryptohome::CREATE_IF_MISSING);
|
| } else {
|
| ephemeral_mount_attempted_ = true;
|
| MountGuestAndGetHash(current_state_.get(),
|
| - scoped_refptr<ParallelAuthenticator>(this));
|
| + scoped_refptr<CryptohomeAuthenticator>(this));
|
| }
|
| }
|
|
|
| -void ParallelAuthenticator::OnRetailModeAuthSuccess() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +void CryptohomeAuthenticator::OnRetailModeAuthSuccess() {
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
| VLOG(1) << "Retail mode login success";
|
| chromeos::LoginEventRecorder::Get()->RecordAuthenticationSuccess();
|
| if (consumer_)
|
| consumer_->OnRetailModeAuthSuccess(current_state_->user_context);
|
| }
|
|
|
| -void ParallelAuthenticator::OnAuthSuccess() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +void CryptohomeAuthenticator::OnAuthSuccess() {
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
| VLOG(1) << "Login success";
|
| // Send notification of success
|
| chromeos::LoginEventRecorder::Get()->RecordAuthenticationSuccess();
|
| @@ -410,21 +376,21 @@ void ParallelAuthenticator::OnAuthSuccess() {
|
| consumer_->OnAuthSuccess(current_state_->user_context);
|
| }
|
|
|
| -void ParallelAuthenticator::OnOffTheRecordAuthSuccess() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +void CryptohomeAuthenticator::OnOffTheRecordAuthSuccess() {
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
| chromeos::LoginEventRecorder::Get()->RecordAuthenticationSuccess();
|
| if (consumer_)
|
| consumer_->OnOffTheRecordAuthSuccess();
|
| }
|
|
|
| -void ParallelAuthenticator::OnPasswordChangeDetected() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +void CryptohomeAuthenticator::OnPasswordChangeDetected() {
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
| if (consumer_)
|
| consumer_->OnPasswordChangeDetected();
|
| }
|
|
|
| -void ParallelAuthenticator::OnAuthFailure(const AuthFailure& error) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +void CryptohomeAuthenticator::OnAuthFailure(const AuthFailure& error) {
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
|
|
| // OnAuthFailure will be called again with the same |error|
|
| // after the cryptohome has been removed.
|
| @@ -439,78 +405,66 @@ void ParallelAuthenticator::OnAuthFailure(const AuthFailure& error) {
|
| consumer_->OnAuthFailure(error);
|
| }
|
|
|
| -void ParallelAuthenticator::RecoverEncryptedData(
|
| +void CryptohomeAuthenticator::RecoverEncryptedData(
|
| const std::string& old_password) {
|
| migrate_attempted_ = true;
|
| current_state_->ResetCryptohomeStatus();
|
| SystemSaltGetter::Get()->GetSystemSalt(
|
| base::Bind(&Migrate,
|
| current_state_.get(),
|
| - scoped_refptr<ParallelAuthenticator>(this),
|
| + scoped_refptr<CryptohomeAuthenticator>(this),
|
| true,
|
| old_password));
|
| }
|
|
|
| -void ParallelAuthenticator::RemoveEncryptedData() {
|
| +void CryptohomeAuthenticator::RemoveEncryptedData() {
|
| remove_attempted_ = true;
|
| current_state_->ResetCryptohomeStatus();
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| + task_runner_->PostTask(
|
| + FROM_HERE,
|
| base::Bind(&Remove,
|
| current_state_.get(),
|
| - scoped_refptr<ParallelAuthenticator>(this)));
|
| + scoped_refptr<CryptohomeAuthenticator>(this)));
|
| }
|
|
|
| -void ParallelAuthenticator::ResyncEncryptedData() {
|
| +void CryptohomeAuthenticator::ResyncEncryptedData() {
|
| resync_attempted_ = true;
|
| current_state_->ResetCryptohomeStatus();
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| + task_runner_->PostTask(
|
| + FROM_HERE,
|
| base::Bind(&Remove,
|
| current_state_.get(),
|
| - scoped_refptr<ParallelAuthenticator>(this)));
|
| + scoped_refptr<CryptohomeAuthenticator>(this)));
|
| }
|
|
|
| -bool ParallelAuthenticator::VerifyOwner() {
|
| +bool CryptohomeAuthenticator::VerifyOwner() {
|
| if (owner_is_verified_)
|
| return true;
|
| // Check if policy data is fine and continue in safe mode if needed.
|
| - bool is_safe_mode = false;
|
| - CrosSettings::Get()->GetBoolean(kPolicyMissingMitigationMode, &is_safe_mode);
|
| - if (!is_safe_mode) {
|
| + if (!IsSafeMode()) {
|
| // Now we can continue with the login and report mount success.
|
| user_can_login_ = true;
|
| owner_is_verified_ = true;
|
| return true;
|
| }
|
|
|
| - const std::string& user_id = current_state_->user_context.GetUserID();
|
| -
|
| - // |IsOwnerForSafeModeAsync| expects logged in state to be
|
| - // LOGGED_IN_SAFE_MODE.
|
| - if (LoginState::IsInitialized()) {
|
| - LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_SAFE_MODE,
|
| - LoginState::LOGGED_IN_USER_NONE);
|
| - }
|
| -
|
| - OwnerSettingsService::IsOwnerForSafeModeAsync(
|
| - user_id,
|
| - current_state_->user_context.GetUserIDHash(),
|
| - base::Bind(&ParallelAuthenticator::OnOwnershipChecked, this));
|
| + CheckSafeModeOwnership(
|
| + current_state_->user_context,
|
| + base::Bind(&CryptohomeAuthenticator::OnOwnershipChecked, this));
|
| return false;
|
| }
|
|
|
| -void ParallelAuthenticator::OnOwnershipChecked(bool is_owner) {
|
| +void CryptohomeAuthenticator::OnOwnershipChecked(bool is_owner) {
|
| // Now we can check if this user is the owner.
|
| user_can_login_ = is_owner;
|
| owner_is_verified_ = true;
|
| Resolve();
|
| }
|
|
|
| -void ParallelAuthenticator::Resolve() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +void CryptohomeAuthenticator::Resolve() {
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
| int mount_flags = cryptohome::MOUNT_FLAGS_NONE;
|
| - ParallelAuthenticator::AuthState state = ResolveState();
|
| + CryptohomeAuthenticator::AuthState state = ResolveState();
|
| VLOG(1) << "Resolved state to: " << state;
|
| switch (state) {
|
| case CONTINUE:
|
| @@ -523,10 +477,9 @@ void ParallelAuthenticator::Resolve() {
|
| // In this case, whether login succeeded or not, we can't log
|
| // the user in because their data is horked. So, override with
|
| // the appropriate failure.
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI,
|
| + task_runner_->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::OnAuthFailure,
|
| + base::Bind(&CryptohomeAuthenticator::OnAuthFailure,
|
| this,
|
| AuthFailure(AuthFailure::COULD_NOT_MOUNT_CRYPTOHOME)));
|
| break;
|
| @@ -534,19 +487,17 @@ void ParallelAuthenticator::Resolve() {
|
| // In this case, we tried to remove the user's old cryptohome at her
|
| // request, and the remove failed.
|
| remove_user_data_on_failure_ = false;
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI,
|
| + task_runner_->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::OnAuthFailure,
|
| + base::Bind(&CryptohomeAuthenticator::OnAuthFailure,
|
| this,
|
| AuthFailure(AuthFailure::DATA_REMOVAL_FAILED)));
|
| break;
|
| case FAILED_TMPFS:
|
| // In this case, we tried to mount a tmpfs for guest and failed.
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI,
|
| + task_runner_->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::OnAuthFailure,
|
| + base::Bind(&CryptohomeAuthenticator::OnAuthFailure,
|
| this,
|
| AuthFailure(AuthFailure::COULD_NOT_MOUNT_TMPFS)));
|
| break;
|
| @@ -554,29 +505,26 @@ void ParallelAuthenticator::Resolve() {
|
| // In this case, we tried to create/mount cryptohome and failed
|
| // because of the critical TPM error.
|
| // Chrome will notify user and request reboot.
|
| - BrowserThread::PostTask(BrowserThread::UI,
|
| - FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::OnAuthFailure,
|
| - this,
|
| - AuthFailure(AuthFailure::TPM_ERROR)));
|
| + task_runner_->PostTask(FROM_HERE,
|
| + base::Bind(&CryptohomeAuthenticator::OnAuthFailure,
|
| + this,
|
| + AuthFailure(AuthFailure::TPM_ERROR)));
|
| break;
|
| case FAILED_USERNAME_HASH:
|
| // In this case, we failed the GetSanitizedUsername request to
|
| // cryptohomed. This can happen for any login attempt.
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI,
|
| + task_runner_->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::OnAuthFailure,
|
| + base::Bind(&CryptohomeAuthenticator::OnAuthFailure,
|
| this,
|
| AuthFailure(AuthFailure::USERNAME_HASH_FAILED)));
|
| break;
|
| case REMOVED_DATA_AFTER_FAILURE:
|
| remove_user_data_on_failure_ = false;
|
| - BrowserThread::PostTask(BrowserThread::UI,
|
| - FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::OnAuthFailure,
|
| - this,
|
| - *delayed_login_failure_));
|
| + task_runner_->PostTask(FROM_HERE,
|
| + base::Bind(&CryptohomeAuthenticator::OnAuthFailure,
|
| + this,
|
| + *delayed_login_failure_));
|
| break;
|
| case CREATE_NEW:
|
| mount_flags |= cryptohome::CREATE_IF_MISSING;
|
| @@ -585,13 +533,13 @@ void ParallelAuthenticator::Resolve() {
|
| SystemSaltGetter::Get()->GetSystemSalt(
|
| base::Bind(&Mount,
|
| current_state_.get(),
|
| - scoped_refptr<ParallelAuthenticator>(this),
|
| + scoped_refptr<CryptohomeAuthenticator>(this),
|
| mount_flags));
|
| break;
|
| case NEED_OLD_PW:
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::OnPasswordChangeDetected, this));
|
| + task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&CryptohomeAuthenticator::OnPasswordChangeDetected, this));
|
| break;
|
| case ONLINE_FAILED:
|
| case NEED_NEW_PW:
|
| @@ -600,53 +548,45 @@ void ParallelAuthenticator::Resolve() {
|
| break;
|
| case OFFLINE_LOGIN:
|
| VLOG(2) << "Offline login";
|
| - // Fall through.
|
| + // Fall through.
|
| case UNLOCK:
|
| VLOG(2) << "Unlock";
|
| - // Fall through.
|
| + // Fall through.
|
| case ONLINE_LOGIN:
|
| VLOG(2) << "Online login";
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI,
|
| - FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::OnAuthSuccess, this));
|
| + task_runner_->PostTask(
|
| + FROM_HERE, base::Bind(&CryptohomeAuthenticator::OnAuthSuccess, this));
|
| break;
|
| case DEMO_LOGIN:
|
| VLOG(2) << "Retail mode login";
|
| current_state_->user_context.SetIsUsingOAuth(false);
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI,
|
| + task_runner_->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::OnRetailModeAuthSuccess, this));
|
| + base::Bind(&CryptohomeAuthenticator::OnRetailModeAuthSuccess, this));
|
| break;
|
| case GUEST_LOGIN:
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI,
|
| + task_runner_->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::OnOffTheRecordAuthSuccess, this));
|
| + base::Bind(&CryptohomeAuthenticator::OnOffTheRecordAuthSuccess,
|
| + this));
|
| break;
|
| case KIOSK_ACCOUNT_LOGIN:
|
| case PUBLIC_ACCOUNT_LOGIN:
|
| current_state_->user_context.SetIsUsingOAuth(false);
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI,
|
| - FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::OnAuthSuccess, this));
|
| + task_runner_->PostTask(
|
| + FROM_HERE, base::Bind(&CryptohomeAuthenticator::OnAuthSuccess, this));
|
| break;
|
| case SUPERVISED_USER_LOGIN:
|
| current_state_->user_context.SetIsUsingOAuth(false);
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI,
|
| - FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::OnAuthSuccess, this));
|
| + task_runner_->PostTask(
|
| + FROM_HERE, base::Bind(&CryptohomeAuthenticator::OnAuthSuccess, this));
|
| break;
|
| case LOGIN_FAILED:
|
| current_state_->ResetCryptohomeStatus();
|
| - BrowserThread::PostTask(BrowserThread::UI,
|
| - FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::OnAuthFailure,
|
| - this,
|
| - current_state_->online_outcome()));
|
| + task_runner_->PostTask(FROM_HERE,
|
| + base::Bind(&CryptohomeAuthenticator::OnAuthFailure,
|
| + this,
|
| + current_state_->online_outcome()));
|
| break;
|
| case OWNER_REQUIRED: {
|
| current_state_->ResetCryptohomeStatus();
|
| @@ -656,10 +596,9 @@ void ParallelAuthenticator::Resolve() {
|
| // Maybe we should reboot immediately here?
|
| LOG(ERROR) << "Couldn't unmount users home!";
|
| }
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI,
|
| + task_runner_->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&ParallelAuthenticator::OnAuthFailure,
|
| + base::Bind(&CryptohomeAuthenticator::OnAuthFailure,
|
| this,
|
| AuthFailure(AuthFailure::OWNER_REQUIRED)));
|
| break;
|
| @@ -670,10 +609,11 @@ void ParallelAuthenticator::Resolve() {
|
| }
|
| }
|
|
|
| -ParallelAuthenticator::~ParallelAuthenticator() {}
|
| +CryptohomeAuthenticator::~CryptohomeAuthenticator() {
|
| +}
|
|
|
| -ParallelAuthenticator::AuthState ParallelAuthenticator::ResolveState() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +CryptohomeAuthenticator::AuthState CryptohomeAuthenticator::ResolveState() {
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
| // If we haven't mounted the user's home dir yet or
|
| // haven't got sanitized username value, we can't be done.
|
| // We never get past here if any of these two cryptohome ops is still pending.
|
| @@ -699,8 +639,7 @@ ParallelAuthenticator::AuthState ParallelAuthenticator::ResolveState() {
|
| ephemeral_mount_attempted_ = false;
|
| check_key_attempted_ = false;
|
|
|
| - if (state != POSSIBLE_PW_CHANGE &&
|
| - state != NO_MOUNT &&
|
| + if (state != POSSIBLE_PW_CHANGE && state != NO_MOUNT &&
|
| state != OFFLINE_LOGIN)
|
| return state;
|
|
|
| @@ -715,9 +654,9 @@ ParallelAuthenticator::AuthState ParallelAuthenticator::ResolveState() {
|
| return state;
|
| }
|
|
|
| -ParallelAuthenticator::AuthState
|
| -ParallelAuthenticator::ResolveCryptohomeFailureState() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +CryptohomeAuthenticator::AuthState
|
| +CryptohomeAuthenticator::ResolveCryptohomeFailureState() {
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
| if (remove_attempted_ || resync_attempted_)
|
| return FAILED_REMOVE;
|
| if (ephemeral_mount_attempted_)
|
| @@ -758,9 +697,9 @@ ParallelAuthenticator::ResolveCryptohomeFailureState() {
|
| return FAILED_MOUNT;
|
| }
|
|
|
| -ParallelAuthenticator::AuthState
|
| -ParallelAuthenticator::ResolveCryptohomeSuccessState() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +CryptohomeAuthenticator::AuthState
|
| +CryptohomeAuthenticator::ResolveCryptohomeSuccessState() {
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
| if (resync_attempted_)
|
| return CREATE_NEW;
|
| if (remove_attempted_)
|
| @@ -786,10 +725,10 @@ ParallelAuthenticator::ResolveCryptohomeSuccessState() {
|
| return user_can_login_ ? OFFLINE_LOGIN : OWNER_REQUIRED;
|
| }
|
|
|
| -ParallelAuthenticator::AuthState
|
| -ParallelAuthenticator::ResolveOnlineSuccessState(
|
| - ParallelAuthenticator::AuthState offline_state) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| +CryptohomeAuthenticator::AuthState
|
| +CryptohomeAuthenticator::ResolveOnlineSuccessState(
|
| + CryptohomeAuthenticator::AuthState offline_state) {
|
| + DCHECK(task_runner_->RunsTasksOnCurrentThread());
|
| switch (offline_state) {
|
| case POSSIBLE_PW_CHANGE:
|
| return NEED_OLD_PW;
|
| @@ -803,14 +742,14 @@ ParallelAuthenticator::ResolveOnlineSuccessState(
|
| }
|
| }
|
|
|
| -void ParallelAuthenticator::ResolveLoginCompletionStatus() {
|
| +void CryptohomeAuthenticator::ResolveLoginCompletionStatus() {
|
| // Shortcut online state resolution process.
|
| current_state_->RecordOnlineLoginStatus(AuthFailure::AuthFailureNone());
|
| Resolve();
|
| }
|
|
|
| -void ParallelAuthenticator::SetOwnerState(bool owner_check_finished,
|
| - bool check_result) {
|
| +void CryptohomeAuthenticator::SetOwnerState(bool owner_check_finished,
|
| + bool check_result) {
|
| owner_is_verified_ = owner_check_finished;
|
| user_can_login_ = check_result;
|
| }
|
|
|