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

Side by Side Diff: chrome/browser/favicon/favicon_service.cc

Issue 10910212: Enable hidpi favicons for favicons history does not know about (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 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
« no previous file with comments | « chrome/browser/favicon/favicon_service.h ('k') | chrome/browser/favicon/favicon_tab_helper.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 std::vector<GURL> icon_urls; 83 std::vector<GURL> icon_urls;
84 icon_urls.push_back(icon_url); 84 icon_urls.push_back(icon_url);
85 history_service_->GetFavicons(request, icon_urls, icon_type, 85 history_service_->GetFavicons(request, icon_urls, icon_type,
86 desired_size_in_dip, desired_scale_factors); 86 desired_size_in_dip, desired_scale_factors);
87 } else { 87 } else {
88 ForwardEmptyResultAsync(request); 88 ForwardEmptyResultAsync(request);
89 } 89 }
90 return request->handle(); 90 return request->handle();
91 } 91 }
92 92
93 FaviconService::Handle FaviconService::UpdateFaviconMappingAndFetch( 93 FaviconService::Handle FaviconService::UpdateFaviconMappingsAndFetch(
94 const GURL& page_url, 94 const GURL& page_url,
95 const GURL& icon_url, 95 const std::vector<GURL>& icon_urls,
96 history::IconType icon_type, 96 int icon_types,
97 int desired_size_in_dip,
98 const std::vector<ui::ScaleFactor>& desired_scale_factors,
97 CancelableRequestConsumerBase* consumer, 99 CancelableRequestConsumerBase* consumer,
98 const FaviconResultsCallback& callback) { 100 const FaviconResultsCallback& callback) {
99 GetFaviconRequest* request = new GetFaviconRequest(callback); 101 GetFaviconRequest* request = new GetFaviconRequest(callback);
100 AddRequest(request, consumer); 102 AddRequest(request, consumer);
101 if (history_service_) { 103 if (history_service_) {
102 std::vector<GURL> icon_urls;
103 icon_urls.push_back(icon_url);
104 // TODO(pkotwicz): Pass in |desired_size_in_dip| and |desired_scale_factors|
105 // from FaviconHandler.
106 history_service_->UpdateFaviconMappingsAndFetch(request, page_url, 104 history_service_->UpdateFaviconMappingsAndFetch(request, page_url,
107 icon_urls, icon_type, gfx::kFaviconSize, 105 icon_urls, icon_types, desired_size_in_dip, desired_scale_factors);
108 ui::GetSupportedScaleFactors());
109 } else { 106 } else {
110 ForwardEmptyResultAsync(request); 107 ForwardEmptyResultAsync(request);
111 } 108 }
112 return request->handle(); 109 return request->handle();
113 } 110 }
114 111
115 FaviconService::Handle FaviconService::GetFaviconImageForURL( 112 FaviconService::Handle FaviconService::GetFaviconImageForURL(
116 const FaviconForURLParams& params, 113 const FaviconForURLParams& params,
117 const FaviconImageCallback& callback) { 114 const FaviconImageCallback& callback) {
118 GetFaviconRequest* request = new GetFaviconRequest(base::Bind( 115 GetFaviconRequest* request = new GetFaviconRequest(base::Bind(
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 if (history_service_) 183 if (history_service_)
187 history_service_->CloneFavicons(old_page_url, new_page_url); 184 history_service_->CloneFavicons(old_page_url, new_page_url);
188 } 185 }
189 186
190 void FaviconService::SetImportedFavicons( 187 void FaviconService::SetImportedFavicons(
191 const std::vector<history::ImportedFaviconUsage>& favicon_usage) { 188 const std::vector<history::ImportedFaviconUsage>& favicon_usage) {
192 if (history_service_) 189 if (history_service_)
193 history_service_->SetImportedFavicons(favicon_usage); 190 history_service_->SetImportedFavicons(favicon_usage);
194 } 191 }
195 192
196 void FaviconService::SetFavicon(const GURL& page_url, 193 void FaviconService::MergeFavicon(
197 const GURL& icon_url, 194 const GURL& page_url,
198 const std::vector<unsigned char>& image_data, 195 const GURL& icon_url,
199 history::IconType icon_type) { 196 history::IconType icon_type,
197 scoped_refptr<base::RefCountedMemory> bitmap_data,
198 const gfx::Size& pixel_size) {
200 if (history_service_) { 199 if (history_service_) {
201 // TODO(pkotwicz): Pass in the real pixel size of |image_data|. 200 history_service_->MergeFavicon(page_url, icon_url, icon_type, bitmap_data,
202 history::FaviconBitmapData bitmap_data_element; 201 pixel_size);
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 } 202 }
215 } 203 }
216 204
205 void FaviconService::SetFavicons(
206 const GURL& page_url,
207 const GURL& icon_url,
208 history::IconType icon_type,
209 const gfx::Image& image) {
210 if (!history_service_)
211 return;
212
213 gfx::ImageSkia image_skia = image.AsImageSkia();
214 image_skia.EnsureRepsForSupportedScaleFactors();
215 const std::vector<gfx::ImageSkiaRep>& image_reps = image_skia.image_reps();
216 std::vector<history::FaviconBitmapData> favicon_bitmap_data;
217 history::FaviconSizes favicon_sizes;
218 for (size_t i = 0; i < image_reps.size(); ++i) {
219 scoped_refptr<base::RefCountedBytes> bitmap_data(
220 new base::RefCountedBytes());
221 if (gfx::PNGCodec::EncodeBGRASkBitmap(image_reps[i].sk_bitmap(),
222 false,
223 &bitmap_data->data())) {
224 gfx::Size pixel_size(image_reps[i].pixel_width(),
225 image_reps[i].pixel_height());
226 history::FaviconBitmapData bitmap_data_element;
227 bitmap_data_element.bitmap_data = bitmap_data;
228 bitmap_data_element.pixel_size = pixel_size;
229 bitmap_data_element.icon_url = icon_url;
230
231 favicon_bitmap_data.push_back(bitmap_data_element);
232
233 // Construct favicon sizes from a guess at what the HTML 5 'sizes'
234 // attribute in the link tag is.
235 // TODO(pkotwicz): Plumb the HTML 5 sizes attribute to FaviconHandler.
236 favicon_sizes.push_back(pixel_size);
237 }
238 }
239
240 // TODO(pkotwicz): Tell the database about all the icon URLs associated
241 // with |page_url|.
242 history::IconURLSizesMap icon_url_sizes;
243 icon_url_sizes[icon_url] = favicon_sizes;
244
245 history_service_->SetFavicons(page_url, icon_type, favicon_bitmap_data,
246 icon_url_sizes);
247 }
248
217 FaviconService::~FaviconService() { 249 FaviconService::~FaviconService() {
218 } 250 }
219 251
220 FaviconService::Handle FaviconService::GetFaviconForURLImpl( 252 FaviconService::Handle FaviconService::GetFaviconForURLImpl(
221 const FaviconForURLParams& params, 253 const FaviconForURLParams& params,
222 const std::vector<ui::ScaleFactor>& desired_scale_factors, 254 const std::vector<ui::ScaleFactor>& desired_scale_factors,
223 GetFaviconRequest* request) { 255 GetFaviconRequest* request) {
224 AddRequest(request, params.consumer); 256 AddRequest(request, params.consumer);
225 FaviconService::Handle handle = request->handle(); 257 FaviconService::Handle handle = request->handle();
226 if (params.page_url.SchemeIs(chrome::kChromeUIScheme) || 258 if (params.page_url.SchemeIs(chrome::kChromeUIScheme) ||
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector( 350 bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector(
319 &resized_bitmap_data); 351 &resized_bitmap_data);
320 callback.Run(handle, bitmap_result); 352 callback.Run(handle, bitmap_result);
321 } 353 }
322 354
323 void FaviconService::ForwardEmptyResultAsync(GetFaviconRequest* request) { 355 void FaviconService::ForwardEmptyResultAsync(GetFaviconRequest* request) {
324 request->ForwardResultAsync(request->handle(), 356 request->ForwardResultAsync(request->handle(),
325 std::vector<history::FaviconBitmapResult>(), 357 std::vector<history::FaviconBitmapResult>(),
326 history::IconURLSizesMap()); 358 history::IconURLSizesMap());
327 } 359 }
OLDNEW
« no previous file with comments | « chrome/browser/favicon/favicon_service.h ('k') | chrome/browser/favicon/favicon_tab_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698