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" |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 | 87 |
88 // static | 88 // static |
89 void FaviconService::FaviconResultsCallbackRunner( | 89 void FaviconService::FaviconResultsCallbackRunner( |
90 const favicon_base::FaviconResultsCallback& callback, | 90 const favicon_base::FaviconResultsCallback& callback, |
91 const std::vector<favicon_base::FaviconRawBitmapResult>* results) { | 91 const std::vector<favicon_base::FaviconRawBitmapResult>* results) { |
92 callback.Run(*results); | 92 callback.Run(*results); |
93 } | 93 } |
94 | 94 |
95 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImage( | 95 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImage( |
96 const GURL& icon_url, | 96 const GURL& icon_url, |
97 favicon_base::IconType icon_type, | |
98 int desired_size_in_dip, | |
99 const favicon_base::FaviconImageCallback& callback, | 97 const favicon_base::FaviconImageCallback& callback, |
100 base::CancelableTaskTracker* tracker) { | 98 base::CancelableTaskTracker* tracker) { |
101 favicon_base::FaviconResultsCallback callback_runner = | 99 favicon_base::FaviconResultsCallback callback_runner = |
102 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults, | 100 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults, |
103 base::Unretained(this), callback, desired_size_in_dip); | 101 base::Unretained(this), callback, gfx::kFaviconSize); |
104 if (history_service_) { | 102 if (history_service_) { |
105 std::vector<GURL> icon_urls; | 103 std::vector<GURL> icon_urls; |
106 icon_urls.push_back(icon_url); | 104 icon_urls.push_back(icon_url); |
107 return history_service_->GetFavicons( | 105 return history_service_->GetFavicons( |
108 icon_urls, | 106 icon_urls, |
109 icon_type, | 107 favicon_base::FAVICON, |
110 GetPixelSizesForFaviconScales(desired_size_in_dip), | 108 GetPixelSizesForFaviconScales(gfx::kFaviconSize), |
111 callback_runner, | 109 callback_runner, |
112 tracker); | 110 tracker); |
113 } | 111 } |
114 return RunWithEmptyResultAsync(callback_runner, tracker); | 112 return RunWithEmptyResultAsync(callback_runner, tracker); |
115 } | 113 } |
116 | 114 |
117 base::CancelableTaskTracker::TaskId FaviconService::GetRawFavicon( | 115 base::CancelableTaskTracker::TaskId FaviconService::GetRawFavicon( |
118 const GURL& icon_url, | 116 const GURL& icon_url, |
119 favicon_base::IconType icon_type, | 117 favicon_base::IconType icon_type, |
120 int desired_size_in_dip, | 118 int desired_size_in_pixel, |
121 float desired_favicon_scale, | |
122 const favicon_base::FaviconRawBitmapCallback& callback, | 119 const favicon_base::FaviconRawBitmapCallback& callback, |
123 base::CancelableTaskTracker* tracker) { | 120 base::CancelableTaskTracker* tracker) { |
124 int desired_size_in_pixel = | |
125 std::ceil(desired_size_in_dip * desired_favicon_scale); | |
126 favicon_base::FaviconResultsCallback callback_runner = | 121 favicon_base::FaviconResultsCallback callback_runner = |
127 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, | 122 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, |
128 base::Unretained(this), | 123 base::Unretained(this), |
129 callback, | 124 callback, |
130 desired_size_in_pixel); | 125 desired_size_in_pixel); |
131 | 126 |
132 if (history_service_) { | 127 if (history_service_) { |
133 std::vector<GURL> icon_urls; | 128 std::vector<GURL> icon_urls; |
134 icon_urls.push_back(icon_url); | 129 icon_urls.push_back(icon_url); |
135 std::vector<int> desired_sizes_in_pixel; | 130 std::vector<int> desired_sizes_in_pixel; |
(...skipping 17 matching lines...) Expand all Loading... |
153 return history_service_->GetFavicons( | 148 return history_service_->GetFavicons( |
154 icon_urls, | 149 icon_urls, |
155 icon_type, | 150 icon_type, |
156 GetPixelSizesForFaviconScales(desired_size_in_dip), | 151 GetPixelSizesForFaviconScales(desired_size_in_dip), |
157 callback, | 152 callback, |
158 tracker); | 153 tracker); |
159 } | 154 } |
160 return RunWithEmptyResultAsync(callback, tracker); | 155 return RunWithEmptyResultAsync(callback, tracker); |
161 } | 156 } |
162 | 157 |
163 base::CancelableTaskTracker::TaskId | |
164 FaviconService::UpdateFaviconMappingsAndFetch( | |
165 const GURL& page_url, | |
166 const std::vector<GURL>& icon_urls, | |
167 int icon_types, | |
168 int desired_size_in_dip, | |
169 const favicon_base::FaviconResultsCallback& callback, | |
170 base::CancelableTaskTracker* tracker) { | |
171 if (history_service_) { | |
172 return history_service_->UpdateFaviconMappingsAndFetch( | |
173 page_url, | |
174 icon_urls, | |
175 icon_types, | |
176 GetPixelSizesForFaviconScales(desired_size_in_dip), | |
177 callback, | |
178 tracker); | |
179 } | |
180 return RunWithEmptyResultAsync(callback, tracker); | |
181 } | |
182 | |
183 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImageForPageURL( | 158 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImageForPageURL( |
184 const FaviconForPageURLParams& params, | 159 const GURL& page_url, |
185 const favicon_base::FaviconImageCallback& callback, | 160 const favicon_base::FaviconImageCallback& callback, |
186 base::CancelableTaskTracker* tracker) { | 161 base::CancelableTaskTracker* tracker) { |
187 return GetFaviconForPageURLImpl( | 162 return GetFaviconForPageURLImpl( |
188 params, | 163 page_url, |
189 GetPixelSizesForFaviconScales(params.desired_size_in_dip), | 164 favicon_base::FAVICON, |
| 165 GetPixelSizesForFaviconScales(gfx::kFaviconSize), |
190 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults, | 166 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults, |
191 base::Unretained(this), | 167 base::Unretained(this), |
192 callback, | 168 callback, |
193 params.desired_size_in_dip), | 169 gfx::kFaviconSize), |
194 tracker); | 170 tracker); |
195 } | 171 } |
196 | 172 |
197 base::CancelableTaskTracker::TaskId FaviconService::GetRawFaviconForPageURL( | 173 base::CancelableTaskTracker::TaskId FaviconService::GetRawFaviconForPageURL( |
198 const FaviconForPageURLParams& params, | 174 const GURL& page_url, |
199 float desired_favicon_scale, | 175 int icon_types, |
| 176 int desired_size_in_pixel, |
200 const favicon_base::FaviconRawBitmapCallback& callback, | 177 const favicon_base::FaviconRawBitmapCallback& callback, |
201 base::CancelableTaskTracker* tracker) { | 178 base::CancelableTaskTracker* tracker) { |
202 int desired_size_in_pixel = | |
203 std::ceil(params.desired_size_in_dip * desired_favicon_scale); | |
204 std::vector<int> desired_sizes_in_pixel; | 179 std::vector<int> desired_sizes_in_pixel; |
205 desired_sizes_in_pixel.push_back(desired_size_in_pixel); | 180 desired_sizes_in_pixel.push_back(desired_size_in_pixel); |
206 return GetFaviconForPageURLImpl( | 181 return GetFaviconForPageURLImpl( |
207 params, | 182 page_url, |
| 183 icon_types, |
208 desired_sizes_in_pixel, | 184 desired_sizes_in_pixel, |
209 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, | 185 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, |
210 base::Unretained(this), | 186 base::Unretained(this), |
211 callback, | 187 callback, |
212 desired_size_in_pixel), | 188 desired_size_in_pixel), |
213 tracker); | 189 tracker); |
214 } | 190 } |
215 | 191 |
216 base::CancelableTaskTracker::TaskId | 192 base::CancelableTaskTracker::TaskId |
217 FaviconService::GetLargestRawFaviconForPageURL( | 193 FaviconService::GetLargestRawFaviconForPageURL( |
(...skipping 18 matching lines...) Expand all Loading... |
236 tracker); | 212 tracker); |
237 } | 213 } |
238 if (history_service_) { | 214 if (history_service_) { |
239 return history_service_->GetLargestFaviconForURL(page_url, icon_types, | 215 return history_service_->GetLargestFaviconForURL(page_url, icon_types, |
240 minimum_size_in_pixels, callback, tracker); | 216 minimum_size_in_pixels, callback, tracker); |
241 } | 217 } |
242 return RunWithEmptyResultAsync(favicon_results_callback, tracker); | 218 return RunWithEmptyResultAsync(favicon_results_callback, tracker); |
243 } | 219 } |
244 | 220 |
245 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURL( | 221 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURL( |
246 const FaviconForPageURLParams& params, | 222 const GURL& page_url, |
| 223 int icon_types, |
| 224 int desired_size_in_dip, |
247 const favicon_base::FaviconResultsCallback& callback, | 225 const favicon_base::FaviconResultsCallback& callback, |
248 base::CancelableTaskTracker* tracker) { | 226 base::CancelableTaskTracker* tracker) { |
249 return GetFaviconForPageURLImpl( | 227 return GetFaviconForPageURLImpl( |
250 params, | 228 page_url, |
251 GetPixelSizesForFaviconScales(params.desired_size_in_dip), | 229 icon_types, |
| 230 GetPixelSizesForFaviconScales(desired_size_in_dip), |
252 callback, | 231 callback, |
253 tracker); | 232 tracker); |
254 } | 233 } |
255 | 234 |
| 235 base::CancelableTaskTracker::TaskId |
| 236 FaviconService::UpdateFaviconMappingsAndFetch( |
| 237 const GURL& page_url, |
| 238 const std::vector<GURL>& icon_urls, |
| 239 int icon_types, |
| 240 int desired_size_in_dip, |
| 241 const favicon_base::FaviconResultsCallback& callback, |
| 242 base::CancelableTaskTracker* tracker) { |
| 243 if (history_service_) { |
| 244 return history_service_->UpdateFaviconMappingsAndFetch( |
| 245 page_url, |
| 246 icon_urls, |
| 247 icon_types, |
| 248 GetPixelSizesForFaviconScales(desired_size_in_dip), |
| 249 callback, |
| 250 tracker); |
| 251 } |
| 252 return RunWithEmptyResultAsync(callback, tracker); |
| 253 } |
| 254 |
256 base::CancelableTaskTracker::TaskId FaviconService::GetLargestRawFaviconForID( | 255 base::CancelableTaskTracker::TaskId FaviconService::GetLargestRawFaviconForID( |
257 favicon_base::FaviconID favicon_id, | 256 favicon_base::FaviconID favicon_id, |
258 const favicon_base::FaviconRawBitmapCallback& callback, | 257 const favicon_base::FaviconRawBitmapCallback& callback, |
259 base::CancelableTaskTracker* tracker) { | 258 base::CancelableTaskTracker* tracker) { |
260 // Use 0 as |desired_size| to get the largest bitmap for |favicon_id| without | 259 // Use 0 as |desired_size| to get the largest bitmap for |favicon_id| without |
261 // any resizing. | 260 // any resizing. |
262 int desired_size = 0; | 261 int desired_size = 0; |
263 favicon_base::FaviconResultsCallback callback_runner = | 262 favicon_base::FaviconResultsCallback callback_runner = |
264 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, | 263 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, |
265 base::Unretained(this), | 264 base::Unretained(this), |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 return missing_favicon_urls_.find(url_hash) != missing_favicon_urls_.end(); | 349 return missing_favicon_urls_.find(url_hash) != missing_favicon_urls_.end(); |
351 } | 350 } |
352 | 351 |
353 void FaviconService::ClearUnableToDownloadFavicons() { | 352 void FaviconService::ClearUnableToDownloadFavicons() { |
354 missing_favicon_urls_.clear(); | 353 missing_favicon_urls_.clear(); |
355 } | 354 } |
356 | 355 |
357 FaviconService::~FaviconService() {} | 356 FaviconService::~FaviconService() {} |
358 | 357 |
359 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURLImpl( | 358 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURLImpl( |
360 const FaviconForPageURLParams& params, | 359 const GURL& page_url, |
| 360 int icon_types, |
361 const std::vector<int>& desired_sizes_in_pixel, | 361 const std::vector<int>& desired_sizes_in_pixel, |
362 const favicon_base::FaviconResultsCallback& callback, | 362 const favicon_base::FaviconResultsCallback& callback, |
363 base::CancelableTaskTracker* tracker) { | 363 base::CancelableTaskTracker* tracker) { |
364 if (params.page_url.SchemeIs(content::kChromeUIScheme) || | 364 if (page_url.SchemeIs(content::kChromeUIScheme) || |
365 params.page_url.SchemeIs(extensions::kExtensionScheme)) { | 365 page_url.SchemeIs(extensions::kExtensionScheme)) { |
366 return GetFaviconForChromeURL( | 366 return GetFaviconForChromeURL( |
367 profile_, params.page_url, desired_sizes_in_pixel, callback, tracker); | 367 profile_, page_url, desired_sizes_in_pixel, callback, tracker); |
368 } | 368 } |
369 if (history_service_) { | 369 if (history_service_) { |
370 return history_service_->GetFaviconsForURL(params.page_url, | 370 return history_service_->GetFaviconsForURL(page_url, |
371 params.icon_types, | 371 icon_types, |
372 desired_sizes_in_pixel, | 372 desired_sizes_in_pixel, |
373 callback, | 373 callback, |
374 tracker); | 374 tracker); |
375 } | 375 } |
376 return RunWithEmptyResultAsync(callback, tracker); | 376 return RunWithEmptyResultAsync(callback, tracker); |
377 } | 377 } |
378 | 378 |
379 void FaviconService::RunFaviconImageCallbackWithBitmapResults( | 379 void FaviconService::RunFaviconImageCallbackWithBitmapResults( |
380 const favicon_base::FaviconImageCallback& callback, | 380 const favicon_base::FaviconImageCallback& callback, |
381 int desired_size_in_dip, | 381 int desired_size_in_dip, |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
433 if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false, | 433 if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false, |
434 &resized_bitmap_data)) { | 434 &resized_bitmap_data)) { |
435 callback.Run(favicon_base::FaviconRawBitmapResult()); | 435 callback.Run(favicon_base::FaviconRawBitmapResult()); |
436 return; | 436 return; |
437 } | 437 } |
438 | 438 |
439 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( | 439 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( |
440 &resized_bitmap_data); | 440 &resized_bitmap_data); |
441 callback.Run(bitmap_result); | 441 callback.Run(bitmap_result); |
442 } | 442 } |
OLD | NEW |