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

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

Powered by Google App Engine
This is Rietveld 408576698