| Index: chrome/browser/extensions/extension_web_ui.cc
|
| diff --git a/chrome/browser/extensions/extension_web_ui.cc b/chrome/browser/extensions/extension_web_ui.cc
|
| index 71f8d41e0845893275ef4df3e2f11c7a939a50ea..1494de9c9241669e870240dfc81011baab56b47e 100644
|
| --- a/chrome/browser/extensions/extension_web_ui.cc
|
| +++ b/chrome/browser/extensions/extension_web_ui.cc
|
| @@ -105,37 +105,44 @@ class ExtensionWebUIImageLoadingTracker : public ImageLoadingTracker::Observer {
|
| gfx::Size(gfx::kFaviconSize, gfx::kFaviconSize),
|
| ImageLoadingTracker::DONT_CACHE);
|
| } else {
|
| - ForwardResult(NULL);
|
| + ForwardResult(gfx::Image());
|
| }
|
| }
|
|
|
| virtual void OnImageLoaded(const gfx::Image& image,
|
| const std::string& extension_id,
|
| int index) OVERRIDE {
|
| - if (!image.IsEmpty()) {
|
| - std::vector<unsigned char> image_data;
|
| - if (!gfx::PNGCodec::EncodeBGRASkBitmap(*image.ToSkBitmap(), false,
|
| - &image_data)) {
|
| - NOTREACHED() << "Could not encode extension favicon";
|
| - }
|
| - ForwardResult(base::RefCountedBytes::TakeVector(&image_data));
|
| - } else {
|
| - ForwardResult(NULL);
|
| - }
|
| + ForwardResult(image);
|
| }
|
|
|
| private:
|
| ~ExtensionWebUIImageLoadingTracker() {}
|
|
|
| - // Forwards the result on the request. If no favicon was available then
|
| - // |icon_data| may be backed by NULL. Once the result has been forwarded the
|
| - // instance is deleted.
|
| - void ForwardResult(scoped_refptr<base::RefCountedMemory> icon_data) {
|
| - history::FaviconData favicon;
|
| - favicon.known_icon = icon_data.get() != NULL && icon_data->size() > 0;
|
| - favicon.image_data = icon_data;
|
| - favicon.icon_type = history::FAVICON;
|
| - request_->ForwardResultAsync(request_->handle(), favicon);
|
| + // Forwards the result of the request. If no favicon was available then
|
| + // |icon| will be empty. Once the result has been forwarded the instance is
|
| + // deleted.
|
| + void ForwardResult(const gfx::Image& icon) {
|
| + std::vector<history::FaviconBitmapResult> favicon_bitmap_results;
|
| + SkBitmap icon_bitmap = icon.AsBitmap();
|
| + if (!icon_bitmap.empty()) {
|
| + scoped_refptr<base::RefCountedBytes> icon_data(
|
| + new base::RefCountedBytes());
|
| + if (gfx::PNGCodec::EncodeBGRASkBitmap(icon_bitmap, false,
|
| + &icon_data->data())) {
|
| + history::FaviconBitmapResult bitmap_result;
|
| + bitmap_result.bitmap_data = icon_data;
|
| + bitmap_result.pixel_size = gfx::Size(icon_bitmap.width(),
|
| + icon_bitmap.height());
|
| + bitmap_result.icon_type = history::FAVICON;
|
| +
|
| + favicon_bitmap_results.push_back(bitmap_result);
|
| + } else {
|
| + NOTREACHED() << "Could not encode extension favicon";
|
| + }
|
| + }
|
| +
|
| + request_->ForwardResultAsync(request_->handle(), favicon_bitmap_results,
|
| + history::IconURLSizesMap());
|
| delete this;
|
| }
|
|
|
|
|