Chromium Code Reviews| Index: chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc |
| diff --git a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc |
| index 2b69ed620a86f90b23bb89abef5a7770b4f447da..39017def4b8a6f36eb02b04a814d9b3df4f7e2fd 100644 |
| --- a/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc |
| +++ b/chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc |
| @@ -16,6 +16,7 @@ |
| #include "chrome/browser/lifetime/application_lifetime.h" |
| #include "chrome/grit/generated_resources.h" |
| #include "chromeos/chromeos_switches.h" |
| +#include "chromeos/cryptohome/async_method_caller.h" |
| #include "chromeos/cryptohome/homedir_methods.h" |
| #include "chromeos/dbus/cryptohome_client.h" |
| #include "chromeos/dbus/dbus_thread_manager.h" |
| @@ -312,6 +313,22 @@ void EncryptionMigrationScreenHandler::StopBlockingPowerSave() { |
| } |
| } |
| +void EncryptionMigrationScreenHandler::RemoveCryptohome() { |
| + cryptohome::AsyncMethodCaller::GetInstance()->AsyncRemove( |
|
fukino
2017/04/26 11:01:43
Instead of calling AsyncRemove directly, we should
xiyuan
2017/04/26 17:48:24
Agree that we should not use RemoveUser().
We can
fukino
2017/04/27 01:38:23
Thank you for the suggestion!
Updated the CL to in
|
| + cryptohome::Identification(user_context_.GetAccountId()), |
| + base::Bind(&EncryptionMigrationScreenHandler::OnRemoveCryptohome, |
| + weak_ptr_factory_.GetWeakPtr())); |
| +} |
| + |
| +void EncryptionMigrationScreenHandler::OnRemoveCryptohome( |
| + bool success, |
| + cryptohome::MountError return_code) { |
| + if (!success) |
| + LOG(ERROR) << "Removing cryptohome failed. return code: " << return_code; |
|
xiyuan
2017/04/26 17:48:24
nit: LOG_IF(ERROR, !success) << ....
fukino
2017/04/27 01:38:23
Done.
|
| + |
| + UpdateUIState(UIState::MIGRATION_FAILED); |
| +} |
| + |
| cryptohome::KeyDefinition EncryptionMigrationScreenHandler::GetAuthKey() { |
| // |auth_key| is created in the same manner as CryptohomeAuthenticator. |
| const Key* key = user_context_.GetKey(); |
| @@ -344,12 +361,13 @@ void EncryptionMigrationScreenHandler::OnMigrationProgress( |
| DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); |
| break; |
| case cryptohome::DIRCRYPTO_MIGRATION_FAILED: |
| - UpdateUIState(UIState::MIGRATION_FAILED); |
| // Stop listening to the progress updates. |
| DBusThreadManager::Get() |
| ->GetCryptohomeClient() |
| ->SetDircryptoMigrationProgressHandler( |
| CryptohomeClient::DircryptoMigrationProgessHandler()); |
| + // Shows error screen after removing user directory is completed. |
| + RemoveCryptohome(); |
| break; |
| default: |
| break; |
| @@ -357,12 +375,10 @@ void EncryptionMigrationScreenHandler::OnMigrationProgress( |
| } |
| void EncryptionMigrationScreenHandler::OnMigrationRequested(bool success) { |
| - // This function is called when MigrateToDircrypto is correctly requested. |
| - // It does not mean that the migration is completed. We should know the |
| - // completion by DircryptoMigrationProgressHandler. success == false means a |
| - // failure in DBus communication. |
| - // TODO(fukino): Handle this case. Should we retry or restart? |
| - DCHECK(success); |
| + if (!success) { |
| + LOG(ERROR) << "Requesting MigrateToDircrypto failed. Removing cryptohome."; |
| + RemoveCryptohome(); |
|
xiyuan
2017/04/26 17:48:24
I think we should only RemoveCryptohome() only whe
fukino
2017/04/27 01:38:23
Done.
|
| + } |
| } |
| } // namespace chromeos |