| 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 eac4ab8f45341ff25769a07253a02f001113e7dc..03cfad10cef16e94a5afbf2427154a9ebe690df1 100644
|
| --- a/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc
|
| +++ b/chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.cc
|
| @@ -21,7 +21,6 @@
|
| #include "base/macros.h"
|
| #include "base/metrics/histogram.h"
|
| #include "base/path_service.h"
|
| -#include "base/sha1.h"
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/stringprintf.h"
|
| @@ -40,7 +39,8 @@
|
| #include "chrome/common/chrome_switches.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "chromeos/chromeos_switches.h"
|
| -#include "chromeos/cryptohome/system_salt_getter.h"
|
| +#include "chromeos/cryptohome/async_method_caller.h"
|
| +#include "chromeos/cryptohome/cryptohome_parameters.h"
|
| #include "chromeos/dbus/dbus_thread_manager.h"
|
| #include "chromeos/login/user_names.h"
|
| #include "components/prefs/pref_registry_simple.h"
|
| @@ -129,40 +129,22 @@
|
| return index;
|
| }
|
|
|
| -// This has once been copied from
|
| -// brillo::cryptohome::home::SanitizeUserName(username) to be used for
|
| -// wallpaper identification purpose only.
|
| -//
|
| -// Historic note: We need some way to identify users wallpaper files in
|
| -// the device filesystem. Historically User::username_hash() was used for this
|
| -// purpose, but it has two caveats:
|
| -// 1. username_hash() is defined only after user has logged in.
|
| -// 2. If cryptohome identifier changes, username_hash() will also change,
|
| -// and we may loose user => wallpaper files mapping at that point.
|
| -// So this function gives WallpaperManager independent hashing method to break
|
| -// this dependency.
|
| -//
|
| -wallpaper::WallpaperFilesId HashWallpaperFilesIdStr(
|
| - const std::string& files_id_unhashed) {
|
| - SystemSaltGetter* salt_getter = SystemSaltGetter::Get();
|
| - DCHECK(salt_getter);
|
| -
|
| - // System salt must be defined at this point.
|
| - const SystemSaltGetter::RawSalt* salt = salt_getter->GetRawSalt();
|
| - if (!salt)
|
| - LOG(FATAL) << "WallpaperManager HashWallpaperFilesIdStr(): no salt!";
|
| -
|
| - unsigned char binmd[base::kSHA1Length];
|
| - std::string lowercase(files_id_unhashed);
|
| - std::transform(lowercase.begin(), lowercase.end(), lowercase.begin(),
|
| - ::tolower);
|
| - std::vector<uint8_t> data = *salt;
|
| - std::copy(files_id_unhashed.begin(), files_id_unhashed.end(),
|
| - std::back_inserter(data));
|
| - base::SHA1HashBytes(data.data(), data.size(), binmd);
|
| - std::string result = base::HexEncode(binmd, sizeof(binmd));
|
| - std::transform(result.begin(), result.end(), result.begin(), ::tolower);
|
| - return wallpaper::WallpaperFilesId::FromString(result);
|
| +cryptohome::Identification GetUnhashedSourceForWallpaperFilesId(
|
| + const user_manager::User& user) {
|
| + const AccountId& account_id = user.GetAccountId();
|
| + const std::string& old_id = account_id.GetUserEmail(); // Migrated
|
| + return cryptohome::Identification::FromString(old_id);
|
| +}
|
| +
|
| +wallpaper::WallpaperFilesId GetKnownUserWallpaperFilesId(
|
| + const user_manager::User& user) {
|
| + const AccountId& account_id = user.GetAccountId();
|
| + std::string stored_value;
|
| + if (user_manager::known_user::GetStringPref(account_id, kWallpaperFilesId,
|
| + &stored_value)) {
|
| + return wallpaper::WallpaperFilesId::FromString(stored_value);
|
| + }
|
| + return wallpaper::WallpaperFilesId::FromString(user.username_hash());
|
| }
|
|
|
| void SetKnownUserWallpaperFilesId(
|
| @@ -846,15 +828,43 @@
|
| void WallpaperManager::SetPolicyControlledWallpaper(
|
| const AccountId& account_id,
|
| std::unique_ptr<user_manager::UserImage> user_image) {
|
| - const wallpaper::WallpaperFilesId wallpaper_files_id = GetFilesId(account_id);
|
| -
|
| - if (!wallpaper_files_id.is_valid())
|
| - LOG(FATAL) << "Wallpaper flies id if invalid!";
|
| -
|
| + const user_manager::User* user =
|
| + user_manager::UserManager::Get()->FindUser(account_id);
|
| + if (!user) {
|
| + NOTREACHED() << "Unknown user.";
|
| + return;
|
| + }
|
| +
|
| + const wallpaper::WallpaperFilesId wallpaper_files_id =
|
| + GetKnownUserWallpaperFilesId(*user);
|
| + if (!wallpaper_files_id.is_valid()) {
|
| + cryptohome::AsyncMethodCaller::GetInstance()->AsyncGetSanitizedUsername(
|
| + GetUnhashedSourceForWallpaperFilesId(*user),
|
| + base::Bind(&WallpaperManager::SetCustomWallpaperOnSanitizedUsername,
|
| + weak_factory_.GetWeakPtr(), account_id, user_image->image(),
|
| + true /* update wallpaper */));
|
| + } else {
|
| + SetCustomWallpaper(account_id, wallpaper_files_id, "policy-controlled.jpeg",
|
| + wallpaper::WALLPAPER_LAYOUT_CENTER_CROPPED,
|
| + user_manager::User::POLICY, user_image->image(),
|
| + true /* update wallpaper */);
|
| + }
|
| +}
|
| +
|
| +void WallpaperManager::SetCustomWallpaperOnSanitizedUsername(
|
| + const AccountId& account_id,
|
| + const gfx::ImageSkia& image,
|
| + bool update_wallpaper,
|
| + bool cryptohome_success,
|
| + const std::string& wallpaper_files_id_str) {
|
| + if (!cryptohome_success)
|
| + return;
|
| + const wallpaper::WallpaperFilesId wallpaper_files_id =
|
| + wallpaper::WallpaperFilesId::FromString(wallpaper_files_id_str);
|
| + SetKnownUserWallpaperFilesId(account_id, wallpaper_files_id);
|
| SetCustomWallpaper(account_id, wallpaper_files_id, "policy-controlled.jpeg",
|
| wallpaper::WALLPAPER_LAYOUT_CENTER_CROPPED,
|
| - user_manager::User::POLICY, user_image->image(),
|
| - true /* update wallpaper */);
|
| + user_manager::User::POLICY, image, update_wallpaper);
|
| }
|
|
|
| void WallpaperManager::InitializeRegisteredDeviceWallpaper() {
|
| @@ -1129,16 +1139,8 @@
|
| }
|
|
|
| wallpaper::WallpaperFilesId WallpaperManager::GetFilesId(
|
| - const AccountId& account_id) const {
|
| - std::string stored_value;
|
| - if (user_manager::known_user::GetStringPref(account_id, kWallpaperFilesId,
|
| - &stored_value)) {
|
| - return wallpaper::WallpaperFilesId::FromString(stored_value);
|
| - }
|
| - const std::string& old_id = account_id.GetUserEmail(); // Migrated
|
| - const wallpaper::WallpaperFilesId files_id = HashWallpaperFilesIdStr(old_id);
|
| - SetKnownUserWallpaperFilesId(account_id, files_id);
|
| - return files_id;
|
| + const user_manager::User& user) const {
|
| + return GetKnownUserWallpaperFilesId(user);
|
| }
|
|
|
| } // namespace chromeos
|
|
|