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 "base/hash.h" | 7 #include "base/hash.h" |
8 #include "base/message_loop/message_loop_proxy.h" | 8 #include "base/message_loop/message_loop_proxy.h" |
9 #include "chrome/browser/favicon/favicon_util.h" | 9 #include "chrome/browser/favicon/favicon_util.h" |
10 #include "chrome/browser/history/history_backend.h" | 10 #include "chrome/browser/history/history_backend.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "ui/gfx/favicon_size.h" | 21 #include "ui/gfx/favicon_size.h" |
22 #include "ui/gfx/image/image_skia.h" | 22 #include "ui/gfx/image/image_skia.h" |
23 | 23 |
24 using base::Bind; | 24 using base::Bind; |
25 | 25 |
26 namespace { | 26 namespace { |
27 | 27 |
28 void CancelOrRunFaviconResultsCallback( | 28 void CancelOrRunFaviconResultsCallback( |
29 const base::CancelableTaskTracker::IsCanceledCallback& is_canceled, | 29 const base::CancelableTaskTracker::IsCanceledCallback& is_canceled, |
30 const favicon_base::FaviconResultsCallback& callback, | 30 const favicon_base::FaviconResultsCallback& callback, |
31 const std::vector<favicon_base::FaviconBitmapResult>& results) { | 31 const std::vector<favicon_base::FaviconRawBitmapResult>& results) { |
32 if (is_canceled.Run()) | 32 if (is_canceled.Run()) |
33 return; | 33 return; |
34 callback.Run(results); | 34 callback.Run(results); |
35 } | 35 } |
36 | 36 |
37 // Helper to run callback with empty results if we cannot get the history | 37 // Helper to run callback with empty results if we cannot get the history |
38 // service. | 38 // service. |
39 base::CancelableTaskTracker::TaskId RunWithEmptyResultAsync( | 39 base::CancelableTaskTracker::TaskId RunWithEmptyResultAsync( |
40 const favicon_base::FaviconResultsCallback& callback, | 40 const favicon_base::FaviconResultsCallback& callback, |
41 base::CancelableTaskTracker* tracker) { | 41 base::CancelableTaskTracker* tracker) { |
42 return tracker->PostTask( | 42 return tracker->PostTask( |
43 base::MessageLoopProxy::current().get(), | 43 base::MessageLoopProxy::current().get(), |
44 FROM_HERE, | 44 FROM_HERE, |
45 Bind(callback, std::vector<favicon_base::FaviconBitmapResult>())); | 45 Bind(callback, std::vector<favicon_base::FaviconRawBitmapResult>())); |
46 } | 46 } |
47 | 47 |
48 // Return the TaskId to retreive the favicon from chrome specific URL. | 48 // Return the TaskId to retreive the favicon from chrome specific URL. |
49 base::CancelableTaskTracker::TaskId GetFaviconForChromeURL( | 49 base::CancelableTaskTracker::TaskId GetFaviconForChromeURL( |
50 Profile* profile, | 50 Profile* profile, |
51 const GURL& page_url, | 51 const GURL& page_url, |
52 const std::vector<ui::ScaleFactor>& desired_scale_factors, | 52 const std::vector<ui::ScaleFactor>& desired_scale_factors, |
53 const favicon_base::FaviconResultsCallback& callback, | 53 const favicon_base::FaviconResultsCallback& callback, |
54 base::CancelableTaskTracker* tracker) { | 54 base::CancelableTaskTracker* tracker) { |
55 base::CancelableTaskTracker::IsCanceledCallback is_canceled_cb; | 55 base::CancelableTaskTracker::IsCanceledCallback is_canceled_cb; |
(...skipping 10 matching lines...) Expand all Loading... |
66 | 66 |
67 FaviconService::FaviconService(Profile* profile) | 67 FaviconService::FaviconService(Profile* profile) |
68 : history_service_(HistoryServiceFactory::GetForProfile( | 68 : history_service_(HistoryServiceFactory::GetForProfile( |
69 profile, Profile::EXPLICIT_ACCESS)), | 69 profile, Profile::EXPLICIT_ACCESS)), |
70 profile_(profile) { | 70 profile_(profile) { |
71 } | 71 } |
72 | 72 |
73 // static | 73 // static |
74 void FaviconService::FaviconResultsCallbackRunner( | 74 void FaviconService::FaviconResultsCallbackRunner( |
75 const favicon_base::FaviconResultsCallback& callback, | 75 const favicon_base::FaviconResultsCallback& callback, |
76 const std::vector<favicon_base::FaviconBitmapResult>* results) { | 76 const std::vector<favicon_base::FaviconRawBitmapResult>* results) { |
77 callback.Run(*results); | 77 callback.Run(*results); |
78 } | 78 } |
79 | 79 |
80 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImage( | 80 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImage( |
81 const GURL& icon_url, | 81 const GURL& icon_url, |
82 favicon_base::IconType icon_type, | 82 favicon_base::IconType icon_type, |
83 int desired_size_in_dip, | 83 int desired_size_in_dip, |
84 const favicon_base::FaviconImageCallback& callback, | 84 const favicon_base::FaviconImageCallback& callback, |
85 base::CancelableTaskTracker* tracker) { | 85 base::CancelableTaskTracker* tracker) { |
86 favicon_base::FaviconResultsCallback callback_runner = | 86 favicon_base::FaviconResultsCallback callback_runner = |
87 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults, | 87 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults, |
88 base::Unretained(this), callback, desired_size_in_dip); | 88 base::Unretained(this), callback, desired_size_in_dip); |
89 if (history_service_) { | 89 if (history_service_) { |
90 std::vector<GURL> icon_urls; | 90 std::vector<GURL> icon_urls; |
91 icon_urls.push_back(icon_url); | 91 icon_urls.push_back(icon_url); |
92 return history_service_->GetFavicons( | 92 return history_service_->GetFavicons( |
93 icon_urls, icon_type, desired_size_in_dip, | 93 icon_urls, icon_type, desired_size_in_dip, |
94 FaviconUtil::GetFaviconScaleFactors(), callback_runner, tracker); | 94 FaviconUtil::GetFaviconScaleFactors(), callback_runner, tracker); |
95 } | 95 } |
96 return RunWithEmptyResultAsync(callback_runner, tracker); | 96 return RunWithEmptyResultAsync(callback_runner, tracker); |
97 } | 97 } |
98 | 98 |
99 base::CancelableTaskTracker::TaskId FaviconService::GetRawFavicon( | 99 base::CancelableTaskTracker::TaskId FaviconService::GetRawFavicon( |
100 const GURL& icon_url, | 100 const GURL& icon_url, |
101 favicon_base::IconType icon_type, | 101 favicon_base::IconType icon_type, |
102 int desired_size_in_dip, | 102 int desired_size_in_dip, |
103 ui::ScaleFactor desired_scale_factor, | 103 ui::ScaleFactor desired_scale_factor, |
104 const favicon_base::FaviconRawCallback& callback, | 104 const favicon_base::FaviconRawBitmapCallback& callback, |
105 base::CancelableTaskTracker* tracker) { | 105 base::CancelableTaskTracker* tracker) { |
106 favicon_base::FaviconResultsCallback callback_runner = | 106 favicon_base::FaviconResultsCallback callback_runner = |
107 Bind(&FaviconService::RunFaviconRawCallbackWithBitmapResults, | 107 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, |
108 base::Unretained(this), | 108 base::Unretained(this), |
109 callback, desired_size_in_dip, desired_scale_factor); | 109 callback, |
| 110 desired_size_in_dip, |
| 111 desired_scale_factor); |
110 | 112 |
111 if (history_service_) { | 113 if (history_service_) { |
112 std::vector<GURL> icon_urls; | 114 std::vector<GURL> icon_urls; |
113 icon_urls.push_back(icon_url); | 115 icon_urls.push_back(icon_url); |
114 std::vector<ui::ScaleFactor> desired_scale_factors; | 116 std::vector<ui::ScaleFactor> desired_scale_factors; |
115 desired_scale_factors.push_back(desired_scale_factor); | 117 desired_scale_factors.push_back(desired_scale_factor); |
116 | 118 |
117 return history_service_->GetFavicons( | 119 return history_service_->GetFavicons( |
118 icon_urls, icon_type, desired_size_in_dip, desired_scale_factors, | 120 icon_urls, icon_type, desired_size_in_dip, desired_scale_factors, |
119 callback_runner, tracker); | 121 callback_runner, tracker); |
(...skipping 26 matching lines...) Expand all Loading... |
146 const favicon_base::FaviconResultsCallback& callback, | 148 const favicon_base::FaviconResultsCallback& callback, |
147 base::CancelableTaskTracker* tracker) { | 149 base::CancelableTaskTracker* tracker) { |
148 if (history_service_) { | 150 if (history_service_) { |
149 return history_service_->UpdateFaviconMappingsAndFetch( | 151 return history_service_->UpdateFaviconMappingsAndFetch( |
150 page_url, icon_urls, icon_types, desired_size_in_dip, | 152 page_url, icon_urls, icon_types, desired_size_in_dip, |
151 FaviconUtil::GetFaviconScaleFactors(), callback, tracker); | 153 FaviconUtil::GetFaviconScaleFactors(), callback, tracker); |
152 } | 154 } |
153 return RunWithEmptyResultAsync(callback, tracker); | 155 return RunWithEmptyResultAsync(callback, tracker); |
154 } | 156 } |
155 | 157 |
156 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImageForURL( | 158 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImageForPageURL( |
157 const FaviconForURLParams& params, | 159 const FaviconForPageURLParams& params, |
158 const favicon_base::FaviconImageCallback& callback, | 160 const favicon_base::FaviconImageCallback& callback, |
159 base::CancelableTaskTracker* tracker) { | 161 base::CancelableTaskTracker* tracker) { |
160 return GetFaviconForURLImpl( | 162 return GetFaviconForPageURLImpl( |
161 params, | 163 params, |
162 FaviconUtil::GetFaviconScaleFactors(), | 164 FaviconUtil::GetFaviconScaleFactors(), |
163 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults, | 165 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults, |
164 base::Unretained(this), | 166 base::Unretained(this), |
165 callback, | 167 callback, |
166 params.desired_size_in_dip), | 168 params.desired_size_in_dip), |
167 tracker); | 169 tracker); |
168 } | 170 } |
169 | 171 |
170 base::CancelableTaskTracker::TaskId FaviconService::GetRawFaviconForURL( | 172 base::CancelableTaskTracker::TaskId FaviconService::GetRawFaviconForPageURL( |
171 const FaviconForURLParams& params, | 173 const FaviconForPageURLParams& params, |
172 ui::ScaleFactor desired_scale_factor, | 174 ui::ScaleFactor desired_scale_factor, |
173 const favicon_base::FaviconRawCallback& callback, | 175 const favicon_base::FaviconRawBitmapCallback& callback, |
174 base::CancelableTaskTracker* tracker) { | 176 base::CancelableTaskTracker* tracker) { |
175 std::vector<ui::ScaleFactor> desired_scale_factors; | 177 std::vector<ui::ScaleFactor> desired_scale_factors; |
176 desired_scale_factors.push_back(desired_scale_factor); | 178 desired_scale_factors.push_back(desired_scale_factor); |
177 return GetFaviconForURLImpl( | 179 return GetFaviconForPageURLImpl( |
178 params, | 180 params, |
179 desired_scale_factors, | 181 desired_scale_factors, |
180 Bind(&FaviconService::RunFaviconRawCallbackWithBitmapResults, | 182 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, |
181 base::Unretained(this), | 183 base::Unretained(this), |
182 callback, | 184 callback, |
183 params.desired_size_in_dip, | 185 params.desired_size_in_dip, |
184 desired_scale_factor), | 186 desired_scale_factor), |
185 tracker); | 187 tracker); |
186 } | 188 } |
187 | 189 |
188 base::CancelableTaskTracker::TaskId FaviconService::GetLargestRawFaviconForURL( | 190 base::CancelableTaskTracker::TaskId |
| 191 FaviconService::GetLargestRawFaviconForPageURL( |
189 Profile* profile, | 192 Profile* profile, |
190 const GURL& page_url, | 193 const GURL& page_url, |
191 const std::vector<int>& icon_types, | 194 const std::vector<int>& icon_types, |
192 int minimum_size_in_pixels, | 195 int minimum_size_in_pixels, |
193 const favicon_base::FaviconRawCallback& callback, | 196 const favicon_base::FaviconRawBitmapCallback& callback, |
194 base::CancelableTaskTracker* tracker) { | 197 base::CancelableTaskTracker* tracker) { |
195 favicon_base::FaviconResultsCallback favicon_results_callback = | 198 favicon_base::FaviconResultsCallback favicon_results_callback = |
196 Bind(&FaviconService::RunFaviconRawCallbackWithBitmapResults, | 199 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, |
197 base::Unretained(this), callback, 0, ui::ScaleFactor()); | 200 base::Unretained(this), |
| 201 callback, |
| 202 0, |
| 203 ui::ScaleFactor()); |
198 if (page_url.SchemeIs(content::kChromeUIScheme) || | 204 if (page_url.SchemeIs(content::kChromeUIScheme) || |
199 page_url.SchemeIs(extensions::kExtensionScheme)) { | 205 page_url.SchemeIs(extensions::kExtensionScheme)) { |
200 std::vector<ui::ScaleFactor> scale_factor; | 206 std::vector<ui::ScaleFactor> scale_factor; |
201 scale_factor.push_back(ui::SCALE_FACTOR_100P); | 207 scale_factor.push_back(ui::SCALE_FACTOR_100P); |
202 return GetFaviconForChromeURL(profile, page_url, scale_factor, | 208 return GetFaviconForChromeURL(profile, page_url, scale_factor, |
203 favicon_results_callback, tracker); | 209 favicon_results_callback, tracker); |
204 } | 210 } |
205 if (history_service_) { | 211 if (history_service_) { |
206 return history_service_->GetLargestFaviconForURL(page_url, icon_types, | 212 return history_service_->GetLargestFaviconForURL(page_url, icon_types, |
207 minimum_size_in_pixels, callback, tracker); | 213 minimum_size_in_pixels, callback, tracker); |
208 } | 214 } |
209 return RunWithEmptyResultAsync(favicon_results_callback, tracker); | 215 return RunWithEmptyResultAsync(favicon_results_callback, tracker); |
210 } | 216 } |
211 | 217 |
212 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForURL( | 218 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURL( |
213 const FaviconForURLParams& params, | 219 const FaviconForPageURLParams& params, |
214 const favicon_base::FaviconResultsCallback& callback, | 220 const favicon_base::FaviconResultsCallback& callback, |
215 base::CancelableTaskTracker* tracker) { | 221 base::CancelableTaskTracker* tracker) { |
216 return GetFaviconForURLImpl(params, | 222 return GetFaviconForPageURLImpl( |
217 FaviconUtil::GetFaviconScaleFactors(), | 223 params, FaviconUtil::GetFaviconScaleFactors(), callback, tracker); |
218 callback, | |
219 tracker); | |
220 } | 224 } |
221 | 225 |
222 base::CancelableTaskTracker::TaskId FaviconService::GetLargestRawFaviconForID( | 226 base::CancelableTaskTracker::TaskId FaviconService::GetLargestRawFaviconForID( |
223 favicon_base::FaviconID favicon_id, | 227 favicon_base::FaviconID favicon_id, |
224 const favicon_base::FaviconRawCallback& callback, | 228 const favicon_base::FaviconRawBitmapCallback& callback, |
225 base::CancelableTaskTracker* tracker) { | 229 base::CancelableTaskTracker* tracker) { |
226 // Use 0 as |desired_size_in_dip| to get the largest bitmap for |favicon_id| | 230 // Use 0 as |desired_size_in_dip| to get the largest bitmap for |favicon_id| |
227 // without any resizing. | 231 // without any resizing. |
228 int desired_size_in_dip = 0; | 232 int desired_size_in_dip = 0; |
229 ui::ScaleFactor desired_scale_factor = ui::SCALE_FACTOR_100P; | 233 ui::ScaleFactor desired_scale_factor = ui::SCALE_FACTOR_100P; |
230 favicon_base::FaviconResultsCallback callback_runner = | 234 favicon_base::FaviconResultsCallback callback_runner = |
231 Bind(&FaviconService::RunFaviconRawCallbackWithBitmapResults, | 235 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, |
232 base::Unretained(this), | 236 base::Unretained(this), |
233 callback, desired_size_in_dip, desired_scale_factor); | 237 callback, |
| 238 desired_size_in_dip, |
| 239 desired_scale_factor); |
234 | 240 |
235 if (history_service_) { | 241 if (history_service_) { |
236 return history_service_->GetFaviconForID( | 242 return history_service_->GetFaviconForID( |
237 favicon_id, desired_size_in_dip, desired_scale_factor, | 243 favicon_id, desired_size_in_dip, desired_scale_factor, |
238 callback_runner, tracker); | 244 callback_runner, tracker); |
239 } | 245 } |
240 return RunWithEmptyResultAsync(callback_runner, tracker); | 246 return RunWithEmptyResultAsync(callback_runner, tracker); |
241 } | 247 } |
242 | 248 |
243 void FaviconService::SetFaviconOutOfDateForPage(const GURL& page_url) { | 249 void FaviconService::SetFaviconOutOfDateForPage(const GURL& page_url) { |
(...skipping 28 matching lines...) Expand all Loading... |
272 void FaviconService::SetFavicons(const GURL& page_url, | 278 void FaviconService::SetFavicons(const GURL& page_url, |
273 const GURL& icon_url, | 279 const GURL& icon_url, |
274 favicon_base::IconType icon_type, | 280 favicon_base::IconType icon_type, |
275 const gfx::Image& image) { | 281 const gfx::Image& image) { |
276 if (!history_service_) | 282 if (!history_service_) |
277 return; | 283 return; |
278 | 284 |
279 gfx::ImageSkia image_skia = image.AsImageSkia(); | 285 gfx::ImageSkia image_skia = image.AsImageSkia(); |
280 image_skia.EnsureRepsForSupportedScales(); | 286 image_skia.EnsureRepsForSupportedScales(); |
281 const std::vector<gfx::ImageSkiaRep>& image_reps = image_skia.image_reps(); | 287 const std::vector<gfx::ImageSkiaRep>& image_reps = image_skia.image_reps(); |
282 std::vector<favicon_base::FaviconBitmapData> favicon_bitmap_data; | 288 std::vector<favicon_base::FaviconRawBitmapData> favicon_bitmap_data; |
283 for (size_t i = 0; i < image_reps.size(); ++i) { | 289 for (size_t i = 0; i < image_reps.size(); ++i) { |
284 scoped_refptr<base::RefCountedBytes> bitmap_data( | 290 scoped_refptr<base::RefCountedBytes> bitmap_data( |
285 new base::RefCountedBytes()); | 291 new base::RefCountedBytes()); |
286 if (gfx::PNGCodec::EncodeBGRASkBitmap(image_reps[i].sk_bitmap(), | 292 if (gfx::PNGCodec::EncodeBGRASkBitmap(image_reps[i].sk_bitmap(), |
287 false, | 293 false, |
288 &bitmap_data->data())) { | 294 &bitmap_data->data())) { |
289 gfx::Size pixel_size(image_reps[i].pixel_width(), | 295 gfx::Size pixel_size(image_reps[i].pixel_width(), |
290 image_reps[i].pixel_height()); | 296 image_reps[i].pixel_height()); |
291 favicon_base::FaviconBitmapData bitmap_data_element; | 297 favicon_base::FaviconRawBitmapData bitmap_data_element; |
292 bitmap_data_element.bitmap_data = bitmap_data; | 298 bitmap_data_element.bitmap_data = bitmap_data; |
293 bitmap_data_element.pixel_size = pixel_size; | 299 bitmap_data_element.pixel_size = pixel_size; |
294 bitmap_data_element.icon_url = icon_url; | 300 bitmap_data_element.icon_url = icon_url; |
295 | 301 |
296 favicon_bitmap_data.push_back(bitmap_data_element); | 302 favicon_bitmap_data.push_back(bitmap_data_element); |
297 } | 303 } |
298 } | 304 } |
299 | 305 |
300 history_service_->SetFavicons(page_url, icon_type, favicon_bitmap_data); | 306 history_service_->SetFavicons(page_url, icon_type, favicon_bitmap_data); |
301 } | 307 } |
302 | 308 |
303 void FaviconService::UnableToDownloadFavicon(const GURL& icon_url) { | 309 void FaviconService::UnableToDownloadFavicon(const GURL& icon_url) { |
304 MissingFaviconURLHash url_hash = base::Hash(icon_url.spec()); | 310 MissingFaviconURLHash url_hash = base::Hash(icon_url.spec()); |
305 missing_favicon_urls_.insert(url_hash); | 311 missing_favicon_urls_.insert(url_hash); |
306 } | 312 } |
307 | 313 |
308 bool FaviconService::WasUnableToDownloadFavicon(const GURL& icon_url) const { | 314 bool FaviconService::WasUnableToDownloadFavicon(const GURL& icon_url) const { |
309 MissingFaviconURLHash url_hash = base::Hash(icon_url.spec()); | 315 MissingFaviconURLHash url_hash = base::Hash(icon_url.spec()); |
310 return missing_favicon_urls_.find(url_hash) != missing_favicon_urls_.end(); | 316 return missing_favicon_urls_.find(url_hash) != missing_favicon_urls_.end(); |
311 } | 317 } |
312 | 318 |
313 void FaviconService::ClearUnableToDownloadFavicons() { | 319 void FaviconService::ClearUnableToDownloadFavicons() { |
314 missing_favicon_urls_.clear(); | 320 missing_favicon_urls_.clear(); |
315 } | 321 } |
316 | 322 |
317 FaviconService::~FaviconService() {} | 323 FaviconService::~FaviconService() {} |
318 | 324 |
319 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForURLImpl( | 325 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURLImpl( |
320 const FaviconForURLParams& params, | 326 const FaviconForPageURLParams& params, |
321 const std::vector<ui::ScaleFactor>& desired_scale_factors, | 327 const std::vector<ui::ScaleFactor>& desired_scale_factors, |
322 const favicon_base::FaviconResultsCallback& callback, | 328 const favicon_base::FaviconResultsCallback& callback, |
323 base::CancelableTaskTracker* tracker) { | 329 base::CancelableTaskTracker* tracker) { |
324 if (params.page_url.SchemeIs(content::kChromeUIScheme) || | 330 if (params.page_url.SchemeIs(content::kChromeUIScheme) || |
325 params.page_url.SchemeIs(extensions::kExtensionScheme)) { | 331 params.page_url.SchemeIs(extensions::kExtensionScheme)) { |
326 return GetFaviconForChromeURL(profile_, params.page_url, | 332 return GetFaviconForChromeURL(profile_, params.page_url, |
327 desired_scale_factors, callback, tracker); | 333 desired_scale_factors, callback, tracker); |
328 } | 334 } |
329 if (history_service_) { | 335 if (history_service_) { |
330 return history_service_->GetFaviconsForURL(params.page_url, | 336 return history_service_->GetFaviconsForURL(params.page_url, |
331 params.icon_types, | 337 params.icon_types, |
332 params.desired_size_in_dip, | 338 params.desired_size_in_dip, |
333 desired_scale_factors, | 339 desired_scale_factors, |
334 callback, | 340 callback, |
335 tracker); | 341 tracker); |
336 } | 342 } |
337 return RunWithEmptyResultAsync(callback, tracker); | 343 return RunWithEmptyResultAsync(callback, tracker); |
338 } | 344 } |
339 | 345 |
340 void FaviconService::RunFaviconImageCallbackWithBitmapResults( | 346 void FaviconService::RunFaviconImageCallbackWithBitmapResults( |
341 const favicon_base::FaviconImageCallback& callback, | 347 const favicon_base::FaviconImageCallback& callback, |
342 int desired_size_in_dip, | 348 int desired_size_in_dip, |
343 const std::vector<favicon_base::FaviconBitmapResult>& | 349 const std::vector<favicon_base::FaviconRawBitmapResult>& |
344 favicon_bitmap_results) { | 350 favicon_bitmap_results) { |
345 favicon_base::FaviconImageResult image_result; | 351 favicon_base::FaviconImageResult image_result; |
346 image_result.image = FaviconUtil::SelectFaviconFramesFromPNGs( | 352 image_result.image = FaviconUtil::SelectFaviconFramesFromPNGs( |
347 favicon_bitmap_results, | 353 favicon_bitmap_results, |
348 FaviconUtil::GetFaviconScaleFactors(), | 354 FaviconUtil::GetFaviconScaleFactors(), |
349 desired_size_in_dip); | 355 desired_size_in_dip); |
350 FaviconUtil::SetFaviconColorSpace(&image_result.image); | 356 FaviconUtil::SetFaviconColorSpace(&image_result.image); |
351 | 357 |
352 image_result.icon_url = image_result.image.IsEmpty() ? | 358 image_result.icon_url = image_result.image.IsEmpty() ? |
353 GURL() : favicon_bitmap_results[0].icon_url; | 359 GURL() : favicon_bitmap_results[0].icon_url; |
354 callback.Run(image_result); | 360 callback.Run(image_result); |
355 } | 361 } |
356 | 362 |
357 void FaviconService::RunFaviconRawCallbackWithBitmapResults( | 363 void FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults( |
358 const favicon_base::FaviconRawCallback& callback, | 364 const favicon_base::FaviconRawBitmapCallback& callback, |
359 int desired_size_in_dip, | 365 int desired_size_in_dip, |
360 ui::ScaleFactor desired_scale_factor, | 366 ui::ScaleFactor desired_scale_factor, |
361 const std::vector<favicon_base::FaviconBitmapResult>& | 367 const std::vector<favicon_base::FaviconRawBitmapResult>& |
362 favicon_bitmap_results) { | 368 favicon_bitmap_results) { |
363 if (favicon_bitmap_results.empty() || !favicon_bitmap_results[0].is_valid()) { | 369 if (favicon_bitmap_results.empty() || !favicon_bitmap_results[0].is_valid()) { |
364 callback.Run(favicon_base::FaviconBitmapResult()); | 370 callback.Run(favicon_base::FaviconRawBitmapResult()); |
365 return; | 371 return; |
366 } | 372 } |
367 | 373 |
368 DCHECK_EQ(1u, favicon_bitmap_results.size()); | 374 DCHECK_EQ(1u, favicon_bitmap_results.size()); |
369 favicon_base::FaviconBitmapResult bitmap_result = favicon_bitmap_results[0]; | 375 favicon_base::FaviconRawBitmapResult bitmap_result = |
| 376 favicon_bitmap_results[0]; |
370 | 377 |
371 // If the desired size is 0, SelectFaviconFrames() will return the largest | 378 // If the desired size is 0, SelectFaviconFrames() will return the largest |
372 // bitmap without doing any resizing. As |favicon_bitmap_results| has bitmap | 379 // bitmap without doing any resizing. As |favicon_bitmap_results| has bitmap |
373 // data for a single bitmap, return it and avoid an unnecessary decode. | 380 // data for a single bitmap, return it and avoid an unnecessary decode. |
374 if (desired_size_in_dip == 0) { | 381 if (desired_size_in_dip == 0) { |
375 callback.Run(bitmap_result); | 382 callback.Run(bitmap_result); |
376 return; | 383 return; |
377 } | 384 } |
378 | 385 |
379 // If history bitmap is already desired pixel size, return early. | 386 // If history bitmap is already desired pixel size, return early. |
(...skipping 11 matching lines...) Expand all Loading... |
391 // Convert raw bytes to SkBitmap, resize via SelectFaviconFrames(), then | 398 // Convert raw bytes to SkBitmap, resize via SelectFaviconFrames(), then |
392 // convert back. | 399 // convert back. |
393 std::vector<ui::ScaleFactor> desired_scale_factors; | 400 std::vector<ui::ScaleFactor> desired_scale_factors; |
394 desired_scale_factors.push_back(desired_scale_factor); | 401 desired_scale_factors.push_back(desired_scale_factor); |
395 gfx::Image resized_image = FaviconUtil::SelectFaviconFramesFromPNGs( | 402 gfx::Image resized_image = FaviconUtil::SelectFaviconFramesFromPNGs( |
396 favicon_bitmap_results, desired_scale_factors, desired_size_in_dip); | 403 favicon_bitmap_results, desired_scale_factors, desired_size_in_dip); |
397 | 404 |
398 std::vector<unsigned char> resized_bitmap_data; | 405 std::vector<unsigned char> resized_bitmap_data; |
399 if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false, | 406 if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false, |
400 &resized_bitmap_data)) { | 407 &resized_bitmap_data)) { |
401 callback.Run(favicon_base::FaviconBitmapResult()); | 408 callback.Run(favicon_base::FaviconRawBitmapResult()); |
402 return; | 409 return; |
403 } | 410 } |
404 | 411 |
405 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( | 412 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( |
406 &resized_bitmap_data); | 413 &resized_bitmap_data); |
407 callback.Run(bitmap_result); | 414 callback.Run(bitmap_result); |
408 } | 415 } |
OLD | NEW |