| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/wallpaper/wallpaper_manager_base.h" | 5 #include "components/wallpaper/wallpaper_manager_base.h" |
| 6 | 6 |
| 7 #include <numeric> | 7 #include <numeric> |
| 8 #include <vector> | 8 #include <vector> |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 #include "base/strings/stringprintf.h" | 21 #include "base/strings/stringprintf.h" |
| 22 #include "base/sys_info.h" | 22 #include "base/sys_info.h" |
| 23 #include "base/threading/worker_pool.h" | 23 #include "base/threading/worker_pool.h" |
| 24 #include "base/time/time.h" | 24 #include "base/time/time.h" |
| 25 #include "base/values.h" | 25 #include "base/values.h" |
| 26 #include "chromeos/chromeos_switches.h" | 26 #include "chromeos/chromeos_switches.h" |
| 27 #include "chromeos/cryptohome/async_method_caller.h" | 27 #include "chromeos/cryptohome/async_method_caller.h" |
| 28 #include "chromeos/dbus/dbus_thread_manager.h" | 28 #include "chromeos/dbus/dbus_thread_manager.h" |
| 29 #include "chromeos/login/user_names.h" | 29 #include "chromeos/login/user_names.h" |
| 30 #include "components/user_manager/user.h" | 30 #include "components/user_manager/user.h" |
| 31 #include "components/user_manager/user_id.h" |
| 31 #include "components/user_manager/user_image/user_image.h" | 32 #include "components/user_manager/user_image/user_image.h" |
| 32 #include "components/user_manager/user_manager.h" | 33 #include "components/user_manager/user_manager.h" |
| 33 #include "components/user_manager/user_type.h" | 34 #include "components/user_manager/user_type.h" |
| 34 #include "components/wallpaper/wallpaper_layout.h" | 35 #include "components/wallpaper/wallpaper_layout.h" |
| 35 #include "content/public/browser/browser_thread.h" | 36 #include "content/public/browser/browser_thread.h" |
| 36 #include "third_party/skia/include/core/SkColor.h" | 37 #include "third_party/skia/include/core/SkColor.h" |
| 37 #include "ui/gfx/codec/jpeg_codec.h" | 38 #include "ui/gfx/codec/jpeg_codec.h" |
| 38 #include "ui/gfx/geometry/safe_integer_conversions.h" | 39 #include "ui/gfx/geometry/safe_integer_conversions.h" |
| 39 #include "ui/gfx/image/image_skia_operations.h" | 40 #include "ui/gfx/image/image_skia_operations.h" |
| 40 #include "ui/gfx/skia_util.h" | 41 #include "ui/gfx/skia_util.h" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 67 // color. | 68 // color. |
| 68 const SkColor kDefaultWallpaperColor = SK_ColorGRAY; | 69 const SkColor kDefaultWallpaperColor = SK_ColorGRAY; |
| 69 | 70 |
| 70 // The path ids for directories. | 71 // The path ids for directories. |
| 71 int dir_user_data_path_id = -1; // chrome::DIR_USER_DATA | 72 int dir_user_data_path_id = -1; // chrome::DIR_USER_DATA |
| 72 int dir_chromeos_wallpapers_path_id = -1; // chrome::DIR_CHROMEOS_WALLPAPERS | 73 int dir_chromeos_wallpapers_path_id = -1; // chrome::DIR_CHROMEOS_WALLPAPERS |
| 73 int dir_chromeos_custom_wallpapers_path_id = | 74 int dir_chromeos_custom_wallpapers_path_id = |
| 74 -1; // chrome::DIR_CHROMEOS_CUSTOM_WALLPAPERS | 75 -1; // chrome::DIR_CHROMEOS_CUSTOM_WALLPAPERS |
| 75 | 76 |
| 76 bool MoveCustomWallpaperDirectory(const char* sub_dir, | 77 bool MoveCustomWallpaperDirectory(const char* sub_dir, |
| 77 const std::string& user_id, | 78 const user_manager::UserID& user_id, |
| 78 const std::string& user_id_hash) { | 79 const std::string& user_id_hash) { |
| 79 base::FilePath base_path = | 80 base::FilePath base_path = |
| 80 WallpaperManagerBase::GetCustomWallpaperDir(sub_dir); | 81 WallpaperManagerBase::GetCustomWallpaperDir(sub_dir); |
| 81 base::FilePath to_path = base_path.Append(user_id_hash); | 82 base::FilePath to_path = base_path.Append(user_id_hash); |
| 82 base::FilePath from_path = base_path.Append(user_id); | 83 base::FilePath from_path = base_path.Append(user_id.GetUserEmail()); |
| 83 if (base::PathExists(from_path)) | 84 if (base::PathExists(from_path)) |
| 84 return base::Move(from_path, to_path); | 85 return base::Move(from_path, to_path); |
| 85 return false; | 86 return false; |
| 86 } | 87 } |
| 87 | 88 |
| 88 // Deletes a list of wallpaper files in |file_list|. | 89 // Deletes a list of wallpaper files in |file_list|. |
| 89 void DeleteWallpaperInList(const std::vector<base::FilePath>& file_list) { | 90 void DeleteWallpaperInList(const std::vector<base::FilePath>& file_list) { |
| 90 for (std::vector<base::FilePath>::const_iterator it = file_list.begin(); | 91 for (std::vector<base::FilePath>::const_iterator it = file_list.begin(); |
| 91 it != file_list.end(); ++it) { | 92 it != file_list.end(); ++it) { |
| 92 base::FilePath path = *it; | 93 base::FilePath path = *it; |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 | 252 |
| 252 // TestApi. For testing purpose | 253 // TestApi. For testing purpose |
| 253 WallpaperManagerBase::TestApi::TestApi(WallpaperManagerBase* wallpaper_manager) | 254 WallpaperManagerBase::TestApi::TestApi(WallpaperManagerBase* wallpaper_manager) |
| 254 : wallpaper_manager_(wallpaper_manager) { | 255 : wallpaper_manager_(wallpaper_manager) { |
| 255 } | 256 } |
| 256 | 257 |
| 257 WallpaperManagerBase::TestApi::~TestApi() { | 258 WallpaperManagerBase::TestApi::~TestApi() { |
| 258 } | 259 } |
| 259 | 260 |
| 260 bool WallpaperManagerBase::TestApi::GetWallpaperFromCache( | 261 bool WallpaperManagerBase::TestApi::GetWallpaperFromCache( |
| 261 const std::string& user_id, | 262 const user_manager::UserID& user_id, |
| 262 gfx::ImageSkia* image) { | 263 gfx::ImageSkia* image) { |
| 263 return wallpaper_manager_->GetWallpaperFromCache(user_id, image); | 264 return wallpaper_manager_->GetWallpaperFromCache(user_id, image); |
| 264 } | 265 } |
| 265 | 266 |
| 266 bool WallpaperManagerBase::TestApi::GetPathFromCache( | 267 bool WallpaperManagerBase::TestApi::GetPathFromCache( |
| 267 const std::string& user_id, | 268 const user_manager::UserID& user_id, |
| 268 base::FilePath* path) { | 269 base::FilePath* path) { |
| 269 return wallpaper_manager_->GetPathFromCache(user_id, path); | 270 return wallpaper_manager_->GetPathFromCache(user_id, path); |
| 270 } | 271 } |
| 271 | 272 |
| 272 void WallpaperManagerBase::TestApi::SetWallpaperCache( | 273 void WallpaperManagerBase::TestApi::SetWallpaperCache( |
| 273 const std::string& user_id, | 274 const user_manager::UserID& user_id, |
| 274 const base::FilePath& path, | 275 const base::FilePath& path, |
| 275 const gfx::ImageSkia& image) { | 276 const gfx::ImageSkia& image) { |
| 276 DCHECK(!image.isNull()); | 277 DCHECK(!image.isNull()); |
| 277 wallpaper_manager_->wallpaper_cache_[user_id] = | 278 wallpaper_manager_->wallpaper_cache_[user_id] = |
| 278 CustomWallpaperElement(path, image); | 279 CustomWallpaperElement(path, image); |
| 279 } | 280 } |
| 280 | 281 |
| 281 void WallpaperManagerBase::TestApi::ClearDisposableWallpaperCache() { | 282 void WallpaperManagerBase::TestApi::ClearDisposableWallpaperCache() { |
| 282 wallpaper_manager_->ClearDisposableWallpaperCache(); | 283 wallpaper_manager_->ClearDisposableWallpaperCache(); |
| 283 } | 284 } |
| (...skipping 27 matching lines...) Expand all Loading... |
| 311 | 312 |
| 312 void WallpaperManagerBase::EnsureLoggedInUserWallpaperLoaded() { | 313 void WallpaperManagerBase::EnsureLoggedInUserWallpaperLoaded() { |
| 313 WallpaperInfo info; | 314 WallpaperInfo info; |
| 314 if (GetLoggedInUserWallpaperInfo(&info)) { | 315 if (GetLoggedInUserWallpaperInfo(&info)) { |
| 315 UMA_HISTOGRAM_ENUMERATION("Ash.Wallpaper.Type", info.type, | 316 UMA_HISTOGRAM_ENUMERATION("Ash.Wallpaper.Type", info.type, |
| 316 user_manager::User::WALLPAPER_TYPE_COUNT); | 317 user_manager::User::WALLPAPER_TYPE_COUNT); |
| 317 if (info == current_user_wallpaper_info_) | 318 if (info == current_user_wallpaper_info_) |
| 318 return; | 319 return; |
| 319 } | 320 } |
| 320 SetUserWallpaperNow( | 321 SetUserWallpaperNow( |
| 321 user_manager::UserManager::Get()->GetLoggedInUser()->email()); | 322 user_manager::UserManager::Get()->GetLoggedInUser()->GetUserID()); |
| 322 } | 323 } |
| 323 | 324 |
| 324 void WallpaperManagerBase::ClearDisposableWallpaperCache() { | 325 void WallpaperManagerBase::ClearDisposableWallpaperCache() { |
| 325 // Cancel callback for previous cache requests. | 326 // Cancel callback for previous cache requests. |
| 326 weak_factory_.InvalidateWeakPtrs(); | 327 weak_factory_.InvalidateWeakPtrs(); |
| 327 // Keep the wallpaper of logged in users in cache at multi-profile mode. | 328 // Keep the wallpaper of logged in users in cache at multi-profile mode. |
| 328 std::set<std::string> logged_in_users_names; | 329 std::set<user_manager::UserID> logged_in_users_ids; |
| 329 const user_manager::UserList& logged_users = | 330 const user_manager::UserList& logged_users = |
| 330 user_manager::UserManager::Get()->GetLoggedInUsers(); | 331 user_manager::UserManager::Get()->GetLoggedInUsers(); |
| 331 for (user_manager::UserList::const_iterator it = logged_users.begin(); | 332 for (user_manager::UserList::const_iterator it = logged_users.begin(); |
| 332 it != logged_users.end(); ++it) { | 333 it != logged_users.end(); ++it) { |
| 333 logged_in_users_names.insert((*it)->email()); | 334 logged_in_users_ids.insert((*it)->GetUserID()); |
| 334 } | 335 } |
| 335 | 336 |
| 336 CustomWallpaperMap logged_in_users_cache; | 337 CustomWallpaperMap logged_in_users_cache; |
| 337 for (CustomWallpaperMap::iterator it = wallpaper_cache_.begin(); | 338 for (CustomWallpaperMap::iterator it = wallpaper_cache_.begin(); |
| 338 it != wallpaper_cache_.end(); ++it) { | 339 it != wallpaper_cache_.end(); ++it) { |
| 339 if (logged_in_users_names.find(it->first) != logged_in_users_names.end()) { | 340 if (logged_in_users_ids.find(it->first) != logged_in_users_ids.end()) { |
| 340 logged_in_users_cache.insert(*it); | 341 logged_in_users_cache.insert(*it); |
| 341 } | 342 } |
| 342 } | 343 } |
| 343 wallpaper_cache_ = logged_in_users_cache; | 344 wallpaper_cache_ = logged_in_users_cache; |
| 344 } | 345 } |
| 345 | 346 |
| 346 bool WallpaperManagerBase::GetLoggedInUserWallpaperInfo(WallpaperInfo* info) { | 347 bool WallpaperManagerBase::GetLoggedInUserWallpaperInfo(WallpaperInfo* info) { |
| 347 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 348 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 348 | 349 |
| 349 if (user_manager::UserManager::Get()->IsLoggedInAsStub()) { | 350 if (user_manager::UserManager::Get()->IsLoggedInAsStub()) { |
| 350 info->location = current_user_wallpaper_info_.location = ""; | 351 info->location = current_user_wallpaper_info_.location = ""; |
| 351 info->layout = current_user_wallpaper_info_.layout = | 352 info->layout = current_user_wallpaper_info_.layout = |
| 352 WALLPAPER_LAYOUT_CENTER_CROPPED; | 353 WALLPAPER_LAYOUT_CENTER_CROPPED; |
| 353 info->type = current_user_wallpaper_info_.type = | 354 info->type = current_user_wallpaper_info_.type = |
| 354 user_manager::User::DEFAULT; | 355 user_manager::User::DEFAULT; |
| 355 info->date = current_user_wallpaper_info_.date = | 356 info->date = current_user_wallpaper_info_.date = |
| 356 base::Time::Now().LocalMidnight(); | 357 base::Time::Now().LocalMidnight(); |
| 357 return true; | 358 return true; |
| 358 } | 359 } |
| 359 | 360 |
| 360 return GetUserWallpaperInfo( | 361 return GetUserWallpaperInfo( |
| 361 user_manager::UserManager::Get()->GetLoggedInUser()->email(), info); | 362 user_manager::UserManager::Get()->GetLoggedInUser()->GetUserID(), info); |
| 362 } | 363 } |
| 363 | 364 |
| 364 // static | 365 // static |
| 365 bool WallpaperManagerBase::ResizeImage( | 366 bool WallpaperManagerBase::ResizeImage( |
| 366 const gfx::ImageSkia& image, | 367 const gfx::ImageSkia& image, |
| 367 WallpaperLayout layout, | 368 WallpaperLayout layout, |
| 368 int preferred_width, | 369 int preferred_width, |
| 369 int preferred_height, | 370 int preferred_height, |
| 370 scoped_refptr<base::RefCountedBytes>* output, | 371 scoped_refptr<base::RefCountedBytes>* output, |
| 371 gfx::ImageSkia* output_skia) { | 372 gfx::ImageSkia* output_skia) { |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 scoped_refptr<base::RefCountedBytes> data; | 437 scoped_refptr<base::RefCountedBytes> data; |
| 437 if (ResizeImage(image, layout, preferred_width, preferred_height, &data, | 438 if (ResizeImage(image, layout, preferred_width, preferred_height, &data, |
| 438 output_skia)) { | 439 output_skia)) { |
| 439 return SaveWallpaperInternal( | 440 return SaveWallpaperInternal( |
| 440 path, reinterpret_cast<const char*>(data->front()), data->size()); | 441 path, reinterpret_cast<const char*>(data->front()), data->size()); |
| 441 } | 442 } |
| 442 return false; | 443 return false; |
| 443 } | 444 } |
| 444 | 445 |
| 445 bool WallpaperManagerBase::IsPolicyControlled( | 446 bool WallpaperManagerBase::IsPolicyControlled( |
| 446 const std::string& user_id) const { | 447 const user_manager::UserID& user_id) const { |
| 447 WallpaperInfo info; | 448 WallpaperInfo info; |
| 448 if (!GetUserWallpaperInfo(user_id, &info)) | 449 if (!GetUserWallpaperInfo(user_id, &info)) |
| 449 return false; | 450 return false; |
| 450 return info.type == user_manager::User::POLICY; | 451 return info.type == user_manager::User::POLICY; |
| 451 } | 452 } |
| 452 | 453 |
| 453 void WallpaperManagerBase::OnPolicySet(const std::string& policy, | 454 void WallpaperManagerBase::OnPolicySet(const std::string& policy, |
| 454 const std::string& user_id) { | 455 const user_manager::UserID& user_id) { |
| 455 WallpaperInfo info; | 456 WallpaperInfo info; |
| 456 GetUserWallpaperInfo(user_id, &info); | 457 GetUserWallpaperInfo(user_id, &info); |
| 457 info.type = user_manager::User::POLICY; | 458 info.type = user_manager::User::POLICY; |
| 458 SetUserWallpaperInfo(user_id, info, true /* is_persistent */); | 459 SetUserWallpaperInfo(user_id, info, true /* is_persistent */); |
| 459 } | 460 } |
| 460 | 461 |
| 461 void WallpaperManagerBase::OnPolicyCleared(const std::string& policy, | 462 void WallpaperManagerBase::OnPolicyCleared(const std::string& policy, |
| 462 const std::string& user_id) { | 463 const user_manager::UserID& user_id)
{ |
| 463 WallpaperInfo info; | 464 WallpaperInfo info; |
| 464 GetUserWallpaperInfo(user_id, &info); | 465 GetUserWallpaperInfo(user_id, &info); |
| 465 info.type = user_manager::User::DEFAULT; | 466 info.type = user_manager::User::DEFAULT; |
| 466 SetUserWallpaperInfo(user_id, info, true /* is_persistent */); | 467 SetUserWallpaperInfo(user_id, info, true /* is_persistent */); |
| 467 SetDefaultWallpaperNow(user_id); | 468 SetDefaultWallpaperNow(user_id); |
| 468 } | 469 } |
| 469 | 470 |
| 470 // static | 471 // static |
| 471 base::FilePath WallpaperManagerBase::GetCustomWallpaperPath( | 472 base::FilePath WallpaperManagerBase::GetCustomWallpaperPath( |
| 472 const char* sub_dir, | 473 const char* sub_dir, |
| 473 const std::string& user_id_hash, | 474 const std::string& user_id_hash, |
| 474 const std::string& file) { | 475 const std::string& file) { |
| 475 base::FilePath custom_wallpaper_path = GetCustomWallpaperDir(sub_dir); | 476 base::FilePath custom_wallpaper_path = GetCustomWallpaperDir(sub_dir); |
| 476 return custom_wallpaper_path.Append(user_id_hash).Append(file); | 477 return custom_wallpaper_path.Append(user_id_hash).Append(file); |
| 477 } | 478 } |
| 478 | 479 |
| 479 WallpaperManagerBase::WallpaperManagerBase() | 480 WallpaperManagerBase::WallpaperManagerBase() |
| 480 : loaded_wallpapers_for_test_(0), | 481 : loaded_wallpapers_for_test_(0), |
| 481 command_line_for_testing_(NULL), | 482 command_line_for_testing_(NULL), |
| 483 last_selected_user_(std::string(), std::string()), |
| 482 should_cache_wallpaper_(false), | 484 should_cache_wallpaper_(false), |
| 483 weak_factory_(this) { | 485 weak_factory_(this) { |
| 484 SetDefaultWallpaperPathsFromCommandLine( | 486 SetDefaultWallpaperPathsFromCommandLine( |
| 485 base::CommandLine::ForCurrentProcess()); | 487 base::CommandLine::ForCurrentProcess()); |
| 486 sequence_token_ = BrowserThread::GetBlockingPool()->GetNamedSequenceToken( | 488 sequence_token_ = BrowserThread::GetBlockingPool()->GetNamedSequenceToken( |
| 487 kWallpaperSequenceTokenName); | 489 kWallpaperSequenceTokenName); |
| 488 task_runner_ = | 490 task_runner_ = |
| 489 BrowserThread::GetBlockingPool() | 491 BrowserThread::GetBlockingPool() |
| 490 ->GetSequencedTaskRunnerWithShutdownBehavior( | 492 ->GetSequencedTaskRunnerWithShutdownBehavior( |
| 491 sequence_token_, base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); | 493 sequence_token_, base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); |
| 492 } | 494 } |
| 493 | 495 |
| 494 WallpaperManagerBase::~WallpaperManagerBase() { | 496 WallpaperManagerBase::~WallpaperManagerBase() { |
| 495 // TODO(bshe): Lifetime of WallpaperManagerBase needs more consideration. | 497 // TODO(bshe): Lifetime of WallpaperManagerBase needs more consideration. |
| 496 // http://crbug.com/171694 | 498 // http://crbug.com/171694 |
| 497 weak_factory_.InvalidateWeakPtrs(); | 499 weak_factory_.InvalidateWeakPtrs(); |
| 498 } | 500 } |
| 499 | 501 |
| 500 void WallpaperManagerBase::SetPolicyControlledWallpaper( | 502 void WallpaperManagerBase::SetPolicyControlledWallpaper( |
| 501 const std::string& user_id, | 503 const user_manager::UserID& user_id, |
| 502 const user_manager::UserImage& user_image) { | 504 const user_manager::UserImage& user_image) { |
| 503 const user_manager::User* user = | 505 const user_manager::User* user = |
| 504 user_manager::UserManager::Get()->FindUser(user_id); | 506 user_manager::UserManager::Get()->FindUser(user_id); |
| 505 if (!user) { | 507 if (!user) { |
| 506 NOTREACHED() << "Unknown user."; | 508 NOTREACHED() << "Unknown user."; |
| 507 return; | 509 return; |
| 508 } | 510 } |
| 509 | 511 |
| 510 if (user->username_hash().empty()) { | 512 if (user->username_hash().empty()) { |
| 511 cryptohome::AsyncMethodCaller::GetInstance()->AsyncGetSanitizedUsername( | 513 cryptohome::AsyncMethodCaller::GetInstance()->AsyncGetSanitizedUsername( |
| 512 user_id, | 514 user_id, |
| 513 base::Bind(&WallpaperManagerBase::SetCustomWallpaperOnSanitizedUsername, | 515 base::Bind(&WallpaperManagerBase::SetCustomWallpaperOnSanitizedUsername, |
| 514 weak_factory_.GetWeakPtr(), user_id, user_image.image(), | 516 weak_factory_.GetWeakPtr(), user_id, user_image.image(), |
| 515 true /* update wallpaper */)); | 517 true /* update wallpaper */)); |
| 516 } else { | 518 } else { |
| 517 SetCustomWallpaper(user_id, user->username_hash(), "policy-controlled.jpeg", | 519 SetCustomWallpaper(user_id, user->username_hash(), "policy-controlled.jpeg", |
| 518 WALLPAPER_LAYOUT_CENTER_CROPPED, | 520 WALLPAPER_LAYOUT_CENTER_CROPPED, |
| 519 user_manager::User::POLICY, user_image.image(), | 521 user_manager::User::POLICY, user_image.image(), |
| 520 true /* update wallpaper */); | 522 true /* update wallpaper */); |
| 521 } | 523 } |
| 522 } | 524 } |
| 523 | 525 |
| 524 void WallpaperManagerBase::SetCustomWallpaperOnSanitizedUsername( | 526 void WallpaperManagerBase::SetCustomWallpaperOnSanitizedUsername( |
| 525 const std::string& user_id, | 527 const user_manager::UserID& user_id, |
| 526 const gfx::ImageSkia& image, | 528 const gfx::ImageSkia& image, |
| 527 bool update_wallpaper, | 529 bool update_wallpaper, |
| 528 bool cryptohome_success, | 530 bool cryptohome_success, |
| 529 const std::string& user_id_hash) { | 531 const std::string& user_id_hash) { |
| 530 if (!cryptohome_success) | 532 if (!cryptohome_success) |
| 531 return; | 533 return; |
| 532 SetCustomWallpaper(user_id, user_id_hash, "policy-controlled.jpeg", | 534 SetCustomWallpaper(user_id, user_id_hash, "policy-controlled.jpeg", |
| 533 WALLPAPER_LAYOUT_CENTER_CROPPED, | 535 WALLPAPER_LAYOUT_CENTER_CROPPED, |
| 534 user_manager::User::POLICY, image, update_wallpaper); | 536 user_manager::User::POLICY, image, update_wallpaper); |
| 535 } | 537 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 564 ResizeAndSaveWallpaper(*image, small_wallpaper_path, layout, | 566 ResizeAndSaveWallpaper(*image, small_wallpaper_path, layout, |
| 565 kSmallWallpaperMaxWidth, kSmallWallpaperMaxHeight, | 567 kSmallWallpaperMaxWidth, kSmallWallpaperMaxHeight, |
| 566 NULL); | 568 NULL); |
| 567 ResizeAndSaveWallpaper(*image, large_wallpaper_path, layout, | 569 ResizeAndSaveWallpaper(*image, large_wallpaper_path, layout, |
| 568 kLargeWallpaperMaxWidth, kLargeWallpaperMaxHeight, | 570 kLargeWallpaperMaxWidth, kLargeWallpaperMaxHeight, |
| 569 NULL); | 571 NULL); |
| 570 } | 572 } |
| 571 | 573 |
| 572 // static | 574 // static |
| 573 void WallpaperManagerBase::MoveCustomWallpapersOnWorker( | 575 void WallpaperManagerBase::MoveCustomWallpapersOnWorker( |
| 574 const std::string& user_id, | 576 const user_manager::UserID& user_id, |
| 575 const std::string& user_id_hash, | 577 const std::string& user_id_hash, |
| 576 base::WeakPtr<WallpaperManagerBase> weak_ptr) { | 578 base::WeakPtr<WallpaperManagerBase> weak_ptr) { |
| 577 if (MoveCustomWallpaperDirectory(kOriginalWallpaperSubDir, user_id, | 579 if (MoveCustomWallpaperDirectory(kOriginalWallpaperSubDir, user_id, |
| 578 user_id_hash)) { | 580 user_id_hash)) { |
| 579 // Consider success if the original wallpaper is moved to the new directory. | 581 // Consider success if the original wallpaper is moved to the new directory. |
| 580 // Original wallpaper is the fallback if the correct resolution wallpaper | 582 // Original wallpaper is the fallback if the correct resolution wallpaper |
| 581 // can not be found. | 583 // can not be found. |
| 582 BrowserThread::PostTask( | 584 BrowserThread::PostTask( |
| 583 BrowserThread::UI, FROM_HERE, | 585 BrowserThread::UI, FROM_HERE, |
| 584 base::Bind(&WallpaperManagerBase::MoveCustomWallpapersSuccess, weak_ptr, | 586 base::Bind(&WallpaperManagerBase::MoveCustomWallpapersSuccess, weak_ptr, |
| 585 user_id, user_id_hash)); | 587 user_id, user_id_hash)); |
| 586 } | 588 } |
| 587 MoveCustomWallpaperDirectory(kLargeWallpaperSubDir, user_id, user_id_hash); | 589 MoveCustomWallpaperDirectory(kLargeWallpaperSubDir, user_id, user_id_hash); |
| 588 MoveCustomWallpaperDirectory(kSmallWallpaperSubDir, user_id, user_id_hash); | 590 MoveCustomWallpaperDirectory(kSmallWallpaperSubDir, user_id, user_id_hash); |
| 589 MoveCustomWallpaperDirectory(kThumbnailWallpaperSubDir, user_id, | 591 MoveCustomWallpaperDirectory(kThumbnailWallpaperSubDir, user_id, |
| 590 user_id_hash); | 592 user_id_hash); |
| 591 } | 593 } |
| 592 | 594 |
| 593 // static | 595 // static |
| 594 void WallpaperManagerBase::GetCustomWallpaperInternal( | 596 void WallpaperManagerBase::GetCustomWallpaperInternal( |
| 595 const std::string& user_id, | 597 const user_manager::UserID& user_id, |
| 596 const WallpaperInfo& info, | 598 const WallpaperInfo& info, |
| 597 const base::FilePath& wallpaper_path, | 599 const base::FilePath& wallpaper_path, |
| 598 bool update_wallpaper, | 600 bool update_wallpaper, |
| 599 MovableOnDestroyCallbackHolder on_finish, | 601 MovableOnDestroyCallbackHolder on_finish, |
| 600 base::WeakPtr<WallpaperManagerBase> weak_ptr) { | 602 base::WeakPtr<WallpaperManagerBase> weak_ptr) { |
| 601 base::FilePath valid_path = wallpaper_path; | 603 base::FilePath valid_path = wallpaper_path; |
| 602 if (!base::PathExists(wallpaper_path)) { | 604 if (!base::PathExists(wallpaper_path)) { |
| 603 // Falls back on original file if the correct resolution file does not | 605 // Falls back on original file if the correct resolution file does not |
| 604 // exist. This may happen when the original custom wallpaper is small or | 606 // exist. This may happen when the original custom wallpaper is small or |
| 605 // browser shutdown before resized wallpaper saved. | 607 // browser shutdown before resized wallpaper saved. |
| 606 valid_path = GetCustomWallpaperDir(kOriginalWallpaperSubDir); | 608 valid_path = GetCustomWallpaperDir(kOriginalWallpaperSubDir); |
| 607 valid_path = valid_path.Append(info.location); | 609 valid_path = valid_path.Append(info.location); |
| 608 } | 610 } |
| 609 | 611 |
| 610 if (!base::PathExists(valid_path)) { | 612 if (!base::PathExists(valid_path)) { |
| 611 // Falls back to custom wallpaper that uses email as part of its file path. | 613 // Falls back to custom wallpaper that uses email as part of its file path. |
| 612 // Note that email is used instead of user_id_hash here. | 614 // Note that email is used instead of user_id_hash here. |
| 613 valid_path = GetCustomWallpaperPath(kOriginalWallpaperSubDir, user_id, | 615 valid_path = GetCustomWallpaperPath(kOriginalWallpaperSubDir, user_id.GetUse
rEmail() /* FIXME! */, |
| 614 info.location); | 616 info.location); |
| 615 } | 617 } |
| 616 | 618 |
| 617 if (!base::PathExists(valid_path)) { | 619 if (!base::PathExists(valid_path)) { |
| 618 LOG(ERROR) << "Failed to load previously selected custom wallpaper. " | 620 LOG(ERROR) << "Failed to load previously selected custom wallpaper. " |
| 619 << "Fallback to default wallpaper"; | 621 << "Fallback to default wallpaper"; |
| 620 BrowserThread::PostTask( | 622 BrowserThread::PostTask( |
| 621 BrowserThread::UI, FROM_HERE, | 623 BrowserThread::UI, FROM_HERE, |
| 622 base::Bind(&WallpaperManagerBase::DoSetDefaultWallpaper, weak_ptr, | 624 base::Bind(&WallpaperManagerBase::DoSetDefaultWallpaper, weak_ptr, |
| 623 user_id, base::Passed(on_finish.Pass()))); | 625 user_id, base::Passed(on_finish.Pass()))); |
| 624 } else { | 626 } else { |
| 625 BrowserThread::PostTask( | 627 BrowserThread::PostTask( |
| 626 BrowserThread::UI, FROM_HERE, | 628 BrowserThread::UI, FROM_HERE, |
| 627 base::Bind(&WallpaperManagerBase::StartLoad, weak_ptr, user_id, info, | 629 base::Bind(&WallpaperManagerBase::StartLoad, weak_ptr, user_id, info, |
| 628 update_wallpaper, valid_path, | 630 update_wallpaper, valid_path, |
| 629 base::Passed(on_finish.Pass()))); | 631 base::Passed(on_finish.Pass()))); |
| 630 } | 632 } |
| 631 } | 633 } |
| 632 | 634 |
| 633 void WallpaperManagerBase::InitInitialUserWallpaper(const std::string& user_id, | 635 void WallpaperManagerBase::InitInitialUserWallpaper(const user_manager::UserID&
user_id, |
| 634 bool is_persistent) { | 636 bool is_persistent) { |
| 635 current_user_wallpaper_info_.location = ""; | 637 current_user_wallpaper_info_.location = ""; |
| 636 current_user_wallpaper_info_.layout = WALLPAPER_LAYOUT_CENTER_CROPPED; | 638 current_user_wallpaper_info_.layout = WALLPAPER_LAYOUT_CENTER_CROPPED; |
| 637 current_user_wallpaper_info_.type = user_manager::User::DEFAULT; | 639 current_user_wallpaper_info_.type = user_manager::User::DEFAULT; |
| 638 current_user_wallpaper_info_.date = base::Time::Now().LocalMidnight(); | 640 current_user_wallpaper_info_.date = base::Time::Now().LocalMidnight(); |
| 639 | 641 |
| 640 WallpaperInfo info = current_user_wallpaper_info_; | 642 WallpaperInfo info = current_user_wallpaper_info_; |
| 641 SetUserWallpaperInfo(user_id, info, is_persistent); | 643 SetUserWallpaperInfo(user_id, info, is_persistent); |
| 642 } | 644 } |
| 643 | 645 |
| 644 void WallpaperManagerBase::SetUserWallpaperDelayed(const std::string& user_id) { | 646 void WallpaperManagerBase::SetUserWallpaperDelayed(const user_manager::UserID& u
ser_id) { |
| 645 ScheduleSetUserWallpaper(user_id, true); | 647 ScheduleSetUserWallpaper(user_id, true); |
| 646 } | 648 } |
| 647 | 649 |
| 648 void WallpaperManagerBase::SetUserWallpaperNow(const std::string& user_id) { | 650 void WallpaperManagerBase::SetUserWallpaperNow(const user_manager::UserID& user_
id) { |
| 649 ScheduleSetUserWallpaper(user_id, false); | 651 ScheduleSetUserWallpaper(user_id, false); |
| 650 } | 652 } |
| 651 | 653 |
| 652 void WallpaperManagerBase::UpdateWallpaper(bool clear_cache) { | 654 void WallpaperManagerBase::UpdateWallpaper(bool clear_cache) { |
| 653 FOR_EACH_OBSERVER(Observer, observers_, OnUpdateWallpaperForTesting()); | 655 FOR_EACH_OBSERVER(Observer, observers_, OnUpdateWallpaperForTesting()); |
| 654 if (clear_cache) | 656 if (clear_cache) |
| 655 wallpaper_cache_.clear(); | 657 wallpaper_cache_.clear(); |
| 656 // For GAIA login flow, the last_selected_user_ may not be set before user | 658 // For GAIA login flow, the last_selected_user_ may not be set before user |
| 657 // login. If UpdateWallpaper is called at GAIA login screen, no wallpaper will | 659 // login. If UpdateWallpaper is called at GAIA login screen, no wallpaper will |
| 658 // be set. It could result a black screen on external monitors. | 660 // be set. It could result a black screen on external monitors. |
| 659 // See http://crbug.com/265689 for detail. | 661 // See http://crbug.com/265689 for detail. |
| 660 if (last_selected_user_.empty()) { | 662 if (last_selected_user_.empty()) { |
| 661 SetDefaultWallpaperNow(chromeos::login::kSignInUser); | 663 SetDefaultWallpaperNow(chromeos::login::GetSignInUserID()); |
| 662 return; | 664 return; |
| 663 } | 665 } |
| 664 SetUserWallpaperNow(last_selected_user_); | 666 SetUserWallpaperNow(last_selected_user_); |
| 665 } | 667 } |
| 666 | 668 |
| 667 void WallpaperManagerBase::AddObserver( | 669 void WallpaperManagerBase::AddObserver( |
| 668 WallpaperManagerBase::Observer* observer) { | 670 WallpaperManagerBase::Observer* observer) { |
| 669 observers_.AddObserver(observer); | 671 observers_.AddObserver(observer); |
| 670 } | 672 } |
| 671 | 673 |
| 672 void WallpaperManagerBase::RemoveObserver( | 674 void WallpaperManagerBase::RemoveObserver( |
| 673 WallpaperManagerBase::Observer* observer) { | 675 WallpaperManagerBase::Observer* observer) { |
| 674 observers_.RemoveObserver(observer); | 676 observers_.RemoveObserver(observer); |
| 675 } | 677 } |
| 676 | 678 |
| 677 void WallpaperManagerBase::NotifyAnimationFinished() { | 679 void WallpaperManagerBase::NotifyAnimationFinished() { |
| 678 FOR_EACH_OBSERVER(Observer, observers_, | 680 FOR_EACH_OBSERVER(Observer, observers_, |
| 679 OnWallpaperAnimationFinished(last_selected_user_)); | 681 OnWallpaperAnimationFinished(last_selected_user_)); |
| 680 } | 682 } |
| 681 | 683 |
| 682 // WallpaperManager, protected: ----------------------------------------------- | 684 // WallpaperManager, protected: ----------------------------------------------- |
| 683 | 685 |
| 684 bool WallpaperManagerBase::GetWallpaperFromCache(const std::string& user_id, | 686 bool WallpaperManagerBase::GetWallpaperFromCache(const user_manager::UserID& use
r_id, |
| 685 gfx::ImageSkia* image) { | 687 gfx::ImageSkia* image) { |
| 686 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 688 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 687 CustomWallpaperMap::const_iterator it = wallpaper_cache_.find(user_id); | 689 CustomWallpaperMap::const_iterator it = wallpaper_cache_.find(user_id); |
| 688 if (it != wallpaper_cache_.end() && !(*it).second.second.isNull()) { | 690 if (it != wallpaper_cache_.end() && !(*it).second.second.isNull()) { |
| 689 *image = (*it).second.second; | 691 *image = (*it).second.second; |
| 690 return true; | 692 return true; |
| 691 } | 693 } |
| 692 return false; | 694 return false; |
| 693 } | 695 } |
| 694 | 696 |
| 695 bool WallpaperManagerBase::GetPathFromCache(const std::string& user_id, | 697 bool WallpaperManagerBase::GetPathFromCache(const user_manager::UserID& user_id, |
| 696 base::FilePath* path) { | 698 base::FilePath* path) { |
| 697 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 699 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 698 CustomWallpaperMap::const_iterator it = wallpaper_cache_.find(user_id); | 700 CustomWallpaperMap::const_iterator it = wallpaper_cache_.find(user_id); |
| 699 if (it != wallpaper_cache_.end()) { | 701 if (it != wallpaper_cache_.end()) { |
| 700 *path = (*it).second.first; | 702 *path = (*it).second.first; |
| 701 return true; | 703 return true; |
| 702 } | 704 } |
| 703 return false; | 705 return false; |
| 704 } | 706 } |
| 705 | 707 |
| 706 int WallpaperManagerBase::loaded_wallpapers_for_test() const { | 708 int WallpaperManagerBase::loaded_wallpapers_for_test() const { |
| 707 return loaded_wallpapers_for_test_; | 709 return loaded_wallpapers_for_test_; |
| 708 } | 710 } |
| 709 | 711 |
| 710 void WallpaperManagerBase::CacheUsersWallpapers() { | 712 void WallpaperManagerBase::CacheUsersWallpapers() { |
| 711 // TODO(dpolukhin): crbug.com/408734. | 713 // TODO(dpolukhin): crbug.com/408734. |
| 712 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 714 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 713 user_manager::UserList users = user_manager::UserManager::Get()->GetUsers(); | 715 user_manager::UserList users = user_manager::UserManager::Get()->GetUsers(); |
| 714 | 716 |
| 715 if (!users.empty()) { | 717 if (!users.empty()) { |
| 716 user_manager::UserList::const_iterator it = users.begin(); | 718 user_manager::UserList::const_iterator it = users.begin(); |
| 717 // Skip the wallpaper of first user in the list. It should have been cached. | 719 // Skip the wallpaper of first user in the list. It should have been cached. |
| 718 it++; | 720 it++; |
| 719 for (int cached = 0; it != users.end() && cached < kMaxWallpapersToCache; | 721 for (int cached = 0; it != users.end() && cached < kMaxWallpapersToCache; |
| 720 ++it, ++cached) { | 722 ++it, ++cached) { |
| 721 std::string user_id = (*it)->email(); | 723 CacheUserWallpaper((*it)->GetUserID()); |
| 722 CacheUserWallpaper(user_id); | |
| 723 } | 724 } |
| 724 } | 725 } |
| 725 } | 726 } |
| 726 | 727 |
| 727 void WallpaperManagerBase::CacheUserWallpaper(const std::string& user_id) { | 728 void WallpaperManagerBase::CacheUserWallpaper(const user_manager::UserID& user_i
d) { |
| 728 CustomWallpaperMap::iterator it = wallpaper_cache_.find(user_id); | 729 CustomWallpaperMap::iterator it = wallpaper_cache_.find(user_id); |
| 729 if (it != wallpaper_cache_.end() && !it->second.second.isNull()) | 730 if (it != wallpaper_cache_.end() && !it->second.second.isNull()) |
| 730 return; | 731 return; |
| 731 WallpaperInfo info; | 732 WallpaperInfo info; |
| 732 if (GetUserWallpaperInfo(user_id, &info)) { | 733 if (GetUserWallpaperInfo(user_id, &info)) { |
| 733 if (info.location.empty()) | 734 if (info.location.empty()) |
| 734 return; | 735 return; |
| 735 | 736 |
| 736 base::FilePath wallpaper_dir; | 737 base::FilePath wallpaper_dir; |
| 737 base::FilePath wallpaper_path; | 738 base::FilePath wallpaper_path; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 750 base::Passed(MovableOnDestroyCallbackHolder()), | 751 base::Passed(MovableOnDestroyCallbackHolder()), |
| 751 weak_factory_.GetWeakPtr())); | 752 weak_factory_.GetWeakPtr())); |
| 752 return; | 753 return; |
| 753 } | 754 } |
| 754 LoadWallpaper(user_id, info, false /* do not update wallpaper */, | 755 LoadWallpaper(user_id, info, false /* do not update wallpaper */, |
| 755 MovableOnDestroyCallbackHolder().Pass()); | 756 MovableOnDestroyCallbackHolder().Pass()); |
| 756 } | 757 } |
| 757 } | 758 } |
| 758 | 759 |
| 759 void WallpaperManagerBase::DeleteUserWallpapers( | 760 void WallpaperManagerBase::DeleteUserWallpapers( |
| 760 const std::string& user_id, | 761 const user_manager::UserID& user_id, |
| 761 const std::string& path_to_file) { | 762 const std::string& path_to_file) { |
| 762 std::vector<base::FilePath> file_to_remove; | 763 std::vector<base::FilePath> file_to_remove; |
| 763 // Remove small user wallpaper. | 764 // Remove small user wallpaper. |
| 764 base::FilePath wallpaper_path = GetCustomWallpaperDir(kSmallWallpaperSubDir); | 765 base::FilePath wallpaper_path = GetCustomWallpaperDir(kSmallWallpaperSubDir); |
| 765 // Remove old directory if exists | 766 // Remove old directory if exists |
| 766 file_to_remove.push_back(wallpaper_path.Append(user_id)); | 767 file_to_remove.push_back(wallpaper_path.Append(user_id.GetUserEmail())); |
| 767 wallpaper_path = wallpaper_path.Append(path_to_file).DirName(); | 768 wallpaper_path = wallpaper_path.Append(path_to_file).DirName(); |
| 768 file_to_remove.push_back(wallpaper_path); | 769 file_to_remove.push_back(wallpaper_path); |
| 769 | 770 |
| 770 // Remove large user wallpaper. | 771 // Remove large user wallpaper. |
| 771 wallpaper_path = GetCustomWallpaperDir(kLargeWallpaperSubDir); | 772 wallpaper_path = GetCustomWallpaperDir(kLargeWallpaperSubDir); |
| 772 file_to_remove.push_back(wallpaper_path.Append(user_id)); | 773 file_to_remove.push_back(wallpaper_path.Append(user_id.GetUserEmail())); |
| 773 wallpaper_path = wallpaper_path.Append(path_to_file); | 774 wallpaper_path = wallpaper_path.Append(path_to_file); |
| 774 file_to_remove.push_back(wallpaper_path); | 775 file_to_remove.push_back(wallpaper_path); |
| 775 | 776 |
| 776 // Remove user wallpaper thumbnail. | 777 // Remove user wallpaper thumbnail. |
| 777 wallpaper_path = GetCustomWallpaperDir(kThumbnailWallpaperSubDir); | 778 wallpaper_path = GetCustomWallpaperDir(kThumbnailWallpaperSubDir); |
| 778 file_to_remove.push_back(wallpaper_path.Append(user_id)); | 779 file_to_remove.push_back(wallpaper_path.Append(user_id.GetUserEmail())); |
| 779 wallpaper_path = wallpaper_path.Append(path_to_file); | 780 wallpaper_path = wallpaper_path.Append(path_to_file); |
| 780 file_to_remove.push_back(wallpaper_path); | 781 file_to_remove.push_back(wallpaper_path); |
| 781 | 782 |
| 782 // Remove original user wallpaper. | 783 // Remove original user wallpaper. |
| 783 wallpaper_path = GetCustomWallpaperDir(kOriginalWallpaperSubDir); | 784 wallpaper_path = GetCustomWallpaperDir(kOriginalWallpaperSubDir); |
| 784 file_to_remove.push_back(wallpaper_path.Append(user_id)); | 785 file_to_remove.push_back(wallpaper_path.Append(user_id.GetUserEmail())); |
| 785 wallpaper_path = wallpaper_path.Append(path_to_file); | 786 wallpaper_path = wallpaper_path.Append(path_to_file); |
| 786 file_to_remove.push_back(wallpaper_path); | 787 file_to_remove.push_back(wallpaper_path); |
| 787 | 788 |
| 788 base::WorkerPool::PostTask( | 789 base::WorkerPool::PostTask( |
| 789 FROM_HERE, base::Bind(&DeleteWallpaperInList, file_to_remove), false); | 790 FROM_HERE, base::Bind(&DeleteWallpaperInList, file_to_remove), false); |
| 790 } | 791 } |
| 791 | 792 |
| 792 void WallpaperManagerBase::SetCommandLineForTesting( | 793 void WallpaperManagerBase::SetCommandLineForTesting( |
| 793 base::CommandLine* command_line) { | 794 base::CommandLine* command_line) { |
| 794 command_line_for_testing_ = command_line; | 795 command_line_for_testing_ = command_line; |
| 795 SetDefaultWallpaperPathsFromCommandLine(command_line); | 796 SetDefaultWallpaperPathsFromCommandLine(command_line); |
| 796 } | 797 } |
| 797 | 798 |
| 798 base::CommandLine* WallpaperManagerBase::GetCommandLine() { | 799 base::CommandLine* WallpaperManagerBase::GetCommandLine() { |
| 799 base::CommandLine* command_line = | 800 base::CommandLine* command_line = |
| 800 command_line_for_testing_ ? command_line_for_testing_ | 801 command_line_for_testing_ ? command_line_for_testing_ |
| 801 : base::CommandLine::ForCurrentProcess(); | 802 : base::CommandLine::ForCurrentProcess(); |
| 802 return command_line; | 803 return command_line; |
| 803 } | 804 } |
| 804 | 805 |
| 805 void WallpaperManagerBase::LoadWallpaper( | 806 void WallpaperManagerBase::LoadWallpaper( |
| 806 const std::string& user_id, | 807 const user_manager::UserID& user_id, |
| 807 const WallpaperInfo& info, | 808 const WallpaperInfo& info, |
| 808 bool update_wallpaper, | 809 bool update_wallpaper, |
| 809 MovableOnDestroyCallbackHolder on_finish) { | 810 MovableOnDestroyCallbackHolder on_finish) { |
| 810 base::FilePath wallpaper_dir; | 811 base::FilePath wallpaper_dir; |
| 811 base::FilePath wallpaper_path; | 812 base::FilePath wallpaper_path; |
| 812 | 813 |
| 813 // Do a sanity check that file path information is not empty. | 814 // Do a sanity check that file path information is not empty. |
| 814 if (info.type == user_manager::User::ONLINE || | 815 if (info.type == user_manager::User::ONLINE || |
| 815 info.type == user_manager::User::DEFAULT) { | 816 info.type == user_manager::User::DEFAULT) { |
| 816 if (info.location.empty()) { | 817 if (info.location.empty()) { |
| 817 if (base::SysInfo::IsRunningOnChromeOS()) { | 818 if (base::SysInfo::IsRunningOnChromeOS()) { |
| 818 NOTREACHED() << "User wallpaper info appears to be broken: " << user_id; | 819 NOTREACHED() << "User wallpaper info appears to be broken: " << user_id.
GetUserEmail(); |
| 819 } else { | 820 } else { |
| 820 // Filename might be empty on debug configurations when stub users | 821 // Filename might be empty on debug configurations when stub users |
| 821 // were created directly in Local State (for testing). Ignore such | 822 // were created directly in Local State (for testing). Ignore such |
| 822 // errors i.e. allowsuch type of debug configurations on the desktop. | 823 // errors i.e. allowsuch type of debug configurations on the desktop. |
| 823 LOG(WARNING) << "User wallpaper info is empty: " << user_id; | 824 LOG(WARNING) << "User wallpaper info is empty: " << user_id.GetUserEmail
(); |
| 824 | 825 |
| 825 // |on_finish| callback will get called on destruction. | 826 // |on_finish| callback will get called on destruction. |
| 826 return; | 827 return; |
| 827 } | 828 } |
| 828 } | 829 } |
| 829 } | 830 } |
| 830 | 831 |
| 831 if (info.type == user_manager::User::ONLINE) { | 832 if (info.type == user_manager::User::ONLINE) { |
| 832 std::string file_name = GURL(info.location).ExtractFileName(); | 833 std::string file_name = GURL(info.location).ExtractFileName(); |
| 833 WallpaperResolution resolution = GetAppropriateResolution(); | 834 WallpaperResolution resolution = GetAppropriateResolution(); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 868 on_finish.Pass()); | 869 on_finish.Pass()); |
| 869 } else { | 870 } else { |
| 870 // In unexpected cases, revert to default wallpaper to fail safely. See | 871 // In unexpected cases, revert to default wallpaper to fail safely. See |
| 871 // crosbug.com/38429. | 872 // crosbug.com/38429. |
| 872 LOG(ERROR) << "Wallpaper reverts to default unexpected."; | 873 LOG(ERROR) << "Wallpaper reverts to default unexpected."; |
| 873 DoSetDefaultWallpaper(user_id, on_finish.Pass()); | 874 DoSetDefaultWallpaper(user_id, on_finish.Pass()); |
| 874 } | 875 } |
| 875 } | 876 } |
| 876 | 877 |
| 877 void WallpaperManagerBase::MoveCustomWallpapersSuccess( | 878 void WallpaperManagerBase::MoveCustomWallpapersSuccess( |
| 878 const std::string& user_id, | 879 const user_manager::UserID& user_id, |
| 879 const std::string& user_id_hash) { | 880 const std::string& user_id_hash) { |
| 880 WallpaperInfo info; | 881 WallpaperInfo info; |
| 881 GetUserWallpaperInfo(user_id, &info); | 882 GetUserWallpaperInfo(user_id, &info); |
| 882 if (info.type == user_manager::User::CUSTOMIZED) { | 883 if (info.type == user_manager::User::CUSTOMIZED) { |
| 883 // New file field should include user id hash in addition to file name. | 884 // New file field should include user id hash in addition to file name. |
| 884 // This is needed because at login screen, user id hash is not available. | 885 // This is needed because at login screen, user id hash is not available. |
| 885 info.location = base::FilePath(user_id_hash).Append(info.location).value(); | 886 info.location = base::FilePath(user_id_hash).Append(info.location).value(); |
| 886 bool is_persistent = | 887 bool is_persistent = |
| 887 !user_manager::UserManager::Get()->IsUserNonCryptohomeDataEphemeral( | 888 !user_manager::UserManager::Get()->IsUserNonCryptohomeDataEphemeral( |
| 888 user_id); | 889 user_id); |
| 889 SetUserWallpaperInfo(user_id, info, is_persistent); | 890 SetUserWallpaperInfo(user_id, info, is_persistent); |
| 890 } | 891 } |
| 891 } | 892 } |
| 892 | 893 |
| 893 void WallpaperManagerBase::MoveLoggedInUserCustomWallpaper() { | 894 void WallpaperManagerBase::MoveLoggedInUserCustomWallpaper() { |
| 894 const user_manager::User* logged_in_user = | 895 const user_manager::User* logged_in_user = |
| 895 user_manager::UserManager::Get()->GetLoggedInUser(); | 896 user_manager::UserManager::Get()->GetLoggedInUser(); |
| 896 if (logged_in_user) { | 897 if (logged_in_user) { |
| 897 task_runner_->PostTask( | 898 task_runner_->PostTask( |
| 898 FROM_HERE, | 899 FROM_HERE, |
| 899 base::Bind(&WallpaperManagerBase::MoveCustomWallpapersOnWorker, | 900 base::Bind(&WallpaperManagerBase::MoveCustomWallpapersOnWorker, |
| 900 logged_in_user->email(), logged_in_user->username_hash(), | 901 logged_in_user->GetUserID(), logged_in_user->username_hash(), |
| 901 weak_factory_.GetWeakPtr())); | 902 weak_factory_.GetWeakPtr())); |
| 902 } | 903 } |
| 903 } | 904 } |
| 904 | 905 |
| 905 void WallpaperManagerBase::SaveLastLoadTime(const base::TimeDelta elapsed) { | 906 void WallpaperManagerBase::SaveLastLoadTime(const base::TimeDelta elapsed) { |
| 906 while (last_load_times_.size() >= kLastLoadsStatsMsMaxSize) | 907 while (last_load_times_.size() >= kLastLoadsStatsMsMaxSize) |
| 907 last_load_times_.pop_front(); | 908 last_load_times_.pop_front(); |
| 908 | 909 |
| 909 if (elapsed > base::TimeDelta::FromMicroseconds(0)) { | 910 if (elapsed > base::TimeDelta::FromMicroseconds(0)) { |
| 910 last_load_times_.push_back(elapsed); | 911 last_load_times_.push_back(elapsed); |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1055 void WallpaperManagerBase::CreateSolidDefaultWallpaper() { | 1056 void WallpaperManagerBase::CreateSolidDefaultWallpaper() { |
| 1056 loaded_wallpapers_for_test_++; | 1057 loaded_wallpapers_for_test_++; |
| 1057 SkBitmap bitmap; | 1058 SkBitmap bitmap; |
| 1058 bitmap.allocN32Pixels(1, 1); | 1059 bitmap.allocN32Pixels(1, 1); |
| 1059 bitmap.eraseColor(kDefaultWallpaperColor); | 1060 bitmap.eraseColor(kDefaultWallpaperColor); |
| 1060 const gfx::ImageSkia image = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); | 1061 const gfx::ImageSkia image = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); |
| 1061 default_wallpaper_image_.reset(new user_manager::UserImage(image)); | 1062 default_wallpaper_image_.reset(new user_manager::UserImage(image)); |
| 1062 } | 1063 } |
| 1063 | 1064 |
| 1064 } // namespace wallpaper | 1065 } // namespace wallpaper |
| OLD | NEW |