Chromium Code Reviews| Index: chrome/browser/ui/webui/signin/user_manager_screen_handler.cc |
| diff --git a/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc b/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc |
| index 21aa3ede166300d5f68cdb60920c5508faf74525..091dd7133b2667d241d258b06a102e4c39320379 100644 |
| --- a/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc |
| +++ b/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc |
| @@ -71,6 +71,7 @@ const char kKeyIsDesktop[] = "isDesktopUser"; |
| const char kKeyAvatarUrl[] = "userImage"; |
| const char kKeyNeedsSignin[] = "needsSignin"; |
| const char kKeyHasLocalCreds[] = "hasLocalCreds"; |
| +const char kKeyIsProfileLoaded[] = "isProfileLoaded"; |
| // JS API callback names. |
| const char kJsApiUserManagerInitialize[] = "userManagerInitialize"; |
| @@ -82,7 +83,10 @@ const char kJsApiUserManagerRemoveUser[] = "removeUser"; |
| const char kJsApiUserManagerAttemptUnlock[] = "attemptUnlock"; |
| const char kJsApiUserManagerLogRemoveUserWarningShown[] = |
| "logRemoveUserWarningShown"; |
| - |
| +const char kJsApiUserManagerRemoveUserWarningLoadStats[] = |
| + "removeUserWarningLoadStats"; |
| +const char kJsApiUserManagerGetRemoveWarningDialogMessage[] = |
| + "getRemoveWarningDialogMessage"; |
| const size_t kAvatarIconSize = 180; |
| const int kMaxOAuthRetries = 3; |
| @@ -555,6 +559,97 @@ void UserManagerScreenHandler::HandleHardlockUserPod( |
| HideUserPodCustomIcon(email); |
| } |
| +void UserManagerScreenHandler::HandleRemoveUserWarningLoadStats( |
| + const base::ListValue* args) { |
| + const base::Value* profile_path_value; |
| + |
| + if (!args->Get(0, &profile_path_value)) |
| + return; |
| + |
| + base::FilePath profile_path; |
| + |
| + if (!base::GetValueAsFilePath(*profile_path_value, &profile_path)) |
| + return; |
| + |
| + base::StringValue return_profile_path(profile_path.value()); |
| + Profile* profile = g_browser_process->profile_manager()-> |
| + GetProfileByPath(profile_path); |
| + |
| + if (!profile) |
| + return; |
| + |
| + profiles::GetProfileStatistics( |
| + profile, |
| + base::Bind( |
| + &UserManagerScreenHandler::RemoveUserDialogLoadStatsCallback, |
| + weak_ptr_factory_.GetWeakPtr(), profile_path), |
| + &tracker_); |
| +} |
| + |
| +void UserManagerScreenHandler::RemoveUserDialogLoadStatsCallback( |
| + base::FilePath profile_path, |
| + profiles::ProfileCategoryStats result) { |
| + // Copy result into return_value. |
| + base::StringValue return_profile_path(profile_path.value()); |
| + base::DictionaryValue return_value; |
| + for (const auto& item : result) { |
| + base::DictionaryValue* stat = new base::DictionaryValue(); |
| + stat->SetIntegerWithoutPathExpansion("count", item.count); |
| + stat->SetBooleanWithoutPathExpansion("success", item.success); |
| + return_value.SetWithoutPathExpansion(item.category, stat); |
| + } |
| + web_ui()->CallJavascriptFunction("updateRemoveWarningDialog", |
| + return_profile_path, return_value); |
| +} |
| + |
| +void UserManagerScreenHandler::HandleGetRemoveWarningDialogMessage( |
| + const base::ListValue* args) { |
| + const base::DictionaryValue* arg; |
| + if (!args->GetDictionary(0, &arg)) |
| + return; |
| + |
| + std::string profile_path(""); |
|
Mike Lerman
2015/09/14 16:28:48
nit: No need to specify empty-string initializatio
lwchkg
2015/09/15 15:01:40
Acknowledged.
|
| + bool is_synced_user = false, has_errors = false, has_count = false; |
| + |
| + if (!arg->GetString("profilePath", &profile_path) || |
| + !arg->GetBoolean("isSyncedUser", &is_synced_user) || |
| + !arg->GetBoolean("hasErrors", &has_errors) || |
| + !arg->GetBoolean("hasCount", &has_count)) |
| + return; |
| + |
| + int total_count = 1234; // number for plural formating if |has_count| is false |
|
Mike Lerman
2015/09/14 16:28:48
Please don't initialize to a random number. If the
lwchkg
2015/09/15 15:01:40
Thanks for pointing out. Looks like I've missing s
|
| + if (has_count && !arg->GetInteger("totalCount", &total_count)) |
| + return; |
| + |
| + int message_id; |
| + base::StringValue message(""); |
| + |
| + message_id = is_synced_user ? |
| + (has_errors? |
|
Mike Lerman
2015/09/14 16:28:49
space before ?
lwchkg
2015/09/15 15:01:40
Acknowledged. And this is embarrassing.
|
| + IDS_LOGIN_POD_USER_REMOVE_WARNING_SYNC_WITH_ERRORS : |
| + IDS_LOGIN_POD_USER_REMOVE_WARNING_SYNC) : |
| + (has_errors? |
| + IDS_LOGIN_POD_USER_REMOVE_WARNING_NONSYNC_WITH_ERRORS : |
| + IDS_LOGIN_POD_USER_REMOVE_WARNING_NONSYNC); |
| + |
| + message = base::StringValue( |
|
Mike Lerman
2015/09/14 16:28:48
just define message as base::StringValue here, on
lwchkg
2015/09/15 15:01:40
Acknowledged.
|
| + l10n_util::GetPluralStringFUTF16(message_id, total_count)); |
| + |
| + if (has_count) { |
| + web_ui()->CallJavascriptFunction("updateRemoveWarningDialogSetMessage", |
| + base::StringValue(profile_path), |
| + message, |
| + base::FundamentalValue(total_count)); |
| + } else { |
| + web_ui()->CallJavascriptFunction( |
| + "updateRemoveWarningDialogSetMessage", |
| + base::StringValue(profile_path), |
| + message, |
| + base::StringValue(l10n_util::GetStringUTF16( |
| + IDS_LOGIN_POD_USER_REMOVE_WARNING_CALCULATING))); |
| + } |
| +} |
| + |
| void UserManagerScreenHandler::OnGetTokenInfoResponse( |
| scoped_ptr<base::DictionaryValue> token_info) { |
| // Password is unchanged so user just mistyped it. Ask again. |
| @@ -599,6 +694,13 @@ void UserManagerScreenHandler::RegisterMessages() { |
| base::Unretained(this))); |
| web_ui()->RegisterMessageCallback(kJsApiUserManagerLogRemoveUserWarningShown, |
| base::Bind(&HandleLogRemoveUserWarningShown)); |
| + web_ui()->RegisterMessageCallback(kJsApiUserManagerRemoveUserWarningLoadStats, |
| + base::Bind(&UserManagerScreenHandler::HandleRemoveUserWarningLoadStats, |
| + base::Unretained(this))); |
| + web_ui()->RegisterMessageCallback( |
| + kJsApiUserManagerGetRemoveWarningDialogMessage, |
| + base::Bind(&UserManagerScreenHandler::HandleGetRemoveWarningDialogMessage, |
| + base::Unretained(this))); |
| const content::WebUI::MessageCallback& kDoNothingCallback = |
| base::Bind(&HandleAndDoNothing); |
| @@ -655,8 +757,22 @@ void UserManagerScreenHandler::GetLocalizedValues( |
| // For AccountPickerScreen, the remove user warning overlay. |
| localized_strings->SetString("removeUserWarningButtonTitle", |
| l10n_util::GetStringUTF16(IDS_LOGIN_POD_USER_REMOVE_WARNING_BUTTON)); |
| - localized_strings->SetString("removeUserWarningText", |
| - l10n_util::GetStringUTF16(IDS_LOGIN_POD_USER_REMOVE_WARNING)); |
| + localized_strings->SetString("removeUserWarningTextNonSyncNoStats", |
| + l10n_util::GetStringUTF16( |
| + IDS_LOGIN_POD_USER_REMOVE_WARNING_NONSYNC_NOSTATS)); |
| + localized_strings->SetString("removeUserWarningTextHistory", |
| + l10n_util::GetStringUTF16(IDS_LOGIN_POD_USER_REMOVE_WARNING_HISTORY)); |
| + localized_strings->SetString("removeUserWarningTextPasswords", |
| + l10n_util::GetStringUTF16(IDS_LOGIN_POD_USER_REMOVE_WARNING_PASSWORDS)); |
| + localized_strings->SetString("removeUserWarningTextBookmarks", |
| + l10n_util::GetStringUTF16(IDS_LOGIN_POD_USER_REMOVE_WARNING_BOOKMARKS)); |
| + localized_strings->SetString("removeUserWarningTextSettings", |
| + l10n_util::GetStringUTF16(IDS_LOGIN_POD_USER_REMOVE_WARNING_SETTINGS)); |
| + localized_strings->SetString("removeUserWarningTextCalculating", |
| + l10n_util::GetStringUTF16(IDS_LOGIN_POD_USER_REMOVE_WARNING_CALCULATING)); |
| + localized_strings->SetString("removeUserWarningTextSyncNoStats", |
| + l10n_util::GetStringUTF16( |
| + IDS_LOGIN_POD_USER_REMOVE_WARNING_SYNC_NOSTATS)); |
| localized_strings->SetString("removeLegacySupervisedUserWarningText", |
| l10n_util::GetStringFUTF16( |
| IDS_LOGIN_POD_LEGACY_SUPERVISED_USER_REMOVE_WARNING, |
| @@ -758,6 +874,12 @@ void UserManagerScreenHandler::SendUserList() { |
| profile_value->SetString( |
| kKeyAvatarUrl, GetAvatarImageAtIndex(i, info_cache)); |
| + // GetProfileByPath returns a pointer if the profile is fully loaded, NULL |
| + // otherwise. |
| + Profile* profile = |
| + g_browser_process->profile_manager()->GetProfileByPath(profile_path); |
| + profile_value->SetBoolean(kKeyIsProfileLoaded, profile != nullptr); |
| + |
| users_list.Append(profile_value); |
| } |