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

Unified Diff: chrome/browser/ui/webui/options/manage_profile_handler.cc

Issue 8711002: Add GAIA picture to Settings profile overlay (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge Created 9 years, 1 month 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
Index: chrome/browser/ui/webui/options/manage_profile_handler.cc
diff --git a/chrome/browser/ui/webui/options/manage_profile_handler.cc b/chrome/browser/ui/webui/options/manage_profile_handler.cc
index 65fa6f34de1fee69945a8f7b9d179d19c160c446..edf22013e5594ceb8497addc08b60315d20a13c8 100644
--- a/chrome/browser/ui/webui/options/manage_profile_handler.cc
+++ b/chrome/browser/ui/webui/options/manage_profile_handler.cc
@@ -11,9 +11,12 @@
#include "base/value_conversions.h"
#include "base/values.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/profiles/gaia_info_update_service.h"
#include "chrome/browser/profiles/profile_info_cache.h"
+#include "chrome/browser/profiles/profile_info_util.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/profiles/profile_metrics.h"
+#include "chrome/browser/ui/webui/web_ui_util.h"
#include "chrome/common/chrome_notification_types.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "content/public/browser/notification_service.h"
@@ -62,20 +65,46 @@ void ManageProfileHandler::RegisterMessages() {
web_ui_->RegisterMessageCallback("requestProfileInfo",
base::Bind(&ManageProfileHandler::RequestProfileInfo,
base::Unretained(this)));
+ web_ui_->RegisterMessageCallback("profileIconSelectionChanged",
+ base::Bind(&ManageProfileHandler::ProfileIconSelectionChanged,
+ base::Unretained(this)));
}
void ManageProfileHandler::Observe(
int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
- if (type == chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED)
+ if (type == chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED) {
SendProfileNames();
- else
+ SendProfileIcons();
+ } else {
OptionsPageUIHandler::Observe(type, source, details);
+ }
}
void ManageProfileHandler::RequestDefaultProfileIcons(const ListValue* args) {
+ SendProfileIcons();
+}
+
+void ManageProfileHandler::SendProfileIcons() {
ListValue image_url_list;
+
+ // First add the GAIA picture if it's available.
+ ProfileInfoCache& cache =
+ g_browser_process->profile_manager()->GetProfileInfoCache();
+ Profile* profile = Profile::FromWebUI(web_ui_);
+ size_t profile_index = cache.GetIndexOfProfileWithPath(profile->GetPath());
+ if (profile_index != std::string::npos) {
+ const gfx::Image* icon =
+ cache.GetGAIAPictureOfProfileAtIndex(profile_index);
+ if (icon) {
+ gfx::Image icon2 = profiles::GetAvatarIconForWebUI(*icon, true);
+ gaia_picture_url_ = web_ui_util::GetImageDataUrl(icon2);
+ image_url_list.Append(Value::CreateStringValue(gaia_picture_url_));
+ }
+ }
+
+ // Next add the default avatar icons.
for (size_t i = 0; i < ProfileInfoCache::GetDefaultAvatarIconCount(); i++) {
std::string url = ProfileInfoCache::GetDefaultAvatarIconUrl(i);
image_url_list.Append(Value::CreateStringValue(url));
@@ -117,21 +146,42 @@ void ManageProfileHandler::SetProfileNameAndIcon(const ListValue* args) {
if (!args->GetString(1, &new_profile_name))
return;
- cache.SetNameOfProfileAtIndex(profile_index, new_profile_name);
- // The index in the cache may have changed if a new name triggered an
- // alphabetical resort.
- profile_index = cache.GetIndexOfProfileWithPath(profile_file_path);
- if (profile_index == std::string::npos)
- return;
+ if (new_profile_name == cache.GetGAIANameOfProfileAtIndex(profile_index)) {
+ // Set the profile to use the GAIA name as the profile name. Note, this
+ // is a little weird if the user typed their GAIA name manually but
+ // it's not a big deal.
+ cache.SetIsUsingGAIANameOfProfileAtIndex(profile_index, true);
+ // Using the GAIA name as the profile name can invalidate the profile index.
+ profile_index = cache.GetIndexOfProfileWithPath(profile_file_path);
+ if (profile_index == std::string::npos)
+ return;
+ } else {
+ cache.SetNameOfProfileAtIndex(profile_index, new_profile_name);
+ // Changing the profile name can invalidate the profile index.
+ profile_index = cache.GetIndexOfProfileWithPath(profile_file_path);
+ if (profile_index == std::string::npos)
+ return;
+
+ cache.SetIsUsingGAIANameOfProfileAtIndex(profile_index, false);
+ // Unsetting the GAIA name as the profile name can invalidate the profile
+ // index.
+ profile_index = cache.GetIndexOfProfileWithPath(profile_file_path);
+ if (profile_index == std::string::npos)
+ return;
+ }
- string16 icon_url;
- size_t new_icon_index;
- if (!args->GetString(2, &icon_url) ||
- !cache.IsDefaultAvatarIconUrl(UTF16ToUTF8(icon_url), &new_icon_index))
+ std::string icon_url;
+ if (!args->GetString(2, &icon_url))
return;
- ProfileMetrics::LogProfileAvatarSelection(new_icon_index);
- cache.SetAvatarIconOfProfileAtIndex(profile_index, new_icon_index);
+ size_t new_icon_index;
+ if (icon_url == gaia_picture_url_) {
+ cache.SetIsUsingGAIAPictureOfProfileAtIndex(profile_index, true);
+ } else if (cache.IsDefaultAvatarIconUrl(icon_url, &new_icon_index)) {
+ ProfileMetrics::LogProfileAvatarSelection(new_icon_index);
+ cache.SetAvatarIconOfProfileAtIndex(profile_index, new_icon_index);
+ cache.SetIsUsingGAIAPictureOfProfileAtIndex(profile_index, false);
+ }
ProfileMetrics::LogProfileUpdate(profile_file_path);
}
@@ -154,32 +204,87 @@ void ManageProfileHandler::DeleteProfile(const ListValue* args) {
void ManageProfileHandler::RequestProfileInfo(const ListValue* args) {
DCHECK(args);
- DictionaryValue profile_value;
-
Value* index_value;
double index_double;
if (!args->Get(0, &index_value) || !index_value->GetAsDouble(&index_double))
return;
int index = static_cast<int>(index_double);
-
ProfileInfoCache& cache =
g_browser_process->profile_manager()->GetProfileInfoCache();
int profile_count = cache.GetNumberOfProfiles();
if (index < 0 && index >= profile_count)
return;
- FilePath current_profile_path =
- web_ui_->tab_contents()->browser_context()->GetPath();
- size_t icon_index = cache.GetAvatarIconIndexOfProfileAtIndex(index);
FilePath profile_path = cache.GetPathOfProfileAtIndex(index);
+ FilePath current_profile_path = Profile::FromWebUI(web_ui_)->GetPath();
+ bool is_current_profile =
+ profile_path == Profile::FromWebUI(web_ui_)->GetPath();
+
+ DictionaryValue profile_value;
profile_value.SetString("name", cache.GetNameOfProfileAtIndex(index));
- profile_value.SetString("iconURL",
- cache.GetDefaultAvatarIconUrl(icon_index));
profile_value.Set("filePath", base::CreateFilePathValue(profile_path));
- profile_value.SetBoolean("isCurrentProfile",
- profile_path == current_profile_path);
+ profile_value.SetBoolean("isCurrentProfile", is_current_profile);
+
+ bool is_gaia_picture =
+ cache.IsUsingGAIAPictureOfProfileAtIndex(index) &&
+ cache.GetGAIAPictureOfProfileAtIndex(index);
+ if (is_gaia_picture) {
+ gfx::Image icon = profiles::GetAvatarIconForWebUI(
+ cache.GetAvatarIconOfProfileAtIndex(index), true);
+ profile_value.SetString("iconURL", web_ui_util::GetImageDataUrl(icon));
+ } else {
+ size_t icon_index = cache.GetAvatarIconIndexOfProfileAtIndex(index);
+ profile_value.SetString("iconURL",
+ cache.GetDefaultAvatarIconUrl(icon_index));
+ }
web_ui_->CallJavascriptFunction("ManageProfileOverlay.setProfileInfo",
profile_value);
+
+ // Ensure that we have the most up to date GAIA picture.
+ if (is_current_profile) {
+ GAIAInfoUpdateService* service =
+ Profile::FromWebUI(web_ui_)->GetGAIAInfoUpdateService();
+ if (service)
+ service->Update();
+ }
+}
+
+void ManageProfileHandler::ProfileIconSelectionChanged(
+ const base::ListValue* args) {
+ DCHECK(args);
+
+ Value* file_path_value;
+ FilePath file_path;
+ if (!args->Get(0, &file_path_value) ||
+ !base::GetValueAsFilePath(*file_path_value, &file_path)) {
+ return;
+ }
+
+ // Currently this only supports editing the current profile's info.
+ if (file_path != Profile::FromWebUI(web_ui_)->GetPath())
+ return;
+
+ std::string icon_url;
+ if (!args->GetString(1, &icon_url))
+ return;
+
+ if (icon_url != gaia_picture_url_)
+ return;
+
+ // If the selection is the GAIA picture then also show the GAIA name in the
+ // text field.
+ ProfileInfoCache& cache =
+ g_browser_process->profile_manager()->GetProfileInfoCache();
+ size_t i = cache.GetIndexOfProfileWithPath(file_path);
+ if (i == std::string::npos)
+ return;
+ string16 gaia_name = cache.GetGAIANameOfProfileAtIndex(i);
+ if (gaia_name.empty())
+ return;
+
+ StringValue gaia_name_value(gaia_name);
+ web_ui_->CallJavascriptFunction("ManageProfileOverlay.setProfileName",
+ gaia_name_value);
}
« no previous file with comments | « chrome/browser/ui/webui/options/manage_profile_handler.h ('k') | chrome/browser/ui/webui/options/personal_options_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698