OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/webui/options/manage_profile_handler.h" | 5 #include "chrome/browser/ui/webui/options/manage_profile_handler.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/string_number_conversions.h" | 9 #include "base/string_number_conversions.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
11 #include "base/value_conversions.h" | 11 #include "base/value_conversions.h" |
12 #include "base/values.h" | 12 #include "base/values.h" |
13 #include "chrome/browser/browser_process.h" | 13 #include "chrome/browser/browser_process.h" |
| 14 #include "chrome/browser/prefs/pref_service.h" |
14 #include "chrome/browser/profiles/profile_info_cache.h" | 15 #include "chrome/browser/profiles/profile_info_cache.h" |
15 #include "chrome/browser/profiles/profile_manager.h" | 16 #include "chrome/browser/profiles/profile_manager.h" |
16 #include "chrome/browser/profiles/profile_metrics.h" | 17 #include "chrome/browser/profiles/profile_metrics.h" |
| 18 #include "chrome/browser/ui/webui/web_ui_util.h" |
17 #include "chrome/common/chrome_notification_types.h" | 19 #include "chrome/common/chrome_notification_types.h" |
| 20 #include "chrome/common/pref_names.h" |
18 #include "content/browser/tab_contents/tab_contents.h" | 21 #include "content/browser/tab_contents/tab_contents.h" |
19 #include "content/public/browser/notification_service.h" | 22 #include "content/public/browser/notification_service.h" |
20 #include "grit/generated_resources.h" | 23 #include "grit/generated_resources.h" |
| 24 #include "chrome/browser/profiles/profile_impl.h" |
| 25 |
| 26 extern SkBitmap FixGAIABmp(const SkBitmap& bmp); |
21 | 27 |
22 ManageProfileHandler::ManageProfileHandler() { | 28 ManageProfileHandler::ManageProfileHandler() { |
23 } | 29 } |
24 | 30 |
25 ManageProfileHandler::~ManageProfileHandler() { | 31 ManageProfileHandler::~ManageProfileHandler() { |
26 } | 32 } |
27 | 33 |
28 void ManageProfileHandler::GetLocalizedValues( | 34 void ManageProfileHandler::GetLocalizedValues( |
29 DictionaryValue* localized_strings) { | 35 DictionaryValue* localized_strings) { |
30 DCHECK(localized_strings); | 36 DCHECK(localized_strings); |
31 | 37 |
32 static OptionsStringResource resources[] = { | 38 static OptionsStringResource resources[] = { |
33 { "manageProfilesTitle", IDS_PROFILES_MANAGE_TITLE }, | 39 { "manageProfilesTitle", IDS_PROFILES_MANAGE_TITLE }, |
34 { "manageProfilesNameLabel", IDS_PROFILES_MANAGE_NAME_LABEL }, | 40 { "manageProfilesNameLabel", IDS_PROFILES_MANAGE_NAME_LABEL }, |
35 { "manageProfilesDuplicateNameError", | 41 { "manageProfilesDuplicateNameError", |
36 IDS_PROFILES_MANAGE_DUPLICATE_NAME_ERROR }, | 42 IDS_PROFILES_MANAGE_DUPLICATE_NAME_ERROR }, |
37 { "manageProfilesIconLabel", IDS_PROFILES_MANAGE_ICON_LABEL }, | 43 { "manageProfilesIconLabel", IDS_PROFILES_MANAGE_ICON_LABEL }, |
38 { "deleteProfileTitle", IDS_PROFILES_DELETE_TITLE }, | 44 { "deleteProfileTitle", IDS_PROFILES_DELETE_TITLE }, |
39 { "deleteProfileOK", IDS_PROFILES_DELETE_OK_BUTTON_LABEL }, | 45 { "deleteProfileOK", IDS_PROFILES_DELETE_OK_BUTTON_LABEL }, |
40 { "deleteProfileMessage", IDS_PROFILES_DELETE_MESSAGE }, | 46 { "deleteProfileMessage", IDS_PROFILES_DELETE_MESSAGE }, |
41 }; | 47 }; |
42 | 48 |
43 RegisterStrings(localized_strings, resources, arraysize(resources)); | 49 RegisterStrings(localized_strings, resources, arraysize(resources)); |
44 } | 50 } |
45 | 51 |
46 void ManageProfileHandler::Initialize() { | 52 void ManageProfileHandler::Initialize() { |
47 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, | 53 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, |
48 content::NotificationService::AllSources()); | 54 content::NotificationService::AllSources()); |
49 SendProfileNames(); | 55 SendProfileNames(); |
| 56 |
| 57 Profile* profile = Profile::FromWebUI(web_ui_); |
| 58 ProfileImpl* profile_impl = static_cast<ProfileImpl*>(profile); |
| 59 profile_impl->UpdateGAIAProfileInfo(); |
50 } | 60 } |
51 | 61 |
52 void ManageProfileHandler::RegisterMessages() { | 62 void ManageProfileHandler::RegisterMessages() { |
53 web_ui_->RegisterMessageCallback("setProfileNameAndIcon", | 63 web_ui_->RegisterMessageCallback("setProfileNameAndIcon", |
54 base::Bind(&ManageProfileHandler::SetProfileNameAndIcon, | 64 base::Bind(&ManageProfileHandler::SetProfileNameAndIcon, |
55 base::Unretained(this))); | 65 base::Unretained(this))); |
56 web_ui_->RegisterMessageCallback("deleteProfile", | 66 web_ui_->RegisterMessageCallback("deleteProfile", |
57 base::Bind(&ManageProfileHandler::DeleteProfile, | 67 base::Bind(&ManageProfileHandler::DeleteProfile, |
58 base::Unretained(this))); | 68 base::Unretained(this))); |
59 web_ui_->RegisterMessageCallback("requestDefaultProfileIcons", | 69 web_ui_->RegisterMessageCallback("requestDefaultProfileIcons", |
60 base::Bind(&ManageProfileHandler::RequestDefaultProfileIcons, | 70 base::Bind(&ManageProfileHandler::RequestDefaultProfileIcons, |
61 base::Unretained(this))); | 71 base::Unretained(this))); |
62 web_ui_->RegisterMessageCallback("requestProfileInfo", | 72 web_ui_->RegisterMessageCallback("requestProfileInfo", |
63 base::Bind(&ManageProfileHandler::RequestProfileInfo, | 73 base::Bind(&ManageProfileHandler::RequestProfileInfo, |
64 base::Unretained(this))); | 74 base::Unretained(this))); |
65 } | 75 } |
66 | 76 |
67 void ManageProfileHandler::Observe( | 77 void ManageProfileHandler::Observe( |
68 int type, | 78 int type, |
69 const content::NotificationSource& source, | 79 const content::NotificationSource& source, |
70 const content::NotificationDetails& details) { | 80 const content::NotificationDetails& details) { |
71 if (type == chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED) | 81 if (type == chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED) { |
72 SendProfileNames(); | 82 SendProfileNames(); |
73 else | 83 SendProfileIcons(); |
| 84 } else { |
74 OptionsPageUIHandler::Observe(type, source, details); | 85 OptionsPageUIHandler::Observe(type, source, details); |
| 86 } |
75 } | 87 } |
76 | 88 |
77 void ManageProfileHandler::RequestDefaultProfileIcons(const ListValue* args) { | 89 void ManageProfileHandler::RequestDefaultProfileIcons(const ListValue* args) { |
| 90 SendProfileIcons(); |
| 91 } |
| 92 |
| 93 void ManageProfileHandler::SendProfileIcons() { |
78 ListValue image_url_list; | 94 ListValue image_url_list; |
| 95 |
| 96 ProfileInfoCache& cache = |
| 97 g_browser_process->profile_manager()->GetProfileInfoCache(); |
| 98 Profile* profile = Profile::FromWebUI(web_ui_); |
| 99 size_t profile_index = cache.GetIndexOfProfileWithPath(profile->GetPath()); |
| 100 if (profile_index != std::string::npos) { |
| 101 SkBitmap gaia_bmp = cache.GetGAIAPictureOfProfileAtIndex(profile_index); |
| 102 if (!gaia_bmp.isNull()) { |
| 103 SkBitmap bmp = FixGAIABmp(gaia_bmp); |
| 104 gaia_profile_url_ = web_ui_util::GetImageDataUrl(bmp); |
| 105 image_url_list.Append(Value::CreateStringValue(gaia_profile_url_)); |
| 106 } |
| 107 } |
| 108 |
79 for (size_t i = 0; i < ProfileInfoCache::GetDefaultAvatarIconCount(); i++) { | 109 for (size_t i = 0; i < ProfileInfoCache::GetDefaultAvatarIconCount(); i++) { |
80 std::string url = ProfileInfoCache::GetDefaultAvatarIconUrl(i); | 110 std::string url = ProfileInfoCache::GetDefaultAvatarIconUrl(i); |
81 image_url_list.Append(Value::CreateStringValue(url)); | 111 image_url_list.Append(Value::CreateStringValue(url)); |
82 } | 112 } |
83 | 113 |
84 web_ui_->CallJavascriptFunction( | 114 web_ui_->CallJavascriptFunction( |
85 "ManageProfileOverlay.receiveDefaultProfileIcons", | 115 "ManageProfileOverlay.receiveDefaultProfileIcons", |
86 image_url_list); | 116 image_url_list); |
87 } | 117 } |
88 | 118 |
(...skipping 17 matching lines...) Expand all Loading... |
106 if (!args->Get(0, &file_path_value) || | 136 if (!args->Get(0, &file_path_value) || |
107 !base::GetValueAsFilePath(*file_path_value, &profile_file_path)) | 137 !base::GetValueAsFilePath(*file_path_value, &profile_file_path)) |
108 return; | 138 return; |
109 | 139 |
110 ProfileInfoCache& cache = | 140 ProfileInfoCache& cache = |
111 g_browser_process->profile_manager()->GetProfileInfoCache(); | 141 g_browser_process->profile_manager()->GetProfileInfoCache(); |
112 size_t profile_index = cache.GetIndexOfProfileWithPath(profile_file_path); | 142 size_t profile_index = cache.GetIndexOfProfileWithPath(profile_file_path); |
113 if (profile_index == std::string::npos) | 143 if (profile_index == std::string::npos) |
114 return; | 144 return; |
115 | 145 |
| 146 cache.SetIsUsingGAIANameForProfileAtIndex(profile_index, false); |
| 147 profile_index = cache.GetIndexOfProfileWithPath(profile_file_path); |
| 148 if (profile_index == std::string::npos) |
| 149 return; |
| 150 |
116 string16 new_profile_name; | 151 string16 new_profile_name; |
117 if (!args->GetString(1, &new_profile_name)) | 152 if (!args->GetString(1, &new_profile_name)) |
118 return; | 153 return; |
119 | 154 |
| 155 |
120 cache.SetNameOfProfileAtIndex(profile_index, new_profile_name); | 156 cache.SetNameOfProfileAtIndex(profile_index, new_profile_name); |
121 // The index in the cache may have changed if a new name triggered an | 157 // The index in the cache may have changed if a new name triggered an |
122 // alphabetical resort. | 158 // alphabetical resort. |
123 profile_index = cache.GetIndexOfProfileWithPath(profile_file_path); | 159 profile_index = cache.GetIndexOfProfileWithPath(profile_file_path); |
124 if (profile_index == std::string::npos) | 160 if (profile_index == std::string::npos) |
125 return; | 161 return; |
126 | 162 |
127 string16 icon_url; | 163 std::string icon_url; |
128 size_t new_icon_index; | 164 if (!args->GetString(2, &icon_url)) |
129 if (!args->GetString(2, &icon_url) || | |
130 !cache.IsDefaultAvatarIconUrl(UTF16ToUTF8(icon_url), &new_icon_index)) | |
131 return; | 165 return; |
132 | 166 |
133 ProfileMetrics::LogProfileAvatarSelection(new_icon_index); | 167 size_t new_icon_index; |
134 cache.SetAvatarIconOfProfileAtIndex(profile_index, new_icon_index); | 168 if (icon_url == gaia_profile_url_) { |
| 169 cache.SetIsUsingCustomAvatarIconForProfileAtIndex( |
| 170 profile_index, true); |
| 171 } else if (cache.IsDefaultAvatarIconUrl(icon_url, &new_icon_index)) { |
| 172 ProfileMetrics::LogProfileAvatarSelection(new_icon_index); |
| 173 cache.SetAvatarIconOfProfileAtIndex(profile_index, new_icon_index); |
| 174 cache.SetIsUsingCustomAvatarIconForProfileAtIndex( |
| 175 profile_index, false); |
| 176 } else { |
| 177 return; |
| 178 } |
135 | 179 |
136 ProfileMetrics::LogProfileUpdate(profile_file_path); | 180 ProfileMetrics::LogProfileUpdate(profile_file_path); |
137 } | 181 } |
138 | 182 |
139 void ManageProfileHandler::DeleteProfile(const ListValue* args) { | 183 void ManageProfileHandler::DeleteProfile(const ListValue* args) { |
140 DCHECK(args); | 184 DCHECK(args); |
141 | 185 |
142 ProfileMetrics::LogProfileOpenMethod(ProfileMetrics::PROFILE_DELETED); | 186 ProfileMetrics::LogProfileOpenMethod(ProfileMetrics::PROFILE_DELETED); |
143 | 187 |
144 Value* file_path_value; | 188 Value* file_path_value; |
(...skipping 19 matching lines...) Expand all Loading... |
164 int index = static_cast<int>(index_double); | 208 int index = static_cast<int>(index_double); |
165 | 209 |
166 ProfileInfoCache& cache = | 210 ProfileInfoCache& cache = |
167 g_browser_process->profile_manager()->GetProfileInfoCache(); | 211 g_browser_process->profile_manager()->GetProfileInfoCache(); |
168 int profile_count = cache.GetNumberOfProfiles(); | 212 int profile_count = cache.GetNumberOfProfiles(); |
169 if (index < 0 && index >= profile_count) | 213 if (index < 0 && index >= profile_count) |
170 return; | 214 return; |
171 | 215 |
172 FilePath current_profile_path = | 216 FilePath current_profile_path = |
173 web_ui_->tab_contents()->browser_context()->GetPath(); | 217 web_ui_->tab_contents()->browser_context()->GetPath(); |
174 size_t icon_index = cache.GetAvatarIconIndexOfProfileAtIndex(index); | |
175 FilePath profile_path = cache.GetPathOfProfileAtIndex(index); | 218 FilePath profile_path = cache.GetPathOfProfileAtIndex(index); |
176 profile_value.SetString("name", cache.GetNameOfProfileAtIndex(index)); | 219 profile_value.SetString("name", cache.GetNameOfProfileAtIndex(index)); |
177 profile_value.SetString("iconURL", | |
178 cache.GetDefaultAvatarIconUrl(icon_index)); | |
179 profile_value.Set("filePath", base::CreateFilePathValue(profile_path)); | 220 profile_value.Set("filePath", base::CreateFilePathValue(profile_path)); |
180 profile_value.SetBoolean("isCurrentProfile", | 221 profile_value.SetBoolean("isCurrentProfile", |
181 profile_path == current_profile_path); | 222 profile_path == current_profile_path); |
182 | 223 |
| 224 std::string bmp_url; |
| 225 if (!cache.IsUsingCustomAvatarIconForProfileAtIndex(index)) { |
| 226 size_t icon_index = cache.GetAvatarIconIndexOfProfileAtIndex(index); |
| 227 bmp_url = cache.GetDefaultAvatarIconUrl(icon_index); |
| 228 } else { |
| 229 SkBitmap bmp = cache.GetGAIAPictureOfProfileAtIndex(index); |
| 230 SkBitmap bmp2 = FixGAIABmp(bmp); |
| 231 bmp_url = web_ui_util::GetImageDataUrl(bmp2); |
| 232 } |
| 233 profile_value.SetString("iconURL", bmp_url); |
| 234 |
183 web_ui_->CallJavascriptFunction("ManageProfileOverlay.setProfileInfo", | 235 web_ui_->CallJavascriptFunction("ManageProfileOverlay.setProfileInfo", |
184 profile_value); | 236 profile_value); |
185 } | 237 } |
OLD | NEW |