OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/favicon/favicon_service.h" | 5 #include "chrome/browser/favicon/favicon_service.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "base/hash.h" | 9 #include "base/hash.h" |
10 #include "base/message_loop/message_loop_proxy.h" | 10 #include "base/message_loop/message_loop_proxy.h" |
11 #include "chrome/browser/history/history_backend.h" | 11 #include "chrome/browser/history/history_backend.h" |
12 #include "chrome/browser/history/history_service.h" | 12 #include "chrome/browser/history/history_service.h" |
13 #include "chrome/browser/history/history_service_factory.h" | 13 #include "chrome/browser/history/history_service_factory.h" |
14 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" | 14 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" |
15 #include "chrome/common/importer/imported_favicon_usage.h" | 15 #include "chrome/common/importer/imported_favicon_usage.h" |
16 #include "chrome/common/url_constants.h" | 16 #include "chrome/common/url_constants.h" |
17 #include "components/favicon_base/favicon_types.h" | 17 #include "components/favicon_base/fallback_icon_service.h" |
18 #include "components/favicon_base/favicon_util.h" | 18 #include "components/favicon_base/favicon_util.h" |
19 #include "components/favicon_base/select_favicon_frames.h" | 19 #include "components/favicon_base/select_favicon_frames.h" |
20 #include "extensions/common/constants.h" | 20 #include "extensions/common/constants.h" |
21 #include "third_party/skia/include/core/SkBitmap.h" | 21 #include "third_party/skia/include/core/SkBitmap.h" |
22 #include "ui/gfx/codec/png_codec.h" | 22 #include "ui/gfx/codec/png_codec.h" |
23 #include "ui/gfx/favicon_size.h" | 23 #include "ui/gfx/favicon_size.h" |
24 #include "ui/gfx/image/image_skia.h" | 24 #include "ui/gfx/image/image_skia.h" |
| 25 #include "url/gurl.h" |
25 | 26 |
26 using base::Bind; | 27 using base::Bind; |
27 | 28 |
28 namespace { | 29 namespace { |
29 | 30 |
| 31 const int kMaxFallbackFaviconSize = 288; |
| 32 |
30 void CancelOrRunFaviconResultsCallback( | 33 void CancelOrRunFaviconResultsCallback( |
31 const base::CancelableTaskTracker::IsCanceledCallback& is_canceled, | 34 const base::CancelableTaskTracker::IsCanceledCallback& is_canceled, |
32 const favicon_base::FaviconResultsCallback& callback, | 35 const favicon_base::FaviconResultsCallback& callback, |
33 const std::vector<favicon_base::FaviconRawBitmapResult>& results) { | 36 const std::vector<favicon_base::FaviconRawBitmapResult>& results) { |
34 if (is_canceled.Run()) | 37 if (is_canceled.Run()) |
35 return; | 38 return; |
36 callback.Run(results); | 39 callback.Run(results); |
37 } | 40 } |
38 | 41 |
39 // Helper to run callback with empty results if we cannot get the history | 42 // Helper to run callback with empty results if we cannot get the history |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 } | 77 } |
75 return sizes_in_pixel; | 78 return sizes_in_pixel; |
76 } | 79 } |
77 | 80 |
78 } // namespace | 81 } // namespace |
79 | 82 |
80 FaviconService::FaviconService(Profile* profile, FaviconClient* favicon_client) | 83 FaviconService::FaviconService(Profile* profile, FaviconClient* favicon_client) |
81 : history_service_(HistoryServiceFactory::GetForProfile( | 84 : history_service_(HistoryServiceFactory::GetForProfile( |
82 profile, | 85 profile, |
83 ServiceAccessType::EXPLICIT_ACCESS)), | 86 ServiceAccessType::EXPLICIT_ACCESS)), |
| 87 fallback_icon_service_(new favicon_base::FallbackIconService()), |
84 profile_(profile), | 88 profile_(profile), |
85 favicon_client_(favicon_client) { | 89 favicon_client_(favicon_client) { |
86 } | 90 } |
87 | 91 |
88 // static | 92 // static |
89 void FaviconService::FaviconResultsCallbackRunner( | 93 void FaviconService::FaviconResultsCallbackRunner( |
90 const favicon_base::FaviconResultsCallback& callback, | 94 const favicon_base::FaviconResultsCallback& callback, |
91 const std::vector<favicon_base::FaviconRawBitmapResult>* results) { | 95 const std::vector<favicon_base::FaviconRawBitmapResult>* results) { |
92 callback.Run(*results); | 96 callback.Run(*results); |
93 } | 97 } |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 page_url, | 167 page_url, |
164 favicon_base::FAVICON, | 168 favicon_base::FAVICON, |
165 GetPixelSizesForFaviconScales(gfx::kFaviconSize), | 169 GetPixelSizesForFaviconScales(gfx::kFaviconSize), |
166 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults, | 170 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults, |
167 base::Unretained(this), | 171 base::Unretained(this), |
168 callback, | 172 callback, |
169 gfx::kFaviconSize), | 173 gfx::kFaviconSize), |
170 tracker); | 174 tracker); |
171 } | 175 } |
172 | 176 |
| 177 base::CancelableTaskTracker::TaskId FaviconService::GetRawFallbackFaviconImage( |
| 178 const GURL& icon_url, |
| 179 favicon_base::IconType icon_type, |
| 180 int desired_size_in_pixel, |
| 181 const favicon_base::FallbackIconSpecs& specs, |
| 182 const favicon_base::FaviconRawBitmapCallback& callback, |
| 183 base::CancelableTaskTracker* tracker) { |
| 184 int size_to_use = desired_size_in_pixel; |
| 185 if (desired_size_in_pixel == 0 || |
| 186 desired_size_in_pixel > kMaxFallbackFaviconSize) { |
| 187 size_to_use = kMaxFallbackFaviconSize; |
| 188 } |
| 189 |
| 190 favicon_base::FaviconResultsCallback callback_runner = |
| 191 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, |
| 192 base::Unretained(this), |
| 193 callback, |
| 194 size_to_use); |
| 195 |
| 196 return fallback_icon_service_->GetFallbackIcon( |
| 197 icon_url, size_to_use, specs, callback_runner, tracker); |
| 198 } |
| 199 |
173 base::CancelableTaskTracker::TaskId FaviconService::GetRawFaviconForPageURL( | 200 base::CancelableTaskTracker::TaskId FaviconService::GetRawFaviconForPageURL( |
174 const GURL& page_url, | 201 const GURL& page_url, |
175 int icon_types, | 202 int icon_types, |
176 int desired_size_in_pixel, | 203 int desired_size_in_pixel, |
177 const favicon_base::FaviconRawBitmapCallback& callback, | 204 const favicon_base::FaviconRawBitmapCallback& callback, |
178 base::CancelableTaskTracker* tracker) { | 205 base::CancelableTaskTracker* tracker) { |
179 std::vector<int> desired_sizes_in_pixel; | 206 std::vector<int> desired_sizes_in_pixel; |
180 desired_sizes_in_pixel.push_back(desired_size_in_pixel); | 207 desired_sizes_in_pixel.push_back(desired_size_in_pixel); |
181 return GetFaviconForPageURLImpl( | 208 return GetFaviconForPageURLImpl( |
182 page_url, | 209 page_url, |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false, | 445 if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false, |
419 &resized_bitmap_data)) { | 446 &resized_bitmap_data)) { |
420 callback.Run(favicon_base::FaviconRawBitmapResult()); | 447 callback.Run(favicon_base::FaviconRawBitmapResult()); |
421 return; | 448 return; |
422 } | 449 } |
423 | 450 |
424 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( | 451 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( |
425 &resized_bitmap_data); | 452 &resized_bitmap_data); |
426 callback.Run(bitmap_result); | 453 callback.Run(bitmap_result); |
427 } | 454 } |
OLD | NEW |