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