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

Unified Diff: chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.cc

Issue 2838303003: cros: Remove user directory when encryption migration fails. (Closed)
Patch Set: Add a comment about token invalidation. Created 3 years, 8 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
« no previous file with comments | « chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..d655542a21fdfab84a781bb9927df3cf55a9ed5e 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,12 +16,14 @@
#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"
#include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
#include "chromeos/dbus/power_manager_client.h"
#include "components/login/localized_values_builder.h"
+#include "components/user_manager/user_manager.h"
#include "content/public/browser/browser_thread.h"
#include "device/power_save_blocker/power_save_blocker.h"
#include "ui/base/text/bytes_formatting.h"
@@ -312,6 +314,26 @@ void EncryptionMigrationScreenHandler::StopBlockingPowerSave() {
}
}
+void EncryptionMigrationScreenHandler::RemoveCryptohome() {
+ // Set invalid token status so that user is forced to go through Gaia on the
+ // next sign-in.
+ user_manager::UserManager::Get()->SaveUserOAuthStatus(
+ user_context_.GetAccountId(),
+ user_manager::User::OAUTH2_TOKEN_STATUS_INVALID);
+ cryptohome::AsyncMethodCaller::GetInstance()->AsyncRemove(
+ cryptohome::Identification(user_context_.GetAccountId()),
+ base::Bind(&EncryptionMigrationScreenHandler::OnRemoveCryptohome,
+ weak_ptr_factory_.GetWeakPtr()));
+}
+
+void EncryptionMigrationScreenHandler::OnRemoveCryptohome(
+ bool success,
+ cryptohome::MountError return_code) {
+ LOG_IF(ERROR, !success) << "Removing cryptohome failed. return code: "
+ << return_code;
+ 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 +366,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 +380,8 @@ 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);
+ LOG_IF(ERROR, !success) << "Requesting MigrateToDircrypto failed.";
+ UpdateUIState(UIState::MIGRATION_FAILED);
}
} // namespace chromeos
« no previous file with comments | « chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698