Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(408)

Side by Side Diff: chrome/browser/favicon/favicon_service.cc

Issue 335233003: Convert ui::ScaleFactor -> float in favicon/history code (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix size_t Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 Profile* profile, 52 Profile* profile,
53 const GURL& page_url, 53 const GURL& page_url,
54 const std::vector<int>& desired_sizes_in_pixel, 54 const std::vector<int>& desired_sizes_in_pixel,
55 const favicon_base::FaviconResultsCallback& callback, 55 const favicon_base::FaviconResultsCallback& callback,
56 base::CancelableTaskTracker* tracker) { 56 base::CancelableTaskTracker* tracker) {
57 base::CancelableTaskTracker::IsCanceledCallback is_canceled_cb; 57 base::CancelableTaskTracker::IsCanceledCallback is_canceled_cb;
58 base::CancelableTaskTracker::TaskId id = 58 base::CancelableTaskTracker::TaskId id =
59 tracker->NewTrackedTaskId(&is_canceled_cb); 59 tracker->NewTrackedTaskId(&is_canceled_cb);
60 favicon_base::FaviconResultsCallback cancelable_cb = 60 favicon_base::FaviconResultsCallback cancelable_cb =
61 Bind(&CancelOrRunFaviconResultsCallback, is_canceled_cb, callback); 61 Bind(&CancelOrRunFaviconResultsCallback, is_canceled_cb, callback);
62 ChromeWebUIControllerFactory::GetInstance()->GetFaviconForURL(profile, 62 ChromeWebUIControllerFactory::GetInstance()->GetFaviconForURL(
63 page_url, desired_sizes_in_pixel, cancelable_cb); 63 profile, page_url, desired_sizes_in_pixel, cancelable_cb);
64 return id; 64 return id;
65 } 65 }
66 66
67 // Returns the size in pixel that a favicon should be based on |size_in_dip|
68 // and |scale_factor|.
69 int GetSizeInPixel(int size_in_dip, ui::ScaleFactor scale_factor) {
70 return ceil(size_in_dip * ui::GetScaleForScaleFactor(scale_factor));
71 }
72
73 // Returns a vector of pixel edge sizes from |size_in_dip| and 67 // Returns a vector of pixel edge sizes from |size_in_dip| and
74 // favicon_base::GetFaviconScaleFactors(). 68 // favicon_base::GetFaviconScales().
75 std::vector<int> GetPixelSizesForFaviconScales(int size_in_dip) { 69 std::vector<int> GetPixelSizesForFaviconScales(int size_in_dip) {
76 std::vector<ui::ScaleFactor> scale_factors = 70 std::vector<float> scales = favicon_base::GetFaviconScales();
77 favicon_base::GetFaviconScaleFactors();
78 std::vector<int> sizes_in_pixel; 71 std::vector<int> sizes_in_pixel;
79 for (size_t i = 0; i < scale_factors.size(); ++i) { 72 for (size_t i = 0; i < scales.size(); ++i) {
80 sizes_in_pixel.push_back(GetSizeInPixel(size_in_dip, scale_factors[i])); 73 sizes_in_pixel.push_back(std::ceil(size_in_dip * scales[i]));
81 } 74 }
82 return sizes_in_pixel; 75 return sizes_in_pixel;
83 } 76 }
84 77
85 } // namespace 78 } // namespace
86 79
87 FaviconService::FaviconService(Profile* profile) 80 FaviconService::FaviconService(Profile* profile)
88 : history_service_(HistoryServiceFactory::GetForProfile( 81 : history_service_(HistoryServiceFactory::GetForProfile(
89 profile, Profile::EXPLICIT_ACCESS)), 82 profile, Profile::EXPLICIT_ACCESS)),
90 profile_(profile) { 83 profile_(profile) {
(...skipping 25 matching lines...) Expand all
116 callback_runner, 109 callback_runner,
117 tracker); 110 tracker);
118 } 111 }
119 return RunWithEmptyResultAsync(callback_runner, tracker); 112 return RunWithEmptyResultAsync(callback_runner, tracker);
120 } 113 }
121 114
122 base::CancelableTaskTracker::TaskId FaviconService::GetRawFavicon( 115 base::CancelableTaskTracker::TaskId FaviconService::GetRawFavicon(
123 const GURL& icon_url, 116 const GURL& icon_url,
124 favicon_base::IconType icon_type, 117 favicon_base::IconType icon_type,
125 int desired_size_in_dip, 118 int desired_size_in_dip,
126 ui::ScaleFactor desired_scale_factor, 119 float desired_favicon_scale,
127 const favicon_base::FaviconRawBitmapCallback& callback, 120 const favicon_base::FaviconRawBitmapCallback& callback,
128 base::CancelableTaskTracker* tracker) { 121 base::CancelableTaskTracker* tracker) {
129 int desired_size_in_pixel = 122 int desired_size_in_pixel =
130 GetSizeInPixel(desired_size_in_dip, desired_scale_factor); 123 std::ceil(desired_size_in_dip * desired_favicon_scale);
131 favicon_base::FaviconResultsCallback callback_runner = 124 favicon_base::FaviconResultsCallback callback_runner =
132 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, 125 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
133 base::Unretained(this), 126 base::Unretained(this),
134 callback, 127 callback,
135 desired_size_in_pixel); 128 desired_size_in_pixel);
136 129
137 if (history_service_) { 130 if (history_service_) {
138 std::vector<GURL> icon_urls; 131 std::vector<GURL> icon_urls;
139 icon_urls.push_back(icon_url); 132 icon_urls.push_back(icon_url);
140 std::vector<int> desired_sizes_in_pixel; 133 std::vector<int> desired_sizes_in_pixel;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 GetPixelSizesForFaviconScales(params.desired_size_in_dip), 187 GetPixelSizesForFaviconScales(params.desired_size_in_dip),
195 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults, 188 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults,
196 base::Unretained(this), 189 base::Unretained(this),
197 callback, 190 callback,
198 params.desired_size_in_dip), 191 params.desired_size_in_dip),
199 tracker); 192 tracker);
200 } 193 }
201 194
202 base::CancelableTaskTracker::TaskId FaviconService::GetRawFaviconForPageURL( 195 base::CancelableTaskTracker::TaskId FaviconService::GetRawFaviconForPageURL(
203 const FaviconForPageURLParams& params, 196 const FaviconForPageURLParams& params,
204 ui::ScaleFactor desired_scale_factor, 197 float desired_favicon_scale,
205 const favicon_base::FaviconRawBitmapCallback& callback, 198 const favicon_base::FaviconRawBitmapCallback& callback,
206 base::CancelableTaskTracker* tracker) { 199 base::CancelableTaskTracker* tracker) {
207 int desired_size_in_pixel = 200 int desired_size_in_pixel =
208 GetSizeInPixel(params.desired_size_in_dip, desired_scale_factor); 201 std::ceil(params.desired_size_in_dip * desired_favicon_scale);
209 std::vector<int> desired_sizes_in_pixel; 202 std::vector<int> desired_sizes_in_pixel;
210 desired_sizes_in_pixel.push_back(desired_size_in_pixel); 203 desired_sizes_in_pixel.push_back(desired_size_in_pixel);
211 return GetFaviconForPageURLImpl( 204 return GetFaviconForPageURLImpl(
212 params, 205 params,
213 desired_sizes_in_pixel, 206 desired_sizes_in_pixel,
214 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, 207 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
215 base::Unretained(this), 208 base::Unretained(this),
216 callback, 209 callback,
217 desired_size_in_pixel), 210 desired_size_in_pixel),
218 tracker); 211 tracker);
219 } 212 }
220 213
221 base::CancelableTaskTracker::TaskId 214 base::CancelableTaskTracker::TaskId
222 FaviconService::GetLargestRawFaviconForPageURL( 215 FaviconService::GetLargestRawFaviconForPageURL(
223 Profile* profile, 216 Profile* profile,
224 const GURL& page_url, 217 const GURL& page_url,
225 const std::vector<int>& icon_types, 218 const std::vector<int>& icon_types,
226 int minimum_size_in_pixels, 219 int minimum_size_in_pixels,
227 const favicon_base::FaviconRawBitmapCallback& callback, 220 const favicon_base::FaviconRawBitmapCallback& callback,
228 base::CancelableTaskTracker* tracker) { 221 base::CancelableTaskTracker* tracker) {
229 favicon_base::FaviconResultsCallback favicon_results_callback = 222 favicon_base::FaviconResultsCallback favicon_results_callback =
230 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, 223 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
231 base::Unretained(this), 224 base::Unretained(this),
232 callback, 225 callback,
233 0); 226 0);
234 if (page_url.SchemeIs(content::kChromeUIScheme) || 227 if (page_url.SchemeIs(content::kChromeUIScheme) ||
235 page_url.SchemeIs(extensions::kExtensionScheme)) { 228 page_url.SchemeIs(extensions::kExtensionScheme)) {
236 std::vector<int> desired_sizes_in_pixel; 229 std::vector<int> desired_sizes_in_pixel;
237 desired_sizes_in_pixel.push_back(0); 230 desired_sizes_in_pixel.push_back(0);
238 return GetFaviconForChromeURL(profile, page_url, desired_sizes_in_pixel, 231 return GetFaviconForChromeURL(profile,
239 favicon_results_callback, tracker); 232 page_url,
233 desired_sizes_in_pixel,
234 favicon_results_callback,
235 tracker);
240 } 236 }
241 if (history_service_) { 237 if (history_service_) {
242 return history_service_->GetLargestFaviconForURL(page_url, icon_types, 238 return history_service_->GetLargestFaviconForURL(page_url, icon_types,
243 minimum_size_in_pixels, callback, tracker); 239 minimum_size_in_pixels, callback, tracker);
244 } 240 }
245 return RunWithEmptyResultAsync(favicon_results_callback, tracker); 241 return RunWithEmptyResultAsync(favicon_results_callback, tracker);
246 } 242 }
247 243
248 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURL( 244 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURL(
249 const FaviconForPageURLParams& params, 245 const FaviconForPageURLParams& params,
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 348
353 FaviconService::~FaviconService() {} 349 FaviconService::~FaviconService() {}
354 350
355 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURLImpl( 351 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURLImpl(
356 const FaviconForPageURLParams& params, 352 const FaviconForPageURLParams& params,
357 const std::vector<int>& desired_sizes_in_pixel, 353 const std::vector<int>& desired_sizes_in_pixel,
358 const favicon_base::FaviconResultsCallback& callback, 354 const favicon_base::FaviconResultsCallback& callback,
359 base::CancelableTaskTracker* tracker) { 355 base::CancelableTaskTracker* tracker) {
360 if (params.page_url.SchemeIs(content::kChromeUIScheme) || 356 if (params.page_url.SchemeIs(content::kChromeUIScheme) ||
361 params.page_url.SchemeIs(extensions::kExtensionScheme)) { 357 params.page_url.SchemeIs(extensions::kExtensionScheme)) {
362 return GetFaviconForChromeURL(profile_, params.page_url, 358 return GetFaviconForChromeURL(
363 desired_sizes_in_pixel, callback, tracker); 359 profile_, params.page_url, desired_sizes_in_pixel, callback, tracker);
364 } 360 }
365 if (history_service_) { 361 if (history_service_) {
366 return history_service_->GetFaviconsForURL(params.page_url, 362 return history_service_->GetFaviconsForURL(params.page_url,
367 params.icon_types, 363 params.icon_types,
368 desired_sizes_in_pixel, 364 desired_sizes_in_pixel,
369 callback, 365 callback,
370 tracker); 366 tracker);
371 } 367 }
372 return RunWithEmptyResultAsync(callback, tracker); 368 return RunWithEmptyResultAsync(callback, tracker);
373 } 369 }
374 370
375 void FaviconService::RunFaviconImageCallbackWithBitmapResults( 371 void FaviconService::RunFaviconImageCallbackWithBitmapResults(
376 const favicon_base::FaviconImageCallback& callback, 372 const favicon_base::FaviconImageCallback& callback,
377 int desired_size_in_dip, 373 int desired_size_in_dip,
378 const std::vector<favicon_base::FaviconRawBitmapResult>& 374 const std::vector<favicon_base::FaviconRawBitmapResult>&
379 favicon_bitmap_results) { 375 favicon_bitmap_results) {
380 favicon_base::FaviconImageResult image_result; 376 favicon_base::FaviconImageResult image_result;
381 image_result.image = favicon_base::SelectFaviconFramesFromPNGs( 377 image_result.image = favicon_base::SelectFaviconFramesFromPNGs(
382 favicon_bitmap_results, 378 favicon_bitmap_results,
383 favicon_base::GetFaviconScaleFactors(), 379 favicon_base::GetFaviconScales(),
384 desired_size_in_dip); 380 desired_size_in_dip);
385 favicon_base::SetFaviconColorSpace(&image_result.image); 381 favicon_base::SetFaviconColorSpace(&image_result.image);
386 382
387 image_result.icon_url = image_result.image.IsEmpty() ? 383 image_result.icon_url = image_result.image.IsEmpty() ?
388 GURL() : favicon_bitmap_results[0].icon_url; 384 GURL() : favicon_bitmap_results[0].icon_url;
389 callback.Run(image_result); 385 callback.Run(image_result);
390 } 386 }
391 387
392 void FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults( 388 void FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults(
393 const favicon_base::FaviconRawBitmapCallback& callback, 389 const favicon_base::FaviconRawBitmapCallback& callback,
(...skipping 19 matching lines...) Expand all
413 409
414 // If history bitmap is already desired pixel size, return early. 410 // If history bitmap is already desired pixel size, return early.
415 if (bitmap_result.pixel_size.width() == desired_size_in_pixel && 411 if (bitmap_result.pixel_size.width() == desired_size_in_pixel &&
416 bitmap_result.pixel_size.height() == desired_size_in_pixel) { 412 bitmap_result.pixel_size.height() == desired_size_in_pixel) {
417 callback.Run(bitmap_result); 413 callback.Run(bitmap_result);
418 return; 414 return;
419 } 415 }
420 416
421 // Convert raw bytes to SkBitmap, resize via SelectFaviconFrames(), then 417 // Convert raw bytes to SkBitmap, resize via SelectFaviconFrames(), then
422 // convert back. 418 // convert back.
423 std::vector<ui::ScaleFactor> desired_scale_factors; 419 std::vector<float> desired_favicon_scales;
424 desired_scale_factors.push_back(ui::SCALE_FACTOR_100P); 420 desired_favicon_scales.push_back(1.0f);
425 gfx::Image resized_image = favicon_base::SelectFaviconFramesFromPNGs( 421 gfx::Image resized_image = favicon_base::SelectFaviconFramesFromPNGs(
426 favicon_bitmap_results, desired_scale_factors, desired_size_in_pixel); 422 favicon_bitmap_results, desired_favicon_scales, desired_size_in_pixel);
427 423
428 std::vector<unsigned char> resized_bitmap_data; 424 std::vector<unsigned char> resized_bitmap_data;
429 if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false, 425 if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false,
430 &resized_bitmap_data)) { 426 &resized_bitmap_data)) {
431 callback.Run(favicon_base::FaviconRawBitmapResult()); 427 callback.Run(favicon_base::FaviconRawBitmapResult());
432 return; 428 return;
433 } 429 }
434 430
435 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( 431 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector(
436 &resized_bitmap_data); 432 &resized_bitmap_data);
437 callback.Run(bitmap_result); 433 callback.Run(bitmap_result);
438 } 434 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698