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

Unified Diff: trunk/src/chrome/browser/extensions/image_loader.cc

Issue 26511002: Revert 227477 "Refactored loading of applications / extensions i..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years, 2 months 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: trunk/src/chrome/browser/extensions/image_loader.cc
===================================================================
--- trunk/src/chrome/browser/extensions/image_loader.cc (revision 227519)
+++ trunk/src/chrome/browser/extensions/image_loader.cc (working copy)
@@ -7,7 +7,6 @@
#include <map>
#include <vector>
-#include "base/base64.h"
#include "base/callback.h"
#include "base/compiler_specific.h"
#include "base/file_util.h"
@@ -16,26 +15,16 @@
#include "base/strings/string_number_conversions.h"
#include "base/threading/sequenced_worker_pool.h"
#include "chrome/browser/extensions/image_loader_factory.h"
-#include "chrome/browser/favicon/favicon_service.h"
-#include "chrome/browser/favicon/favicon_service_factory.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/extensions/extension.h"
-#include "chrome/common/extensions/extension_icon_set.h"
-#include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
-#include "chrome/common/extensions/manifest_handlers/icons_handler.h"
#include "content/public/browser/browser_thread.h"
-#include "content/public/common/url_constants.h"
#include "grit/chrome_unscaled_resources.h"
#include "grit/component_extension_resources_map.h"
#include "grit/theme_resources.h"
#include "skia/ext/image_operations.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/codec/png_codec.h"
-#include "ui/gfx/color_utils.h"
-#include "ui/gfx/favicon_size.h"
#include "ui/gfx/image/image_skia.h"
-#include "ui/gfx/size.h"
-#include "ui/gfx/skbitmap_operations.h"
#if defined(USE_AURA)
#include "ui/keyboard/keyboard_util.h"
@@ -126,54 +115,6 @@
}
}
-// Returns a PNG image data URL of a given image.
-GURL GetImageDataURL(const gfx::Image& image) {
- if (image.IsEmpty())
- return GURL();
-
- scoped_refptr<base::RefCountedMemory> mem =
- ImageLoader::BitmapToMemory(image.ToSkBitmap());
- std::string contents_base64;
- // TODO(dvh): contents_base64 calculation of the result of the function is
- // sub-optimal: it's a concatenation of 3 strings and |contents_base64| can
- // be huge. Additionally, the GURL is returned by copy.
- // crbug/304759.
- if (!base::Base64Encode(
- std::string(reinterpret_cast<const char*>(mem->front()), mem->size()),
- &contents_base64))
- return GURL();
-
- const char kDataURLPrefix[] = ":image/png;base64,";
- return GURL(std::string(chrome::kDataScheme) + kDataURLPrefix +
- contents_base64);
-}
-
-// Converts the image to grayscale.
-SkBitmap DesaturateImage(const SkBitmap* image) {
- color_utils::HSL shift = {-1, 0, 0.6};
- return SkBitmapOperations::CreateHSLShiftedBitmap(*image, shift);
-}
-
-// Creates an image from PNG data.
-SkBitmap* ToBitmap(const unsigned char* data, size_t size) {
- SkBitmap* decoded = new SkBitmap();
- bool success = gfx::PNGCodec::Decode(data, size, decoded);
- DCHECK(success);
- return decoded;
-}
-
-// Load an image from a resource given its identifier |resource_id|.
-SkBitmap* GetImageByResourceId(int resource_id) {
- std::string contents = ResourceBundle::GetSharedInstance()
- .GetRawDataResourceForScale(resource_id,
- ui::SCALE_FACTOR_100P).as_string();
-
- // Convert and return it.
- const unsigned char* data =
- reinterpret_cast<const unsigned char*>(contents.data());
- return ToBitmap(data, contents.length());
-}
-
} // namespace
namespace extensions {
@@ -224,8 +165,8 @@
////////////////////////////////////////////////////////////////////////////////
// ImageLoader
-ImageLoader::ImageLoader(Profile* profile)
- : weak_ptr_factory_(this), profile_(profile) {
+ImageLoader::ImageLoader()
+ : weak_ptr_factory_(this) {
}
ImageLoader::~ImageLoader() {
@@ -406,273 +347,4 @@
callback.Run(image);
}
-void ImageLoader::LoadExtensionIconAsync(
- const extensions::Extension* extension,
- int icon_size,
- ExtensionIconSet::MatchType match,
- bool grayscale,
- const base::Callback<void(const gfx::Image&)>& callback) {
- // |extension| can be NULL when the default icon is requested. In this case,
- // fail the icon loading, which will result in the default icon being loaded.
- if (extension == NULL) {
- LoadIconFailed(extension, icon_size, grayscale, callback);
- return;
- }
-
- ExtensionResource resource = IconsInfo::GetIconResource(
- extension, icon_size, match);
- LoadImageAsync(extension,
- resource,
- gfx::Size(icon_size, icon_size),
- base::Bind(&ImageLoader::LoadExtensionIconDone,
- base::Unretained(this),
- extension,
- icon_size,
- grayscale,
- callback));
-}
-
-void ImageLoader::LoadExtensionIconDone(
- const extensions::Extension* extension,
- int icon_size,
- bool grayscale,
- const base::Callback<void(const gfx::Image&)>& callback,
- const gfx::Image& image) {
- if (image.IsEmpty())
- LoadIconFailed(extension, icon_size, grayscale, callback);
- else
- FinalizeImage(image, grayscale, callback);
-}
-
-void ImageLoader::LoadIconFailed(
- const extensions::Extension* extension,
- int icon_size,
- bool grayscale,
- const base::Callback<void(const gfx::Image&)>& callback) {
- if ((extension != NULL) &&
- (icon_size == extension_misc::EXTENSION_ICON_BITTY))
- LoadFaviconImage(extension, icon_size, grayscale, callback);
- else
- LoadDefaultImage(extension, icon_size, grayscale, callback);
-}
-
-void ImageLoader::LoadFaviconImage(
- const extensions::Extension* extension,
- int icon_size,
- bool grayscale,
- const base::Callback<void(const gfx::Image&)>& callback) {
- FaviconService* favicon_service = NULL;
- if (profile_ != NULL)
- favicon_service = FaviconServiceFactory::GetForProfile(
- profile_, Profile::EXPLICIT_ACCESS);
- // Fall back to the default icons if the service isn't available.
- if (favicon_service == NULL) {
- LoadDefaultImage(extension, icon_size, grayscale, callback);
- return;
- }
-
- GURL favicon_url = AppLaunchInfo::GetFullLaunchURL(extension);
- favicon_service->GetRawFaviconForURL(
- FaviconService::FaviconForURLParams(
- profile_, favicon_url, chrome::FAVICON, gfx::kFaviconSize),
- ui::SCALE_FACTOR_100P,
- base::Bind(&ImageLoader::OnFaviconDataAvailable,
- base::Unretained(this),
- extension,
- icon_size,
- grayscale,
- callback),
- &cancelable_task_tracker_);
-}
-
-void ImageLoader::OnFaviconDataAvailable(
- const extensions::Extension* extension,
- int icon_size,
- bool grayscale,
- const base::Callback<void(const gfx::Image&)>& callback,
- const chrome::FaviconBitmapResult& bitmap_result) {
- // Fallback to the default icon if there wasn't a favicon.
- if (!bitmap_result.is_valid()) {
- LoadDefaultImage(extension, icon_size, grayscale, callback);
- return;
- }
-
- gfx::Image image = gfx::Image::CreateFrom1xBitmap(*ToBitmap(
- bitmap_result.bitmap_data->front(), bitmap_result.bitmap_data->size()));
- FinalizeImage(image, grayscale, callback);
-}
-
-void ImageLoader::LoadDefaultImage(
- const extensions::Extension* extension,
- int icon_size,
- bool grayscale,
- const base::Callback<void(const gfx::Image&)>& callback) {
- content::BrowserThread::PostTask(
- content::BrowserThread::FILE,
- FROM_HERE,
- base::Bind(&ImageLoader::LoadDefaultImageOnFileThread,
- base::Unretained(this),
- extension,
- icon_size,
- grayscale,
- callback));
-}
-
-void ImageLoader::LoadDefaultImageOnFileThread(
- const extensions::Extension* extension,
- int icon_size,
- bool grayscale,
- const base::Callback<void(const gfx::Image&)>& callback) {
- const SkBitmap* default_image = NULL;
- if ((extension == NULL) || (extension->is_app()))
- default_image = GetDefaultAppImage();
- else
- default_image = GetDefaultExtensionImage();
-
- SkBitmap result_image;
- if (icon_size == -1) {
- // If a specific size was not requested.
- result_image = *default_image;
- } else {
- SkBitmap resized_image(
- skia::ImageOperations::Resize(*default_image,
- skia::ImageOperations::RESIZE_LANCZOS3,
- icon_size,
- icon_size));
- // There are cases where Resize returns an empty bitmap, for example if you
- // ask for an image too large. In this case it is better to return the
- // default image than returning nothing at all.
- if (resized_image.empty())
- resized_image = *default_image;
- result_image = resized_image;
- }
-
- content::BrowserThread::PostTask(
- content::BrowserThread::UI,
- FROM_HERE,
- base::Bind(&ImageLoader::LoadDefaultImageDone,
- base::Unretained(this),
- gfx::Image::CreateFrom1xBitmap(result_image),
- grayscale,
- callback));
-}
-
-void ImageLoader::LoadDefaultImageDone(
- const gfx::Image image,
- bool grayscale,
- const base::Callback<void(const gfx::Image&)>& callback) {
- FinalizeImage(image, grayscale, callback);
-}
-
-void ImageLoader::FinalizeImage(
- const gfx::Image& image,
- bool grayscale,
- const base::Callback<void(const gfx::Image&)>& callback) {
- content::BrowserThread::PostTask(
- content::BrowserThread::FILE,
- FROM_HERE,
- base::Bind(&ImageLoader::FinalizeImageOnFileThread,
- base::Unretained(this),
- image,
- grayscale,
- callback));
-}
-
-void ImageLoader::FinalizeImageOnFileThread(
- const gfx::Image image,
- bool grayscale,
- const base::Callback<void(const gfx::Image&)>& callback) {
- SkBitmap bitmap;
- if (grayscale)
- bitmap = DesaturateImage(image.ToSkBitmap());
- else
- bitmap = *image.ToSkBitmap();
-
- gfx::Image modifiedImage = gfx::Image::CreateFrom1xBitmap(bitmap);
- content::BrowserThread::PostTask(content::BrowserThread::UI,
- FROM_HERE,
- base::Bind(&ImageLoader::FinalizeImageDone,
- base::Unretained(this),
- modifiedImage,
- callback));
-}
-
-void ImageLoader::FinalizeImageDone(
- const gfx::Image image,
- const base::Callback<void(const gfx::Image&)>& callback) {
- callback.Run(image);
-}
-
-void ImageLoader::LoadExtensionIconDataURLAsync(
- const extensions::Extension* extension,
- int icon_size,
- ExtensionIconSet::MatchType match,
- bool grayscale,
- const base::Callback<void(const GURL&)>& callback) {
- LoadExtensionIconAsync(extension,
- icon_size,
- match,
- grayscale,
- base::Bind(&ImageLoader::OnIconAvailable,
- base::Unretained(this),
- callback));
-}
-
-void ImageLoader::OnIconAvailable(
- const base::Callback<void(const GURL&)>& callback,
- const gfx::Image& image) {
- content::BrowserThread::PostTask(
- content::BrowserThread::FILE,
- FROM_HERE,
- base::Bind(&ImageLoader::ConvertIconToURLOnFileThread,
- base::Unretained(this),
- image,
- callback));
-}
-
-void ImageLoader::ConvertIconToURLOnFileThread(
- const gfx::Image image,
- const base::Callback<void(const GURL&)>& callback) {
- GURL url = GetImageDataURL(image);
- // TODO(dvh): |url| can be huge and it's passed by copy to
- // OnIconConvertedToURL(). It can be optimized.
- // crbug/304759.
- content::BrowserThread::PostTask(
- content::BrowserThread::UI,
- FROM_HERE,
- base::Bind(&ImageLoader::OnIconConvertedToURL,
- base::Unretained(this),
- url,
- callback));
-}
-
-void ImageLoader::OnIconConvertedToURL(
- const GURL url,
- const base::Callback<void(const GURL&)>& callback) {
- callback.Run(url);
-}
-
-const SkBitmap* ImageLoader::GetDefaultAppImage() {
- if (!default_app_icon_.get())
- default_app_icon_.reset(GetImageByResourceId(IDR_APP_DEFAULT_ICON));
-
- return default_app_icon_.get();
-}
-
-const SkBitmap* ImageLoader::GetDefaultExtensionImage() {
- if (!default_extension_icon_.get()) {
- default_extension_icon_.reset(
- GetImageByResourceId(IDR_EXTENSION_DEFAULT_ICON));
- }
-
- return default_extension_icon_.get();
-}
-
-scoped_refptr<base::RefCountedMemory> ImageLoader::BitmapToMemory(
- const SkBitmap* image) {
- base::RefCountedBytes* image_bytes = new base::RefCountedBytes;
- gfx::PNGCodec::EncodeBGRASkBitmap(*image, false, &image_bytes->data());
- return image_bytes;
-}
-
} // namespace extensions
« no previous file with comments | « trunk/src/chrome/browser/extensions/image_loader.h ('k') | trunk/src/chrome/browser/extensions/image_loader_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698