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 d655542a21fdfab84a781bb9927df3cf55a9ed5e..6d532662ec8454ddcff2365c482a6f841827db1c 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 |
| @@ -4,12 +4,14 @@ |
| #include "chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h" |
| +#include <cmath> |
| #include <string> |
| #include <utility> |
| #include "ash/system/devicetype_utils.h" |
| #include "base/command_line.h" |
| #include "base/files/file_path.h" |
| +#include "base/metrics/histogram_macros.h" |
| #include "base/sys_info.h" |
| #include "base/task_scheduler/post_task.h" |
| #include "chrome/browser/browser_process.h" |
| @@ -46,11 +48,47 @@ constexpr char kJsApiStartMigration[] = "startMigration"; |
| constexpr char kJsApiSkipMigration[] = "skipMigration"; |
| constexpr char kJsApiRequestRestart[] = "requestRestart"; |
| +// UMA names. |
| +constexpr char kUmaNameFirstScreen[] = "Cryptohome.MigrationUI.FirstScreen"; |
| +constexpr char kUmaNameUserChoice[] = "Cryptohome.MigrationUI.UserChoice"; |
| +constexpr char kUmaNameConsumedBatteryPercent[] = |
| + "Cryptohome.MigrationUI.ConsumedBatteryPercent"; |
| + |
| +// This enum must match the numbering for Cryptohome.MigrationUI.FirstScreen in |
| +// histograms.xml. Do not reorder or remove items, only add new items before |
| +// FIRST_SCREEN_MAX. |
| +enum class FirstScreen { |
| + FIRST_SCREEN_READY = 0, |
| + FIRST_SCREEN_RESUME = 1, |
| + FIRST_SCREEN_LOW_STORAGE = 2, |
| + FIRST_SCREEN_COUNT |
| +}; |
| + |
| +// This enum must match the numbering for Cryptohome.MigrationUI.UserChoice in |
| +// histograms.xml. Do not reorder or remove items, only add new items before |
| +// FIRST_SCREEN_MAX. |
| +enum class UserChoice { |
| + USER_CHOICE_UPDATE = 0, |
| + USER_CHOICE_SKIP = 1, |
| + USER_CHOICE_COUNT |
| +}; |
| + |
| bool IsTestingUI() { |
| return base::CommandLine::ForCurrentProcess()->HasSwitch( |
| chromeos::switches::kTestEncryptionMigrationUI); |
| } |
| +// Wrapper functions for histogram macros to avoid duplication of expanded code. |
| +void RecordFirstScreen(FirstScreen first_screen) { |
| + UMA_HISTOGRAM_ENUMERATION(kUmaNameFirstScreen, static_cast<int>(first_screen), |
| + static_cast<int>(FirstScreen::FIRST_SCREEN_COUNT)); |
| +} |
| + |
| +void RecordUserChoice(UserChoice user_choice) { |
| + UMA_HISTOGRAM_ENUMERATION(kUmaNameUserChoice, static_cast<int>(user_choice), |
| + static_cast<int>(UserChoice::USER_CHOICE_COUNT)); |
|
Ilya Sherman
2017/05/01 18:02:10
nit: FYI, static_casts are no longer needed for th
fukino
2017/05/02 04:27:34
Oh, I did not know it. Thanks!
I'll update it in a
|
| +} |
| + |
| } // namespace |
| namespace chromeos { |
| @@ -187,10 +225,12 @@ void EncryptionMigrationScreenHandler::PowerChanged( |
| } |
| void EncryptionMigrationScreenHandler::HandleStartMigration() { |
| + RecordUserChoice(UserChoice::USER_CHOICE_UPDATE); |
| WaitBatteryAndMigrate(); |
| } |
| void EncryptionMigrationScreenHandler::HandleSkipMigration() { |
| + RecordUserChoice(UserChoice::USER_CHOICE_SKIP); |
| // If the user skips migration, we mount the cryptohome without performing the |
| // migration by reusing UserContext and LoginPerformer which were used in the |
| // previous attempt and dropping |is_forcing_dircrypto| flag in UserContext. |
| @@ -239,11 +279,14 @@ void EncryptionMigrationScreenHandler::CheckAvailableStorage() { |
| void EncryptionMigrationScreenHandler::OnGetAvailableStorage(int64_t size) { |
| if (size >= kMinimumAvailableStorage || IsTestingUI()) { |
| if (should_resume_) { |
| + RecordFirstScreen(FirstScreen::FIRST_SCREEN_RESUME); |
| WaitBatteryAndMigrate(); |
| } else { |
| + RecordFirstScreen(FirstScreen::FIRST_SCREEN_READY); |
| UpdateUIState(UIState::READY); |
| } |
| } else { |
| + RecordFirstScreen(FirstScreen::FIRST_SCREEN_LOW_STORAGE); |
| CallJS("setAvailableSpaceInString", ui::FormatBytes(size)); |
| CallJS("setNecessarySpaceInString", |
| ui::FormatBytes(kMinimumAvailableStorage)); |
| @@ -264,6 +307,7 @@ void EncryptionMigrationScreenHandler::WaitBatteryAndMigrate() { |
| void EncryptionMigrationScreenHandler::StartMigration() { |
| UpdateUIState(UIState::MIGRATING); |
| + initial_battery_percent_ = current_battery_percent_; |
| // Mount the existing eCryptfs vault to a temporary location for migration. |
| cryptohome::MountParameters mount(false); |
| @@ -362,6 +406,14 @@ void EncryptionMigrationScreenHandler::OnMigrationProgress( |
| CallJS("setMigrationProgress", static_cast<double>(current) / total); |
| break; |
| case cryptohome::DIRCRYPTO_MIGRATION_SUCCESS: |
| + // If the battery level decreased during migration, record the consumed |
| + // battery level. |
| + if (current_battery_percent_ < initial_battery_percent_) { |
| + UMA_HISTOGRAM_PERCENTAGE( |
| + kUmaNameConsumedBatteryPercent, |
| + static_cast<int>(std::round(initial_battery_percent_ - |
| + current_battery_percent_))); |
| + } |
| // Restart immediately after successful migration. |
| DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); |
| break; |