| 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 "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h" | 5 #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h" |
| 6 | 6 |
| 7 #include <numeric> | 7 #include <numeric> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "ash/ash_constants.h" | 10 #include "ash/ash_constants.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 | 72 |
| 73 const int kCacheWallpaperDelayMs = 500; | 73 const int kCacheWallpaperDelayMs = 500; |
| 74 | 74 |
| 75 // A dictionary pref that maps usernames to wallpaper properties. | 75 // A dictionary pref that maps usernames to wallpaper properties. |
| 76 const char kUserWallpapersProperties[] = "UserWallpapersProperties"; | 76 const char kUserWallpapersProperties[] = "UserWallpapersProperties"; |
| 77 | 77 |
| 78 // Names of nodes with info about wallpaper in |kUserWallpapersProperties| | 78 // Names of nodes with info about wallpaper in |kUserWallpapersProperties| |
| 79 // dictionary. | 79 // dictionary. |
| 80 const char kNewWallpaperDateNodeName[] = "date"; | 80 const char kNewWallpaperDateNodeName[] = "date"; |
| 81 const char kNewWallpaperLayoutNodeName[] = "layout"; | 81 const char kNewWallpaperLayoutNodeName[] = "layout"; |
| 82 const char kNewWallpaperFileNodeName[] = "file"; | 82 const char kNewWallpaperLocationNodeName[] = "file"; |
| 83 const char kNewWallpaperTypeNodeName[] = "type"; | 83 const char kNewWallpaperTypeNodeName[] = "type"; |
| 84 | 84 |
| 85 // Maximum number of wallpapers cached by CacheUsersWallpapers(). | 85 // Maximum number of wallpapers cached by CacheUsersWallpapers(). |
| 86 const int kMaxWallpapersToCache = 3; | 86 const int kMaxWallpapersToCache = 3; |
| 87 | 87 |
| 88 // Maximum number of entries in WallpaperManager::last_load_times_ . | 88 // Maximum number of entries in WallpaperManager::last_load_times_ . |
| 89 const size_t kLastLoadsStatsMsMaxSize = 4; | 89 const size_t kLastLoadsStatsMsMaxSize = 4; |
| 90 | 90 |
| 91 // Minimum delay between wallpaper loads, milliseconds. | 91 // Minimum delay between wallpaper loads, milliseconds. |
| 92 const unsigned kLoadMinDelayMs = 50; | 92 const unsigned kLoadMinDelayMs = 50; |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 } else if (!wallpaper_path_.empty()) { | 389 } else if (!wallpaper_path_.empty()) { |
| 390 manager->task_runner_->PostTask( | 390 manager->task_runner_->PostTask( |
| 391 FROM_HERE, | 391 FROM_HERE, |
| 392 base::Bind(&WallpaperManager::GetCustomWallpaperInternal, | 392 base::Bind(&WallpaperManager::GetCustomWallpaperInternal, |
| 393 user_id_, | 393 user_id_, |
| 394 info_, | 394 info_, |
| 395 wallpaper_path_, | 395 wallpaper_path_, |
| 396 true /* update wallpaper */, | 396 true /* update wallpaper */, |
| 397 base::Passed(on_finish_.Pass()), | 397 base::Passed(on_finish_.Pass()), |
| 398 manager->weak_factory_.GetWeakPtr())); | 398 manager->weak_factory_.GetWeakPtr())); |
| 399 } else if (!info_.file.empty()) { | 399 } else if (!info_.location.empty()) { |
| 400 manager->LoadWallpaper(user_id_, info_, true, on_finish_.Pass()); | 400 manager->LoadWallpaper(user_id_, info_, true, on_finish_.Pass()); |
| 401 } else { | 401 } else { |
| 402 // PendingWallpaper was created and never initialized? | 402 // PendingWallpaper was created and never initialized? |
| 403 NOTREACHED(); | 403 NOTREACHED(); |
| 404 // Error. Do not record time. | 404 // Error. Do not record time. |
| 405 started_load_at_ = base::Time(); | 405 started_load_at_ = base::Time(); |
| 406 } | 406 } |
| 407 on_finish_.reset(); | 407 on_finish_.reset(); |
| 408 } | 408 } |
| 409 | 409 |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 560 logged_in_users_cache.insert(*it); | 560 logged_in_users_cache.insert(*it); |
| 561 } | 561 } |
| 562 } | 562 } |
| 563 wallpaper_cache_ = logged_in_users_cache; | 563 wallpaper_cache_ = logged_in_users_cache; |
| 564 } | 564 } |
| 565 | 565 |
| 566 bool WallpaperManager::GetLoggedInUserWallpaperInfo(WallpaperInfo* info) { | 566 bool WallpaperManager::GetLoggedInUserWallpaperInfo(WallpaperInfo* info) { |
| 567 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 567 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 568 | 568 |
| 569 if (UserManager::Get()->IsLoggedInAsStub()) { | 569 if (UserManager::Get()->IsLoggedInAsStub()) { |
| 570 info->file = current_user_wallpaper_info_.file = ""; | 570 info->location = current_user_wallpaper_info_.location = ""; |
| 571 info->layout = current_user_wallpaper_info_.layout = | 571 info->layout = current_user_wallpaper_info_.layout = |
| 572 ash::WALLPAPER_LAYOUT_CENTER_CROPPED; | 572 ash::WALLPAPER_LAYOUT_CENTER_CROPPED; |
| 573 info->type = current_user_wallpaper_info_.type = | 573 info->type = current_user_wallpaper_info_.type = |
| 574 user_manager::User::DEFAULT; | 574 user_manager::User::DEFAULT; |
| 575 info->date = current_user_wallpaper_info_.date = | 575 info->date = current_user_wallpaper_info_.date = |
| 576 base::Time::Now().LocalMidnight(); | 576 base::Time::Now().LocalMidnight(); |
| 577 return true; | 577 return true; |
| 578 } | 578 } |
| 579 | 579 |
| 580 return GetUserWallpaperInfo(UserManager::Get()->GetLoggedInUser()->email(), | 580 return GetUserWallpaperInfo(UserManager::Get()->GetLoggedInUser()->email(), |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 667 } | 667 } |
| 668 } | 668 } |
| 669 | 669 |
| 670 void WallpaperManager::RemoveUserWallpaperInfo(const std::string& user_id) { | 670 void WallpaperManager::RemoveUserWallpaperInfo(const std::string& user_id) { |
| 671 WallpaperInfo info; | 671 WallpaperInfo info; |
| 672 GetUserWallpaperInfo(user_id, &info); | 672 GetUserWallpaperInfo(user_id, &info); |
| 673 PrefService* prefs = g_browser_process->local_state(); | 673 PrefService* prefs = g_browser_process->local_state(); |
| 674 DictionaryPrefUpdate prefs_wallpapers_info_update(prefs, | 674 DictionaryPrefUpdate prefs_wallpapers_info_update(prefs, |
| 675 prefs::kUsersWallpaperInfo); | 675 prefs::kUsersWallpaperInfo); |
| 676 prefs_wallpapers_info_update->RemoveWithoutPathExpansion(user_id, NULL); | 676 prefs_wallpapers_info_update->RemoveWithoutPathExpansion(user_id, NULL); |
| 677 DeleteUserWallpapers(user_id, info.file); | 677 DeleteUserWallpapers(user_id, info.location); |
| 678 } | 678 } |
| 679 | 679 |
| 680 // static | 680 // static |
| 681 bool WallpaperManager::ResizeImage(const gfx::ImageSkia& image, | 681 bool WallpaperManager::ResizeImage(const gfx::ImageSkia& image, |
| 682 ash::WallpaperLayout layout, | 682 ash::WallpaperLayout layout, |
| 683 int preferred_width, | 683 int preferred_width, |
| 684 int preferred_height, | 684 int preferred_height, |
| 685 scoped_refptr<base::RefCountedBytes>* output, | 685 scoped_refptr<base::RefCountedBytes>* output, |
| 686 gfx::ImageSkia* output_skia) { | 686 gfx::ImageSkia* output_skia) { |
| 687 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI)); | 687 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 919 // that the user selected. | 919 // that the user selected. |
| 920 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner = | 920 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner = |
| 921 BrowserThread::GetBlockingPool() | 921 BrowserThread::GetBlockingPool() |
| 922 ->GetSequencedTaskRunnerWithShutdownBehavior( | 922 ->GetSequencedTaskRunnerWithShutdownBehavior( |
| 923 sequence_token_, base::SequencedWorkerPool::BLOCK_SHUTDOWN); | 923 sequence_token_, base::SequencedWorkerPool::BLOCK_SHUTDOWN); |
| 924 // TODO(bshe): This may break if RawImage becomes RefCountedMemory. | 924 // TODO(bshe): This may break if RawImage becomes RefCountedMemory. |
| 925 blocking_task_runner->PostTask( | 925 blocking_task_runner->PostTask( |
| 926 FROM_HERE, | 926 FROM_HERE, |
| 927 base::Bind(&WallpaperManager::SaveCustomWallpaper, | 927 base::Bind(&WallpaperManager::SaveCustomWallpaper, |
| 928 user_id_hash, | 928 user_id_hash, |
| 929 base::FilePath(wallpaper_info.file), | 929 base::FilePath(wallpaper_info.location), |
| 930 wallpaper_info.layout, | 930 wallpaper_info.layout, |
| 931 base::Passed(deep_copy.Pass()))); | 931 base::Passed(deep_copy.Pass()))); |
| 932 } | 932 } |
| 933 | 933 |
| 934 std::string relative_path = base::FilePath(user_id_hash).Append(file).value(); | 934 std::string relative_path = base::FilePath(user_id_hash).Append(file).value(); |
| 935 // User's custom wallpaper path is determined by relative path and the | 935 // User's custom wallpaper path is determined by relative path and the |
| 936 // appropriate wallpaper resolution in GetCustomWallpaperInternal. | 936 // appropriate wallpaper resolution in GetCustomWallpaperInternal. |
| 937 WallpaperInfo info = { | 937 WallpaperInfo info = { |
| 938 relative_path, | 938 relative_path, |
| 939 layout, | 939 layout, |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1091 bool update_wallpaper, | 1091 bool update_wallpaper, |
| 1092 MovableOnDestroyCallbackHolder on_finish, | 1092 MovableOnDestroyCallbackHolder on_finish, |
| 1093 base::WeakPtr<WallpaperManager> weak_ptr) { | 1093 base::WeakPtr<WallpaperManager> weak_ptr) { |
| 1094 | 1094 |
| 1095 base::FilePath valid_path = wallpaper_path; | 1095 base::FilePath valid_path = wallpaper_path; |
| 1096 if (!base::PathExists(wallpaper_path)) { | 1096 if (!base::PathExists(wallpaper_path)) { |
| 1097 // Falls back on original file if the correct resolution file does not | 1097 // Falls back on original file if the correct resolution file does not |
| 1098 // exist. This may happen when the original custom wallpaper is small or | 1098 // exist. This may happen when the original custom wallpaper is small or |
| 1099 // browser shutdown before resized wallpaper saved. | 1099 // browser shutdown before resized wallpaper saved. |
| 1100 valid_path = GetCustomWallpaperDir(kOriginalWallpaperSubDir); | 1100 valid_path = GetCustomWallpaperDir(kOriginalWallpaperSubDir); |
| 1101 valid_path = valid_path.Append(info.file); | 1101 valid_path = valid_path.Append(info.location); |
| 1102 } | 1102 } |
| 1103 | 1103 |
| 1104 if (!base::PathExists(valid_path)) { | 1104 if (!base::PathExists(valid_path)) { |
| 1105 // Falls back to custom wallpaper that uses email as part of its file path. | 1105 // Falls back to custom wallpaper that uses email as part of its file path. |
| 1106 // Note that email is used instead of user_id_hash here. | 1106 // Note that email is used instead of user_id_hash here. |
| 1107 valid_path = | 1107 valid_path = GetCustomWallpaperPath(kOriginalWallpaperSubDir, |
| 1108 GetCustomWallpaperPath(kOriginalWallpaperSubDir, user_id, info.file); | 1108 user_id, info.location); |
| 1109 } | 1109 } |
| 1110 | 1110 |
| 1111 if (!base::PathExists(valid_path)) { | 1111 if (!base::PathExists(valid_path)) { |
| 1112 LOG(ERROR) << "Failed to load previously selected custom wallpaper. " << | 1112 LOG(ERROR) << "Failed to load previously selected custom wallpaper. " << |
| 1113 "Fallback to default wallpaper"; | 1113 "Fallback to default wallpaper"; |
| 1114 BrowserThread::PostTask(BrowserThread::UI, | 1114 BrowserThread::PostTask(BrowserThread::UI, |
| 1115 FROM_HERE, | 1115 FROM_HERE, |
| 1116 base::Bind(&WallpaperManager::DoSetDefaultWallpaper, | 1116 base::Bind(&WallpaperManager::DoSetDefaultWallpaper, |
| 1117 weak_ptr, | 1117 weak_ptr, |
| 1118 user_id, | 1118 user_id, |
| 1119 base::Passed(on_finish.Pass()))); | 1119 base::Passed(on_finish.Pass()))); |
| 1120 } else { | 1120 } else { |
| 1121 BrowserThread::PostTask(BrowserThread::UI, | 1121 BrowserThread::PostTask(BrowserThread::UI, |
| 1122 FROM_HERE, | 1122 FROM_HERE, |
| 1123 base::Bind(&WallpaperManager::StartLoad, | 1123 base::Bind(&WallpaperManager::StartLoad, |
| 1124 weak_ptr, | 1124 weak_ptr, |
| 1125 user_id, | 1125 user_id, |
| 1126 info, | 1126 info, |
| 1127 update_wallpaper, | 1127 update_wallpaper, |
| 1128 valid_path, | 1128 valid_path, |
| 1129 base::Passed(on_finish.Pass()))); | 1129 base::Passed(on_finish.Pass()))); |
| 1130 } | 1130 } |
| 1131 } | 1131 } |
| 1132 | 1132 |
| 1133 void WallpaperManager::InitInitialUserWallpaper(const std::string& user_id, | 1133 void WallpaperManager::InitInitialUserWallpaper(const std::string& user_id, |
| 1134 bool is_persistent) { | 1134 bool is_persistent) { |
| 1135 current_user_wallpaper_info_.file = ""; | 1135 current_user_wallpaper_info_.location = ""; |
| 1136 current_user_wallpaper_info_.layout = ash::WALLPAPER_LAYOUT_CENTER_CROPPED; | 1136 current_user_wallpaper_info_.layout = ash::WALLPAPER_LAYOUT_CENTER_CROPPED; |
| 1137 current_user_wallpaper_info_.type = user_manager::User::DEFAULT; | 1137 current_user_wallpaper_info_.type = user_manager::User::DEFAULT; |
| 1138 current_user_wallpaper_info_.date = base::Time::Now().LocalMidnight(); | 1138 current_user_wallpaper_info_.date = base::Time::Now().LocalMidnight(); |
| 1139 | 1139 |
| 1140 WallpaperInfo info = current_user_wallpaper_info_; | 1140 WallpaperInfo info = current_user_wallpaper_info_; |
| 1141 SetUserWallpaperInfo(user_id, info, is_persistent); | 1141 SetUserWallpaperInfo(user_id, info, is_persistent); |
| 1142 } | 1142 } |
| 1143 | 1143 |
| 1144 void WallpaperManager::SetUserWallpaperInfo(const std::string& user_id, | 1144 void WallpaperManager::SetUserWallpaperInfo(const std::string& user_id, |
| 1145 const WallpaperInfo& info, | 1145 const WallpaperInfo& info, |
| 1146 bool is_persistent) { | 1146 bool is_persistent) { |
| 1147 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1147 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 1148 current_user_wallpaper_info_ = info; | 1148 current_user_wallpaper_info_ = info; |
| 1149 if (!is_persistent) | 1149 if (!is_persistent) |
| 1150 return; | 1150 return; |
| 1151 | 1151 |
| 1152 PrefService* local_state = g_browser_process->local_state(); | 1152 PrefService* local_state = g_browser_process->local_state(); |
| 1153 DictionaryPrefUpdate wallpaper_update(local_state, | 1153 DictionaryPrefUpdate wallpaper_update(local_state, |
| 1154 prefs::kUsersWallpaperInfo); | 1154 prefs::kUsersWallpaperInfo); |
| 1155 | 1155 |
| 1156 base::DictionaryValue* wallpaper_info_dict = new base::DictionaryValue(); | 1156 base::DictionaryValue* wallpaper_info_dict = new base::DictionaryValue(); |
| 1157 wallpaper_info_dict->SetString(kNewWallpaperDateNodeName, | 1157 wallpaper_info_dict->SetString(kNewWallpaperDateNodeName, |
| 1158 base::Int64ToString(info.date.ToInternalValue())); | 1158 base::Int64ToString(info.date.ToInternalValue())); |
| 1159 wallpaper_info_dict->SetString(kNewWallpaperFileNodeName, info.file); | 1159 wallpaper_info_dict->SetString(kNewWallpaperLocationNodeName, info.location); |
| 1160 wallpaper_info_dict->SetInteger(kNewWallpaperLayoutNodeName, info.layout); | 1160 wallpaper_info_dict->SetInteger(kNewWallpaperLayoutNodeName, info.layout); |
| 1161 wallpaper_info_dict->SetInteger(kNewWallpaperTypeNodeName, info.type); | 1161 wallpaper_info_dict->SetInteger(kNewWallpaperTypeNodeName, info.type); |
| 1162 wallpaper_update->SetWithoutPathExpansion(user_id, wallpaper_info_dict); | 1162 wallpaper_update->SetWithoutPathExpansion(user_id, wallpaper_info_dict); |
| 1163 } | 1163 } |
| 1164 | 1164 |
| 1165 void WallpaperManager::SetUserWallpaperDelayed(const std::string& user_id) { | 1165 void WallpaperManager::SetUserWallpaperDelayed(const std::string& user_id) { |
| 1166 ScheduleSetUserWallpaper(user_id, true); | 1166 ScheduleSetUserWallpaper(user_id, true); |
| 1167 } | 1167 } |
| 1168 | 1168 |
| 1169 void WallpaperManager::SetUserWallpaperNow(const std::string& user_id) { | 1169 void WallpaperManager::SetUserWallpaperNow(const std::string& user_id) { |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1199 InitInitialUserWallpaper(user_id, true); | 1199 InitInitialUserWallpaper(user_id, true); |
| 1200 GetUserWallpaperInfo(user_id, &info); | 1200 GetUserWallpaperInfo(user_id, &info); |
| 1201 } | 1201 } |
| 1202 | 1202 |
| 1203 gfx::ImageSkia user_wallpaper; | 1203 gfx::ImageSkia user_wallpaper; |
| 1204 current_user_wallpaper_info_ = info; | 1204 current_user_wallpaper_info_ = info; |
| 1205 if (GetWallpaperFromCache(user_id, &user_wallpaper)) { | 1205 if (GetWallpaperFromCache(user_id, &user_wallpaper)) { |
| 1206 GetPendingWallpaper(user_id, delayed) | 1206 GetPendingWallpaper(user_id, delayed) |
| 1207 ->ResetSetWallpaperImage(user_wallpaper, info); | 1207 ->ResetSetWallpaperImage(user_wallpaper, info); |
| 1208 } else { | 1208 } else { |
| 1209 if (info.file.empty()) { | 1209 if (info.location.empty()) { |
| 1210 // Uses default built-in wallpaper when file is empty. Eventually, we | 1210 // Uses default built-in wallpaper when file is empty. Eventually, we |
| 1211 // will only ship one built-in wallpaper in ChromeOS image. | 1211 // will only ship one built-in wallpaper in ChromeOS image. |
| 1212 GetPendingWallpaper(user_id, delayed)->ResetSetDefaultWallpaper(); | 1212 GetPendingWallpaper(user_id, delayed)->ResetSetDefaultWallpaper(); |
| 1213 return; | 1213 return; |
| 1214 } | 1214 } |
| 1215 | 1215 |
| 1216 if (info.type == user_manager::User::CUSTOMIZED || | 1216 if (info.type == user_manager::User::CUSTOMIZED || |
| 1217 info.type == user_manager::User::POLICY) { | 1217 info.type == user_manager::User::POLICY) { |
| 1218 const char* sub_dir = GetCustomWallpaperSubdirForCurrentResolution(); | 1218 const char* sub_dir = GetCustomWallpaperSubdirForCurrentResolution(); |
| 1219 // Wallpaper is not resized when layout is ash::WALLPAPER_LAYOUT_CENTER. | 1219 // Wallpaper is not resized when layout is ash::WALLPAPER_LAYOUT_CENTER. |
| 1220 // Original wallpaper should be used in this case. | 1220 // Original wallpaper should be used in this case. |
| 1221 // TODO(bshe): Generates cropped custom wallpaper for CENTER layout. | 1221 // TODO(bshe): Generates cropped custom wallpaper for CENTER layout. |
| 1222 if (info.layout == ash::WALLPAPER_LAYOUT_CENTER) | 1222 if (info.layout == ash::WALLPAPER_LAYOUT_CENTER) |
| 1223 sub_dir = kOriginalWallpaperSubDir; | 1223 sub_dir = kOriginalWallpaperSubDir; |
| 1224 base::FilePath wallpaper_path = GetCustomWallpaperDir(sub_dir); | 1224 base::FilePath wallpaper_path = GetCustomWallpaperDir(sub_dir); |
| 1225 wallpaper_path = wallpaper_path.Append(info.file); | 1225 wallpaper_path = wallpaper_path.Append(info.location); |
| 1226 if (current_wallpaper_path_ == wallpaper_path) | 1226 if (current_wallpaper_path_ == wallpaper_path) |
| 1227 return; | 1227 return; |
| 1228 current_wallpaper_path_ = wallpaper_path; | 1228 current_wallpaper_path_ = wallpaper_path; |
| 1229 loaded_wallpapers_++; | 1229 loaded_wallpapers_++; |
| 1230 | 1230 |
| 1231 GetPendingWallpaper(user_id, delayed) | 1231 GetPendingWallpaper(user_id, delayed) |
| 1232 ->ResetSetCustomWallpaper(info, wallpaper_path); | 1232 ->ResetSetCustomWallpaper(info, wallpaper_path); |
| 1233 return; | 1233 return; |
| 1234 } | 1234 } |
| 1235 | 1235 |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1314 CacheUserWallpaper(user_id); | 1314 CacheUserWallpaper(user_id); |
| 1315 } | 1315 } |
| 1316 } | 1316 } |
| 1317 } | 1317 } |
| 1318 | 1318 |
| 1319 void WallpaperManager::CacheUserWallpaper(const std::string& user_id) { | 1319 void WallpaperManager::CacheUserWallpaper(const std::string& user_id) { |
| 1320 if (wallpaper_cache_.find(user_id) != wallpaper_cache_.end()) | 1320 if (wallpaper_cache_.find(user_id) != wallpaper_cache_.end()) |
| 1321 return; | 1321 return; |
| 1322 WallpaperInfo info; | 1322 WallpaperInfo info; |
| 1323 if (GetUserWallpaperInfo(user_id, &info)) { | 1323 if (GetUserWallpaperInfo(user_id, &info)) { |
| 1324 if (info.file.empty()) | 1324 if (info.location.empty()) |
| 1325 return; | 1325 return; |
| 1326 | 1326 |
| 1327 base::FilePath wallpaper_dir; | 1327 base::FilePath wallpaper_dir; |
| 1328 base::FilePath wallpaper_path; | 1328 base::FilePath wallpaper_path; |
| 1329 if (info.type == user_manager::User::CUSTOMIZED || | 1329 if (info.type == user_manager::User::CUSTOMIZED || |
| 1330 info.type == user_manager::User::POLICY) { | 1330 info.type == user_manager::User::POLICY) { |
| 1331 const char* sub_dir = GetCustomWallpaperSubdirForCurrentResolution(); | 1331 const char* sub_dir = GetCustomWallpaperSubdirForCurrentResolution(); |
| 1332 base::FilePath wallpaper_path = GetCustomWallpaperDir(sub_dir); | 1332 base::FilePath wallpaper_path = GetCustomWallpaperDir(sub_dir); |
| 1333 wallpaper_path = wallpaper_path.Append(info.file); | 1333 wallpaper_path = wallpaper_path.Append(info.location); |
| 1334 task_runner_->PostTask( | 1334 task_runner_->PostTask( |
| 1335 FROM_HERE, | 1335 FROM_HERE, |
| 1336 base::Bind(&WallpaperManager::GetCustomWallpaperInternal, | 1336 base::Bind(&WallpaperManager::GetCustomWallpaperInternal, |
| 1337 user_id, | 1337 user_id, |
| 1338 info, | 1338 info, |
| 1339 wallpaper_path, | 1339 wallpaper_path, |
| 1340 false /* do not update wallpaper */, | 1340 false /* do not update wallpaper */, |
| 1341 base::Passed(MovableOnDestroyCallbackHolder()), | 1341 base::Passed(MovableOnDestroyCallbackHolder()), |
| 1342 weak_factory_.GetWeakPtr())); | 1342 weak_factory_.GetWeakPtr())); |
| 1343 return; | 1343 return; |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1436 void WallpaperManager::LoadWallpaper(const std::string& user_id, | 1436 void WallpaperManager::LoadWallpaper(const std::string& user_id, |
| 1437 const WallpaperInfo& info, | 1437 const WallpaperInfo& info, |
| 1438 bool update_wallpaper, | 1438 bool update_wallpaper, |
| 1439 MovableOnDestroyCallbackHolder on_finish) { | 1439 MovableOnDestroyCallbackHolder on_finish) { |
| 1440 base::FilePath wallpaper_dir; | 1440 base::FilePath wallpaper_dir; |
| 1441 base::FilePath wallpaper_path; | 1441 base::FilePath wallpaper_path; |
| 1442 | 1442 |
| 1443 // Do a sanity check that file path information is not empty. | 1443 // Do a sanity check that file path information is not empty. |
| 1444 if (info.type == user_manager::User::ONLINE || | 1444 if (info.type == user_manager::User::ONLINE || |
| 1445 info.type == user_manager::User::DEFAULT) { | 1445 info.type == user_manager::User::DEFAULT) { |
| 1446 if (info.file.empty()) { | 1446 if (info.location.empty()) { |
| 1447 if (base::SysInfo::IsRunningOnChromeOS()) { | 1447 if (base::SysInfo::IsRunningOnChromeOS()) { |
| 1448 NOTREACHED() << "User wallpaper info appears to be broken: " << user_id; | 1448 NOTREACHED() << "User wallpaper info appears to be broken: " << user_id; |
| 1449 } else { | 1449 } else { |
| 1450 // Filename might be empty on debug configurations when stub users | 1450 // Filename might be empty on debug configurations when stub users |
| 1451 // were created directly in Local State (for testing). Ignore such | 1451 // were created directly in Local State (for testing). Ignore such |
| 1452 // errors i.e. allowsuch type of debug configurations on the desktop. | 1452 // errors i.e. allowsuch type of debug configurations on the desktop. |
| 1453 LOG(WARNING) << "User wallpaper info is empty: " << user_id; | 1453 LOG(WARNING) << "User wallpaper info is empty: " << user_id; |
| 1454 | 1454 |
| 1455 // |on_finish| callback will get called on destruction. | 1455 // |on_finish| callback will get called on destruction. |
| 1456 return; | 1456 return; |
| 1457 } | 1457 } |
| 1458 } | 1458 } |
| 1459 } | 1459 } |
| 1460 | 1460 |
| 1461 if (info.type == user_manager::User::ONLINE) { | 1461 if (info.type == user_manager::User::ONLINE) { |
| 1462 std::string file_name = GURL(info.file).ExtractFileName(); | 1462 std::string file_name = GURL(info.location).ExtractFileName(); |
| 1463 WallpaperResolution resolution = GetAppropriateResolution(); | 1463 WallpaperResolution resolution = GetAppropriateResolution(); |
| 1464 // Only solid color wallpapers have stretch layout and they have only one | 1464 // Only solid color wallpapers have stretch layout and they have only one |
| 1465 // resolution. | 1465 // resolution. |
| 1466 if (info.layout != ash::WALLPAPER_LAYOUT_STRETCH && | 1466 if (info.layout != ash::WALLPAPER_LAYOUT_STRETCH && |
| 1467 resolution == WALLPAPER_RESOLUTION_SMALL) { | 1467 resolution == WALLPAPER_RESOLUTION_SMALL) { |
| 1468 file_name = base::FilePath(file_name).InsertBeforeExtension( | 1468 file_name = base::FilePath(file_name).InsertBeforeExtension( |
| 1469 kSmallWallpaperSuffix).value(); | 1469 kSmallWallpaperSuffix).value(); |
| 1470 } | 1470 } |
| 1471 CHECK(PathService::Get(chrome::DIR_CHROMEOS_WALLPAPERS, &wallpaper_dir)); | 1471 CHECK(PathService::Get(chrome::DIR_CHROMEOS_WALLPAPERS, &wallpaper_dir)); |
| 1472 wallpaper_path = wallpaper_dir.Append(file_name); | 1472 wallpaper_path = wallpaper_dir.Append(file_name); |
| 1473 if (current_wallpaper_path_ == wallpaper_path) | 1473 if (current_wallpaper_path_ == wallpaper_path) |
| 1474 return; | 1474 return; |
| 1475 | 1475 |
| 1476 if (update_wallpaper) | 1476 if (update_wallpaper) |
| 1477 current_wallpaper_path_ = wallpaper_path; | 1477 current_wallpaper_path_ = wallpaper_path; |
| 1478 | 1478 |
| 1479 loaded_wallpapers_++; | 1479 loaded_wallpapers_++; |
| 1480 StartLoad( | 1480 StartLoad( |
| 1481 user_id, info, update_wallpaper, wallpaper_path, on_finish.Pass()); | 1481 user_id, info, update_wallpaper, wallpaper_path, on_finish.Pass()); |
| 1482 } else if (info.type == user_manager::User::DEFAULT) { | 1482 } else if (info.type == user_manager::User::DEFAULT) { |
| 1483 // Default wallpapers are migrated from M21 user profiles. A code refactor | 1483 // Default wallpapers are migrated from M21 user profiles. A code refactor |
| 1484 // overlooked that case and caused these wallpapers not being loaded at all. | 1484 // overlooked that case and caused these wallpapers not being loaded at all. |
| 1485 // On some slow devices, it caused login webui not visible after upgrade to | 1485 // On some slow devices, it caused login webui not visible after upgrade to |
| 1486 // M26 from M21. See crosbug.com/38429 for details. | 1486 // M26 from M21. See crosbug.com/38429 for details. |
| 1487 base::FilePath user_data_dir; | 1487 base::FilePath user_data_dir; |
| 1488 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); | 1488 PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); |
| 1489 wallpaper_path = user_data_dir.Append(info.file); | 1489 wallpaper_path = user_data_dir.Append(info.location); |
| 1490 StartLoad( | 1490 StartLoad( |
| 1491 user_id, info, update_wallpaper, wallpaper_path, on_finish.Pass()); | 1491 user_id, info, update_wallpaper, wallpaper_path, on_finish.Pass()); |
| 1492 } else { | 1492 } else { |
| 1493 // In unexpected cases, revert to default wallpaper to fail safely. See | 1493 // In unexpected cases, revert to default wallpaper to fail safely. See |
| 1494 // crosbug.com/38429. | 1494 // crosbug.com/38429. |
| 1495 LOG(ERROR) << "Wallpaper reverts to default unexpected."; | 1495 LOG(ERROR) << "Wallpaper reverts to default unexpected."; |
| 1496 DoSetDefaultWallpaper(user_id, on_finish.Pass()); | 1496 DoSetDefaultWallpaper(user_id, on_finish.Pass()); |
| 1497 } | 1497 } |
| 1498 } | 1498 } |
| 1499 | 1499 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1511 } | 1511 } |
| 1512 | 1512 |
| 1513 const base::DictionaryValue* info_dict; | 1513 const base::DictionaryValue* info_dict; |
| 1514 if (!g_browser_process->local_state()-> | 1514 if (!g_browser_process->local_state()-> |
| 1515 GetDictionary(prefs::kUsersWallpaperInfo)-> | 1515 GetDictionary(prefs::kUsersWallpaperInfo)-> |
| 1516 GetDictionaryWithoutPathExpansion(user_id, &info_dict)) { | 1516 GetDictionaryWithoutPathExpansion(user_id, &info_dict)) { |
| 1517 return false; | 1517 return false; |
| 1518 } | 1518 } |
| 1519 | 1519 |
| 1520 // Use temporary variables to keep |info| untouched in the error case. | 1520 // Use temporary variables to keep |info| untouched in the error case. |
| 1521 std::string file; | 1521 std::string location; |
| 1522 if (!info_dict->GetString(kNewWallpaperFileNodeName, &file)) | 1522 if (!info_dict->GetString(kNewWallpaperLocationNodeName, &location)) |
| 1523 return false; | 1523 return false; |
| 1524 int layout; | 1524 int layout; |
| 1525 if (!info_dict->GetInteger(kNewWallpaperLayoutNodeName, &layout)) | 1525 if (!info_dict->GetInteger(kNewWallpaperLayoutNodeName, &layout)) |
| 1526 return false; | 1526 return false; |
| 1527 int type; | 1527 int type; |
| 1528 if (!info_dict->GetInteger(kNewWallpaperTypeNodeName, &type)) | 1528 if (!info_dict->GetInteger(kNewWallpaperTypeNodeName, &type)) |
| 1529 return false; | 1529 return false; |
| 1530 std::string date_string; | 1530 std::string date_string; |
| 1531 if (!info_dict->GetString(kNewWallpaperDateNodeName, &date_string)) | 1531 if (!info_dict->GetString(kNewWallpaperDateNodeName, &date_string)) |
| 1532 return false; | 1532 return false; |
| 1533 int64 date_val; | 1533 int64 date_val; |
| 1534 if (!base::StringToInt64(date_string, &date_val)) | 1534 if (!base::StringToInt64(date_string, &date_val)) |
| 1535 return false; | 1535 return false; |
| 1536 | 1536 |
| 1537 info->file = file; | 1537 info->location = location; |
| 1538 info->layout = static_cast<ash::WallpaperLayout>(layout); | 1538 info->layout = static_cast<ash::WallpaperLayout>(layout); |
| 1539 info->type = static_cast<user_manager::User::WallpaperType>(type); | 1539 info->type = static_cast<user_manager::User::WallpaperType>(type); |
| 1540 info->date = base::Time::FromInternalValue(date_val); | 1540 info->date = base::Time::FromInternalValue(date_val); |
| 1541 return true; | 1541 return true; |
| 1542 } | 1542 } |
| 1543 | 1543 |
| 1544 void WallpaperManager::MoveCustomWallpapersSuccess( | 1544 void WallpaperManager::MoveCustomWallpapersSuccess( |
| 1545 const std::string& user_id, | 1545 const std::string& user_id, |
| 1546 const std::string& user_id_hash) { | 1546 const std::string& user_id_hash) { |
| 1547 WallpaperInfo info; | 1547 WallpaperInfo info; |
| 1548 GetUserWallpaperInfo(user_id, &info); | 1548 GetUserWallpaperInfo(user_id, &info); |
| 1549 if (info.type == user_manager::User::CUSTOMIZED) { | 1549 if (info.type == user_manager::User::CUSTOMIZED) { |
| 1550 // New file field should include user id hash in addition to file name. | 1550 // New file field should include user id hash in addition to file name. |
| 1551 // This is needed because at login screen, user id hash is not available. | 1551 // This is needed because at login screen, user id hash is not available. |
| 1552 std::string relative_path = | 1552 info.location = base::FilePath(user_id_hash).Append(info.location).value(); |
| 1553 base::FilePath(user_id_hash).Append(info.file).value(); | |
| 1554 info.file = relative_path; | |
| 1555 bool is_persistent = | 1553 bool is_persistent = |
| 1556 !UserManager::Get()->IsUserNonCryptohomeDataEphemeral(user_id); | 1554 !UserManager::Get()->IsUserNonCryptohomeDataEphemeral(user_id); |
| 1557 SetUserWallpaperInfo(user_id, info, is_persistent); | 1555 SetUserWallpaperInfo(user_id, info, is_persistent); |
| 1558 } | 1556 } |
| 1559 } | 1557 } |
| 1560 | 1558 |
| 1561 void WallpaperManager::MoveLoggedInUserCustomWallpaper() { | 1559 void WallpaperManager::MoveLoggedInUserCustomWallpaper() { |
| 1562 const user_manager::User* logged_in_user = | 1560 const user_manager::User* logged_in_user = |
| 1563 UserManager::Get()->GetLoggedInUser(); | 1561 UserManager::Get()->GetLoggedInUser(); |
| 1564 task_runner_->PostTask( | 1562 task_runner_->PostTask( |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1938 void WallpaperManager::CreateSolidDefaultWallpaper() { | 1936 void WallpaperManager::CreateSolidDefaultWallpaper() { |
| 1939 loaded_wallpapers_++; | 1937 loaded_wallpapers_++; |
| 1940 SkBitmap bitmap; | 1938 SkBitmap bitmap; |
| 1941 bitmap.allocN32Pixels(1, 1); | 1939 bitmap.allocN32Pixels(1, 1); |
| 1942 bitmap.eraseColor(kDefaultWallpaperColor); | 1940 bitmap.eraseColor(kDefaultWallpaperColor); |
| 1943 const gfx::ImageSkia image = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); | 1941 const gfx::ImageSkia image = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); |
| 1944 default_wallpaper_image_.reset(new user_manager::UserImage(image)); | 1942 default_wallpaper_image_.reset(new user_manager::UserImage(image)); |
| 1945 } | 1943 } |
| 1946 | 1944 |
| 1947 } // namespace chromeos | 1945 } // namespace chromeos |
| OLD | NEW |