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 "chrome/browser/favicon/favicon_util.h" | 7 #include "chrome/browser/favicon/favicon_util.h" |
8 #include "chrome/browser/history/history.h" | 8 #include "chrome/browser/history/history.h" |
9 #include "chrome/browser/history/history_backend.h" | 9 #include "chrome/browser/history/history_backend.h" |
10 #include "chrome/browser/history/history_service_factory.h" | 10 #include "chrome/browser/history/history_service_factory.h" |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 } else { | 68 } else { |
69 ForwardEmptyResultAsync(request); | 69 ForwardEmptyResultAsync(request); |
70 } | 70 } |
71 return request->handle(); | 71 return request->handle(); |
72 } | 72 } |
73 | 73 |
74 FaviconService::Handle FaviconService::GetFavicon( | 74 FaviconService::Handle FaviconService::GetFavicon( |
75 const GURL& icon_url, | 75 const GURL& icon_url, |
76 history::IconType icon_type, | 76 history::IconType icon_type, |
77 int desired_size_in_dip, | 77 int desired_size_in_dip, |
| 78 const std::vector<ui::ScaleFactor>& desired_scale_factors, |
78 CancelableRequestConsumerBase* consumer, | 79 CancelableRequestConsumerBase* consumer, |
79 const FaviconResultsCallback& callback) { | 80 const FaviconResultsCallback& callback) { |
80 GetFaviconRequest* request = new GetFaviconRequest(callback); | 81 GetFaviconRequest* request = new GetFaviconRequest(callback); |
81 AddRequest(request, consumer); | 82 AddRequest(request, consumer); |
82 if (history_service_) { | 83 if (history_service_) { |
83 std::vector<GURL> icon_urls; | 84 std::vector<GURL> icon_urls; |
84 icon_urls.push_back(icon_url); | 85 icon_urls.push_back(icon_url); |
85 history_service_->GetFavicons(request, icon_urls, icon_type, | 86 history_service_->GetFavicons(request, icon_urls, icon_type, |
86 desired_size_in_dip, FaviconUtil::GetFaviconScaleFactors()); | 87 desired_size_in_dip, desired_scale_factors); |
87 } else { | 88 } else { |
88 ForwardEmptyResultAsync(request); | 89 ForwardEmptyResultAsync(request); |
89 } | 90 } |
90 return request->handle(); | 91 return request->handle(); |
91 } | 92 } |
92 | 93 |
93 FaviconService::Handle FaviconService::UpdateFaviconMappingsAndFetch( | 94 FaviconService::Handle FaviconService::UpdateFaviconMappingsAndFetch( |
94 const GURL& page_url, | 95 const GURL& page_url, |
95 const std::vector<GURL>& icon_urls, | 96 const std::vector<GURL>& icon_urls, |
96 int icon_types, | 97 int icon_types, |
97 int desired_size_in_dip, | 98 int desired_size_in_dip, |
| 99 const std::vector<ui::ScaleFactor>& desired_scale_factors, |
98 CancelableRequestConsumerBase* consumer, | 100 CancelableRequestConsumerBase* consumer, |
99 const FaviconResultsCallback& callback) { | 101 const FaviconResultsCallback& callback) { |
100 GetFaviconRequest* request = new GetFaviconRequest(callback); | 102 GetFaviconRequest* request = new GetFaviconRequest(callback); |
101 AddRequest(request, consumer); | 103 AddRequest(request, consumer); |
102 if (history_service_) { | 104 if (history_service_) { |
103 history_service_->UpdateFaviconMappingsAndFetch(request, page_url, | 105 history_service_->UpdateFaviconMappingsAndFetch(request, page_url, |
104 icon_urls, icon_types, desired_size_in_dip, | 106 icon_urls, icon_types, desired_size_in_dip, desired_scale_factors); |
105 FaviconUtil::GetFaviconScaleFactors()); | |
106 } else { | 107 } else { |
107 ForwardEmptyResultAsync(request); | 108 ForwardEmptyResultAsync(request); |
108 } | 109 } |
109 return request->handle(); | 110 return request->handle(); |
110 } | 111 } |
111 | 112 |
112 FaviconService::Handle FaviconService::GetFaviconImageForURL( | 113 FaviconService::Handle FaviconService::GetFaviconImageForURL( |
113 const FaviconForURLParams& params, | 114 const FaviconForURLParams& params, |
114 const FaviconImageCallback& callback) { | 115 const FaviconImageCallback& callback) { |
115 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( | 116 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( |
116 &FaviconService::GetFaviconImageCallback, | 117 &FaviconService::GetFaviconImageCallback, |
117 base::Unretained(this), | 118 base::Unretained(this), |
118 params.desired_size_in_dip, | 119 params.desired_size_in_dip, |
119 callback)); | 120 callback)); |
120 | 121 |
121 return GetFaviconForURLImpl(params, | 122 std::vector<ui::ScaleFactor> desired_scale_factors = |
122 FaviconUtil::GetFaviconScaleFactors(), | 123 ui::GetSupportedScaleFactors(); |
123 request); | 124 return GetFaviconForURLImpl(params, desired_scale_factors, request); |
124 } | 125 } |
125 | 126 |
126 FaviconService::Handle FaviconService::GetRawFaviconForURL( | 127 FaviconService::Handle FaviconService::GetRawFaviconForURL( |
127 const FaviconForURLParams& params, | 128 const FaviconForURLParams& params, |
128 ui::ScaleFactor desired_scale_factor, | 129 ui::ScaleFactor desired_scale_factor, |
129 const FaviconRawCallback& callback) { | 130 const FaviconRawCallback& callback) { |
130 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( | 131 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( |
131 &FaviconService::GetRawFaviconCallback, | 132 &FaviconService::GetRawFaviconCallback, |
132 base::Unretained(this), | 133 base::Unretained(this), |
133 params.desired_size_in_dip, | 134 params.desired_size_in_dip, |
134 desired_scale_factor, | 135 desired_scale_factor, |
135 callback)); | 136 callback)); |
136 | 137 |
137 std::vector<ui::ScaleFactor> desired_scale_factors; | 138 std::vector<ui::ScaleFactor> desired_scale_factors; |
138 desired_scale_factors.push_back(desired_scale_factor); | 139 desired_scale_factors.push_back(desired_scale_factor); |
139 return GetFaviconForURLImpl(params, desired_scale_factors, request); | 140 return GetFaviconForURLImpl(params, desired_scale_factors, request); |
140 } | 141 } |
141 | 142 |
142 FaviconService::Handle FaviconService::GetFaviconForURL( | 143 FaviconService::Handle FaviconService::GetFaviconForURL( |
143 const FaviconForURLParams& params, | 144 const FaviconForURLParams& params, |
| 145 const std::vector<ui::ScaleFactor>& desired_scale_factors, |
144 const FaviconResultsCallback& callback) { | 146 const FaviconResultsCallback& callback) { |
145 GetFaviconRequest* request = new GetFaviconRequest(callback); | 147 GetFaviconRequest* request = new GetFaviconRequest(callback); |
146 return GetFaviconForURLImpl(params, | 148 return GetFaviconForURLImpl(params, desired_scale_factors, request); |
147 FaviconUtil::GetFaviconScaleFactors(), | |
148 request); | |
149 } | 149 } |
150 | 150 |
151 FaviconService::Handle FaviconService::GetLargestRawFaviconForID( | 151 FaviconService::Handle FaviconService::GetLargestRawFaviconForID( |
152 history::FaviconID favicon_id, | 152 history::FaviconID favicon_id, |
153 CancelableRequestConsumerBase* consumer, | 153 CancelableRequestConsumerBase* consumer, |
154 const FaviconRawCallback& callback) { | 154 const FaviconRawCallback& callback) { |
155 // Use 0 as |desired_size_in_dip| to get the largest bitmap for |favicon_id| | 155 // Use 0 as |desired_size_in_dip| to get the largest bitmap for |favicon_id| |
156 // without any resizing. | 156 // without any resizing. |
157 int desired_size_in_dip = 0; | 157 int desired_size_in_dip = 0; |
158 ui::ScaleFactor desired_scale_factor = ui::SCALE_FACTOR_100P; | 158 ui::ScaleFactor desired_scale_factor = ui::SCALE_FACTOR_100P; |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 | 275 |
276 void FaviconService::GetFaviconImageCallback( | 276 void FaviconService::GetFaviconImageCallback( |
277 int desired_size_in_dip, | 277 int desired_size_in_dip, |
278 FaviconImageCallback callback, | 278 FaviconImageCallback callback, |
279 Handle handle, | 279 Handle handle, |
280 std::vector<history::FaviconBitmapResult> favicon_bitmap_results, | 280 std::vector<history::FaviconBitmapResult> favicon_bitmap_results, |
281 history::IconURLSizesMap icon_url_sizes_map) { | 281 history::IconURLSizesMap icon_url_sizes_map) { |
282 history::FaviconImageResult image_result; | 282 history::FaviconImageResult image_result; |
283 image_result.image = FaviconUtil::SelectFaviconFramesFromPNGs( | 283 image_result.image = FaviconUtil::SelectFaviconFramesFromPNGs( |
284 favicon_bitmap_results, | 284 favicon_bitmap_results, |
285 FaviconUtil::GetFaviconScaleFactors(), | 285 ui::GetSupportedScaleFactors(), |
286 desired_size_in_dip); | 286 desired_size_in_dip); |
287 image_result.icon_url = image_result.image.IsEmpty() ? | 287 image_result.icon_url = image_result.image.IsEmpty() ? |
288 GURL() : favicon_bitmap_results[0].icon_url; | 288 GURL() : favicon_bitmap_results[0].icon_url; |
289 callback.Run(handle, image_result); | 289 callback.Run(handle, image_result); |
290 } | 290 } |
291 | 291 |
292 void FaviconService::GetRawFaviconCallback( | 292 void FaviconService::GetRawFaviconCallback( |
293 int desired_size_in_dip, | 293 int desired_size_in_dip, |
294 ui::ScaleFactor desired_scale_factor, | 294 ui::ScaleFactor desired_scale_factor, |
295 FaviconRawCallback callback, | 295 FaviconRawCallback callback, |
(...skipping 22 matching lines...) Expand all Loading... |
318 desired_size_in_dip * desired_scale + 0.5f); | 318 desired_size_in_dip * desired_scale + 0.5f); |
319 gfx::Size desired_size_in_pixel(desired_edge_width_in_pixel, | 319 gfx::Size desired_size_in_pixel(desired_edge_width_in_pixel, |
320 desired_edge_width_in_pixel); | 320 desired_edge_width_in_pixel); |
321 if (bitmap_result.pixel_size == desired_size_in_pixel) { | 321 if (bitmap_result.pixel_size == desired_size_in_pixel) { |
322 callback.Run(handle, bitmap_result); | 322 callback.Run(handle, bitmap_result); |
323 return; | 323 return; |
324 } | 324 } |
325 | 325 |
326 // Convert raw bytes to SkBitmap, resize via SelectFaviconFrames(), then | 326 // Convert raw bytes to SkBitmap, resize via SelectFaviconFrames(), then |
327 // convert back. | 327 // convert back. |
| 328 SkBitmap bitmap; |
| 329 if (!gfx::PNGCodec::Decode(bitmap_result.bitmap_data->front(), |
| 330 bitmap_result.bitmap_data->size(), |
| 331 &bitmap)) { |
| 332 callback.Run(handle, history::FaviconBitmapResult()); |
| 333 return; |
| 334 } |
| 335 |
| 336 std::vector<SkBitmap> bitmaps; |
| 337 bitmaps.push_back(bitmap); |
328 std::vector<ui::ScaleFactor> desired_scale_factors; | 338 std::vector<ui::ScaleFactor> desired_scale_factors; |
329 desired_scale_factors.push_back(desired_scale_factor); | 339 desired_scale_factors.push_back(desired_scale_factor); |
330 gfx::Image resized_image = FaviconUtil::SelectFaviconFramesFromPNGs( | 340 gfx::ImageSkia resized_image = SelectFaviconFrames(bitmaps, |
331 favicon_bitmap_results, desired_scale_factors, desired_size_in_dip); | 341 desired_scale_factors, desired_size_in_dip, NULL); |
332 | 342 |
333 std::vector<unsigned char> resized_bitmap_data; | 343 std::vector<unsigned char> resized_bitmap_data; |
334 if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false, | 344 if (!gfx::PNGCodec::EncodeBGRASkBitmap(*resized_image.bitmap(), false, |
335 &resized_bitmap_data)) { | 345 &resized_bitmap_data)) { |
336 callback.Run(handle, history::FaviconBitmapResult()); | 346 callback.Run(handle, history::FaviconBitmapResult()); |
337 return; | 347 return; |
338 } | 348 } |
339 | 349 |
340 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( | 350 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( |
341 &resized_bitmap_data); | 351 &resized_bitmap_data); |
342 callback.Run(handle, bitmap_result); | 352 callback.Run(handle, bitmap_result); |
343 } | 353 } |
344 | 354 |
345 void FaviconService::ForwardEmptyResultAsync(GetFaviconRequest* request) { | 355 void FaviconService::ForwardEmptyResultAsync(GetFaviconRequest* request) { |
346 request->ForwardResultAsync(request->handle(), | 356 request->ForwardResultAsync(request->handle(), |
347 std::vector<history::FaviconBitmapResult>(), | 357 std::vector<history::FaviconBitmapResult>(), |
348 history::IconURLSizesMap()); | 358 history::IconURLSizesMap()); |
349 } | 359 } |
OLD | NEW |