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 420d44793505c7ebe2e32d08c9324586d7706dfb..86671e94f8e5cff749e87522245ed1c8af4baa96 100644 |
--- a/chrome/browser/chromeos/extensions/wallpaper_private_api.cc |
+++ b/chrome/browser/chromeos/extensions/wallpaper_private_api.cc |
@@ -524,6 +524,11 @@ bool WallpaperPrivateSetCustomWallpaperFunction::RunImpl() { |
EXTENSION_FUNCTION_VALIDATE(!layout_string.empty()); |
layout_ = GetLayoutEnum(layout_string); |
+ EXTENSION_FUNCTION_VALIDATE(args_->GetBoolean(2, &generate_thumbnail_)); |
+ |
+ EXTENSION_FUNCTION_VALIDATE(args_->GetString(3, &file_name_)); |
+ EXTENSION_FUNCTION_VALIDATE(!file_name_.empty()); |
+ |
// Gets email address while at UI thread. |
email_ = chromeos::UserManager::Get()->GetLoggedInUser()->email(); |
@@ -540,9 +545,8 @@ void WallpaperPrivateSetCustomWallpaperFunction::OnWallpaperDecoded( |
chromeos::UserImage::RawImage raw_image(image_data_.begin(), |
image_data_.end()); |
chromeos::UserImage image(wallpaper, raw_image); |
- std::string file = base::Int64ToString(base::Time::Now().ToInternalValue()); |
base::FilePath thumbnail_path = wallpaper_manager->GetCustomWallpaperPath( |
- chromeos::kThumbnailWallpaperSubDir, email_, file); |
+ chromeos::kThumbnailWallpaperSubDir, email_, file_name_); |
sequence_token_ = BrowserThread::GetBlockingPool()-> |
GetNamedSequenceToken(chromeos::kWallpaperSequenceTokenName); |
@@ -551,20 +555,25 @@ void WallpaperPrivateSetCustomWallpaperFunction::OnWallpaperDecoded( |
GetSequencedTaskRunnerWithShutdownBehavior(sequence_token_, |
base::SequencedWorkerPool::BLOCK_SHUTDOWN); |
- wallpaper.EnsureRepsForSupportedScaleFactors(); |
- scoped_ptr<gfx::ImageSkia> deep_copy(wallpaper.DeepCopy()); |
- // Generates thumbnail before call api function callback. We can then request |
- // thumbnail in the javascript callback. |
- task_runner->PostTask(FROM_HERE, |
- base::Bind(&WallpaperPrivateSetCustomWallpaperFunction::GenerateThumbnail, |
- this, thumbnail_path, base::Passed(&deep_copy))); |
- |
// In the new wallpaper picker UI, we do not depend on WallpaperDelegate |
// to refresh thumbnail. Uses a null delegate here. |
- wallpaper_manager->SetCustomWallpaper(email_, file, layout_, |
+ wallpaper_manager->SetCustomWallpaper(email_, file_name_, layout_, |
chromeos::User::CUSTOMIZED, |
image); |
wallpaper_decoder_ = NULL; |
+ |
+ if (generate_thumbnail_) { |
+ wallpaper.EnsureRepsForSupportedScaleFactors(); |
+ scoped_ptr<gfx::ImageSkia> deep_copy(wallpaper.DeepCopy()); |
+ // Generates thumbnail before call api function callback. We can then |
+ // request thumbnail in the javascript callback. |
+ task_runner->PostTask(FROM_HERE, |
+ base::Bind( |
+ &WallpaperPrivateSetCustomWallpaperFunction::GenerateThumbnail, |
+ this, thumbnail_path, base::Passed(&deep_copy))); |
+ } else { |
+ SendResponse(true); |
+ } |
} |
void WallpaperPrivateSetCustomWallpaperFunction::GenerateThumbnail( |
@@ -575,23 +584,25 @@ void WallpaperPrivateSetCustomWallpaperFunction::GenerateThumbnail( |
if (!file_util::PathExists(thumbnail_path.DirName())) |
file_util::CreateDirectory(thumbnail_path.DirName()); |
- chromeos::WallpaperManager::Get()->ResizeAndSaveWallpaper( |
+ scoped_refptr<base::RefCountedBytes> data; |
+ chromeos::WallpaperManager::Get()->ResizeWallpaper( |
wallpaper, |
- thumbnail_path, |
ash::WALLPAPER_LAYOUT_STRETCH, |
ash::kWallpaperThumbnailWidth, |
- ash::kWallpaperThumbnailHeight); |
- std::string file_name = thumbnail_path.BaseName().value(); |
+ ash::kWallpaperThumbnailHeight, |
+ &data); |
BrowserThread::PostTask( |
BrowserThread::UI, FROM_HERE, |
base::Bind( |
&WallpaperPrivateSetCustomWallpaperFunction::ThumbnailGenerated, |
- this, file_name)); |
+ this, data)); |
} |
void WallpaperPrivateSetCustomWallpaperFunction::ThumbnailGenerated( |
- const std::string& file_name) { |
- SetResult(new base::StringValue(file_name)); |
+ base::RefCountedBytes* data) { |
+ BinaryValue* result = BinaryValue::CreateWithCopiedBuffer( |
+ reinterpret_cast<const char*>(data->front()), data->size()); |
+ SetResult(result); |
SendResponse(true); |
} |