diff options
-rw-r--r-- | chrome/browser/favicon/favicon_util.cc | 30 | ||||
-rw-r--r-- | chrome/browser/favicon/favicon_util.h | 13 | ||||
-rw-r--r-- | chrome/browser/importer/bookmark_html_reader.cc | 7 | ||||
-rw-r--r-- | chrome/browser/importer/firefox3_importer.cc | 4 | ||||
-rw-r--r-- | chrome/browser/importer/ie_importer.cc | 7 | ||||
-rw-r--r-- | chrome/browser/importer/reencode_favicon.cc | 38 | ||||
-rw-r--r-- | chrome/browser/importer/reencode_favicon.h | 18 | ||||
-rw-r--r-- | chrome/browser/importer/safari_importer.mm | 4 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 2 |
9 files changed, 68 insertions, 55 deletions
diff --git a/chrome/browser/favicon/favicon_util.cc b/chrome/browser/favicon/favicon_util.cc index 21c9d75..e53a71c 100644 --- a/chrome/browser/favicon/favicon_util.cc +++ b/chrome/browser/favicon/favicon_util.cc @@ -6,8 +6,6 @@ #include "chrome/browser/favicon/favicon_types.h" #include "chrome/browser/history/select_favicon_frames.h" -#include "content/public/browser/render_view_host.h" -#include "content/public/child/image_decoder_utils.h" #include "skia/ext/image_operations.h" #include "third_party/skia/include/core/SkBitmap.h" #include "ui/gfx/codec/png_codec.h" @@ -15,7 +13,6 @@ #include "ui/gfx/image/image_png_rep.h" #include "ui/gfx/image/image_skia.h" #include "ui/gfx/size.h" -#include "url/gurl.h" #if defined(OS_MACOSX) && !defined(OS_IOS) #include "base/mac/mac_util.h" @@ -200,30 +197,3 @@ size_t FaviconUtil::SelectBestFaviconFromBitmaps( DCHECK_EQ(1u, selected_bitmap_indices.size()); return selected_bitmap_indices[0]; } - -// static -bool FaviconUtil::ReencodeFavicon(const unsigned char* src_data, - size_t src_len, - std::vector<unsigned char>* png_data) { - // Decode the favicon using WebKit's image decoder. - SkBitmap decoded = content::DecodeImage( - src_data, - gfx::Size(gfx::kFaviconSize, gfx::kFaviconSize), - src_len); - if (decoded.empty()) - return false; // Unable to decode. - - if (decoded.width() != gfx::kFaviconSize || - decoded.height() != gfx::kFaviconSize) { - // The bitmap is not the correct size, re-sample. - int new_width = decoded.width(); - int new_height = decoded.height(); - gfx::CalculateFaviconTargetSize(&new_width, &new_height); - decoded = skia::ImageOperations::Resize( - decoded, skia::ImageOperations::RESIZE_LANCZOS3, new_width, new_height); - } - - // Encode our bitmap as a PNG. - gfx::PNGCodec::EncodeBGRASkBitmap(decoded, false, png_data); - return true; -} diff --git a/chrome/browser/favicon/favicon_util.h b/chrome/browser/favicon/favicon_util.h index 89474e9..3bc3add 100644 --- a/chrome/browser/favicon/favicon_util.h +++ b/chrome/browser/favicon/favicon_util.h @@ -9,16 +9,10 @@ #include "ui/base/layout.h" -class GURL; - namespace chrome { struct FaviconBitmapResult; } -namespace content { -class RenderViewHost; -} - namespace gfx { class Image; } @@ -52,13 +46,6 @@ class FaviconUtil { const std::vector<SkBitmap>& bitmaps, const std::vector<ui::ScaleFactor>& scale_factors, int desired_size); - - // Given raw image data, decodes the icon, re-sampling to the correct size as - // necessary, and re-encodes as PNG data in the given output vector. Returns - // true on success. - static bool ReencodeFavicon(const unsigned char* src_data, - size_t src_len, - std::vector<unsigned char>* png_data); }; #endif // CHROME_BROWSER_FAVICON_FAVICON_UTIL_H_ diff --git a/chrome/browser/importer/bookmark_html_reader.cc b/chrome/browser/importer/bookmark_html_reader.cc index e618bad..9f41ae7 100644 --- a/chrome/browser/importer/bookmark_html_reader.cc +++ b/chrome/browser/importer/bookmark_html_reader.cc @@ -11,7 +11,7 @@ #include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/time/time.h" -#include "chrome/browser/favicon/favicon_util.h" +#include "chrome/browser/importer/reencode_favicon.h" #include "chrome/common/importer/imported_bookmark_entry.h" #include "chrome/common/importer/imported_favicon_usage.h" #include "content/public/common/url_constants.h" @@ -67,9 +67,8 @@ void DataURLToFaviconUsage( return; ImportedFaviconUsage usage; - if (!FaviconUtil::ReencodeFavicon( - reinterpret_cast<const unsigned char*>(&data[0]), - data.size(), &usage.png_data)) + if (!ReencodeFavicon(reinterpret_cast<const uint8*>(&data[0]), + data.size(), &usage.png_data)) return; // Unable to decode. // We need to make up a URL for the favicon. We use a version of the page's diff --git a/chrome/browser/importer/firefox3_importer.cc b/chrome/browser/importer/firefox3_importer.cc index 1cfdbce..50a0d0c 100644 --- a/chrome/browser/importer/firefox3_importer.cc +++ b/chrome/browser/importer/firefox3_importer.cc @@ -14,11 +14,11 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/favicon/favicon_util.h" #include "chrome/browser/importer/bookmark_html_reader.h" #include "chrome/browser/importer/firefox_importer_utils.h" #include "chrome/browser/importer/importer_bridge.h" #include "chrome/browser/importer/nss_decryptor.h" +#include "chrome/browser/importer/reencode_favicon.h" #include "chrome/common/importer/imported_bookmark_entry.h" #include "chrome/common/importer/imported_favicon_usage.h" #include "chrome/common/importer/importer_url_row.h" @@ -580,7 +580,7 @@ void Firefox3Importer::LoadFavicons( if (data.empty()) continue; // Data definitely invalid. - if (!FaviconUtil::ReencodeFavicon(&data[0], data.size(), &usage.png_data)) + if (!ReencodeFavicon(&data[0], data.size(), &usage.png_data)) continue; // Unable to decode. usage.urls = i->second; diff --git a/chrome/browser/importer/ie_importer.cc b/chrome/browser/importer/ie_importer.cc index ceeb772..934e815 100644 --- a/chrome/browser/importer/ie_importer.cc +++ b/chrome/browser/importer/ie_importer.cc @@ -29,10 +29,10 @@ #include "base/win/scoped_handle.h" #include "base/win/scoped_propvariant.h" #include "base/win/windows_version.h" -#include "chrome/browser/favicon/favicon_util.h" #include "chrome/browser/importer/ie_importer_utils_win.h" #include "chrome/browser/importer/importer_bridge.h" #include "chrome/browser/importer/pstore_declarations.h" +#include "chrome/browser/importer/reencode_favicon.h" #include "chrome/common/importer/imported_bookmark_entry.h" #include "chrome/common/importer/imported_favicon_usage.h" #include "chrome/common/importer/importer_data_types.h" @@ -360,9 +360,8 @@ bool ReadReencodedFaviconData(const string16& file, return false; } - const unsigned char* ptr = - reinterpret_cast<const unsigned char*>(image_data.c_str()); - return FaviconUtil::ReencodeFavicon(ptr, image_data.size(), data); + return ReencodeFavicon(reinterpret_cast<const uint8*>(image_data.c_str()), + image_data.size(), data); } // Loads favicon image data and registers to |favicon_map|. diff --git a/chrome/browser/importer/reencode_favicon.cc b/chrome/browser/importer/reencode_favicon.cc new file mode 100644 index 0000000..cbf26153 --- /dev/null +++ b/chrome/browser/importer/reencode_favicon.cc @@ -0,0 +1,38 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/importer/reencode_favicon.h" + +#include "content/public/child/image_decoder_utils.h" +#include "skia/ext/image_operations.h" +#include "third_party/skia/include/core/SkBitmap.h" +#include "ui/gfx/codec/png_codec.h" +#include "ui/gfx/favicon_size.h" +#include "ui/gfx/size.h" + +bool ReencodeFavicon(const uint8* src_data, + size_t src_len, + std::vector<uint8>* png_data) { + // Decode the favicon using WebKit's image decoder. + SkBitmap decoded = content::DecodeImage( + src_data, + gfx::Size(gfx::kFaviconSize, gfx::kFaviconSize), + src_len); + if (decoded.empty()) + return false; // Unable to decode. + + if (decoded.width() != gfx::kFaviconSize || + decoded.height() != gfx::kFaviconSize) { + // The bitmap is not the correct size, re-sample. + int new_width = decoded.width(); + int new_height = decoded.height(); + gfx::CalculateFaviconTargetSize(&new_width, &new_height); + decoded = skia::ImageOperations::Resize( + decoded, skia::ImageOperations::RESIZE_LANCZOS3, new_width, new_height); + } + + // Encode our bitmap as a PNG. + gfx::PNGCodec::EncodeBGRASkBitmap(decoded, false, png_data); + return true; +} diff --git a/chrome/browser/importer/reencode_favicon.h b/chrome/browser/importer/reencode_favicon.h new file mode 100644 index 0000000..b1b510a --- /dev/null +++ b/chrome/browser/importer/reencode_favicon.h @@ -0,0 +1,18 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_IMPORTER_REENCODE_FAVICON_H_ +#define CHROME_BROWSER_IMPORTER_REENCODE_FAVICON_H_ + +#include <vector> + +#include "base/basictypes.h" + +// Given raw image data, decodes the icon, re-sampling to the correct size as +// necessary, and re-encodes as PNG data in the given output vector. Returns +// true on success. +bool ReencodeFavicon(const uint8* src_data, size_t src_len, + std::vector<uint8>* png_data); + +#endif // CHROME_BROWSER_IMPORTER_REENCODE_FAVICON_H_ diff --git a/chrome/browser/importer/safari_importer.mm b/chrome/browser/importer/safari_importer.mm index eb04d67..4a5de0d 100644 --- a/chrome/browser/importer/safari_importer.mm +++ b/chrome/browser/importer/safari_importer.mm @@ -15,8 +15,8 @@ #include "base/strings/sys_string_conversions.h" #include "base/strings/utf_string_conversions.h" #include "base/time/time.h" -#include "chrome/browser/favicon/favicon_util.h" #include "chrome/browser/importer/importer_bridge.h" +#include "chrome/browser/importer/reencode_favicon.h" #include "chrome/common/importer/imported_bookmark_entry.h" #include "chrome/common/importer/imported_favicon_usage.h" #include "chrome/common/url_constants.h" @@ -176,7 +176,7 @@ void SafariImporter::LoadFaviconData( if (data.empty()) continue; // Data definitely invalid. - if (!FaviconUtil::ReencodeFavicon(&data[0], data.size(), &usage.png_data)) + if (!ReencodeFavicon(&data[0], data.size(), &usage.png_data)) continue; // Unable to decode. usage.urls = i->second; diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 4494464..c8ab9b7 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -840,6 +840,8 @@ 'browser/importer/external_process_importer_client.h', 'browser/importer/external_process_importer_host.cc', 'browser/importer/external_process_importer_host.h', + 'browser/importer/reencode_favicon.cc', + 'browser/importer/reencode_favicon.h', 'browser/importer/firefox3_importer.cc', 'browser/importer/firefox3_importer.h', 'browser/importer/firefox_importer_utils.cc', |