OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/chromeos/login/user_manager_impl.h" | 5 #include "chrome/browser/chromeos/login/user_manager_impl.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
10 #include "ash/desktop_background/desktop_background_controller.h" | 10 #include "ash/desktop_background/desktop_background_controller.h" |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/chromeos/chromeos_version.h" | 12 #include "base/chromeos/chromeos_version.h" |
13 #include "base/command_line.h" | 13 #include "base/command_line.h" |
14 #include "base/compiler_specific.h" | 14 #include "base/compiler_specific.h" |
15 #include "base/file_path.h" | 15 #include "base/file_path.h" |
16 #include "base/file_util.h" | 16 #include "base/file_util.h" |
17 #include "base/logging.h" | 17 #include "base/logging.h" |
18 #include "base/metrics/histogram.h" | 18 #include "base/metrics/histogram.h" |
19 #include "base/path_service.h" | 19 #include "base/path_service.h" |
20 #include "base/rand_util.h" | 20 #include "base/rand_util.h" |
21 #include "base/stl_util.h" | 21 #include "base/stl_util.h" |
22 #include "base/string_number_conversions.h" | |
23 #include "base/string_util.h" | |
24 #include "base/stringprintf.h" | 22 #include "base/stringprintf.h" |
25 #include "base/time.h" | 23 #include "base/time.h" |
26 #include "base/utf_string_conversions.h" | 24 #include "base/utf_string_conversions.h" |
27 #include "base/values.h" | 25 #include "base/values.h" |
28 #include "chrome/browser/browser_process.h" | 26 #include "chrome/browser/browser_process.h" |
29 #include "chrome/browser/chromeos/cros/cert_library.h" | 27 #include "chrome/browser/chromeos/cros/cert_library.h" |
30 #include "chrome/browser/chromeos/cros/cros_library.h" | 28 #include "chrome/browser/chromeos/cros/cros_library.h" |
31 #include "chrome/browser/chromeos/cros_settings.h" | 29 #include "chrome/browser/chromeos/cros_settings.h" |
32 #include "chrome/browser/chromeos/cryptohome/async_method_caller.h" | 30 #include "chrome/browser/chromeos/cryptohome/async_method_caller.h" |
33 #include "chrome/browser/chromeos/input_method/input_method_manager.h" | 31 #include "chrome/browser/chromeos/input_method/input_method_manager.h" |
34 #include "chrome/browser/chromeos/login/default_user_images.h" | 32 #include "chrome/browser/chromeos/login/default_user_images.h" |
35 #include "chrome/browser/chromeos/login/helper.h" | 33 #include "chrome/browser/chromeos/login/helper.h" |
36 #include "chrome/browser/chromeos/login/login_display.h" | 34 #include "chrome/browser/chromeos/login/login_display.h" |
37 #include "chrome/browser/chromeos/login/ownership_service.h" | 35 #include "chrome/browser/chromeos/login/ownership_service.h" |
38 #include "chrome/browser/chromeos/login/remove_user_delegate.h" | 36 #include "chrome/browser/chromeos/login/remove_user_delegate.h" |
39 #include "chrome/browser/chromeos/login/user_image.h" | 37 #include "chrome/browser/chromeos/login/user_image.h" |
40 #include "chrome/browser/chromeos/login/wizard_controller.h" | |
41 #include "chrome/browser/policy/browser_policy_connector.h" | 38 #include "chrome/browser/policy/browser_policy_connector.h" |
42 #include "chrome/browser/prefs/pref_service.h" | 39 #include "chrome/browser/prefs/pref_service.h" |
43 #include "chrome/browser/prefs/scoped_user_pref_update.h" | 40 #include "chrome/browser/prefs/scoped_user_pref_update.h" |
44 #include "chrome/browser/profiles/profile_downloader.h" | 41 #include "chrome/browser/profiles/profile_downloader.h" |
45 #include "chrome/browser/profiles/profile_manager.h" | 42 #include "chrome/browser/profiles/profile_manager.h" |
46 #include "chrome/browser/sync/profile_sync_service.h" | 43 #include "chrome/browser/sync/profile_sync_service.h" |
47 #include "chrome/browser/sync/profile_sync_service_factory.h" | 44 #include "chrome/browser/sync/profile_sync_service_factory.h" |
48 #include "chrome/browser/ui/webui/web_ui_util.h" | 45 #include "chrome/browser/ui/webui/web_ui_util.h" |
49 #include "chrome/common/chrome_notification_types.h" | 46 #include "chrome/common/chrome_notification_types.h" |
50 #include "chrome/common/chrome_paths.h" | 47 #include "chrome/common/chrome_paths.h" |
(...skipping 13 matching lines...) Expand all Loading... | |
64 | 61 |
65 namespace chromeos { | 62 namespace chromeos { |
66 | 63 |
67 namespace { | 64 namespace { |
68 | 65 |
69 // Names of nodes with info about user image. | 66 // Names of nodes with info about user image. |
70 const char kImagePathNodeName[] = "path"; | 67 const char kImagePathNodeName[] = "path"; |
71 const char kImageIndexNodeName[] = "index"; | 68 const char kImageIndexNodeName[] = "index"; |
72 const char kImageURLNodeName[] = "url"; | 69 const char kImageURLNodeName[] = "url"; |
73 | 70 |
74 const char kWallpaperTypeNodeName[] = "type"; | |
75 const char kWallpaperIndexNodeName[] = "index"; | |
76 const char kWallpaperDateNodeName[] = "date"; | |
77 | |
78 // Default wallpaper index used in OOBE (first boot). | |
79 // Defined here because Chromium default index differs. | |
80 // Also see ash::WallpaperInfo kDefaultWallpapers in | |
81 // desktop_background_resources.cc | |
82 #if defined(GOOGLE_CHROME_BUILD) | |
83 const int kDefaultOOBEWallpaperIndex = 16; // IDR_AURA_WALLPAPERS_3_URBAN0 | |
84 #else | |
85 const int kDefaultOOBEWallpaperIndex = 0; // IDR_AURA_WALLPAPERS_ROMAINGUY_0 | |
86 #endif | |
87 | |
88 const int kThumbnailWidth = 128; | |
89 const int kThumbnailHeight = 80; | |
90 | |
91 // Delay betweeen user login and attempt to update user's profile data. | 71 // Delay betweeen user login and attempt to update user's profile data. |
92 const long kProfileDataDownloadDelayMs = 10000; | 72 const long kProfileDataDownloadDelayMs = 10000; |
93 | 73 |
94 // Delay betweeen subsequent profile refresh attempts (24 hrs). | 74 // Delay betweeen subsequent profile refresh attempts (24 hrs). |
95 const long kProfileRefreshIntervalMs = 24L * 3600 * 1000; | 75 const long kProfileRefreshIntervalMs = 24L * 3600 * 1000; |
96 | 76 |
97 // Enum for reporting histograms about profile picture download. | 77 // Enum for reporting histograms about profile picture download. |
98 enum ProfileDownloadResult { | 78 enum ProfileDownloadResult { |
99 kDownloadSuccessChanged, | 79 kDownloadSuccessChanged, |
100 kDownloadSuccess, | 80 kDownloadSuccess, |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
205 | 185 |
206 } // namespace | 186 } // namespace |
207 | 187 |
208 UserManagerImpl::UserManagerImpl() | 188 UserManagerImpl::UserManagerImpl() |
209 : ALLOW_THIS_IN_INITIALIZER_LIST(image_loader_(new UserImageLoader)), | 189 : ALLOW_THIS_IN_INITIALIZER_LIST(image_loader_(new UserImageLoader)), |
210 logged_in_user_(NULL), | 190 logged_in_user_(NULL), |
211 session_started_(false), | 191 session_started_(false), |
212 is_current_user_owner_(false), | 192 is_current_user_owner_(false), |
213 is_current_user_new_(false), | 193 is_current_user_new_(false), |
214 is_current_user_ephemeral_(false), | 194 is_current_user_ephemeral_(false), |
215 current_user_wallpaper_type_(User::UNKNOWN), | |
216 ALLOW_THIS_IN_INITIALIZER_LIST(current_user_wallpaper_index_( | |
217 ash::GetInvalidWallpaperIndex())), | |
218 ephemeral_users_enabled_(false), | 195 ephemeral_users_enabled_(false), |
219 observed_sync_service_(NULL), | 196 observed_sync_service_(NULL), |
220 last_image_set_async_(false), | 197 last_image_set_async_(false), |
221 downloaded_profile_image_data_url_(chrome::kAboutBlankURL), | 198 downloaded_profile_image_data_url_(chrome::kAboutBlankURL), |
222 downloading_profile_image_(false) { | 199 downloading_profile_image_(false) { |
223 // UserManager instance should be used only on UI thread. | 200 // UserManager instance should be used only on UI thread. |
224 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 201 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
225 | 202 |
226 MigrateWallpaperData(); | 203 MigrateWallpaperData(); |
227 registrar_.Add(this, chrome::NOTIFICATION_OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED, | 204 registrar_.Add(this, chrome::NOTIFICATION_OWNER_KEY_FETCH_ATTEMPT_SUCCEEDED, |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
291 logged_in_user_ = *logged_in_user; | 268 logged_in_user_ = *logged_in_user; |
292 users_.erase(logged_in_user); | 269 users_.erase(logged_in_user); |
293 } | 270 } |
294 // This user must be in the front of the user list. | 271 // This user must be in the front of the user list. |
295 users_.insert(users_.begin(), logged_in_user_); | 272 users_.insert(users_.begin(), logged_in_user_); |
296 | 273 |
297 if (is_current_user_new_) { | 274 if (is_current_user_new_) { |
298 SaveUserDisplayName(GetLoggedInUser().email(), | 275 SaveUserDisplayName(GetLoggedInUser().email(), |
299 UTF8ToUTF16(GetLoggedInUser().GetAccountName(true))); | 276 UTF8ToUTF16(GetLoggedInUser().GetAccountName(true))); |
300 SetInitialUserImage(email); | 277 SetInitialUserImage(email); |
301 SetInitialUserWallpaper(email); | 278 WallpaperManager::Get()->SetInitialUserWallpaper(email); |
302 } else { | 279 } else { |
303 int image_index = logged_in_user_->image_index(); | 280 int image_index = logged_in_user_->image_index(); |
304 // If current user image is profile image, it needs to be refreshed. | 281 // If current user image is profile image, it needs to be refreshed. |
305 bool download_profile_image = image_index == User::kProfileImageIndex; | 282 bool download_profile_image = image_index == User::kProfileImageIndex; |
306 if (download_profile_image) | 283 if (download_profile_image) |
307 InitDownloadedProfileImage(); | 284 InitDownloadedProfileImage(); |
308 | 285 |
309 // Download user's profile data (full name and optionally image) to see if | 286 // Download user's profile data (full name and optionally image) to see if |
310 // it has changed. | 287 // it has changed. |
311 BrowserThread::PostDelayedTask( | 288 BrowserThread::PostDelayedTask( |
(...skipping 21 matching lines...) Expand all Loading... | |
333 kHistogramImagesCount); | 310 kHistogramImagesCount); |
334 } | 311 } |
335 | 312 |
336 // Set up a repeating timer for refreshing the profile data. | 313 // Set up a repeating timer for refreshing the profile data. |
337 profile_download_timer_.Start( | 314 profile_download_timer_.Start( |
338 FROM_HERE, base::TimeDelta::FromMilliseconds(kProfileRefreshIntervalMs), | 315 FROM_HERE, base::TimeDelta::FromMilliseconds(kProfileRefreshIntervalMs), |
339 this, &UserManagerImpl::DownloadProfileDataScheduled); | 316 this, &UserManagerImpl::DownloadProfileDataScheduled); |
340 | 317 |
341 if (!browser_restart) { | 318 if (!browser_restart) { |
342 // For GAIA login flow, logged in user wallpaper may not be loaded. | 319 // For GAIA login flow, logged in user wallpaper may not be loaded. |
343 EnsureLoggedInUserWallpaperLoaded(); | 320 WallpaperManager::Get()->EnsureLoggedInUserWallpaperLoaded(); |
344 } | 321 } |
345 | 322 |
346 NotifyOnLogin(); | 323 NotifyOnLogin(); |
347 } | 324 } |
348 | 325 |
349 void UserManagerImpl::DemoUserLoggedIn() { | 326 void UserManagerImpl::DemoUserLoggedIn() { |
350 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 327 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
351 is_current_user_new_ = true; | 328 is_current_user_new_ = true; |
352 is_current_user_ephemeral_ = true; | 329 is_current_user_ephemeral_ = true; |
353 logged_in_user_ = CreateUser(kDemoUser, /* is_ephemeral= */ true); | 330 logged_in_user_ = CreateUser(kDemoUser, /* is_ephemeral= */ true); |
354 SetInitialUserImage(kDemoUser); | 331 SetInitialUserImage(kDemoUser); |
355 SetInitialUserWallpaper(kDemoUser); | 332 WallpaperManager::Get()->SetInitialUserWallpaper(kDemoUser); |
356 NotifyOnLogin(); | 333 NotifyOnLogin(); |
357 } | 334 } |
358 | 335 |
359 void UserManagerImpl::GuestUserLoggedIn() { | 336 void UserManagerImpl::GuestUserLoggedIn() { |
360 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 337 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
361 is_current_user_ephemeral_ = true; | 338 is_current_user_ephemeral_ = true; |
362 SetInitialUserWallpaper(kGuestUser); | 339 WallpaperManager::Get()->SetInitialUserWallpaper(kGuestUser); |
363 logged_in_user_ = CreateUser(kGuestUser, /* is_ephemeral= */ true); | 340 logged_in_user_ = CreateUser(kGuestUser, /* is_ephemeral= */ true); |
364 NotifyOnLogin(); | 341 NotifyOnLogin(); |
365 } | 342 } |
366 | 343 |
367 void UserManagerImpl::EphemeralUserLoggedIn(const std::string& email) { | 344 void UserManagerImpl::EphemeralUserLoggedIn(const std::string& email) { |
368 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 345 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
369 is_current_user_new_ = true; | 346 is_current_user_new_ = true; |
370 is_current_user_ephemeral_ = true; | 347 is_current_user_ephemeral_ = true; |
371 logged_in_user_ = CreateUser(email, /* is_ephemeral= */ true); | 348 logged_in_user_ = CreateUser(email, /* is_ephemeral= */ true); |
372 SetInitialUserImage(email); | 349 SetInitialUserImage(email); |
373 SetInitialUserWallpaper(email); | 350 WallpaperManager::Get()->SetInitialUserWallpaper(email); |
374 NotifyOnLogin(); | 351 NotifyOnLogin(); |
375 } | 352 } |
376 | 353 |
377 void UserManagerImpl::InitializeWallpaper() { | 354 void UserManagerImpl::InitializeWallpaper() { |
Ivan Korotkov
2012/07/27 23:02:02
Is this method still needed? Why can't caller user
bshe
2012/07/31 14:27:54
Done.
| |
378 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 355 WallpaperManager::Get()->InitializeWallpaper(); |
379 if (!IsUserLoggedIn()) { | |
380 if (!CommandLine::ForCurrentProcess()->HasSwitch( | |
381 switches::kDisableNewOobe)) { | |
382 if (!WizardController::IsDeviceRegistered() && | |
383 !WizardController::IsZeroDelayEnabled()) { | |
384 // TODO(nkostylev): Add switch to disable wallpaper transition on OOBE. | |
385 // Should be used on test images so that they are not slowed down. | |
386 ash::Shell::GetInstance()->desktop_background_controller()-> | |
387 SetDefaultWallpaper(kDefaultOOBEWallpaperIndex); | |
388 } else { | |
389 bool show_users = true; | |
390 bool result = CrosSettings::Get()->GetBoolean( | |
391 kAccountsPrefShowUserNamesOnSignIn, &show_users); | |
392 DCHECK(result) << "Unable to fetch setting " | |
393 << kAccountsPrefShowUserNamesOnSignIn; | |
394 if (!show_users) { | |
395 ash::Shell::GetInstance()->desktop_background_controller()-> | |
396 SetDefaultWallpaper(ash::GetSolidColorIndex()); | |
397 } | |
398 } | |
399 } | |
400 return; | |
401 } | |
402 UserSelected(GetLoggedInUser().email()); | |
403 } | |
404 | |
405 void UserManagerImpl::UserSelected(const std::string& email) { | |
406 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
407 if (IsKnownUser(email)) { | |
408 User::WallpaperType type; | |
409 int index; | |
410 base::Time date; | |
411 GetUserWallpaperProperties(email, &type, &index, &date); | |
412 if (type == User::DAILY && date != base::Time::Now().LocalMidnight()) { | |
413 index = ash::GetNextWallpaperIndex(index); | |
414 SaveUserWallpaperProperties(email, User::DAILY, index); | |
415 } else if (type == User::CUSTOMIZED) { | |
416 std::string wallpaper_path = | |
417 GetWallpaperPathForUser(email, false).value(); | |
418 // In customized mode, we use index pref to save the user selected | |
419 // wallpaper layout. See function SaveWallpaperToLocalState(). | |
420 ash::WallpaperLayout layout = static_cast<ash::WallpaperLayout>(index); | |
421 // Load user image asynchronously. | |
422 image_loader_->Start( | |
423 wallpaper_path, 0, false, | |
424 base::Bind(&UserManagerImpl::OnCustomWallpaperLoaded, | |
425 base::Unretained(this), email, layout)); | |
426 return; | |
427 } | |
428 ash::Shell::GetInstance()->desktop_background_controller()-> | |
429 SetDefaultWallpaper(index); | |
430 WallpaperManager::Get()->SetLastSelectedUser(email); | |
431 } | |
432 } | 356 } |
433 | 357 |
434 void UserManagerImpl::SessionStarted() { | 358 void UserManagerImpl::SessionStarted() { |
435 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 359 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
436 session_started_ = true; | 360 session_started_ = true; |
437 content::NotificationService::current()->Notify( | 361 content::NotificationService::current()->Notify( |
438 chrome::NOTIFICATION_SESSION_STARTED, | 362 chrome::NOTIFICATION_SESSION_STARTED, |
439 content::NotificationService::AllSources(), | 363 content::NotificationService::AllSources(), |
440 content::NotificationService::NoDetails()); | 364 content::NotificationService::NoDetails()); |
441 } | 365 } |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
617 // memory. Need a smarter way to solve this. | 541 // memory. Need a smarter way to solve this. |
618 if (IsCurrentUserEphemeral()) | 542 if (IsCurrentUserEphemeral()) |
619 return; | 543 return; |
620 const chromeos::User& user = GetLoggedInUser(); | 544 const chromeos::User& user = GetLoggedInUser(); |
621 std::string username = user.email(); | 545 std::string username = user.email(); |
622 DCHECK(!username.empty()); | 546 DCHECK(!username.empty()); |
623 | 547 |
624 std::string file_path = GetWallpaperPathForUser(username, false).value(); | 548 std::string file_path = GetWallpaperPathForUser(username, false).value(); |
625 SaveWallpaperToLocalState(username, file_path, layout, User::CUSTOMIZED); | 549 SaveWallpaperToLocalState(username, file_path, layout, User::CUSTOMIZED); |
626 // Load wallpaper from file. | 550 // Load wallpaper from file. |
627 UserSelected(username); | 551 WallpaperManager::Get()->UserSelected(username); |
628 } | 552 } |
629 | 553 |
630 void UserManagerImpl::SaveUserImageFromFile(const std::string& username, | 554 void UserManagerImpl::SaveUserImageFromFile(const std::string& username, |
631 const FilePath& path) { | 555 const FilePath& path) { |
632 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 556 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
633 image_loader_->Start( | 557 image_loader_->Start( |
634 path.value(), login::kMaxUserImageSize, true, | 558 path.value(), login::kMaxUserImageSize, true, |
635 base::Bind(&UserManagerImpl::SaveUserImage, | 559 base::Bind(&UserManagerImpl::SaveUserImage, |
636 base::Unretained(this), username)); | 560 base::Unretained(this), username)); |
637 } | 561 } |
638 | 562 |
639 void UserManagerImpl::SaveUserWallpaperFromFile( | |
640 const std::string& username, | |
641 const FilePath& path, | |
642 ash::WallpaperLayout layout, | |
643 base::WeakPtr<WallpaperDelegate> delegate) { | |
644 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
645 // For wallpapers, save the image without resizing. | |
646 image_loader_->Start( | |
647 path.value(), 0 /* Original size */, false, | |
648 base::Bind(&UserManagerImpl::SaveUserWallpaperInternal, | |
649 base::Unretained(this), username, layout, User::CUSTOMIZED, | |
650 delegate)); | |
651 } | |
652 | |
653 void UserManagerImpl::SaveUserImageFromProfileImage( | 563 void UserManagerImpl::SaveUserImageFromProfileImage( |
654 const std::string& username) { | 564 const std::string& username) { |
655 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 565 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
656 if (!downloaded_profile_image_.empty()) { | 566 if (!downloaded_profile_image_.empty()) { |
657 // Profile image has already been downloaded, so save it to file right now. | 567 // Profile image has already been downloaded, so save it to file right now. |
658 DCHECK(profile_image_url_.is_valid()); | 568 DCHECK(profile_image_url_.is_valid()); |
659 SaveUserImageInternal(username, | 569 SaveUserImageInternal(username, |
660 User::kProfileImageIndex, profile_image_url_, | 570 User::kProfileImageIndex, profile_image_url_, |
661 UserImage(downloaded_profile_image_)); | 571 UserImage(downloaded_profile_image_)); |
662 } else { | 572 } else { |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
825 int user_image_size = GetCurrentUserImageSize(); | 735 int user_image_size = GetCurrentUserImageSize(); |
826 | 736 |
827 if (prefs_users) { | 737 if (prefs_users) { |
828 for (ListValue::const_iterator it = prefs_users->begin(); | 738 for (ListValue::const_iterator it = prefs_users->begin(); |
829 it != prefs_users->end(); ++it) { | 739 it != prefs_users->end(); ++it) { |
830 std::string email; | 740 std::string email; |
831 if ((*it)->GetAsString(&email)) { | 741 if ((*it)->GetAsString(&email)) { |
832 User* user = CreateUser(email, /* is_ephemeral= */ false); | 742 User* user = CreateUser(email, /* is_ephemeral= */ false); |
833 users_.push_back(user); | 743 users_.push_back(user); |
834 | 744 |
745 WallpaperManager::Get()->CacheIfCustomWallpaper(email); | |
746 | |
835 if (prefs_images) { | 747 if (prefs_images) { |
836 // Get account image path. | 748 // Get account image path. |
837 // TODO(avayvod): Reading image path as a string is here for | 749 // TODO(avayvod): Reading image path as a string is here for |
838 // backward compatibility. | 750 // backward compatibility. |
839 std::string image_path; | 751 std::string image_path; |
840 base::DictionaryValue* image_properties; | 752 base::DictionaryValue* image_properties; |
841 if (prefs_images->GetStringWithoutPathExpansion(email, &image_path)) { | 753 if (prefs_images->GetStringWithoutPathExpansion(email, &image_path)) { |
842 int image_id = User::kInvalidImageIndex; | 754 int image_id = User::kInvalidImageIndex; |
843 if (IsDefaultImagePath(image_path, &image_id)) { | 755 if (IsDefaultImagePath(image_path, &image_id)) { |
844 user->SetImage(UserImage(GetDefaultImage(image_id)), image_id); | 756 user->SetImage(UserImage(GetDefaultImage(image_id)), image_id); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
901 if (prefs_display_emails && | 813 if (prefs_display_emails && |
902 prefs_display_emails->GetStringWithoutPathExpansion( | 814 prefs_display_emails->GetStringWithoutPathExpansion( |
903 email, &display_email)) { | 815 email, &display_email)) { |
904 user->set_display_email(display_email); | 816 user->set_display_email(display_email); |
905 } | 817 } |
906 } | 818 } |
907 } | 819 } |
908 } | 820 } |
909 } | 821 } |
910 | 822 |
911 void UserManagerImpl::EnsureLoggedInUserWallpaperLoaded() { | |
912 User::WallpaperType type; | |
913 int index; | |
914 base::Time last_modification_date; | |
915 GetLoggedInUserWallpaperProperties(&type, &index, &last_modification_date); | |
916 | |
917 if (type != current_user_wallpaper_type_ || | |
918 index != current_user_wallpaper_index_) | |
919 UserSelected(GetLoggedInUser().email()); | |
920 } | |
921 | |
922 void UserManagerImpl::RetrieveTrustedDevicePolicies() { | 823 void UserManagerImpl::RetrieveTrustedDevicePolicies() { |
923 ephemeral_users_enabled_ = false; | 824 ephemeral_users_enabled_ = false; |
924 owner_email_ = ""; | 825 owner_email_ = ""; |
925 | 826 |
926 CrosSettings* cros_settings = CrosSettings::Get(); | 827 CrosSettings* cros_settings = CrosSettings::Get(); |
927 // Schedule a callback if device policy has not yet been verified. | 828 // Schedule a callback if device policy has not yet been verified. |
928 if (CrosSettingsProvider::TRUSTED != cros_settings->PrepareTrustedValues( | 829 if (CrosSettingsProvider::TRUSTED != cros_settings->PrepareTrustedValues( |
929 base::Bind(&UserManagerImpl::RetrieveTrustedDevicePolicies, | 830 base::Bind(&UserManagerImpl::RetrieveTrustedDevicePolicies, |
930 base::Unretained(this)))) { | 831 base::Unretained(this)))) { |
931 return; | 832 return; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1013 base::Bind(&UserManagerImpl::CheckOwnership, | 914 base::Bind(&UserManagerImpl::CheckOwnership, |
1014 base::Unretained(this))); | 915 base::Unretained(this))); |
1015 } | 916 } |
1016 | 917 |
1017 void UserManagerImpl::SetInitialUserImage(const std::string& username) { | 918 void UserManagerImpl::SetInitialUserImage(const std::string& username) { |
1018 // Choose a random default image. | 919 // Choose a random default image. |
1019 int image_id = base::RandInt(0, kDefaultImagesCount - 1); | 920 int image_id = base::RandInt(0, kDefaultImagesCount - 1); |
1020 SaveUserDefaultImageIndex(username, image_id); | 921 SaveUserDefaultImageIndex(username, image_id); |
1021 } | 922 } |
1022 | 923 |
1023 void UserManagerImpl::SetInitialUserWallpaper(const std::string& username) { | |
1024 current_user_wallpaper_type_ = User::DEFAULT; | |
1025 // TODO(bshe): Ideally, wallpaper should start to load as soon as user click | |
1026 // "Add user". | |
1027 if (username == kGuestUser) | |
1028 current_user_wallpaper_index_ = ash::GetGuestWallpaperIndex(); | |
1029 else | |
1030 current_user_wallpaper_index_ = ash::GetDefaultWallpaperIndex(); | |
1031 SaveUserWallpaperProperties(username, | |
1032 current_user_wallpaper_type_, | |
1033 current_user_wallpaper_index_); | |
1034 | |
1035 // Some browser tests do not have shell instance. And it is not necessary to | |
1036 // create a wallpaper for these tests. Add HasInstance check to prevent tests | |
1037 // crash and speed up the tests by avoid loading wallpaper. | |
1038 if (ash::Shell::HasInstance()) { | |
1039 ash::Shell::GetInstance()->desktop_background_controller()-> | |
1040 SetDefaultWallpaper(current_user_wallpaper_index_); | |
1041 } | |
1042 } | |
1043 | |
1044 void UserManagerImpl::MigrateWallpaperData() { | 924 void UserManagerImpl::MigrateWallpaperData() { |
1045 PrefService* local_state = g_browser_process->local_state(); | 925 PrefService* local_state = g_browser_process->local_state(); |
1046 if (local_state) { | 926 if (local_state) { |
1047 const DictionaryValue* user_wallpapers = | 927 const DictionaryValue* user_wallpapers = |
1048 local_state->GetDictionary(kUserWallpapers); | 928 local_state->GetDictionary(kUserWallpapers); |
1049 int index; | 929 int index; |
1050 const DictionaryValue* new_user_wallpapers = | 930 const DictionaryValue* new_user_wallpapers = |
1051 local_state->GetDictionary(kUserWallpapersProperties); | 931 local_state->GetDictionary(kUserWallpapersProperties); |
1052 if (new_user_wallpapers->empty()) { | 932 if (new_user_wallpapers->empty()) { |
1053 const UserList& users = GetUsers(); | 933 const UserList& users = GetUsers(); |
1054 for (UserList::const_iterator it = users.begin(); | 934 for (UserList::const_iterator it = users.begin(); |
1055 it != users.end(); | 935 it != users.end(); |
1056 ++it) { | 936 ++it) { |
1057 std::string username = (*it)->email(); | 937 std::string username = (*it)->email(); |
1058 if (user_wallpapers->GetIntegerWithoutPathExpansion((username), | 938 if (user_wallpapers->GetIntegerWithoutPathExpansion((username), |
1059 &index)) { | 939 &index)) { |
1060 DictionaryPrefUpdate prefs_wallpapers_update(local_state, | 940 DictionaryPrefUpdate prefs_wallpapers_update(local_state, |
1061 kUserWallpapers); | 941 kUserWallpapers); |
1062 prefs_wallpapers_update->RemoveWithoutPathExpansion(username, NULL); | 942 prefs_wallpapers_update->RemoveWithoutPathExpansion(username, NULL); |
1063 SaveUserWallpaperProperties(username, User::DEFAULT, index); | 943 WallpaperManager::Get()->SaveUserWallpaperProperties(username, |
944 User::DEFAULT, | |
945 index); | |
1064 } else { | 946 } else { |
1065 // Before M20, wallpaper index is not saved into LocalState unless | 947 // Before M20, wallpaper index is not saved into LocalState unless |
1066 // user specifically sets a wallpaper. After M20, the default | 948 // user specifically sets a wallpaper. After M20, the default |
1067 // wallpaper index is saved to LocalState as soon as a new user login. | 949 // wallpaper index is saved to LocalState as soon as a new user login. |
1068 // When migrating wallpaper index from M20 to M21, we only migrate | 950 // When migrating wallpaper index from M20 to M21, we only migrate |
1069 // data that is in LocalState. This cause a problem when users login | 951 // data that is in LocalState. This cause a problem when users login |
1070 // on a M20 device and then update the device to M21. The default | 952 // on a M20 device and then update the device to M21. The default |
1071 // wallpaper index failed to migrate because it was not saved into | 953 // wallpaper index failed to migrate because it was not saved into |
1072 // LocalState. Then we assume that all users have index saved in | 954 // LocalState. Then we assume that all users have index saved in |
1073 // LocalState in M21. This is not true and it results an empty | 955 // LocalState in M21. This is not true and it results an empty |
1074 // wallpaper for those users as described in cr/130685. So here we use | 956 // wallpaper for those users as described in cr/130685. So here we use |
1075 // default wallpaper for users that exist in user list but does not | 957 // default wallpaper for users that exist in user list but does not |
1076 // have an index saved in LocalState. | 958 // have an index saved in LocalState. |
1077 SaveUserWallpaperProperties(username, User::DEFAULT, | 959 WallpaperManager::Get()->SaveUserWallpaperProperties(username, |
1078 ash::GetDefaultWallpaperIndex()); | 960 User::DEFAULT, ash::GetDefaultWallpaperIndex()); |
1079 } | 961 } |
1080 } | 962 } |
1081 } | 963 } |
1082 } | 964 } |
1083 } | 965 } |
1084 | 966 |
1085 void UserManagerImpl::GetLoggedInUserWallpaperProperties( | |
1086 User::WallpaperType* type, | |
1087 int* index, | |
1088 base::Time* last_modification_date) { | |
1089 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
1090 DCHECK(logged_in_user_); | |
1091 | |
1092 if (IsLoggedInAsStub()) { | |
1093 *type = current_user_wallpaper_type_ = User::DEFAULT; | |
1094 *index = current_user_wallpaper_index_ = ash::GetInvalidWallpaperIndex(); | |
1095 return; | |
1096 } | |
1097 | |
1098 GetUserWallpaperProperties(GetLoggedInUser().email(), | |
1099 type, | |
1100 index, | |
1101 last_modification_date); | |
1102 } | |
1103 | |
1104 void UserManagerImpl::SaveLoggedInUserWallpaperProperties( | 967 void UserManagerImpl::SaveLoggedInUserWallpaperProperties( |
1105 User::WallpaperType type, | 968 User::WallpaperType type, int index) { |
1106 int index) { | 969 WallpaperManager::Get()->SaveUserWallpaperProperties( |
1107 SaveUserWallpaperProperties(GetLoggedInUser().email(), type, index); | 970 GetLoggedInUser().email(), type, index); |
1108 } | 971 } |
1109 | 972 |
1110 void UserManagerImpl::SetUserImage(const std::string& username, | 973 void UserManagerImpl::SetUserImage(const std::string& username, |
1111 int image_index, | 974 int image_index, |
1112 const GURL& image_url, | 975 const GURL& image_url, |
1113 const UserImage& user_image) { | 976 const UserImage& user_image) { |
1114 User* user = const_cast<User*>(FindUser(username)); | 977 User* user = const_cast<User*>(FindUser(username)); |
1115 // User may have been removed by now. | 978 // User may have been removed by now. |
1116 if (user) { | 979 if (user) { |
1117 // For existing users, a valid image index should have been set upon loading | 980 // For existing users, a valid image index should have been set upon loading |
(...skipping 14 matching lines...) Expand all Loading... | |
1132 // Unless this is first-time setting with |SetInitialUserImage|, | 995 // Unless this is first-time setting with |SetInitialUserImage|, |
1133 // send a notification about image change. | 996 // send a notification about image change. |
1134 content::NotificationService::current()->Notify( | 997 content::NotificationService::current()->Notify( |
1135 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, | 998 chrome::NOTIFICATION_LOGIN_USER_IMAGE_CHANGED, |
1136 content::Source<UserManagerImpl>(this), | 999 content::Source<UserManagerImpl>(this), |
1137 content::Details<const User>(user)); | 1000 content::Details<const User>(user)); |
1138 } | 1001 } |
1139 } | 1002 } |
1140 } | 1003 } |
1141 | 1004 |
1142 void UserManagerImpl::GetUserWallpaperProperties(const std::string& username, | |
1143 User::WallpaperType* type, | |
1144 int* index, | |
1145 base::Time* last_modification_date) { | |
1146 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
1147 | |
1148 // Default to the values cached in memory. | |
1149 *type = current_user_wallpaper_type_; | |
1150 *index = current_user_wallpaper_index_; | |
1151 | |
1152 // Override with values found in local store, if any. | |
1153 if (!username.empty()) { | |
1154 const DictionaryValue* user_wallpapers = g_browser_process->local_state()-> | |
1155 GetDictionary(UserManager::kUserWallpapersProperties); | |
1156 base::DictionaryValue* wallpaper_properties; | |
1157 if (user_wallpapers->GetDictionaryWithoutPathExpansion( | |
1158 username, | |
1159 &wallpaper_properties)) { | |
1160 *type = User::UNKNOWN; | |
1161 *index = ash::GetInvalidWallpaperIndex(); | |
1162 wallpaper_properties->GetInteger(kWallpaperTypeNodeName, | |
1163 reinterpret_cast<int*>(type)); | |
1164 wallpaper_properties->GetInteger(kWallpaperIndexNodeName, index); | |
1165 std::string date_string; | |
1166 int64 val; | |
1167 if (!(wallpaper_properties->GetString(kWallpaperDateNodeName, | |
1168 &date_string) && | |
1169 base::StringToInt64(date_string, &val))) | |
1170 val = 0; | |
1171 *last_modification_date = base::Time::FromInternalValue(val); | |
1172 } | |
1173 } | |
1174 } | |
1175 | |
1176 void UserManagerImpl::SaveUserWallpaperProperties(const std::string& username, | |
1177 User::WallpaperType type, | |
1178 int index) { | |
1179 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
1180 | |
1181 current_user_wallpaper_type_ = type; | |
1182 current_user_wallpaper_index_ = index; | |
1183 // Ephemeral users can not save data to local state. We just cache the index | |
1184 // in memory for them. | |
1185 if (IsCurrentUserEphemeral()) { | |
1186 return; | |
1187 } | |
1188 | |
1189 PrefService* local_state = g_browser_process->local_state(); | |
1190 DictionaryPrefUpdate wallpaper_update(local_state, | |
1191 UserManager::kUserWallpapersProperties); | |
1192 | |
1193 base::DictionaryValue* wallpaper_properties = new base::DictionaryValue(); | |
1194 wallpaper_properties->Set(kWallpaperTypeNodeName, | |
1195 new base::FundamentalValue(type)); | |
1196 wallpaper_properties->Set(kWallpaperIndexNodeName, | |
1197 new base::FundamentalValue(index)); | |
1198 wallpaper_properties->SetString(kWallpaperDateNodeName, | |
1199 base::Int64ToString(base::Time::Now().LocalMidnight().ToInternalValue())); | |
1200 wallpaper_update->SetWithoutPathExpansion(username, wallpaper_properties); | |
1201 } | |
1202 | |
1203 void UserManagerImpl::SaveUserImageInternal(const std::string& username, | 1005 void UserManagerImpl::SaveUserImageInternal(const std::string& username, |
1204 int image_index, | 1006 int image_index, |
1205 const GURL& image_url, | 1007 const GURL& image_url, |
1206 const UserImage& user_image) { | 1008 const UserImage& user_image) { |
1207 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1009 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1208 | 1010 |
1209 SetUserImage(username, image_index, image_url, user_image); | 1011 SetUserImage(username, image_index, image_url, user_image); |
1210 | 1012 |
1211 // Ignore for ephemeral users. | 1013 // Ignore for ephemeral users. |
1212 if (IsEphemeralUser(username)) | 1014 if (IsEphemeralUser(username)) |
1213 return; | 1015 return; |
1214 | 1016 |
1215 FilePath image_path = GetImagePathForUser(username); | 1017 FilePath image_path = GetImagePathForUser(username); |
1216 DVLOG(1) << "Saving user image to " << image_path.value(); | 1018 DVLOG(1) << "Saving user image to " << image_path.value(); |
1217 | 1019 |
1218 last_image_set_async_ = true; | 1020 last_image_set_async_ = true; |
1219 | 1021 |
1220 BrowserThread::PostTask( | 1022 BrowserThread::PostTask( |
1221 BrowserThread::FILE, | 1023 BrowserThread::FILE, |
1222 FROM_HERE, | 1024 FROM_HERE, |
1223 base::Bind(&UserManagerImpl::SaveImageToFile, | 1025 base::Bind(&UserManagerImpl::SaveImageToFile, |
1224 base::Unretained(this), | 1026 base::Unretained(this), |
1225 username, user_image, image_path, image_index, image_url)); | 1027 username, user_image, image_path, image_index, image_url)); |
1226 } | 1028 } |
1227 | 1029 |
1228 void UserManagerImpl::SaveUserWallpaperInternal( | |
1229 const std::string& username, | |
1230 ash::WallpaperLayout layout, | |
1231 User::WallpaperType type, | |
1232 base::WeakPtr<WallpaperDelegate> delegate, | |
1233 const UserImage& user_image) { | |
1234 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
1235 | |
1236 const SkBitmap& wallpaper = user_image.image(); | |
1237 BrowserThread::PostTask( | |
1238 BrowserThread::FILE, | |
1239 FROM_HERE, | |
1240 base::Bind(&UserManagerImpl::GenerateUserWallpaperThumbnail, | |
1241 base::Unretained(this), username, type, delegate, wallpaper)); | |
1242 | |
1243 ash::Shell::GetInstance()->desktop_background_controller()-> | |
1244 SetCustomWallpaper(wallpaper, layout); | |
1245 | |
1246 // Ignore for ephemeral users. | |
1247 if (IsEphemeralUser(username)) | |
1248 return; | |
1249 | |
1250 FilePath wallpaper_path = GetWallpaperPathForUser(username, false); | |
1251 DVLOG(1) << "Saving user image to " << wallpaper_path.value(); | |
1252 | |
1253 last_image_set_async_ = true; | |
1254 | |
1255 BrowserThread::PostTask( | |
1256 BrowserThread::FILE, | |
1257 FROM_HERE, | |
1258 base::Bind(&UserManagerImpl::SaveWallpaperToFile, | |
1259 base::Unretained(this), username, wallpaper, wallpaper_path, | |
1260 layout, User::CUSTOMIZED)); | |
1261 } | |
1262 | |
1263 void UserManagerImpl::OnCustomWallpaperLoaded(const std::string& email, | |
1264 ash::WallpaperLayout layout, | |
1265 const UserImage& user_image) { | |
1266 const SkBitmap& wallpaper = user_image.image(); | |
1267 ash::Shell::GetInstance()->desktop_background_controller()-> | |
1268 SetCustomWallpaper(wallpaper, layout); | |
1269 // Starting to load wallpaper thumbnail | |
1270 std::string wallpaper_thumbnail_path = | |
1271 GetWallpaperPathForUser(email, true).value(); | |
1272 image_loader_->Start( | |
1273 wallpaper_thumbnail_path, 0, false, | |
1274 base::Bind(&UserManagerImpl::OnCustomWallpaperThumbnailLoaded, | |
1275 base::Unretained(this), email)); | |
1276 } | |
1277 | |
1278 void UserManagerImpl::OnCustomWallpaperThumbnailLoaded( | |
1279 const std::string& email, | |
1280 const UserImage& user_image) { | |
1281 const SkBitmap& wallpaper = user_image.image(); | |
1282 User* user = const_cast<User*>(FindUser(email)); | |
1283 // User may have been removed by now. | |
1284 if (user && !wallpaper.empty()) | |
1285 user->SetWallpaperThumbnail(wallpaper); | |
1286 } | |
1287 | |
1288 void UserManagerImpl::OnThumbnailUpdated( | |
1289 base::WeakPtr<WallpaperDelegate> delegate) { | |
1290 if (delegate) | |
1291 delegate->SetCustomWallpaperThumbnail(); | |
1292 } | |
1293 | |
1294 void UserManagerImpl::GenerateUserWallpaperThumbnail( | |
1295 const std::string& username, | |
1296 User::WallpaperType type, | |
1297 base::WeakPtr<WallpaperDelegate> delegate, | |
1298 const SkBitmap& wallpaper) { | |
1299 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | |
1300 SkBitmap thumbnail = | |
1301 skia::ImageOperations::Resize(wallpaper, | |
1302 skia::ImageOperations::RESIZE_LANCZOS3, | |
1303 kThumbnailWidth, kThumbnailHeight); | |
1304 logged_in_user_->SetWallpaperThumbnail(thumbnail); | |
1305 | |
1306 // Notify thumbnail is ready. | |
1307 BrowserThread::PostTask( | |
1308 BrowserThread::UI, | |
1309 FROM_HERE, | |
1310 base::Bind(&UserManagerImpl::OnThumbnailUpdated, | |
1311 base::Unretained(this), delegate)); | |
1312 | |
1313 // Ignore for ephemeral users. | |
1314 if (IsEphemeralUser(username)) | |
1315 return; | |
1316 | |
1317 FilePath thumbnail_path = GetWallpaperPathForUser(username, true); | |
1318 SaveBitmapToFile(UserImage(thumbnail), thumbnail_path); | |
1319 } | |
1320 | |
1321 void UserManagerImpl::SaveImageToFile(const std::string& username, | 1030 void UserManagerImpl::SaveImageToFile(const std::string& username, |
1322 const UserImage& user_image, | 1031 const UserImage& user_image, |
1323 const FilePath& image_path, | 1032 const FilePath& image_path, |
1324 int image_index, | 1033 int image_index, |
1325 const GURL& image_url) { | 1034 const GURL& image_url) { |
1326 if (!SaveBitmapToFile(user_image, image_path)) | 1035 if (!SaveBitmapToFile(user_image, image_path)) |
1327 return; | 1036 return; |
1328 | 1037 |
1329 BrowserThread::PostTask( | 1038 BrowserThread::PostTask( |
1330 BrowserThread::UI, | 1039 BrowserThread::UI, |
1331 FROM_HERE, | 1040 FROM_HERE, |
1332 base::Bind(&UserManagerImpl::SaveImageToLocalState, | 1041 base::Bind(&UserManagerImpl::SaveImageToLocalState, |
1333 base::Unretained(this), | 1042 base::Unretained(this), |
1334 username, image_path.value(), image_index, image_url, true)); | 1043 username, image_path.value(), image_index, image_url, true)); |
1335 } | 1044 } |
1336 | 1045 |
1337 void UserManagerImpl::SaveWallpaperToFile(const std::string& username, | |
1338 const SkBitmap& wallpaper, | |
1339 const FilePath& wallpaper_path, | |
1340 ash::WallpaperLayout layout, | |
1341 User::WallpaperType type) { | |
1342 // TODO(bshe): We should save the original file unchanged instead of | |
1343 // re-encoding it and saving it. | |
1344 if (!SaveBitmapToFile(UserImage(wallpaper), wallpaper_path)) | |
1345 return; | |
1346 | |
1347 BrowserThread::PostTask( | |
1348 BrowserThread::UI, | |
1349 FROM_HERE, | |
1350 base::Bind(&UserManagerImpl::SaveWallpaperToLocalState, | |
1351 base::Unretained(this), | |
1352 username, wallpaper_path.value(), layout, type)); | |
1353 } | |
1354 | |
1355 void UserManagerImpl::SaveImageToLocalState(const std::string& username, | 1046 void UserManagerImpl::SaveImageToLocalState(const std::string& username, |
1356 const std::string& image_path, | 1047 const std::string& image_path, |
1357 int image_index, | 1048 int image_index, |
1358 const GURL& image_url, | 1049 const GURL& image_url, |
1359 bool is_async) { | 1050 bool is_async) { |
1360 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1051 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1361 | 1052 |
1362 // Ignore for ephemeral users. | 1053 // Ignore for ephemeral users. |
1363 if (IsEphemeralUser(username)) | 1054 if (IsEphemeralUser(username)) |
1364 return; | 1055 return; |
(...skipping 25 matching lines...) Expand all Loading... | |
1390 DVLOG(1) << "Saving path to user image in Local State."; | 1081 DVLOG(1) << "Saving path to user image in Local State."; |
1391 | 1082 |
1392 NotifyLocalStateChanged(); | 1083 NotifyLocalStateChanged(); |
1393 } | 1084 } |
1394 | 1085 |
1395 void UserManagerImpl::SaveWallpaperToLocalState(const std::string& username, | 1086 void UserManagerImpl::SaveWallpaperToLocalState(const std::string& username, |
1396 const std::string& wallpaper_path, | 1087 const std::string& wallpaper_path, |
1397 ash::WallpaperLayout layout, | 1088 ash::WallpaperLayout layout, |
1398 User::WallpaperType type) { | 1089 User::WallpaperType type) { |
1399 // TODO(bshe): We probably need to save wallpaper_path instead of index. | 1090 // TODO(bshe): We probably need to save wallpaper_path instead of index. |
1400 SaveUserWallpaperProperties(username, type, layout); | 1091 WallpaperManager::Get()->SaveUserWallpaperProperties(username, type, layout); |
1401 } | 1092 } |
1402 | 1093 |
1403 bool UserManagerImpl::SaveBitmapToFile(const UserImage& user_image, | 1094 bool UserManagerImpl::SaveBitmapToFile(const UserImage& user_image, |
1404 const FilePath& image_path) { | 1095 const FilePath& image_path) { |
1405 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 1096 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
1406 | 1097 |
1407 const UserImage::RawImage* encoded_image = NULL; | 1098 const UserImage::RawImage* encoded_image = NULL; |
1408 if (user_image.has_animated_image()) { | 1099 if (user_image.has_animated_image()) { |
1409 encoded_image = &user_image.animated_image(); | 1100 encoded_image = &user_image.animated_image(); |
1410 } else if (user_image.has_raw_image()) { | 1101 } else if (user_image.has_raw_image()) { |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1689 BrowserThread::PostTask( | 1380 BrowserThread::PostTask( |
1690 BrowserThread::FILE, | 1381 BrowserThread::FILE, |
1691 FROM_HERE, | 1382 FROM_HERE, |
1692 base::Bind(&UserManagerImpl::DeleteUserImage, | 1383 base::Bind(&UserManagerImpl::DeleteUserImage, |
1693 base::Unretained(this), | 1384 base::Unretained(this), |
1694 image_path)); | 1385 image_path)); |
1695 } | 1386 } |
1696 } | 1387 } |
1697 | 1388 |
1698 } // namespace chromeos | 1389 } // namespace chromeos |
OLD | NEW |