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

Unified Diff: chrome/browser/chromeos/extensions/wallpaper_private_api.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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/extensions/wallpaper_private_api.cc
diff --git a/chrome/browser/chromeos/extensions/wallpaper_private_api.cc b/chrome/browser/chromeos/extensions/wallpaper_private_api.cc
index 08fd8aa9f5aef85aadd6c8d13a61cd186cbec4ab..fb3f871a9bfcb477be38c294c792b983e683a9fb 100644
--- a/chrome/browser/chromeos/extensions/wallpaper_private_api.cc
+++ b/chrome/browser/chromeos/extensions/wallpaper_private_api.cc
@@ -286,10 +286,14 @@ void WallpaperSetWallpaperFunction::SaveToFile() {
if (file_util::PathExists(file_path) ||
file_util::WriteFile(file_path, image_data_.c_str(),
image_data_.size()) != -1 ) {
+ wallpaper_.EnsureRepsForSupportedScaleFactors();
+ scoped_ptr<gfx::ImageSkia> deep_copy(wallpaper_.DeepCopy());
+ // ImageSkia is not RefCountedThreadSafe. Use a deep copied ImageSkia if
+ // post to another thread.
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&WallpaperSetWallpaperFunction::SetDecodedWallpaper,
- this));
+ this, base::Passed(&deep_copy)));
chromeos::UserImage wallpaper(wallpaper_);
// Generates and saves small resolution wallpaper. Uses CENTER_CROPPED to
@@ -309,10 +313,11 @@ void WallpaperSetWallpaperFunction::SaveToFile() {
}
}
-void WallpaperSetWallpaperFunction::SetDecodedWallpaper() {
+void WallpaperSetWallpaperFunction::SetDecodedWallpaper(
+ scoped_ptr<gfx::ImageSkia> wallpaper) {
chromeos::WallpaperManager* wallpaper_manager =
chromeos::WallpaperManager::Get();
- wallpaper_manager->SetWallpaperFromImageSkia(wallpaper_, layout_);
+ wallpaper_manager->SetWallpaperFromImageSkia(*wallpaper.get(), layout_);
bool is_persistent =
!chromeos::UserManager::Get()->IsCurrentUserEphemeral();
chromeos::WallpaperInfo info = {
« no previous file with comments | « chrome/browser/chromeos/extensions/wallpaper_private_api.h ('k') | chrome/browser/chromeos/login/wallpaper_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698