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

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

Issue 336423006: Pass in a set of requested favicon pixel sizes to the HistoryService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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 "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/history/history_backend.h" 9 #include "chrome/browser/history/history_backend.h"
10 #include "chrome/browser/history/history_service.h" 10 #include "chrome/browser/history/history_service.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
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::FaviconRawBitmapResult>())); 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<int>& desired_sizes_in_pixel,
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;
56 base::CancelableTaskTracker::TaskId id = 56 base::CancelableTaskTracker::TaskId id =
57 tracker->NewTrackedTaskId(&is_canceled_cb); 57 tracker->NewTrackedTaskId(&is_canceled_cb);
58 favicon_base::FaviconResultsCallback cancelable_cb = 58 favicon_base::FaviconResultsCallback cancelable_cb =
59 Bind(&CancelOrRunFaviconResultsCallback, is_canceled_cb, callback); 59 Bind(&CancelOrRunFaviconResultsCallback, is_canceled_cb, callback);
60 ChromeWebUIControllerFactory::GetInstance()->GetFaviconForURL(profile, 60 ChromeWebUIControllerFactory::GetInstance()->GetFaviconForURL(profile,
61 page_url, desired_scale_factors, cancelable_cb); 61 page_url, desired_sizes_in_pixel, cancelable_cb);
62 return id; 62 return id;
63 } 63 }
64 64
65 // Returns a vector of pixel edge sizes from |size_in_dip| and
66 // favicon_base::GetFaviconScaleFactors().
67 std::vector<int> GetPixelSizesForFaviconScales(int size_in_dip) {
68 std::vector<ui::ScaleFactor> scale_factors =
69 favicon_base::GetFaviconScaleFactors();
70 std::vector<int> sizes_in_pixel;
71 for (size_t i = 0; i < scale_factors.size(); ++i) {
72 float scale = ui::GetScaleForScaleFactor(scale_factors[i]);
73 sizes_in_pixel.push_back(static_cast<int>(size_in_dip * scale + 0.5f));
74 }
75 return sizes_in_pixel;
76 }
77
65 } // namespace 78 } // namespace
66 79
67 FaviconService::FaviconService(Profile* profile) 80 FaviconService::FaviconService(Profile* profile)
68 : history_service_(HistoryServiceFactory::GetForProfile( 81 : history_service_(HistoryServiceFactory::GetForProfile(
69 profile, Profile::EXPLICIT_ACCESS)), 82 profile, Profile::EXPLICIT_ACCESS)),
70 profile_(profile) { 83 profile_(profile) {
71 } 84 }
72 85
73 // static 86 // static
74 void FaviconService::FaviconResultsCallbackRunner( 87 void FaviconService::FaviconResultsCallbackRunner(
75 const favicon_base::FaviconResultsCallback& callback, 88 const favicon_base::FaviconResultsCallback& callback,
76 const std::vector<favicon_base::FaviconRawBitmapResult>* results) { 89 const std::vector<favicon_base::FaviconRawBitmapResult>* results) {
77 callback.Run(*results); 90 callback.Run(*results);
78 } 91 }
79 92
80 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImage( 93 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImage(
81 const GURL& icon_url, 94 const GURL& icon_url,
82 favicon_base::IconType icon_type, 95 favicon_base::IconType icon_type,
83 int desired_size_in_dip, 96 int desired_size_in_dip,
84 const favicon_base::FaviconImageCallback& callback, 97 const favicon_base::FaviconImageCallback& callback,
85 base::CancelableTaskTracker* tracker) { 98 base::CancelableTaskTracker* tracker) {
86 favicon_base::FaviconResultsCallback callback_runner = 99 favicon_base::FaviconResultsCallback callback_runner =
87 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults, 100 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults,
88 base::Unretained(this), callback, desired_size_in_dip); 101 base::Unretained(this), callback, desired_size_in_dip);
89 if (history_service_) { 102 if (history_service_) {
90 std::vector<GURL> icon_urls; 103 std::vector<GURL> icon_urls;
91 icon_urls.push_back(icon_url); 104 icon_urls.push_back(icon_url);
92 return history_service_->GetFavicons(icon_urls, 105 return history_service_->GetFavicons(
93 icon_type, 106 icon_urls,
94 desired_size_in_dip, 107 icon_type,
95 favicon_base::GetFaviconScaleFactors(), 108 GetPixelSizesForFaviconScales(desired_size_in_dip),
96 callback_runner, 109 callback_runner,
97 tracker); 110 tracker);
98 } 111 }
99 return RunWithEmptyResultAsync(callback_runner, tracker); 112 return RunWithEmptyResultAsync(callback_runner, tracker);
100 } 113 }
101 114
102 base::CancelableTaskTracker::TaskId FaviconService::GetRawFavicon( 115 base::CancelableTaskTracker::TaskId FaviconService::GetRawFavicon(
103 const GURL& icon_url, 116 const GURL& icon_url,
104 favicon_base::IconType icon_type, 117 favicon_base::IconType icon_type,
105 int desired_size_in_dip, 118 int desired_size_in_dip,
106 ui::ScaleFactor desired_scale_factor, 119 ui::ScaleFactor desired_scale_factor,
107 const favicon_base::FaviconRawBitmapCallback& callback, 120 const favicon_base::FaviconRawBitmapCallback& callback,
108 base::CancelableTaskTracker* tracker) { 121 base::CancelableTaskTracker* tracker) {
122 float desired_scale = ui::GetScaleForScaleFactor(desired_scale_factor);
123 int desired_size_in_pixel =
124 static_cast<int>(desired_size_in_dip * desired_scale + 0.5);
sky 2014/06/18 22:16:51 Why do add .5 here? I see this comes from old code
pkotwicz 2014/06/18 23:32:01 I believe that rounding up is the convention when
109 favicon_base::FaviconResultsCallback callback_runner = 125 favicon_base::FaviconResultsCallback callback_runner =
110 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, 126 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
111 base::Unretained(this), 127 base::Unretained(this),
112 callback, 128 callback,
113 desired_size_in_dip, 129 desired_size_in_pixel);
114 desired_scale_factor);
115 130
116 if (history_service_) { 131 if (history_service_) {
117 std::vector<GURL> icon_urls; 132 std::vector<GURL> icon_urls;
118 icon_urls.push_back(icon_url); 133 icon_urls.push_back(icon_url);
119 std::vector<ui::ScaleFactor> desired_scale_factors; 134 std::vector<int> desired_sizes_in_pixel;
120 desired_scale_factors.push_back(desired_scale_factor); 135 desired_sizes_in_pixel.push_back(desired_size_in_pixel);
121 136
122 return history_service_->GetFavicons( 137 return history_service_->GetFavicons(
123 icon_urls, icon_type, desired_size_in_dip, desired_scale_factors, 138 icon_urls, icon_type, desired_sizes_in_pixel, callback_runner, tracker);
124 callback_runner, tracker);
125 } 139 }
126 return RunWithEmptyResultAsync(callback_runner, tracker); 140 return RunWithEmptyResultAsync(callback_runner, tracker);
127 } 141 }
128 142
129 base::CancelableTaskTracker::TaskId FaviconService::GetFavicon( 143 base::CancelableTaskTracker::TaskId FaviconService::GetFavicon(
130 const GURL& icon_url, 144 const GURL& icon_url,
131 favicon_base::IconType icon_type, 145 favicon_base::IconType icon_type,
132 int desired_size_in_dip, 146 int desired_size_in_dip,
133 const favicon_base::FaviconResultsCallback& callback, 147 const favicon_base::FaviconResultsCallback& callback,
134 base::CancelableTaskTracker* tracker) { 148 base::CancelableTaskTracker* tracker) {
135 if (history_service_) { 149 if (history_service_) {
136 std::vector<GURL> icon_urls; 150 std::vector<GURL> icon_urls;
137 icon_urls.push_back(icon_url); 151 icon_urls.push_back(icon_url);
138 return history_service_->GetFavicons(icon_urls, 152 return history_service_->GetFavicons(
139 icon_type, 153 icon_urls,
140 desired_size_in_dip, 154 icon_type,
141 favicon_base::GetFaviconScaleFactors(), 155 GetPixelSizesForFaviconScales(desired_size_in_dip),
142 callback, 156 callback,
143 tracker); 157 tracker);
144 } 158 }
145 return RunWithEmptyResultAsync(callback, tracker); 159 return RunWithEmptyResultAsync(callback, tracker);
146 } 160 }
147 161
148 base::CancelableTaskTracker::TaskId 162 base::CancelableTaskTracker::TaskId
149 FaviconService::UpdateFaviconMappingsAndFetch( 163 FaviconService::UpdateFaviconMappingsAndFetch(
150 const GURL& page_url, 164 const GURL& page_url,
151 const std::vector<GURL>& icon_urls, 165 const std::vector<GURL>& icon_urls,
152 int icon_types, 166 int icon_types,
153 int desired_size_in_dip, 167 int desired_size_in_dip,
154 const favicon_base::FaviconResultsCallback& callback, 168 const favicon_base::FaviconResultsCallback& callback,
155 base::CancelableTaskTracker* tracker) { 169 base::CancelableTaskTracker* tracker) {
156 if (history_service_) { 170 if (history_service_) {
157 return history_service_->UpdateFaviconMappingsAndFetch( 171 return history_service_->UpdateFaviconMappingsAndFetch(
158 page_url, 172 page_url,
159 icon_urls, 173 icon_urls,
160 icon_types, 174 icon_types,
161 desired_size_in_dip, 175 GetPixelSizesForFaviconScales(desired_size_in_dip),
162 favicon_base::GetFaviconScaleFactors(),
163 callback, 176 callback,
164 tracker); 177 tracker);
165 } 178 }
166 return RunWithEmptyResultAsync(callback, tracker); 179 return RunWithEmptyResultAsync(callback, tracker);
167 } 180 }
168 181
169 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImageForPageURL( 182 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImageForPageURL(
170 const FaviconForPageURLParams& params, 183 const FaviconForPageURLParams& params,
171 const favicon_base::FaviconImageCallback& callback, 184 const favicon_base::FaviconImageCallback& callback,
172 base::CancelableTaskTracker* tracker) { 185 base::CancelableTaskTracker* tracker) {
173 return GetFaviconForPageURLImpl( 186 return GetFaviconForPageURLImpl(
174 params, 187 params,
175 favicon_base::GetFaviconScaleFactors(), 188 GetPixelSizesForFaviconScales(params.desired_size_in_dip),
176 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults, 189 Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults,
177 base::Unretained(this), 190 base::Unretained(this),
178 callback, 191 callback,
179 params.desired_size_in_dip), 192 params.desired_size_in_dip),
180 tracker); 193 tracker);
181 } 194 }
182 195
183 base::CancelableTaskTracker::TaskId FaviconService::GetRawFaviconForPageURL( 196 base::CancelableTaskTracker::TaskId FaviconService::GetRawFaviconForPageURL(
184 const FaviconForPageURLParams& params, 197 const FaviconForPageURLParams& params,
185 ui::ScaleFactor desired_scale_factor, 198 ui::ScaleFactor desired_scale_factor,
186 const favicon_base::FaviconRawBitmapCallback& callback, 199 const favicon_base::FaviconRawBitmapCallback& callback,
187 base::CancelableTaskTracker* tracker) { 200 base::CancelableTaskTracker* tracker) {
188 std::vector<ui::ScaleFactor> desired_scale_factors; 201 float desired_scale = ui::GetScaleForScaleFactor(desired_scale_factor);
189 desired_scale_factors.push_back(desired_scale_factor); 202 int desired_size_in_pixel =
203 static_cast<int>(params.desired_size_in_dip * desired_scale + 0.5f);
sky 2014/06/18 22:16:51 Same comment here about .5. In fact how about fact
204 std::vector<int> desired_sizes_in_pixel;
205 desired_sizes_in_pixel.push_back(desired_size_in_pixel);
190 return GetFaviconForPageURLImpl( 206 return GetFaviconForPageURLImpl(
191 params, 207 params,
192 desired_scale_factors, 208 desired_sizes_in_pixel,
193 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, 209 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
194 base::Unretained(this), 210 base::Unretained(this),
195 callback, 211 callback,
196 params.desired_size_in_dip, 212 desired_size_in_pixel),
197 desired_scale_factor),
198 tracker); 213 tracker);
199 } 214 }
200 215
201 base::CancelableTaskTracker::TaskId 216 base::CancelableTaskTracker::TaskId
202 FaviconService::GetLargestRawFaviconForPageURL( 217 FaviconService::GetLargestRawFaviconForPageURL(
203 Profile* profile, 218 Profile* profile,
204 const GURL& page_url, 219 const GURL& page_url,
205 const std::vector<int>& icon_types, 220 const std::vector<int>& icon_types,
206 int minimum_size_in_pixels, 221 int minimum_size_in_pixels,
207 const favicon_base::FaviconRawBitmapCallback& callback, 222 const favicon_base::FaviconRawBitmapCallback& callback,
208 base::CancelableTaskTracker* tracker) { 223 base::CancelableTaskTracker* tracker) {
209 favicon_base::FaviconResultsCallback favicon_results_callback = 224 favicon_base::FaviconResultsCallback favicon_results_callback =
210 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, 225 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
211 base::Unretained(this), 226 base::Unretained(this),
212 callback, 227 callback,
213 0, 228 0);
214 ui::ScaleFactor());
215 if (page_url.SchemeIs(content::kChromeUIScheme) || 229 if (page_url.SchemeIs(content::kChromeUIScheme) ||
216 page_url.SchemeIs(extensions::kExtensionScheme)) { 230 page_url.SchemeIs(extensions::kExtensionScheme)) {
217 std::vector<ui::ScaleFactor> scale_factor; 231 std::vector<int> desired_sizes_in_pixel;
218 scale_factor.push_back(ui::SCALE_FACTOR_100P); 232 desired_sizes_in_pixel.push_back(0);
219 return GetFaviconForChromeURL(profile, page_url, scale_factor, 233 return GetFaviconForChromeURL(profile, page_url, desired_sizes_in_pixel,
220 favicon_results_callback, tracker); 234 favicon_results_callback, tracker);
221 } 235 }
222 if (history_service_) { 236 if (history_service_) {
223 return history_service_->GetLargestFaviconForURL(page_url, icon_types, 237 return history_service_->GetLargestFaviconForURL(page_url, icon_types,
224 minimum_size_in_pixels, callback, tracker); 238 minimum_size_in_pixels, callback, tracker);
225 } 239 }
226 return RunWithEmptyResultAsync(favicon_results_callback, tracker); 240 return RunWithEmptyResultAsync(favicon_results_callback, tracker);
227 } 241 }
228 242
229 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURL( 243 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURL(
230 const FaviconForPageURLParams& params, 244 const FaviconForPageURLParams& params,
231 const favicon_base::FaviconResultsCallback& callback, 245 const favicon_base::FaviconResultsCallback& callback,
232 base::CancelableTaskTracker* tracker) { 246 base::CancelableTaskTracker* tracker) {
233 return GetFaviconForPageURLImpl( 247 return GetFaviconForPageURLImpl(
234 params, favicon_base::GetFaviconScaleFactors(), callback, tracker); 248 params,
249 GetPixelSizesForFaviconScales(params.desired_size_in_dip),
250 callback,
251 tracker);
235 } 252 }
236 253
237 base::CancelableTaskTracker::TaskId FaviconService::GetLargestRawFaviconForID( 254 base::CancelableTaskTracker::TaskId FaviconService::GetLargestRawFaviconForID(
238 favicon_base::FaviconID favicon_id, 255 favicon_base::FaviconID favicon_id,
239 const favicon_base::FaviconRawBitmapCallback& callback, 256 const favicon_base::FaviconRawBitmapCallback& callback,
240 base::CancelableTaskTracker* tracker) { 257 base::CancelableTaskTracker* tracker) {
241 // Use 0 as |desired_size_in_dip| to get the largest bitmap for |favicon_id| 258 // Use 0 as |desired_size| to get the largest bitmap for |favicon_id| without
242 // without any resizing. 259 // any resizing.
243 int desired_size_in_dip = 0; 260 int desired_size = 0;
244 ui::ScaleFactor desired_scale_factor = ui::SCALE_FACTOR_100P;
245 favicon_base::FaviconResultsCallback callback_runner = 261 favicon_base::FaviconResultsCallback callback_runner =
246 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, 262 Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
247 base::Unretained(this), 263 base::Unretained(this),
248 callback, 264 callback,
249 desired_size_in_dip, 265 desired_size);
250 desired_scale_factor);
251 266
252 if (history_service_) { 267 if (history_service_) {
253 return history_service_->GetFaviconForID( 268 return history_service_->GetFaviconForID(
254 favicon_id, desired_size_in_dip, desired_scale_factor, 269 favicon_id, desired_size, callback_runner, tracker);
255 callback_runner, tracker);
256 } 270 }
257 return RunWithEmptyResultAsync(callback_runner, tracker); 271 return RunWithEmptyResultAsync(callback_runner, tracker);
258 } 272 }
259 273
260 void FaviconService::SetFaviconOutOfDateForPage(const GURL& page_url) { 274 void FaviconService::SetFaviconOutOfDateForPage(const GURL& page_url) {
261 if (history_service_) 275 if (history_service_)
262 history_service_->SetFaviconsOutOfDateForPage(page_url); 276 history_service_->SetFaviconsOutOfDateForPage(page_url);
263 } 277 }
264 278
265 void FaviconService::CloneFavicon(const GURL& old_page_url, 279 void FaviconService::CloneFavicon(const GURL& old_page_url,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 } 342 }
329 343
330 void FaviconService::ClearUnableToDownloadFavicons() { 344 void FaviconService::ClearUnableToDownloadFavicons() {
331 missing_favicon_urls_.clear(); 345 missing_favicon_urls_.clear();
332 } 346 }
333 347
334 FaviconService::~FaviconService() {} 348 FaviconService::~FaviconService() {}
335 349
336 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURLImpl( 350 base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURLImpl(
337 const FaviconForPageURLParams& params, 351 const FaviconForPageURLParams& params,
338 const std::vector<ui::ScaleFactor>& desired_scale_factors, 352 const std::vector<int>& desired_sizes_in_pixel,
339 const favicon_base::FaviconResultsCallback& callback, 353 const favicon_base::FaviconResultsCallback& callback,
340 base::CancelableTaskTracker* tracker) { 354 base::CancelableTaskTracker* tracker) {
341 if (params.page_url.SchemeIs(content::kChromeUIScheme) || 355 if (params.page_url.SchemeIs(content::kChromeUIScheme) ||
342 params.page_url.SchemeIs(extensions::kExtensionScheme)) { 356 params.page_url.SchemeIs(extensions::kExtensionScheme)) {
343 return GetFaviconForChromeURL(profile_, params.page_url, 357 return GetFaviconForChromeURL(profile_, params.page_url,
344 desired_scale_factors, callback, tracker); 358 desired_sizes_in_pixel, callback, tracker);
345 } 359 }
346 if (history_service_) { 360 if (history_service_) {
347 return history_service_->GetFaviconsForURL(params.page_url, 361 return history_service_->GetFaviconsForURL(params.page_url,
348 params.icon_types, 362 params.icon_types,
349 params.desired_size_in_dip, 363 desired_sizes_in_pixel,
350 desired_scale_factors,
351 callback, 364 callback,
352 tracker); 365 tracker);
353 } 366 }
354 return RunWithEmptyResultAsync(callback, tracker); 367 return RunWithEmptyResultAsync(callback, tracker);
355 } 368 }
356 369
357 void FaviconService::RunFaviconImageCallbackWithBitmapResults( 370 void FaviconService::RunFaviconImageCallbackWithBitmapResults(
358 const favicon_base::FaviconImageCallback& callback, 371 const favicon_base::FaviconImageCallback& callback,
359 int desired_size_in_dip, 372 int desired_size_in_dip,
360 const std::vector<favicon_base::FaviconRawBitmapResult>& 373 const std::vector<favicon_base::FaviconRawBitmapResult>&
361 favicon_bitmap_results) { 374 favicon_bitmap_results) {
362 favicon_base::FaviconImageResult image_result; 375 favicon_base::FaviconImageResult image_result;
363 image_result.image = favicon_base::SelectFaviconFramesFromPNGs( 376 image_result.image = favicon_base::SelectFaviconFramesFromPNGs(
364 favicon_bitmap_results, 377 favicon_bitmap_results,
365 favicon_base::GetFaviconScaleFactors(), 378 favicon_base::GetFaviconScaleFactors(),
366 desired_size_in_dip); 379 desired_size_in_dip);
367 favicon_base::SetFaviconColorSpace(&image_result.image); 380 favicon_base::SetFaviconColorSpace(&image_result.image);
368 381
369 image_result.icon_url = image_result.image.IsEmpty() ? 382 image_result.icon_url = image_result.image.IsEmpty() ?
370 GURL() : favicon_bitmap_results[0].icon_url; 383 GURL() : favicon_bitmap_results[0].icon_url;
371 callback.Run(image_result); 384 callback.Run(image_result);
372 } 385 }
373 386
374 void FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults( 387 void FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults(
375 const favicon_base::FaviconRawBitmapCallback& callback, 388 const favicon_base::FaviconRawBitmapCallback& callback,
376 int desired_size_in_dip, 389 int desired_size_in_pixel,
377 ui::ScaleFactor desired_scale_factor,
378 const std::vector<favicon_base::FaviconRawBitmapResult>& 390 const std::vector<favicon_base::FaviconRawBitmapResult>&
379 favicon_bitmap_results) { 391 favicon_bitmap_results) {
380 if (favicon_bitmap_results.empty() || !favicon_bitmap_results[0].is_valid()) { 392 if (favicon_bitmap_results.empty() || !favicon_bitmap_results[0].is_valid()) {
381 callback.Run(favicon_base::FaviconRawBitmapResult()); 393 callback.Run(favicon_base::FaviconRawBitmapResult());
382 return; 394 return;
383 } 395 }
384 396
385 DCHECK_EQ(1u, favicon_bitmap_results.size()); 397 DCHECK_EQ(1u, favicon_bitmap_results.size());
386 favicon_base::FaviconRawBitmapResult bitmap_result = 398 favicon_base::FaviconRawBitmapResult bitmap_result =
387 favicon_bitmap_results[0]; 399 favicon_bitmap_results[0];
388 400
389 // If the desired size is 0, SelectFaviconFrames() will return the largest 401 // If the desired size is 0, SelectFaviconFrames() will return the largest
390 // bitmap without doing any resizing. As |favicon_bitmap_results| has bitmap 402 // bitmap without doing any resizing. As |favicon_bitmap_results| has bitmap
391 // data for a single bitmap, return it and avoid an unnecessary decode. 403 // data for a single bitmap, return it and avoid an unnecessary decode.
392 if (desired_size_in_dip == 0) { 404 if (desired_size_in_pixel == 0) {
393 callback.Run(bitmap_result); 405 callback.Run(bitmap_result);
394 return; 406 return;
395 } 407 }
396 408
397 // If history bitmap is already desired pixel size, return early. 409 // If history bitmap is already desired pixel size, return early.
398 float desired_scale = ui::GetScaleForScaleFactor(desired_scale_factor); 410 if (bitmap_result.pixel_size.width() == desired_size_in_pixel &&
399 int desired_edge_width_in_pixel = static_cast<int>( 411 bitmap_result.pixel_size.height() == desired_size_in_pixel) {
400 desired_size_in_dip * desired_scale + 0.5f);
401
402 gfx::Size desired_size_in_pixel(desired_edge_width_in_pixel,
403 desired_edge_width_in_pixel);
404 if (bitmap_result.pixel_size == desired_size_in_pixel) {
405 callback.Run(bitmap_result); 412 callback.Run(bitmap_result);
406 return; 413 return;
407 } 414 }
408 415
409 // Convert raw bytes to SkBitmap, resize via SelectFaviconFrames(), then 416 // Convert raw bytes to SkBitmap, resize via SelectFaviconFrames(), then
410 // convert back. 417 // convert back.
411 std::vector<ui::ScaleFactor> desired_scale_factors; 418 std::vector<ui::ScaleFactor> desired_scale_factors;
412 desired_scale_factors.push_back(desired_scale_factor); 419 desired_scale_factors.push_back(ui::SCALE_FACTOR_100P);
413 gfx::Image resized_image = favicon_base::SelectFaviconFramesFromPNGs( 420 gfx::Image resized_image = favicon_base::SelectFaviconFramesFromPNGs(
414 favicon_bitmap_results, desired_scale_factors, desired_size_in_dip); 421 favicon_bitmap_results, desired_scale_factors, desired_size_in_pixel);
415 422
416 std::vector<unsigned char> resized_bitmap_data; 423 std::vector<unsigned char> resized_bitmap_data;
417 if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false, 424 if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false,
418 &resized_bitmap_data)) { 425 &resized_bitmap_data)) {
419 callback.Run(favicon_base::FaviconRawBitmapResult()); 426 callback.Run(favicon_base::FaviconRawBitmapResult());
420 return; 427 return;
421 } 428 }
422 429
423 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( 430 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector(
424 &resized_bitmap_data); 431 &resized_bitmap_data);
425 callback.Run(bitmap_result); 432 callback.Run(bitmap_result);
426 } 433 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698