| 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" |
| 11 #include "chrome/browser/history/select_favicon_frames.h" | 11 #include "chrome/browser/history/select_favicon_frames.h" |
| 12 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" | 12 #include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" |
| 13 #include "chrome/common/url_constants.h" | 13 #include "chrome/common/url_constants.h" |
| 14 #include "third_party/skia/include/core/SkBitmap.h" | 14 #include "third_party/skia/include/core/SkBitmap.h" |
| 15 #include "ui/gfx/codec/png_codec.h" | 15 #include "ui/gfx/codec/png_codec.h" |
| 16 #include "ui/gfx/favicon_size.h" |
| 16 #include "ui/gfx/image/image_skia.h" | 17 #include "ui/gfx/image/image_skia.h" |
| 17 | 18 |
| 18 FaviconService::FaviconService(HistoryService* history_service) | 19 FaviconService::FaviconService(HistoryService* history_service) |
| 19 : history_service_(history_service) { | 20 : history_service_(history_service) { |
| 20 } | 21 } |
| 21 | 22 |
| 22 FaviconService::Handle FaviconService::GetFaviconImage( | 23 FaviconService::Handle FaviconService::GetFaviconImage( |
| 23 const GURL& icon_url, | 24 const GURL& icon_url, |
| 24 history::IconType icon_type, | 25 history::IconType icon_type, |
| 25 int desired_size_in_dip, | 26 int desired_size_in_dip, |
| 26 CancelableRequestConsumerBase* consumer, | 27 CancelableRequestConsumerBase* consumer, |
| 27 const FaviconImageCallback& callback) { | 28 const FaviconImageCallback& callback) { |
| 28 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( | 29 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( |
| 29 &FaviconService::GetFaviconImageCallback, | 30 &FaviconService::GetFaviconImageCallback, |
| 30 base::Unretained(this), | 31 base::Unretained(this), |
| 31 desired_size_in_dip, | 32 desired_size_in_dip, |
| 32 callback)); | 33 callback)); |
| 33 AddRequest(request, consumer); | 34 AddRequest(request, consumer); |
| 34 // TODO(pkotwicz): Pass in desired size and scale factors. | 35 if (history_service_) { |
| 35 if (history_service_) | 36 std::vector<GURL> icon_urls; |
| 36 history_service_->GetFavicon(request, icon_url, icon_type); | 37 icon_urls.push_back(icon_url); |
| 37 else | 38 history_service_->GetFavicons(request, icon_urls, icon_type, |
| 39 desired_size_in_dip, ui::GetSupportedScaleFactors()); |
| 40 } else { |
| 38 ForwardEmptyResultAsync(request); | 41 ForwardEmptyResultAsync(request); |
| 42 } |
| 39 return request->handle(); | 43 return request->handle(); |
| 40 } | 44 } |
| 41 | 45 |
| 42 FaviconService::Handle FaviconService::GetRawFavicon( | 46 FaviconService::Handle FaviconService::GetRawFavicon( |
| 43 const GURL& icon_url, | 47 const GURL& icon_url, |
| 44 history::IconType icon_type, | 48 history::IconType icon_type, |
| 45 int desired_size_in_dip, | 49 int desired_size_in_dip, |
| 46 ui::ScaleFactor desired_scale_factor, | 50 ui::ScaleFactor desired_scale_factor, |
| 47 CancelableRequestConsumerBase* consumer, | 51 CancelableRequestConsumerBase* consumer, |
| 48 const FaviconRawCallback& callback) { | 52 const FaviconRawCallback& callback) { |
| 49 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( | 53 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( |
| 50 &FaviconService::GetRawFaviconCallback, | 54 &FaviconService::GetRawFaviconCallback, |
| 51 base::Unretained(this), | 55 base::Unretained(this), |
| 52 desired_size_in_dip, | 56 desired_size_in_dip, |
| 53 desired_scale_factor, | 57 desired_scale_factor, |
| 54 callback)); | 58 callback)); |
| 55 AddRequest(request, consumer); | 59 AddRequest(request, consumer); |
| 56 // TODO(pkotwicz): Pass in desired size and scale factor. | 60 if (history_service_) { |
| 57 if (history_service_) | 61 std::vector<GURL> icon_urls; |
| 58 history_service_->GetFavicon(request, icon_url, icon_type); | 62 icon_urls.push_back(icon_url); |
| 59 else | 63 std::vector<ui::ScaleFactor> desired_scale_factors; |
| 64 desired_scale_factors.push_back(desired_scale_factor); |
| 65 history_service_->GetFavicons(request, icon_urls, icon_type, |
| 66 desired_size_in_dip, desired_scale_factors); |
| 67 } else { |
| 60 ForwardEmptyResultAsync(request); | 68 ForwardEmptyResultAsync(request); |
| 69 } |
| 61 return request->handle(); | 70 return request->handle(); |
| 62 } | 71 } |
| 63 | 72 |
| 64 FaviconService::Handle FaviconService::GetFavicon( | 73 FaviconService::Handle FaviconService::GetFavicon( |
| 65 const GURL& icon_url, | 74 const GURL& icon_url, |
| 66 history::IconType icon_type, | 75 history::IconType icon_type, |
| 67 int desired_size_in_dip, | 76 int desired_size_in_dip, |
| 68 const std::vector<ui::ScaleFactor>& desired_scale_factors, | 77 const std::vector<ui::ScaleFactor>& desired_scale_factors, |
| 69 CancelableRequestConsumerBase* consumer, | 78 CancelableRequestConsumerBase* consumer, |
| 70 const FaviconResultsCallback& callback) { | 79 const FaviconResultsCallback& callback) { |
| 71 GetFaviconRequest* request = new GetFaviconRequest(callback); | 80 GetFaviconRequest* request = new GetFaviconRequest(callback); |
| 72 AddRequest(request, consumer); | 81 AddRequest(request, consumer); |
| 73 if (history_service_) | 82 if (history_service_) { |
| 74 history_service_->GetFavicon(request, icon_url, icon_type); | 83 std::vector<GURL> icon_urls; |
| 75 else | 84 icon_urls.push_back(icon_url); |
| 85 history_service_->GetFavicons(request, icon_urls, icon_type, |
| 86 desired_size_in_dip, desired_scale_factors); |
| 87 } else { |
| 76 ForwardEmptyResultAsync(request); | 88 ForwardEmptyResultAsync(request); |
| 89 } |
| 77 return request->handle(); | 90 return request->handle(); |
| 78 } | 91 } |
| 79 | 92 |
| 80 FaviconService::Handle FaviconService::UpdateFaviconMappingAndFetch( | 93 FaviconService::Handle FaviconService::UpdateFaviconMappingAndFetch( |
| 81 const GURL& page_url, | 94 const GURL& page_url, |
| 82 const GURL& icon_url, | 95 const GURL& icon_url, |
| 83 history::IconType icon_type, | 96 history::IconType icon_type, |
| 84 CancelableRequestConsumerBase* consumer, | 97 CancelableRequestConsumerBase* consumer, |
| 85 const FaviconResultsCallback& callback) { | 98 const FaviconResultsCallback& callback) { |
| 86 GetFaviconRequest* request = new GetFaviconRequest(callback); | 99 GetFaviconRequest* request = new GetFaviconRequest(callback); |
| 87 AddRequest(request, consumer); | 100 AddRequest(request, consumer); |
| 88 if (history_service_) | 101 if (history_service_) { |
| 89 history_service_->UpdateFaviconMappingAndFetch(request, page_url, | 102 std::vector<GURL> icon_urls; |
| 90 icon_url, icon_type); | 103 icon_urls.push_back(icon_url); |
| 91 else | 104 // TODO(pkotwicz): Pass in |desired_size_in_dip| and |desired_scale_factors| |
| 105 // from FaviconHandler. |
| 106 history_service_->UpdateFaviconMappingsAndFetch(request, page_url, |
| 107 icon_urls, icon_type, gfx::kFaviconSize, |
| 108 ui::GetSupportedScaleFactors()); |
| 109 } else { |
| 92 ForwardEmptyResultAsync(request); | 110 ForwardEmptyResultAsync(request); |
| 111 } |
| 93 return request->handle(); | 112 return request->handle(); |
| 94 } | 113 } |
| 95 | 114 |
| 96 FaviconService::Handle FaviconService::GetFaviconImageForURL( | 115 FaviconService::Handle FaviconService::GetFaviconImageForURL( |
| 97 const FaviconForURLParams& params, | 116 const FaviconForURLParams& params, |
| 98 const FaviconImageCallback& callback) { | 117 const FaviconImageCallback& callback) { |
| 99 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( | 118 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( |
| 100 &FaviconService::GetFaviconImageCallback, | 119 &FaviconService::GetFaviconImageCallback, |
| 101 base::Unretained(this), | 120 base::Unretained(this), |
| 102 params.desired_size_in_dip, | 121 params.desired_size_in_dip, |
| (...skipping 27 matching lines...) Expand all Loading... |
| 130 GetFaviconRequest* request = new GetFaviconRequest(callback); | 149 GetFaviconRequest* request = new GetFaviconRequest(callback); |
| 131 return GetFaviconForURLImpl(params, desired_scale_factors, request); | 150 return GetFaviconForURLImpl(params, desired_scale_factors, request); |
| 132 } | 151 } |
| 133 | 152 |
| 134 FaviconService::Handle FaviconService::GetLargestRawFaviconForID( | 153 FaviconService::Handle FaviconService::GetLargestRawFaviconForID( |
| 135 history::FaviconID favicon_id, | 154 history::FaviconID favicon_id, |
| 136 CancelableRequestConsumerBase* consumer, | 155 CancelableRequestConsumerBase* consumer, |
| 137 const FaviconRawCallback& callback) { | 156 const FaviconRawCallback& callback) { |
| 138 // Use 0 as |desired_size_in_dip| to get the largest bitmap for |favicon_id| | 157 // Use 0 as |desired_size_in_dip| to get the largest bitmap for |favicon_id| |
| 139 // without any resizing. | 158 // without any resizing. |
| 159 int desired_size_in_dip = 0; |
| 160 ui::ScaleFactor desired_scale_factor = ui::SCALE_FACTOR_100P; |
| 140 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( | 161 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( |
| 141 &FaviconService::GetRawFaviconCallback, | 162 &FaviconService::GetRawFaviconCallback, |
| 142 base::Unretained(this), | 163 base::Unretained(this), |
| 143 0, | 164 desired_size_in_dip, |
| 144 ui::SCALE_FACTOR_100P, | 165 desired_scale_factor, |
| 145 callback)); | 166 callback)); |
| 146 | 167 |
| 147 AddRequest(request, consumer); | 168 AddRequest(request, consumer); |
| 148 FaviconService::Handle handle = request->handle(); | 169 FaviconService::Handle handle = request->handle(); |
| 149 // TODO(pkotwicz): Pass in desired size and scale factor. | 170 if (history_service_) { |
| 150 if (history_service_) | 171 history_service_->GetFaviconForID(request, favicon_id, desired_size_in_dip, |
| 151 history_service_->GetFaviconForID(request, favicon_id); | 172 desired_scale_factor); |
| 152 else | 173 } else { |
| 153 ForwardEmptyResultAsync(request); | 174 ForwardEmptyResultAsync(request); |
| 154 | 175 } |
| 155 return handle; | 176 return handle; |
| 156 } | 177 } |
| 157 | 178 |
| 158 void FaviconService::SetFaviconOutOfDateForPage(const GURL& page_url) { | 179 void FaviconService::SetFaviconOutOfDateForPage(const GURL& page_url) { |
| 159 if (history_service_) | 180 if (history_service_) |
| 160 history_service_->SetFaviconOutOfDateForPage(page_url); | 181 history_service_->SetFaviconsOutOfDateForPage(page_url); |
| 161 } | 182 } |
| 162 | 183 |
| 163 void FaviconService::CloneFavicon(const GURL& old_page_url, | 184 void FaviconService::CloneFavicon(const GURL& old_page_url, |
| 164 const GURL& new_page_url) { | 185 const GURL& new_page_url) { |
| 165 if (history_service_) | 186 if (history_service_) |
| 166 history_service_->CloneFavicon(old_page_url, new_page_url); | 187 history_service_->CloneFavicons(old_page_url, new_page_url); |
| 167 } | 188 } |
| 168 | 189 |
| 169 void FaviconService::SetImportedFavicons( | 190 void FaviconService::SetImportedFavicons( |
| 170 const std::vector<history::ImportedFaviconUsage>& favicon_usage) { | 191 const std::vector<history::ImportedFaviconUsage>& favicon_usage) { |
| 171 if (history_service_) | 192 if (history_service_) |
| 172 history_service_->SetImportedFavicons(favicon_usage); | 193 history_service_->SetImportedFavicons(favicon_usage); |
| 173 } | 194 } |
| 174 | 195 |
| 175 void FaviconService::SetFavicon(const GURL& page_url, | 196 void FaviconService::SetFavicon(const GURL& page_url, |
| 176 const GURL& icon_url, | 197 const GURL& icon_url, |
| 177 const std::vector<unsigned char>& image_data, | 198 const std::vector<unsigned char>& image_data, |
| 178 history::IconType icon_type) { | 199 history::IconType icon_type) { |
| 179 if (history_service_) | 200 if (history_service_) { |
| 180 history_service_->SetFavicon(page_url, icon_url, image_data, icon_type); | 201 // TODO(pkotwicz): Pass in the real pixel size of |image_data|. |
| 202 history::FaviconBitmapData bitmap_data_element; |
| 203 bitmap_data_element.bitmap_data = new base::RefCountedBytes(image_data); |
| 204 bitmap_data_element.pixel_size = gfx::Size(); |
| 205 bitmap_data_element.icon_url = icon_url; |
| 206 std::vector<history::FaviconBitmapData> favicon_bitmap_data; |
| 207 favicon_bitmap_data.push_back(bitmap_data_element); |
| 208 history::FaviconSizes favicon_sizes; |
| 209 favicon_sizes.push_back(gfx::Size()); |
| 210 history::IconURLSizesMap icon_url_sizes; |
| 211 icon_url_sizes[icon_url] = favicon_sizes; |
| 212 history_service_->SetFavicons(page_url, icon_type, |
| 213 favicon_bitmap_data, icon_url_sizes); |
| 214 } |
| 181 } | 215 } |
| 182 | 216 |
| 183 FaviconService::~FaviconService() { | 217 FaviconService::~FaviconService() { |
| 184 } | 218 } |
| 185 | 219 |
| 186 FaviconService::Handle FaviconService::GetFaviconForURLImpl( | 220 FaviconService::Handle FaviconService::GetFaviconForURLImpl( |
| 187 const FaviconForURLParams& params, | 221 const FaviconForURLParams& params, |
| 188 const std::vector<ui::ScaleFactor>& desired_scale_factors, | 222 const std::vector<ui::ScaleFactor>& desired_scale_factors, |
| 189 GetFaviconRequest* request) { | 223 GetFaviconRequest* request) { |
| 190 AddRequest(request, params.consumer); | 224 AddRequest(request, params.consumer); |
| 191 FaviconService::Handle handle = request->handle(); | 225 FaviconService::Handle handle = request->handle(); |
| 192 if (params.page_url.SchemeIs(chrome::kChromeUIScheme) || | 226 if (params.page_url.SchemeIs(chrome::kChromeUIScheme) || |
| 193 params.page_url.SchemeIs(chrome::kExtensionScheme)) { | 227 params.page_url.SchemeIs(chrome::kExtensionScheme)) { |
| 194 ChromeWebUIControllerFactory::GetInstance()->GetFaviconForURL( | 228 ChromeWebUIControllerFactory::GetInstance()->GetFaviconForURL( |
| 195 params.profile, request, params.page_url, desired_scale_factors); | 229 params.profile, request, params.page_url, desired_scale_factors); |
| 196 } else { | 230 } else { |
| 197 // TODO(pkotwicz): Pass in desired size and desired scale factors. | |
| 198 if (history_service_) { | 231 if (history_service_) { |
| 199 history_service_->GetFaviconForURL(request, | 232 history_service_->GetFaviconsForURL(request, |
| 200 params.page_url, | 233 params.page_url, |
| 201 params.icon_types); | 234 params.icon_types, |
| 235 params.desired_size_in_dip, |
| 236 desired_scale_factors); |
| 202 } else { | 237 } else { |
| 203 ForwardEmptyResultAsync(request); | 238 ForwardEmptyResultAsync(request); |
| 204 } | 239 } |
| 205 } | 240 } |
| 206 return handle; | 241 return handle; |
| 207 } | 242 } |
| 208 | 243 |
| 209 void FaviconService::GetFaviconImageCallback( | 244 void FaviconService::GetFaviconImageCallback( |
| 210 int desired_size_in_dip, | 245 int desired_size_in_dip, |
| 211 FaviconImageCallback callback, | 246 FaviconImageCallback callback, |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( | 318 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( |
| 284 &resized_bitmap_data); | 319 &resized_bitmap_data); |
| 285 callback.Run(handle, bitmap_result); | 320 callback.Run(handle, bitmap_result); |
| 286 } | 321 } |
| 287 | 322 |
| 288 void FaviconService::ForwardEmptyResultAsync(GetFaviconRequest* request) { | 323 void FaviconService::ForwardEmptyResultAsync(GetFaviconRequest* request) { |
| 289 request->ForwardResultAsync(request->handle(), | 324 request->ForwardResultAsync(request->handle(), |
| 290 std::vector<history::FaviconBitmapResult>(), | 325 std::vector<history::FaviconBitmapResult>(), |
| 291 history::IconURLSizesMap()); | 326 history::IconURLSizesMap()); |
| 292 } | 327 } |
| OLD | NEW |