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, | |
79 CancelableRequestConsumerBase* consumer, | 78 CancelableRequestConsumerBase* consumer, |
80 const FaviconResultsCallback& callback) { | 79 const FaviconResultsCallback& callback) { |
81 GetFaviconRequest* request = new GetFaviconRequest(callback); | 80 GetFaviconRequest* request = new GetFaviconRequest(callback); |
82 AddRequest(request, consumer); | 81 AddRequest(request, consumer); |
83 if (history_service_) { | 82 if (history_service_) { |
84 std::vector<GURL> icon_urls; | 83 std::vector<GURL> icon_urls; |
85 icon_urls.push_back(icon_url); | 84 icon_urls.push_back(icon_url); |
86 history_service_->GetFavicons(request, icon_urls, icon_type, | 85 history_service_->GetFavicons(request, icon_urls, icon_type, |
87 desired_size_in_dip, desired_scale_factors); | 86 desired_size_in_dip, FaviconUtil::GetFaviconScaleFactors()); |
88 } else { | 87 } else { |
89 ForwardEmptyResultAsync(request); | 88 ForwardEmptyResultAsync(request); |
90 } | 89 } |
91 return request->handle(); | 90 return request->handle(); |
92 } | 91 } |
93 | 92 |
94 FaviconService::Handle FaviconService::UpdateFaviconMappingsAndFetch( | 93 FaviconService::Handle FaviconService::UpdateFaviconMappingsAndFetch( |
95 const GURL& page_url, | 94 const GURL& page_url, |
96 const std::vector<GURL>& icon_urls, | 95 const std::vector<GURL>& icon_urls, |
97 int icon_types, | 96 int icon_types, |
98 int desired_size_in_dip, | 97 int desired_size_in_dip, |
99 const std::vector<ui::ScaleFactor>& desired_scale_factors, | |
100 CancelableRequestConsumerBase* consumer, | 98 CancelableRequestConsumerBase* consumer, |
101 const FaviconResultsCallback& callback) { | 99 const FaviconResultsCallback& callback) { |
102 GetFaviconRequest* request = new GetFaviconRequest(callback); | 100 GetFaviconRequest* request = new GetFaviconRequest(callback); |
103 AddRequest(request, consumer); | 101 AddRequest(request, consumer); |
104 if (history_service_) { | 102 if (history_service_) { |
105 history_service_->UpdateFaviconMappingsAndFetch(request, page_url, | 103 history_service_->UpdateFaviconMappingsAndFetch(request, page_url, |
106 icon_urls, icon_types, desired_size_in_dip, desired_scale_factors); | 104 icon_urls, icon_types, desired_size_in_dip, |
| 105 FaviconUtil::GetFaviconScaleFactors()); |
107 } else { | 106 } else { |
108 ForwardEmptyResultAsync(request); | 107 ForwardEmptyResultAsync(request); |
109 } | 108 } |
110 return request->handle(); | 109 return request->handle(); |
111 } | 110 } |
112 | 111 |
113 FaviconService::Handle FaviconService::GetFaviconImageForURL( | 112 FaviconService::Handle FaviconService::GetFaviconImageForURL( |
114 const FaviconForURLParams& params, | 113 const FaviconForURLParams& params, |
115 const FaviconImageCallback& callback) { | 114 const FaviconImageCallback& callback) { |
116 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( | 115 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( |
117 &FaviconService::GetFaviconImageCallback, | 116 &FaviconService::GetFaviconImageCallback, |
118 base::Unretained(this), | 117 base::Unretained(this), |
119 params.desired_size_in_dip, | 118 params.desired_size_in_dip, |
120 callback)); | 119 callback)); |
121 | 120 |
122 std::vector<ui::ScaleFactor> desired_scale_factors = | 121 return GetFaviconForURLImpl(params, |
123 ui::GetSupportedScaleFactors(); | 122 FaviconUtil::GetFaviconScaleFactors(), |
124 return GetFaviconForURLImpl(params, desired_scale_factors, request); | 123 request); |
125 } | 124 } |
126 | 125 |
127 FaviconService::Handle FaviconService::GetRawFaviconForURL( | 126 FaviconService::Handle FaviconService::GetRawFaviconForURL( |
128 const FaviconForURLParams& params, | 127 const FaviconForURLParams& params, |
129 ui::ScaleFactor desired_scale_factor, | 128 ui::ScaleFactor desired_scale_factor, |
130 const FaviconRawCallback& callback) { | 129 const FaviconRawCallback& callback) { |
131 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( | 130 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( |
132 &FaviconService::GetRawFaviconCallback, | 131 &FaviconService::GetRawFaviconCallback, |
133 base::Unretained(this), | 132 base::Unretained(this), |
134 params.desired_size_in_dip, | 133 params.desired_size_in_dip, |
135 desired_scale_factor, | 134 desired_scale_factor, |
136 callback)); | 135 callback)); |
137 | 136 |
138 std::vector<ui::ScaleFactor> desired_scale_factors; | 137 std::vector<ui::ScaleFactor> desired_scale_factors; |
139 desired_scale_factors.push_back(desired_scale_factor); | 138 desired_scale_factors.push_back(desired_scale_factor); |
140 return GetFaviconForURLImpl(params, desired_scale_factors, request); | 139 return GetFaviconForURLImpl(params, desired_scale_factors, request); |
141 } | 140 } |
142 | 141 |
143 FaviconService::Handle FaviconService::GetFaviconForURL( | 142 FaviconService::Handle FaviconService::GetFaviconForURL( |
144 const FaviconForURLParams& params, | 143 const FaviconForURLParams& params, |
145 const std::vector<ui::ScaleFactor>& desired_scale_factors, | |
146 const FaviconResultsCallback& callback) { | 144 const FaviconResultsCallback& callback) { |
147 GetFaviconRequest* request = new GetFaviconRequest(callback); | 145 GetFaviconRequest* request = new GetFaviconRequest(callback); |
148 return GetFaviconForURLImpl(params, desired_scale_factors, request); | 146 return GetFaviconForURLImpl(params, |
| 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 ui::GetSupportedScaleFactors(), | 285 FaviconUtil::GetFaviconScaleFactors(), |
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); | |
338 std::vector<ui::ScaleFactor> desired_scale_factors; | 328 std::vector<ui::ScaleFactor> desired_scale_factors; |
339 desired_scale_factors.push_back(desired_scale_factor); | 329 desired_scale_factors.push_back(desired_scale_factor); |
340 gfx::ImageSkia resized_image = SelectFaviconFrames(bitmaps, | 330 gfx::Image resized_image = FaviconUtil::SelectFaviconFramesFromPNGs( |
341 desired_scale_factors, desired_size_in_dip, NULL); | 331 favicon_bitmap_results, desired_scale_factors, desired_size_in_dip); |
342 | 332 |
343 std::vector<unsigned char> resized_bitmap_data; | 333 std::vector<unsigned char> resized_bitmap_data; |
344 if (!gfx::PNGCodec::EncodeBGRASkBitmap(*resized_image.bitmap(), false, | 334 if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false, |
345 &resized_bitmap_data)) { | 335 &resized_bitmap_data)) { |
346 callback.Run(handle, history::FaviconBitmapResult()); | 336 callback.Run(handle, history::FaviconBitmapResult()); |
347 return; | 337 return; |
348 } | 338 } |
349 | 339 |
350 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( | 340 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( |
351 &resized_bitmap_data); | 341 &resized_bitmap_data); |
352 callback.Run(handle, bitmap_result); | 342 callback.Run(handle, bitmap_result); |
353 } | 343 } |
354 | 344 |
355 void FaviconService::ForwardEmptyResultAsync(GetFaviconRequest* request) { | 345 void FaviconService::ForwardEmptyResultAsync(GetFaviconRequest* request) { |
356 request->ForwardResultAsync(request->handle(), | 346 request->ForwardResultAsync(request->handle(), |
357 std::vector<history::FaviconBitmapResult>(), | 347 std::vector<history::FaviconBitmapResult>(), |
358 history::IconURLSizesMap()); | 348 history::IconURLSizesMap()); |
359 } | 349 } |
OLD | NEW |