Index: chrome/browser/chromeos/extensions/wallpaper_api.cc |
diff --git a/chrome/browser/chromeos/extensions/wallpaper_api.cc b/chrome/browser/chromeos/extensions/wallpaper_api.cc |
index 64be4aae1c43ff7c1c22cac8da48ddab10af8926..399b846a558a42e0ceef85e51f9fe990e66115c2 100644 |
--- a/chrome/browser/chromeos/extensions/wallpaper_api.cc |
+++ b/chrome/browser/chromeos/extensions/wallpaper_api.cc |
@@ -153,42 +153,31 @@ void WallpaperSetWallpaperFunction::OnWallpaperDecoded( |
user_manager::User::CUSTOMIZED, image, update_wallpaper); |
unsafe_wallpaper_decoder_ = NULL; |
- if (params_->details.thumbnail) { |
- image.EnsureRepsForSupportedScales(); |
- scoped_ptr<gfx::ImageSkia> deep_copy(image.DeepCopy()); |
- // Generates thumbnail before call api function callback. We can then |
- // request thumbnail in the javascript callback. |
- task_runner->PostTask( |
- FROM_HERE, |
- base::Bind(&WallpaperSetWallpaperFunction::GenerateThumbnail, this, |
- thumbnail_path, base::Passed(std::move(deep_copy)))); |
+ // Save current extenion name. It will be displayed in the component |
+ // wallpaper picker app. If current extension is the component wallpaper |
+ // picker, set an empty string. |
+ Profile* profile = Profile::FromBrowserContext(browser_context()); |
+ if (extension()->id() == extension_misc::kWallpaperManagerId) { |
+ profile->GetPrefs()->SetString(prefs::kCurrentWallpaperAppName, |
+ std::string()); |
} else { |
- // Save current extenion name. It will be displayed in the component |
- // wallpaper picker app. If current extension is the component wallpaper |
- // picker, set an empty string. |
- Profile* profile = Profile::FromBrowserContext(browser_context()); |
- if (extension()->id() == extension_misc::kWallpaperManagerId) { |
- profile->GetPrefs()->SetString(prefs::kCurrentWallpaperAppName, |
- std::string()); |
- } else { |
- profile->GetPrefs()->SetString(prefs::kCurrentWallpaperAppName, |
- extension()->name()); |
- } |
- SendResponse(true); |
+ profile->GetPrefs()->SetString(prefs::kCurrentWallpaperAppName, |
+ extension()->name()); |
} |
- // Inform the native Wallpaper Picker Application that the current wallpaper |
- // has been modified by a third party application. |
- Profile* profile = Profile::FromBrowserContext(browser_context()); |
- extensions::EventRouter* event_router = extensions::EventRouter::Get(profile); |
- scoped_ptr<base::ListValue> event_args(new base::ListValue()); |
- scoped_ptr<extensions::Event> event(new extensions::Event( |
- extensions::events::WALLPAPER_PRIVATE_ON_WALLPAPER_CHANGED_BY_3RD_PARTY, |
- extensions::api::wallpaper_private::OnWallpaperChangedBy3rdParty:: |
- kEventName, |
- std::move(event_args))); |
- event_router->DispatchEventToExtension(extension_misc::kWallpaperManagerId, |
- std::move(event)); |
+ if (!params_->details.thumbnail) |
+ SendResponse(true); |
+ |
+ // We need to generate thumbnail image anyway to make the current third party |
+ // wallpaper syncable through different devices. |
+ image.EnsureRepsForSupportedScales(); |
+ scoped_ptr<gfx::ImageSkia> deep_copy(image.DeepCopy()); |
+ // Generates thumbnail before call api function callback. We can then |
+ // request thumbnail in the javascript callback. |
+ task_runner->PostTask( |
+ FROM_HERE, |
+ base::Bind(&WallpaperSetWallpaperFunction::GenerateThumbnail, this, |
+ thumbnail_path, base::Passed(std::move(deep_copy)))); |
} |
void WallpaperSetWallpaperFunction::GenerateThumbnail( |
@@ -198,24 +187,52 @@ void WallpaperSetWallpaperFunction::GenerateThumbnail( |
if (!base::PathExists(thumbnail_path.DirName())) |
base::CreateDirectory(thumbnail_path.DirName()); |
- scoped_refptr<base::RefCountedBytes> data; |
+ scoped_refptr<base::RefCountedBytes> original_data; |
+ scoped_refptr<base::RefCountedBytes> thumbnail_data; |
+ chromeos::WallpaperManager::Get()->ResizeImage( |
+ *image, wallpaper::WALLPAPER_LAYOUT_STRETCH, image->width(), |
+ image->height(), &original_data, NULL); |
chromeos::WallpaperManager::Get()->ResizeImage( |
*image, wallpaper::WALLPAPER_LAYOUT_STRETCH, |
wallpaper::kWallpaperThumbnailWidth, wallpaper::kWallpaperThumbnailHeight, |
- &data, NULL); |
+ &thumbnail_data, NULL); |
BrowserThread::PostTask( |
BrowserThread::UI, FROM_HERE, |
- base::Bind( |
- &WallpaperSetWallpaperFunction::ThumbnailGenerated, |
- this, data)); |
+ base::Bind(&WallpaperSetWallpaperFunction::ThumbnailGenerated, this, |
+ original_data, thumbnail_data)); |
} |
void WallpaperSetWallpaperFunction::ThumbnailGenerated( |
- base::RefCountedBytes* data) { |
- BinaryValue* result = BinaryValue::CreateWithCopiedBuffer( |
- reinterpret_cast<const char*>(data->front()), data->size()); |
- SetResult(result); |
- SendResponse(true); |
+ base::RefCountedBytes* original_data, |
+ base::RefCountedBytes* thumbnail_data) { |
+ BinaryValue* original_result = BinaryValue::CreateWithCopiedBuffer( |
+ reinterpret_cast<const char*>(original_data->front()), |
+ original_data->size()); |
+ BinaryValue* thumbnail_result = BinaryValue::CreateWithCopiedBuffer( |
+ reinterpret_cast<const char*>(thumbnail_data->front()), |
+ thumbnail_data->size()); |
+ |
+ if (params_->details.thumbnail) { |
+ SetResult(thumbnail_result); |
+ SendResponse(true); |
+ } |
+ |
+ // Inform the native Wallpaper Picker Application that the current wallpaper |
+ // has been modified by a third party application. |
+ Profile* profile = Profile::FromBrowserContext(browser_context()); |
+ extensions::EventRouter* event_router = extensions::EventRouter::Get(profile); |
+ scoped_ptr<base::ListValue> event_args(new base::ListValue()); |
+ event_args->Append(original_result); |
+ event_args->Append(thumbnail_result); |
+ event_args->Append(new base::StringValue( |
+ extensions::api::wallpaper::ToString(params_->details.layout))); |
+ scoped_ptr<extensions::Event> event(new extensions::Event( |
+ extensions::events::WALLPAPER_PRIVATE_ON_WALLPAPER_CHANGED_BY_3RD_PARTY, |
+ extensions::api::wallpaper_private::OnWallpaperChangedBy3rdParty:: |
+ kEventName, |
+ std::move(event_args))); |
+ event_router->DispatchEventToExtension(extension_misc::kWallpaperManagerId, |
+ std::move(event)); |
} |
void WallpaperSetWallpaperFunction::OnWallpaperFetched( |