Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(433)

Side by Side Diff: chrome/browser/chromeos/login/wallpaper_manager.cc

Issue 11366143: Fix the crash in DesktopBackgroundView::OnPaint (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Oshima's review and rebase to TOT Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/chromeos/login/wallpaper_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/login/wallpaper_manager.h" 5 #include "chrome/browser/chromeos/login/wallpaper_manager.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "ash/desktop_background/desktop_background_controller.h" 9 #include "ash/desktop_background/desktop_background_controller.h"
10 #include "ash/desktop_background/desktop_background_resources.h" 10 #include "ash/desktop_background/desktop_background_resources.h"
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 // If decoded wallpaper is empty, we are probably failed to decode the file. 460 // If decoded wallpaper is empty, we are probably failed to decode the file.
461 // Use default wallpaper in this case. 461 // Use default wallpaper in this case.
462 if (wallpaper.image().isNull()) { 462 if (wallpaper.image().isNull()) {
463 ash::Shell::GetInstance()->desktop_background_controller()-> 463 ash::Shell::GetInstance()->desktop_background_controller()->
464 SetDefaultWallpaper(ash::GetDefaultWallpaperIndex()); 464 SetDefaultWallpaper(ash::GetDefaultWallpaperIndex());
465 return; 465 return;
466 } 466 }
467 467
468 bool is_persistent = ShouldPersistDataForUser(username); 468 bool is_persistent = ShouldPersistDataForUser(username);
469 469
470 wallpaper.image().EnsureRepsForSupportedScaleFactors();
471 scoped_ptr<gfx::ImageSkia> deep_copy(wallpaper.image().DeepCopy());
472
473 WallpaperInfo wallpaper_info = {
474 wallpaper_path,
475 layout,
476 type,
477 // Date field is not used.
478 base::Time::Now().LocalMidnight()
479 };
480 // TODO(bshe): This may break if RawImage becomes RefCountedMemory.
470 BrowserThread::PostTask( 481 BrowserThread::PostTask(
471 BrowserThread::FILE,
472 FROM_HERE,
473 base::Bind(&WallpaperManager::GenerateUserWallpaperThumbnail,
474 base::Unretained(this), username, type, delegate,
475 wallpaper.image()));
476
477 if (is_persistent) {
478 BrowserThread::PostTask(
479 BrowserThread::FILE, 482 BrowserThread::FILE,
480 FROM_HERE, 483 FROM_HERE,
481 base::Bind(&WallpaperManager::SaveCustomWallpaper, 484 base::Bind(&WallpaperManager::ProcessCustomWallpaper,
482 base::Unretained(this), 485 base::Unretained(this),
483 username, 486 username,
484 FilePath(wallpaper_path), 487 is_persistent,
485 layout, 488 wallpaper_info,
486 wallpaper)); 489 delegate,
487 } 490 base::Passed(&deep_copy),
488 491 wallpaper.raw_image()));
489 ash::Shell::GetInstance()->desktop_background_controller()-> 492 ash::Shell::GetInstance()->desktop_background_controller()->
490 SetCustomWallpaper(wallpaper.image(), layout); 493 SetCustomWallpaper(wallpaper.image(), layout);
491 494
492 // User's custom wallpaper path is determined by username/email and the 495 // User's custom wallpaper path is determined by username/email and the
493 // appropriate wallpaper resolution in GetCustomWallpaperInternal. So use 496 // appropriate wallpaper resolution in GetCustomWallpaperInternal. So use
494 // DUMMY as file name here. 497 // DUMMY as file name here.
495 WallpaperInfo info = { 498 WallpaperInfo info = {
496 "DUMMY", 499 "DUMMY",
497 layout, 500 layout,
498 User::CUSTOMIZED, 501 User::CUSTOMIZED,
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after
1097 // Only cache user wallpaper at login screen. 1100 // Only cache user wallpaper at login screen.
1098 if (!UserManager::Get()->IsUserLoggedIn()) { 1101 if (!UserManager::Get()->IsUserLoggedIn()) {
1099 wallpaper_cache_.insert(std::make_pair(email, wallpaper.image())); 1102 wallpaper_cache_.insert(std::make_pair(email, wallpaper.image()));
1100 } 1103 }
1101 if (update_wallpaper) { 1104 if (update_wallpaper) {
1102 ash::Shell::GetInstance()->desktop_background_controller()-> 1105 ash::Shell::GetInstance()->desktop_background_controller()->
1103 SetCustomWallpaper(wallpaper.image(), layout); 1106 SetCustomWallpaper(wallpaper.image(), layout);
1104 } 1107 }
1105 } 1108 }
1106 1109
1110 void WallpaperManager::ProcessCustomWallpaper(
1111 const std::string& email,
1112 bool persistent,
1113 const WallpaperInfo& info,
1114 base::WeakPtr<WallpaperDelegate> delegate,
1115 scoped_ptr<gfx::ImageSkia> image,
1116 const UserImage::RawImage& raw_image) {
1117 UserImage wallpaper(*image.get(), raw_image);
1118 GenerateUserWallpaperThumbnail(email, info.type, delegate, wallpaper.image());
1119 if (persistent)
1120 SaveCustomWallpaper(email, FilePath(info.file), info.layout, wallpaper);
1121 }
1122
1107 void WallpaperManager::OnWallpaperEncoded(const FilePath& path, 1123 void WallpaperManager::OnWallpaperEncoded(const FilePath& path,
1108 scoped_refptr<base::RefCountedBytes> data) { 1124 scoped_refptr<base::RefCountedBytes> data) {
1109 SaveWallpaperInternal(path, 1125 SaveWallpaperInternal(path,
1110 reinterpret_cast<const char*>(data->front()), 1126 reinterpret_cast<const char*>(data->front()),
1111 data->size()); 1127 data->size());
1112 } 1128 }
1113 1129
1114 void WallpaperManager::SaveCustomWallpaper(const std::string& email, 1130 void WallpaperManager::SaveCustomWallpaper(const std::string& email,
1115 const FilePath& path, 1131 const FilePath& path,
1116 ash::WallpaperLayout layout, 1132 ash::WallpaperLayout layout,
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 FROM_HERE, 1223 FROM_HERE,
1208 base::Bind(&WallpaperManager::StartLoad, 1224 base::Bind(&WallpaperManager::StartLoad,
1209 base::Unretained(this), 1225 base::Unretained(this),
1210 email, 1226 email,
1211 info, 1227 info,
1212 update_wallpaper, 1228 update_wallpaper,
1213 valid_path)); 1229 valid_path));
1214 } 1230 }
1215 1231
1216 } // chromeos 1232 } // chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/login/wallpaper_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698