Index: chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc |
diff --git a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc |
index bf3610a4e5584d77b098e1ed61ae10d7993a4360..f017911d5f6af16539d52e7c745be9f13a33ed16 100644 |
--- a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc |
+++ b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc |
@@ -135,10 +135,8 @@ class WallpaperManager::PendingWallpaper : |
public base::RefCountedThreadSafe<PendingWallpaper> { |
public: |
// Do LoadWallpaper() - image not found in cache. |
- PendingWallpaper( |
- const base::TimeDelta delay, |
- const std::string& user_id) |
- : user_id_(user_id), |
+ PendingWallpaper(const base::TimeDelta delay, const AccountId& account_id) |
+ : account_id_(account_id), |
default_(false), |
on_finish_(new MovableOnDestroyCallback( |
base::Bind(&WallpaperManager::PendingWallpaper::OnWallpaperSet, |
@@ -205,7 +203,7 @@ class WallpaperManager::PendingWallpaper : |
started_load_at_ = base::Time::Now(); |
if (default_) { |
- manager->DoSetDefaultWallpaper(user_id_, on_finish_.Pass()); |
+ manager->DoSetDefaultWallpaper(account_id_, on_finish_.Pass()); |
} else if (!user_wallpaper_.isNull()) { |
ash::Shell::GetInstance() |
->desktop_background_controller() |
@@ -213,15 +211,12 @@ class WallpaperManager::PendingWallpaper : |
} else if (!wallpaper_path_.empty()) { |
manager->task_runner_->PostTask( |
FROM_HERE, |
- base::Bind(&WallpaperManager::GetCustomWallpaperInternal, |
- user_id_, |
- info_, |
- wallpaper_path_, |
- true /* update wallpaper */, |
+ base::Bind(&WallpaperManager::GetCustomWallpaperInternal, account_id_, |
+ info_, wallpaper_path_, true /* update wallpaper */, |
base::Passed(on_finish_.Pass()), |
manager->weak_factory_.GetWeakPtr())); |
} else if (!info_.location.empty()) { |
- manager->LoadWallpaper(user_id_, info_, true, on_finish_.Pass()); |
+ manager->LoadWallpaper(account_id_, info_, true, on_finish_.Pass()); |
} else { |
// PendingWallpaper was created and never initialized? |
NOTREACHED(); |
@@ -256,7 +251,7 @@ class WallpaperManager::PendingWallpaper : |
manager->RemovePendingWallpaperFromList(this); |
} |
- std::string user_id_; |
+ AccountId account_id_; |
wallpaper::WallpaperInfo info_; |
gfx::ImageSkia user_wallpaper_; |
base::FilePath wallpaper_path_; |
@@ -336,7 +331,7 @@ void WallpaperManager::EnsureLoggedInUserWallpaperLoaded() { |
return; |
} |
SetUserWallpaperNow( |
- user_manager::UserManager::Get()->GetLoggedInUser()->email()); |
+ user_manager::UserManager::Get()->GetLoggedInUser()->GetAccountId()); |
} |
void WallpaperManager::InitializeWallpaper() { |
@@ -374,12 +369,12 @@ void WallpaperManager::InitializeWallpaper() { |
if (!user_manager->IsUserLoggedIn()) { |
if (!StartupUtils::IsDeviceRegistered()) |
- SetDefaultWallpaperDelayed(login::SignInAccountId().GetUserEmail()); |
+ SetDefaultWallpaperDelayed(login::SignInAccountId()); |
else |
InitializeRegisteredDeviceWallpaper(); |
return; |
} |
- SetUserWallpaperDelayed(user_manager->GetLoggedInUser()->email()); |
+ SetUserWallpaperDelayed(user_manager->GetLoggedInUser()->GetAccountId()); |
} |
void WallpaperManager::Observe(int type, |
@@ -426,24 +421,25 @@ void WallpaperManager::Observe(int type, |
} |
} |
-void WallpaperManager::RemoveUserWallpaperInfo(const std::string& user_id) { |
- if (wallpaper_cache_.find(user_id) != wallpaper_cache_.end()) |
- wallpaper_cache_.erase(user_id); |
+void WallpaperManager::RemoveUserWallpaperInfo(const AccountId& account_id) { |
+ if (wallpaper_cache_.find(account_id) != wallpaper_cache_.end()) |
+ wallpaper_cache_.erase(account_id); |
PrefService* prefs = g_browser_process->local_state(); |
// PrefService could be NULL in tests. |
if (!prefs) |
return; |
WallpaperInfo info; |
- GetUserWallpaperInfo(user_id, &info); |
+ GetUserWallpaperInfo(account_id, &info); |
DictionaryPrefUpdate prefs_wallpapers_info_update( |
prefs, wallpaper::kUsersWallpaperInfo); |
- prefs_wallpapers_info_update->RemoveWithoutPathExpansion(user_id, NULL); |
- DeleteUserWallpapers(user_id, info.location); |
+ prefs_wallpapers_info_update->RemoveWithoutPathExpansion( |
+ account_id.GetUserEmail(), NULL); |
+ DeleteUserWallpapers(account_id, info.location); |
} |
void WallpaperManager::OnPolicyFetched(const std::string& policy, |
- const std::string& user_id, |
+ const AccountId& account_id, |
scoped_ptr<std::string> data) { |
if (!data) |
return; |
@@ -452,12 +448,11 @@ void WallpaperManager::OnPolicyFetched(const std::string& policy, |
data.Pass(), |
0, // Do not crop. |
base::Bind(&WallpaperManager::SetPolicyControlledWallpaper, |
- weak_factory_.GetWeakPtr(), |
- user_id)); |
+ weak_factory_.GetWeakPtr(), account_id)); |
} |
void WallpaperManager::SetCustomWallpaper( |
- const std::string& user_id, |
+ const AccountId& account_id, |
const std::string& user_id_hash, |
const std::string& file, |
wallpaper::WallpaperLayout layout, |
@@ -471,7 +466,7 @@ void WallpaperManager::SetCustomWallpaper( |
return; |
// Don't allow custom wallpapers while policy is in effect. |
- if (type != user_manager::User::POLICY && IsPolicyControlled(user_id)) |
+ if (type != user_manager::User::POLICY && IsPolicyControlled(account_id)) |
return; |
base::FilePath wallpaper_path = GetCustomWallpaperPath( |
@@ -480,16 +475,16 @@ void WallpaperManager::SetCustomWallpaper( |
// If decoded wallpaper is empty, we have probably failed to decode the file. |
// Use default wallpaper in this case. |
if (image.isNull()) { |
- SetDefaultWallpaperDelayed(user_id); |
+ SetDefaultWallpaperDelayed(account_id); |
return; |
} |
- const user_manager::User* user = user_manager::UserManager::Get()->FindUser( |
- AccountId::FromUserEmail(user_id)); |
+ const user_manager::User* user = |
+ user_manager::UserManager::Get()->FindUser(account_id); |
CHECK(user); |
const bool is_persistent = |
!user_manager::UserManager::Get()->IsUserNonCryptohomeDataEphemeral( |
- AccountId::FromUserEmail(user_id)) || |
+ account_id) || |
(type == user_manager::User::POLICY && |
user->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT); |
@@ -528,29 +523,29 @@ void WallpaperManager::SetCustomWallpaper( |
type, |
base::Time::Now().LocalMidnight() |
}; |
- SetUserWallpaperInfo(user_id, info, is_persistent); |
+ SetUserWallpaperInfo(account_id, info, is_persistent); |
if (update_wallpaper) { |
- GetPendingWallpaper(user_id, false)->ResetSetWallpaperImage(image, info); |
+ GetPendingWallpaper(account_id, false)->ResetSetWallpaperImage(image, info); |
} |
- wallpaper_cache_[user_id] = CustomWallpaperElement(wallpaper_path, image); |
+ wallpaper_cache_[account_id] = CustomWallpaperElement(wallpaper_path, image); |
} |
-void WallpaperManager::SetDefaultWallpaperNow(const std::string& user_id) { |
- GetPendingWallpaper(user_id, false)->ResetSetDefaultWallpaper(); |
+void WallpaperManager::SetDefaultWallpaperNow(const AccountId& account_id) { |
+ GetPendingWallpaper(account_id, false)->ResetSetDefaultWallpaper(); |
} |
-void WallpaperManager::SetDefaultWallpaperDelayed(const std::string& user_id) { |
- GetPendingWallpaper(user_id, true)->ResetSetDefaultWallpaper(); |
+void WallpaperManager::SetDefaultWallpaperDelayed(const AccountId& account_id) { |
+ GetPendingWallpaper(account_id, true)->ResetSetDefaultWallpaper(); |
} |
void WallpaperManager::DoSetDefaultWallpaper( |
- const std::string& user_id, |
+ const AccountId& account_id, |
MovableOnDestroyCallbackHolder on_finish) { |
// There is no visible background in kiosk mode. |
if (user_manager::UserManager::Get()->IsLoggedInAsKioskApp()) |
return; |
- wallpaper_cache_.erase(user_id); |
+ wallpaper_cache_.erase(account_id); |
// Some browser tests do not have a shell instance. As no wallpaper is needed |
// in these tests anyway, avoid loading one, preventing crashes and speeding |
// up the tests. |
@@ -562,8 +557,8 @@ void WallpaperManager::DoSetDefaultWallpaper( |
const base::FilePath* file = NULL; |
- const user_manager::User* user = user_manager::UserManager::Get()->FindUser( |
- AccountId::FromUserEmail(user_id)); |
+ const user_manager::User* user = |
+ user_manager::UserManager::Get()->FindUser(account_id); |
if (user_manager::UserManager::Get()->IsLoggedInAsGuest()) { |
file = |
@@ -600,7 +595,7 @@ void WallpaperManager::DoSetDefaultWallpaper( |
default_wallpaper_image_->image(), layout); |
} |
-void WallpaperManager::SetUserWallpaperInfo(const std::string& user_id, |
+void WallpaperManager::SetUserWallpaperInfo(const AccountId& account_id, |
const WallpaperInfo& info, |
bool is_persistent) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
@@ -618,10 +613,11 @@ void WallpaperManager::SetUserWallpaperInfo(const std::string& user_id, |
wallpaper_info_dict->SetString(kNewWallpaperLocationNodeName, info.location); |
wallpaper_info_dict->SetInteger(kNewWallpaperLayoutNodeName, info.layout); |
wallpaper_info_dict->SetInteger(kNewWallpaperTypeNodeName, info.type); |
- wallpaper_update->SetWithoutPathExpansion(user_id, wallpaper_info_dict); |
+ wallpaper_update->SetWithoutPathExpansion(account_id.GetUserEmail(), |
+ wallpaper_info_dict); |
} |
-void WallpaperManager::ScheduleSetUserWallpaper(const std::string& user_id, |
+void WallpaperManager::ScheduleSetUserWallpaper(const AccountId& account_id, |
bool delayed) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
// Some unit tests come here without a UserManager or without a pref system. |
@@ -630,7 +626,6 @@ void WallpaperManager::ScheduleSetUserWallpaper(const std::string& user_id, |
return; |
} |
- const AccountId account_id = AccountId::FromUserEmail(user_id); |
const user_manager::User* user = |
user_manager::UserManager::Get()->FindUser(account_id); |
@@ -644,30 +639,30 @@ void WallpaperManager::ScheduleSetUserWallpaper(const std::string& user_id, |
user->HasGaiaAccount()) || |
user->GetType() == user_manager::USER_TYPE_GUEST) { |
LOG(ERROR) << "User is ephemeral or guest! Fallback to default wallpaper."; |
- InitInitialUserWallpaper(user_id, false); |
- GetPendingWallpaper(user_id, delayed)->ResetSetDefaultWallpaper(); |
+ InitInitialUserWallpaper(account_id, false); |
+ GetPendingWallpaper(account_id, delayed)->ResetSetDefaultWallpaper(); |
return; |
} |
- last_selected_user_ = user_id; |
+ last_selected_user_ = account_id; |
WallpaperInfo info; |
- if (!GetUserWallpaperInfo(user_id, &info)) { |
- InitInitialUserWallpaper(user_id, true); |
- GetUserWallpaperInfo(user_id, &info); |
+ if (!GetUserWallpaperInfo(account_id, &info)) { |
+ InitInitialUserWallpaper(account_id, true); |
+ GetUserWallpaperInfo(account_id, &info); |
} |
gfx::ImageSkia user_wallpaper; |
current_user_wallpaper_info_ = info; |
- if (GetWallpaperFromCache(user_id, &user_wallpaper)) { |
- GetPendingWallpaper(user_id, delayed) |
+ if (GetWallpaperFromCache(account_id, &user_wallpaper)) { |
+ GetPendingWallpaper(account_id, delayed) |
->ResetSetWallpaperImage(user_wallpaper, info); |
} else { |
if (info.location.empty()) { |
// Uses default built-in wallpaper when file is empty. Eventually, we |
// will only ship one built-in wallpaper in ChromeOS image. |
- GetPendingWallpaper(user_id, delayed)->ResetSetDefaultWallpaper(); |
+ GetPendingWallpaper(account_id, delayed)->ResetSetDefaultWallpaper(); |
return; |
} |
@@ -682,7 +677,7 @@ void WallpaperManager::ScheduleSetUserWallpaper(const std::string& user_id, |
sub_dir = wallpaper::kOriginalWallpaperSubDir; |
base::FilePath wallpaper_path = GetCustomWallpaperDir(sub_dir); |
wallpaper_path = wallpaper_path.Append(info.location); |
- CustomWallpaperMap::iterator it = wallpaper_cache_.find(user_id); |
+ CustomWallpaperMap::iterator it = wallpaper_cache_.find(account_id); |
// Do not try to load the wallpaper if the path is the same. Since loading |
// could still be in progress, we ignore the existence of the image. |
if (it != wallpaper_cache_.end() && it->second.first == wallpaper_path) |
@@ -690,22 +685,22 @@ void WallpaperManager::ScheduleSetUserWallpaper(const std::string& user_id, |
// Set the new path and reset the existing image - the image will be |
// added once it becomes available. |
- wallpaper_cache_[user_id] = |
+ wallpaper_cache_[account_id] = |
CustomWallpaperElement(wallpaper_path, gfx::ImageSkia()); |
loaded_wallpapers_for_test_++; |
- GetPendingWallpaper(user_id, delayed) |
+ GetPendingWallpaper(account_id, delayed) |
->ResetSetCustomWallpaper(info, wallpaper_path); |
return; |
} |
// Load downloaded ONLINE or converted DEFAULT wallpapers. |
- GetPendingWallpaper(user_id, delayed)->ResetLoadWallpaper(info); |
+ GetPendingWallpaper(account_id, delayed)->ResetLoadWallpaper(info); |
} |
} |
void WallpaperManager::SetWallpaperFromImageSkia( |
- const std::string& user_id, |
+ const AccountId& account_id, |
const gfx::ImageSkia& image, |
wallpaper::WallpaperLayout layout, |
bool update_wallpaper) { |
@@ -719,7 +714,8 @@ void WallpaperManager::SetWallpaperFromImageSkia( |
// This is an API call and we do not know the path. So we set the image, but |
// no path. |
- wallpaper_cache_[user_id] = CustomWallpaperElement(base::FilePath(), image); |
+ wallpaper_cache_[account_id] = |
+ CustomWallpaperElement(base::FilePath(), image); |
if (update_wallpaper) { |
GetPendingWallpaper(last_selected_user_, false /* Not delayed */) |
@@ -756,13 +752,13 @@ WallpaperManager::WallpaperManager() |
} |
WallpaperManager::PendingWallpaper* WallpaperManager::GetPendingWallpaper( |
- const std::string& user_id, |
+ const AccountId& account_id, |
bool delayed) { |
if (!pending_inactive_) { |
loading_.push_back(new WallpaperManager::PendingWallpaper( |
(delayed ? GetWallpaperLoadDelay() |
: base::TimeDelta::FromMilliseconds(0)), |
- user_id)); |
+ account_id)); |
pending_inactive_ = loading_.back().get(); |
} |
return pending_inactive_; |
@@ -800,7 +796,7 @@ void WallpaperManager::InitializeRegisteredDeviceWallpaper() { |
int public_session_user_index = FindPublicSession(users); |
if ((!show_users && public_session_user_index == -1) || users.empty()) { |
// Boot into sign in form, preload default wallpaper. |
- SetDefaultWallpaperDelayed(login::SignInAccountId().GetUserEmail()); |
+ SetDefaultWallpaperDelayed(login::SignInAccountId()); |
return; |
} |
@@ -809,16 +805,16 @@ void WallpaperManager::InitializeRegisteredDeviceWallpaper() { |
// Normal boot, load user wallpaper. |
// If normal boot animation is disabled wallpaper would be set |
// asynchronously once user pods are loaded. |
- SetUserWallpaperDelayed(users[index]->email()); |
+ SetUserWallpaperDelayed(users[index]->GetAccountId()); |
} |
} |
-bool WallpaperManager::GetUserWallpaperInfo(const std::string& user_id, |
+bool WallpaperManager::GetUserWallpaperInfo(const AccountId& account_id, |
WallpaperInfo* info) const { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
if (user_manager::UserManager::Get()->IsUserNonCryptohomeDataEphemeral( |
- AccountId::FromUserEmail(user_id))) { |
+ account_id)) { |
// Default to the values cached in memory. |
*info = current_user_wallpaper_info_; |
@@ -830,7 +826,8 @@ bool WallpaperManager::GetUserWallpaperInfo(const std::string& user_id, |
const base::DictionaryValue* info_dict; |
if (!g_browser_process->local_state() |
->GetDictionary(wallpaper::kUsersWallpaperInfo) |
- ->GetDictionaryWithoutPathExpansion(user_id, &info_dict)) { |
+ ->GetDictionaryWithoutPathExpansion(account_id.GetUserEmail(), |
+ &info_dict)) { |
return false; |
} |
@@ -859,7 +856,7 @@ bool WallpaperManager::GetUserWallpaperInfo(const std::string& user_id, |
} |
void WallpaperManager::OnWallpaperDecoded( |
- const std::string& user_id, |
+ const AccountId& account_id, |
wallpaper::WallpaperLayout layout, |
bool update_wallpaper, |
MovableOnDestroyCallbackHolder on_finish, |
@@ -875,15 +872,15 @@ void WallpaperManager::OnWallpaperDecoded( |
wallpaper::WALLPAPER_LAYOUT_CENTER_CROPPED, |
user_manager::User::DEFAULT, |
base::Time::Now().LocalMidnight()}; |
- SetUserWallpaperInfo(user_id, info, true); |
+ SetUserWallpaperInfo(account_id, info, true); |
if (update_wallpaper) |
- DoSetDefaultWallpaper(user_id, on_finish.Pass()); |
+ DoSetDefaultWallpaper(account_id, on_finish.Pass()); |
return; |
} |
// Update the image, but keep the path which was set earlier. |
- wallpaper_cache_[user_id].second = user_image.image(); |
+ wallpaper_cache_[account_id].second = user_image.image(); |
if (update_wallpaper) { |
ash::Shell::GetInstance() |
@@ -892,7 +889,7 @@ void WallpaperManager::OnWallpaperDecoded( |
} |
} |
-void WallpaperManager::StartLoad(const std::string& user_id, |
+void WallpaperManager::StartLoad(const AccountId& account_id, |
const WallpaperInfo& info, |
bool update_wallpaper, |
const base::FilePath& wallpaper_path, |
@@ -902,17 +899,15 @@ void WallpaperManager::StartLoad(const std::string& user_id, |
if (update_wallpaper) { |
// We are now about to change the wallpaper, so update the path and remove |
// the existing image. |
- wallpaper_cache_[user_id] = CustomWallpaperElement(wallpaper_path, |
- gfx::ImageSkia()); |
+ wallpaper_cache_[account_id] = |
+ CustomWallpaperElement(wallpaper_path, gfx::ImageSkia()); |
} |
- wallpaper_loader_->Start(wallpaper_path.value(), |
- 0, // Do not crop. |
- base::Bind(&WallpaperManager::OnWallpaperDecoded, |
- weak_factory_.GetWeakPtr(), |
- user_id, |
- info.layout, |
- update_wallpaper, |
- base::Passed(on_finish.Pass()))); |
+ wallpaper_loader_->Start( |
+ wallpaper_path.value(), |
+ 0, // Do not crop. |
+ base::Bind(&WallpaperManager::OnWallpaperDecoded, |
+ weak_factory_.GetWeakPtr(), account_id, info.layout, |
+ update_wallpaper, base::Passed(on_finish.Pass()))); |
} |
void WallpaperManager::SetCustomizedDefaultWallpaperAfterCheck( |
@@ -971,7 +966,7 @@ size_t WallpaperManager::GetPendingListSizeForTesting() const { |
} |
void WallpaperManager::UserChangedChildStatus(user_manager::User* user) { |
- SetUserWallpaperNow(user->email()); |
+ SetUserWallpaperNow(user->GetAccountId()); |
} |
void WallpaperManager::OnDefaultWallpaperDecoded( |
@@ -1041,7 +1036,7 @@ void WallpaperManager::SetDefaultWallpaperPath( |
} |
if (need_update_screen) { |
- DoSetDefaultWallpaper(std::string(), |
+ DoSetDefaultWallpaper(EmptyAccountId(), |
MovableOnDestroyCallbackHolder().Pass()); |
} |
} |