| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 } | 238 } |
| 239 | 239 |
| 240 void ManageProfileHandler::SendProfileIcons( | 240 void ManageProfileHandler::SendProfileIcons( |
| 241 const base::StringValue& icon_grid) { | 241 const base::StringValue& icon_grid) { |
| 242 ListValue image_url_list; | 242 ListValue image_url_list; |
| 243 | 243 |
| 244 // First add the GAIA picture if it's available. | 244 // First add the GAIA picture if it's available. |
| 245 const ProfileInfoCache& cache = | 245 const ProfileInfoCache& cache = |
| 246 g_browser_process->profile_manager()->GetProfileInfoCache(); | 246 g_browser_process->profile_manager()->GetProfileInfoCache(); |
| 247 Profile* profile = Profile::FromWebUI(web_ui()); | 247 Profile* profile = Profile::FromWebUI(web_ui()); |
| 248 size_t profile_index = cache.GetIndexOfProfileWithPath(profile->GetPath()); | 248 |
| 249 if (profile_index != std::string::npos) { | 249 ProfileInfoEntry entry; |
| 250 if (cache.GetInfoForProfile(profile->GetPath(), &entry)) { |
| 250 const gfx::Image* icon = | 251 const gfx::Image* icon = |
| 251 cache.GetGAIAPictureOfProfileAtIndex(profile_index); | 252 cache.GetGAIAPictureOfProfile(profile->GetPath()); |
| 252 if (icon) { | 253 if (icon) { |
| 253 gfx::Image icon2 = profiles::GetAvatarIconForWebUI(*icon, true); | 254 gfx::Image icon2 = profiles::GetAvatarIconForWebUI(*icon, true); |
| 254 gaia_picture_url_ = webui::GetBitmapDataUrl(icon2.AsBitmap()); | 255 gaia_picture_url_ = webui::GetBitmapDataUrl(icon2.AsBitmap()); |
| 255 image_url_list.Append(new base::StringValue(gaia_picture_url_)); | 256 image_url_list.Append(new base::StringValue(gaia_picture_url_)); |
| 256 } | 257 } |
| 257 } | 258 } |
| 258 | 259 |
| 259 // Next add the default avatar icons. | 260 // Next add the default avatar icons. |
| 260 for (size_t i = 0; i < ProfileInfoCache::GetDefaultAvatarIconCount(); i++) { | 261 for (size_t i = 0; i < ProfileInfoCache::GetDefaultAvatarIconCount(); i++) { |
| 261 std::string url = ProfileInfoCache::GetDefaultAvatarIconUrl(i); | 262 std::string url = ProfileInfoCache::GetDefaultAvatarIconUrl(i); |
| 262 image_url_list.Append(new base::StringValue(url)); | 263 image_url_list.Append(new base::StringValue(url)); |
| 263 } | 264 } |
| 264 | 265 |
| 265 web_ui()->CallJavascriptFunction( | 266 web_ui()->CallJavascriptFunction( |
| 266 "ManageProfileOverlay.receiveDefaultProfileIcons", icon_grid, | 267 "ManageProfileOverlay.receiveDefaultProfileIcons", icon_grid, |
| 267 image_url_list); | 268 image_url_list); |
| 268 } | 269 } |
| 269 | 270 |
| 270 void ManageProfileHandler::SendProfileNames() { | 271 void ManageProfileHandler::SendProfileNames() { |
| 271 const ProfileInfoCache& cache = | 272 const ProfileInfoCache& cache = |
| 272 g_browser_process->profile_manager()->GetProfileInfoCache(); | 273 g_browser_process->profile_manager()->GetProfileInfoCache(); |
| 273 DictionaryValue profile_name_dict; | 274 DictionaryValue profile_name_dict; |
| 274 for (size_t i = 0, e = cache.GetNumberOfProfiles(); i < e; ++i) | 275 |
| 275 profile_name_dict.SetBoolean(UTF16ToUTF8(cache.GetNameOfProfileAtIndex(i)), | 276 const std::vector<ProfileInfoEntry> entries(cache.GetProfilesSortedByName()); |
| 276 true); | 277 for (std::vector<ProfileInfoEntry>::const_iterator it = entries.begin(); |
| 278 it != entries.end(); ++it) { |
| 279 profile_name_dict.SetBoolean(UTF16ToUTF8(it->GetDisplayName()), true); |
| 280 } |
| 277 | 281 |
| 278 web_ui()->CallJavascriptFunction("ManageProfileOverlay.receiveProfileNames", | 282 web_ui()->CallJavascriptFunction("ManageProfileOverlay.receiveProfileNames", |
| 279 profile_name_dict); | 283 profile_name_dict); |
| 280 } | 284 } |
| 281 | 285 |
| 282 void ManageProfileHandler::SetProfileIconAndName(const ListValue* args) { | 286 void ManageProfileHandler::SetProfileIconAndName(const ListValue* args) { |
| 283 DCHECK(args); | 287 DCHECK(args); |
| 284 | 288 |
| 285 base::FilePath profile_file_path; | 289 base::FilePath profile_file_path; |
| 286 if (!GetProfilePathFromArgs(args, &profile_file_path)) | 290 if (!GetProfilePathFromArgs(args, &profile_file_path)) |
| 287 return; | 291 return; |
| 288 | 292 |
| 289 ProfileInfoCache& cache = | 293 ProfileInfoCache& cache = |
| 290 g_browser_process->profile_manager()->GetProfileInfoCache(); | 294 g_browser_process->profile_manager()->GetProfileInfoCache(); |
| 291 size_t profile_index = cache.GetIndexOfProfileWithPath(profile_file_path); | 295 |
| 292 if (profile_index == std::string::npos) | 296 ProfileInfoEntry entry; |
| 297 if (!cache.GetInfoForProfile(profile_file_path, &entry)) |
| 293 return; | 298 return; |
| 294 | 299 |
| 295 Profile* profile = | 300 Profile* profile = |
| 296 g_browser_process->profile_manager()->GetProfile(profile_file_path); | 301 g_browser_process->profile_manager()->GetProfile(profile_file_path); |
| 297 if (!profile) | 302 if (!profile) |
| 298 return; | 303 return; |
| 299 | 304 |
| 300 std::string icon_url; | 305 std::string icon_url; |
| 301 if (!args->GetString(1, &icon_url)) | 306 if (!args->GetString(1, &icon_url)) |
| 302 return; | 307 return; |
| 303 | 308 |
| 304 // Metrics logging variable. | 309 // Metrics logging variable. |
| 305 bool previously_using_gaia_icon = | 310 bool previously_using_gaia_icon = entry.is_using_GAIA_picture(); |
| 306 cache.IsUsingGAIAPictureOfProfileAtIndex(profile_index); | |
| 307 | 311 |
| 308 size_t new_icon_index; | 312 size_t new_icon_index; |
| 309 if (icon_url == gaia_picture_url_) { | 313 if (icon_url == gaia_picture_url_) { |
| 310 cache.SetIsUsingGAIAPictureOfProfileAtIndex(profile_index, true); | 314 entry.set_is_using_GAIA_picture(true); |
| 311 if (!previously_using_gaia_icon) { | 315 if (!previously_using_gaia_icon) { |
| 312 // Only log if they changed to the GAIA photo. | 316 // Only log if they changed to the GAIA photo. |
| 313 // Selection of GAIA photo as avatar is logged as part of the function | 317 // Selection of GAIA photo as avatar is logged as part of the function |
| 314 // below. | 318 // below. |
| 315 ProfileMetrics::LogProfileSwitchGaia(ProfileMetrics::GAIA_OPT_IN); | 319 ProfileMetrics::LogProfileSwitchGaia(ProfileMetrics::GAIA_OPT_IN); |
| 316 } | 320 } |
| 317 } else if (cache.IsDefaultAvatarIconUrl(icon_url, &new_icon_index)) { | 321 } else if (cache.IsDefaultAvatarIconUrl(icon_url, &new_icon_index)) { |
| 318 ProfileMetrics::LogProfileAvatarSelection(new_icon_index); | 322 ProfileMetrics::LogProfileAvatarSelection(new_icon_index); |
| 319 PrefService* pref_service = profile->GetPrefs(); | 323 PrefService* pref_service = profile->GetPrefs(); |
| 320 // Updating the profile preference will cause the cache to be updated for | 324 // Updating the profile preference will cause the cache to be updated for |
| 321 // this preference. | 325 // this preference. |
| 322 pref_service->SetInteger(prefs::kProfileAvatarIndex, new_icon_index); | 326 pref_service->SetInteger(prefs::kProfileAvatarIndex, new_icon_index); |
| 323 cache.SetIsUsingGAIAPictureOfProfileAtIndex(profile_index, false); | 327 entry.set_is_using_GAIA_picture(true); |
| 324 } | 328 } |
| 325 ProfileMetrics::LogProfileUpdate(profile_file_path); | 329 ProfileMetrics::LogProfileUpdate(profile_file_path); |
| 330 cache.SetInfoForProfile(entry); |
| 326 | 331 |
| 327 if (profile->IsManaged()) | 332 if (profile->IsManaged()) |
| 328 return; | 333 return; |
| 329 | 334 |
| 330 string16 new_profile_name; | 335 string16 new_profile_name; |
| 331 if (!args->GetString(2, &new_profile_name)) | 336 if (!args->GetString(2, &new_profile_name)) |
| 332 return; | 337 return; |
| 333 | 338 |
| 334 if ((new_profile_name == | 339 if ((new_profile_name == entry.GAIA_given_name()) || |
| 335 cache.GetGAIAGivenNameOfProfileAtIndex(profile_index)) || | 340 (new_profile_name == entry.GAIA_full_name())) { |
| 336 (new_profile_name == cache.GetGAIANameOfProfileAtIndex(profile_index))) { | |
| 337 // Set the profile to use the GAIA name as the profile name. Note, this | 341 // Set the profile to use the GAIA name as the profile name. Note, this |
| 338 // is a little weird if the user typed their GAIA name manually but | 342 // is a little weird if the user typed their GAIA name manually but |
| 339 // it's not a big deal. | 343 // it's not a big deal. |
| 340 cache.SetIsUsingGAIANameOfProfileAtIndex(profile_index, true); | 344 entry.set_is_using_GAIA_name(true); |
| 341 } else { | 345 } else { |
| 342 PrefService* pref_service = profile->GetPrefs(); | 346 PrefService* pref_service = profile->GetPrefs(); |
| 343 // Updating the profile preference will cause the cache to be updated for | 347 // Updating the profile preference will cause the cache to be updated for |
| 344 // this preference. | 348 // this preference. |
| 345 pref_service->SetString(prefs::kProfileName, UTF16ToUTF8(new_profile_name)); | 349 pref_service->SetString(prefs::kProfileName, UTF16ToUTF8(new_profile_name)); |
| 346 | 350 entry.set_is_using_GAIA_name(false); |
| 347 // Changing the profile name can invalidate the profile index. | |
| 348 profile_index = cache.GetIndexOfProfileWithPath(profile_file_path); | |
| 349 if (profile_index == std::string::npos) | |
| 350 return; | |
| 351 | |
| 352 cache.SetIsUsingGAIANameOfProfileAtIndex(profile_index, false); | |
| 353 } | 351 } |
| 352 cache.SetInfoForProfile(entry); |
| 354 } | 353 } |
| 355 | 354 |
| 356 #if defined(ENABLE_SETTINGS_APP) | 355 #if defined(ENABLE_SETTINGS_APP) |
| 357 void ManageProfileHandler::SwitchAppListProfile(const ListValue* args) { | 356 void ManageProfileHandler::SwitchAppListProfile(const ListValue* args) { |
| 358 DCHECK(args); | 357 DCHECK(args); |
| 359 DCHECK(profiles::IsMultipleProfilesEnabled()); | 358 DCHECK(profiles::IsMultipleProfilesEnabled()); |
| 360 | 359 |
| 361 const Value* file_path_value; | 360 const Value* file_path_value; |
| 362 base::FilePath profile_file_path; | 361 base::FilePath profile_file_path; |
| 363 if (!args->Get(0, &file_path_value) || | 362 if (!args->Get(0, &file_path_value) || |
| (...skipping 27 matching lines...) Expand all Loading... |
| 391 return; | 390 return; |
| 392 | 391 |
| 393 if (icon_url != gaia_picture_url_) | 392 if (icon_url != gaia_picture_url_) |
| 394 return; | 393 return; |
| 395 | 394 |
| 396 // If the selection is the GAIA picture then also show the profile name in the | 395 // If the selection is the GAIA picture then also show the profile name in the |
| 397 // text field. This will display either the GAIA given name, if available, | 396 // text field. This will display either the GAIA given name, if available, |
| 398 // or the first name. | 397 // or the first name. |
| 399 ProfileInfoCache& cache = | 398 ProfileInfoCache& cache = |
| 400 g_browser_process->profile_manager()->GetProfileInfoCache(); | 399 g_browser_process->profile_manager()->GetProfileInfoCache(); |
| 401 size_t profile_index = cache.GetIndexOfProfileWithPath(profile_file_path); | 400 |
| 402 if (profile_index == std::string::npos) | 401 ProfileInfoEntry entry; |
| 402 if (!cache.GetInfoForProfile(profile_file_path, &entry)) |
| 403 return; | 403 return; |
| 404 string16 gaia_name = cache.GetNameOfProfileAtIndex(profile_index); | 404 |
| 405 string16 gaia_name = entry.GetDisplayName(); |
| 405 if (gaia_name.empty()) | 406 if (gaia_name.empty()) |
| 406 return; | 407 return; |
| 407 | 408 |
| 408 StringValue gaia_name_value(gaia_name); | 409 StringValue gaia_name_value(gaia_name); |
| 409 web_ui()->CallJavascriptFunction("ManageProfileOverlay.setProfileName", | 410 web_ui()->CallJavascriptFunction("ManageProfileOverlay.setProfileName", |
| 410 gaia_name_value); | 411 gaia_name_value); |
| 411 } | 412 } |
| 412 | 413 |
| 413 void ManageProfileHandler::RequestHasProfileShortcuts(const ListValue* args) { | 414 void ManageProfileHandler::RequestHasProfileShortcuts(const ListValue* args) { |
| 414 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 415 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 415 DCHECK(ProfileShortcutManager::IsFeatureEnabled()); | 416 DCHECK(ProfileShortcutManager::IsFeatureEnabled()); |
| 416 | 417 |
| 417 base::FilePath profile_file_path; | 418 base::FilePath profile_file_path; |
| 418 if (!GetProfilePathFromArgs(args, &profile_file_path)) | 419 if (!GetProfilePathFromArgs(args, &profile_file_path)) |
| 419 return; | 420 return; |
| 420 | 421 |
| 421 const ProfileInfoCache& cache = | 422 const ProfileInfoCache& cache = |
| 422 g_browser_process->profile_manager()->GetProfileInfoCache(); | 423 g_browser_process->profile_manager()->GetProfileInfoCache(); |
| 423 size_t profile_index = cache.GetIndexOfProfileWithPath(profile_file_path); | 424 |
| 424 if (profile_index == std::string::npos) | 425 ProfileInfoEntry entry; |
| 426 if (!cache.GetInfoForProfile(profile_file_path, &entry)) |
| 425 return; | 427 return; |
| 426 | 428 |
| 427 const base::FilePath profile_path = | 429 const base::FilePath profile_path = entry.path(); |
| 428 cache.GetPathOfProfileAtIndex(profile_index); | |
| 429 ProfileShortcutManager* shortcut_manager = | 430 ProfileShortcutManager* shortcut_manager = |
| 430 g_browser_process->profile_manager()->profile_shortcut_manager(); | 431 g_browser_process->profile_manager()->profile_shortcut_manager(); |
| 431 shortcut_manager->HasProfileShortcuts( | 432 shortcut_manager->HasProfileShortcuts( |
| 432 profile_path, base::Bind(&ManageProfileHandler::OnHasProfileShortcuts, | 433 profile_path, base::Bind(&ManageProfileHandler::OnHasProfileShortcuts, |
| 433 weak_factory_.GetWeakPtr())); | 434 weak_factory_.GetWeakPtr())); |
| 434 } | 435 } |
| 435 | 436 |
| 436 void ManageProfileHandler::RequestCreateProfileUpdate( | 437 void ManageProfileHandler::RequestCreateProfileUpdate( |
| 437 const base::ListValue* args) { | 438 const base::ListValue* args) { |
| 438 Profile* profile = Profile::FromWebUI(web_ui()); | 439 Profile* profile = Profile::FromWebUI(web_ui()); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 g_browser_process->profile_manager()->profile_shortcut_manager(); | 495 g_browser_process->profile_manager()->profile_shortcut_manager(); |
| 495 DCHECK(shortcut_manager); | 496 DCHECK(shortcut_manager); |
| 496 | 497 |
| 497 shortcut_manager->RemoveProfileShortcuts(profile_file_path); | 498 shortcut_manager->RemoveProfileShortcuts(profile_file_path); |
| 498 | 499 |
| 499 // Update the UI buttons. | 500 // Update the UI buttons. |
| 500 OnHasProfileShortcuts(false); | 501 OnHasProfileShortcuts(false); |
| 501 } | 502 } |
| 502 | 503 |
| 503 } // namespace options | 504 } // namespace options |
| OLD | NEW |