| 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 |