Chromium Code Reviews| 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 |