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

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

Issue 10870022: Change FaviconData to be able to return data for multiple bitmaps for same icon URL (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
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 #ifndef CHROME_BROWSER_FAVICON_FAVICON_SERVICE_H_ 5 #ifndef CHROME_BROWSER_FAVICON_FAVICON_SERVICE_H_
6 #define CHROME_BROWSER_FAVICON_FAVICON_SERVICE_H_ 6 #define CHROME_BROWSER_FAVICON_FAVICON_SERVICE_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
11 #include "base/memory/ref_counted.h" 11 #include "base/memory/ref_counted.h"
12 #include "chrome/browser/cancelable_request.h" 12 #include "chrome/browser/cancelable_request.h"
13 #include "chrome/browser/history/history_types.h" 13 #include "chrome/browser/history/history_types.h"
14 #include "chrome/browser/profiles/profile_keyed_service.h" 14 #include "chrome/browser/profiles/profile_keyed_service.h"
15 #include "chrome/common/ref_counted_util.h" 15 #include "chrome/common/ref_counted_util.h"
16 #include "ui/base/layout.h"
16 17
17 class GURL; 18 class GURL;
18 class HistoryService; 19 class HistoryService;
19 class Profile; 20 class Profile;
20 21
21 // The favicon service provides methods to access favicons. It calls the history 22 // The favicon service provides methods to access favicons. It calls the history
22 // backend behind the scenes. 23 // backend behind the scenes.
23 // 24 //
24 // This service is thread safe. Each request callback is invoked in the 25 // This service is thread safe. Each request callback is invoked in the
25 // thread that made the request. 26 // thread that made the request.
26 class FaviconService : public CancelableRequestProvider, 27 class FaviconService : public CancelableRequestProvider,
27 public ProfileKeyedService { 28 public ProfileKeyedService {
28 public: 29 public:
29 explicit FaviconService(HistoryService* history_service); 30 explicit FaviconService(HistoryService* history_service);
30 31
31 virtual ~FaviconService(); 32 virtual ~FaviconService();
32 33
33 // Callback for GetFavicon. If we have previously inquired about the favicon 34 // Callback for GetFaviconImage() and GetFaviconImageForURL().
34 // for this URL, |know_favicon| will be true, and the rest of the fields will 35 // |FaviconImageResult::image| is constructed from the bitmaps for the
35 // be valid (otherwise they will be ignored). 36 // passed in URL and icon types which most which closely match the passed in
37 // |desired_size_in_dip| at the scale factors supported by the current
38 // platform (eg MacOS).
39 // |FaviconImageResult::icon_url| is the favicon that the favicon bitmaps in
40 // |image| originate from.
41 // TODO(pkotwicz): Enable constructing |image| from bitmaps from several
42 // icon URLs.
43 typedef base::Callback<void(Handle, const history::FaviconImageResult&)>
44 FaviconImageCallback;
45
46 // Callback for GetRawFavicon() and GetRawFaviconForURL().
47 // FaviconBitmapResult::bitmap_data is the bitmap in the thumbnail database
48 // for the passed in URL and icon types whose pixel size best matches the
49 // passed in |desired_size_in_dip| and |desired_scale_factor|. Returns an
50 // invalid history::FaviconBitmapResult if there are no matches.
51 typedef base::Callback<void(Handle, const history::FaviconBitmapResult&)>
52 FaviconRawCallback;
53
54 // Callback for GetFavicon() and GetFaviconForURL().
36 // 55 //
37 // On |know_favicon| == true, |data| will either contain the PNG encoded 56 // The second argument is the set of bitmaps for the passed in URL and
38 // favicon data, or it will be NULL to indicate that the site does not have 57 // icon types whose pixel sizes best match the passed in
39 // a favicon (in other words, we know the site doesn't have a favicon, as 58 // |desired_size_in_dip| and |desired_scale_factors|. The vector has at most
40 // opposed to not knowing anything). |expired| will be set to true if we 59 // one result for each of |desired_scale_factors|. There are less entries if
41 // refreshed the favicon "too long" ago and should be updated if the page 60 // a single result is the best bitmap to use for several scale factors.
42 // is visited again. 61 //
62 // Third argument:
63 // a) If the callback is called as a result of GetFaviconForURL():
64 // The third argument is a map of the icon URLs mapped to |page_url| to
65 // the sizes at which the favicon is available from the web.
66 // b) If the callback is called as a result of GetFavicon() or
67 // UpdateFaviconMappingAndFetch():
68 // The third argument is a map with a single element with the passed in
69 // |icon_url| to the vector of sizes of the favicon bitmaps at that URL. If
70 // |icon_url| is not known to the history backend, an empty map is
71 // returned.
72 // See history_types.h for more information about IconURLSizesMap.
43 typedef base::Callback< 73 typedef base::Callback<
44 void(Handle, // handle 74 void(Handle, // handle
45 history::FaviconData)> // the type of favicon 75 std::vector<history::FaviconBitmapResult>,
46 FaviconDataCallback; 76 history::IconURLSizesMap)>
77 FaviconResultsCallback;
47 78
48 typedef CancelableRequest<FaviconDataCallback> GetFaviconRequest; 79 typedef CancelableRequest<FaviconResultsCallback> GetFaviconRequest;
49 80
50 // Requests the |icon_type| of favicon. |consumer| is notified when the bits 81 // Requests the favicon at |icon_url| of |icon_type| whose size most closely
51 // have been fetched. |icon_url| is the URL of the icon itself, e.g. 82 // matches |desired_size_in_dip|. |consumer| is notified when the bits have
83 // been fetched. |icon_url| is the URL of the icon itself, e.g.
52 // <http://www.google.com/favicon.ico>. 84 // <http://www.google.com/favicon.ico>.
85 // Each of the three methods below differs in the format of the callback and
86 // the requested scale factors. All of the scale factors supported by the
87 // current platform (eg MacOS) are requested for GetFaviconImage().
88 Handle GetFaviconImage(const GURL& icon_url,
89 history::IconType icon_type,
90 int desired_size_in_dip,
91 CancelableRequestConsumerBase* consumer,
92 const FaviconImageCallback& callback);
93
94 Handle GetRawFavicon(const GURL& icon_url,
95 history::IconType icon_type,
96 int desired_size_in_dip,
97 ui::ScaleFactor desired_scale_factor,
98 CancelableRequestConsumerBase* consumer,
99 const FaviconRawCallback& callback);
100
53 Handle GetFavicon(const GURL& icon_url, 101 Handle GetFavicon(const GURL& icon_url,
54 history::IconType icon_type, 102 history::IconType icon_type,
103 int desired_size_in_dip,
104 const std::vector<ui::ScaleFactor>& desired_scale_factors,
55 CancelableRequestConsumerBase* consumer, 105 CancelableRequestConsumerBase* consumer,
56 const FaviconDataCallback& callback); 106 const FaviconResultsCallback& callback);
57 107
58 // Fetches the |icon_type| of favicon at |icon_url|, sending the results to 108 // Fetches the |icon_type| of favicon at |icon_url|, sending the results to
59 // the given |callback|. If the favicon has previously been set via 109 // the given |callback|. If the favicon has previously been set via
60 // SetFavicon(), then the favicon URL for |page_url| and all redirects is set 110 // SetFavicon(), then the favicon URL for |page_url| and all redirects is set
61 // to |icon_url|. If the favicon has not been set, the database is not 111 // to |icon_url|. If the favicon has not been set, the database is not
62 // updated. 112 // updated.
63 Handle UpdateFaviconMappingAndFetch(const GURL& page_url, 113 Handle UpdateFaviconMappingAndFetch(const GURL& page_url,
64 const GURL& icon_url, 114 const GURL& icon_url,
65 history::IconType icon_type, 115 history::IconType icon_type,
66 CancelableRequestConsumerBase* consumer, 116 CancelableRequestConsumerBase* consumer,
67 const FaviconDataCallback& callback); 117 const FaviconResultsCallback& callback);
68 118
69 // Requests any |icon_types| of favicon for a web page URL. |consumer| is 119 // Requests the favicons of any of |icon_types| whose pixel sizes most
70 // notified when the bits have been fetched. |icon_types| can be any 120 // closely match |desired_size_in_dip| and desired scale factors for a web
71 // combination of IconType value, but only one icon will be returned in the 121 // page URL. |consumer| is notified when the bits have been fetched.
72 // priority of TOUCH_PRECOMPOSED_ICON, TOUCH_ICON and FAVICON. 122 // |icon_types| can be any combination of IconType value, but only one icon
73 // 123 // will be returned in the priority of TOUCH_PRECOMPOSED_ICON, TOUCH_ICON
74 // Note: this version is intended to be used to retrieve the favicon of a 124 // and FAVICON. Each of the three methods below differs in the format of the
75 // page that has been browsed in the past. |expired| in the callback is 125 // callback and the requested scale factors. All of the scale factors
76 // always false. 126 // supported by the current platform (eg MacOS) are requested for
77 Handle GetFaviconForURL(Profile* profile, 127 // GetFaviconImageForURL().
78 const GURL& page_url, 128 Handle GetFaviconImageForURL(Profile* profile,
79 int icon_types, 129 const GURL& page_url,
80 CancelableRequestConsumerBase* consumer, 130 int icon_types,
81 const FaviconDataCallback& callback); 131 int desired_size_in_dip,
132 CancelableRequestConsumerBase* consumer,
133 const FaviconImageCallback& callback);
82 134
83 // Requests the favicon for |favicon_id|. The |consumer| is notified when the 135 Handle GetRawFaviconForURL(Profile* profile,
84 // bits have been fetched. 136 const GURL& page_url,
85 Handle GetFaviconForID(history::FaviconID favicon_id, 137 int icon_types,
86 CancelableRequestConsumerBase* consumer, 138 int desired_size_in_dip,
87 const FaviconDataCallback& callback); 139 ui::ScaleFactor desired_scale_factor,
140 CancelableRequestConsumerBase* consumer,
141 const FaviconRawCallback& callback);
142
143 Handle GetFaviconForURL(
144 Profile* profile,
145 const GURL& page_url,
146 int icon_types,
147 int desired_size_in_dip,
148 const std::vector<ui::ScaleFactor>& desired_scale_factors,
149 CancelableRequestConsumerBase* consumer,
150 const FaviconResultsCallback& callback);
151
152 // Requests the favicon for |favicon_id| which most closely matches
153 // |desired_size_in_dip| and |desired_scale_factor|. The |consumer| is
154 // notified when the bits have been fetched.
155 Handle GetRawFaviconForID(history::FaviconID favicon_id,
156 int desired_size_in_dip,
157 ui::ScaleFactor desired_scale_factor,
158 CancelableRequestConsumerBase* consumer,
159 const FaviconRawCallback& callback);
michaelbai 2012/08/31 21:41:14 I don't understand this method, Is favicon_id the
88 160
89 // Marks all types of favicon for the page as being out of date. 161 // Marks all types of favicon for the page as being out of date.
90 void SetFaviconOutOfDateForPage(const GURL& page_url); 162 void SetFaviconOutOfDateForPage(const GURL& page_url);
91 163
92 // Clones all icons from an existing page. This associates the icons from 164 // Clones all icons from an existing page. This associates the icons from
93 // |old_page_url| with |new_page_url|, provided |new_page_url| has no 165 // |old_page_url| with |new_page_url|, provided |new_page_url| has no
94 // recorded associations to any other icons. 166 // recorded associations to any other icons.
95 // Needed if you want to declare favicons (tentatively) in advance, before a 167 // Needed if you want to declare favicons (tentatively) in advance, before a
96 // page is ever visited. 168 // page is ever visited.
97 void CloneFavicon(const GURL& old_page_url, const GURL& new_page_url); 169 void CloneFavicon(const GURL& old_page_url, const GURL& new_page_url);
98 170
99 // Allows the importer to set many favicons for many pages at once. The pages 171 // Allows the importer to set many favicons for many pages at once. The pages
100 // must exist, any favicon sets for unknown pages will be discarded. Existing 172 // must exist, any favicon sets for unknown pages will be discarded. Existing
101 // favicons will not be overwritten. 173 // favicons will not be overwritten.
102 void SetImportedFavicons( 174 void SetImportedFavicons(
103 const std::vector<history::ImportedFaviconUsage>& favicon_usage); 175 const std::vector<history::ImportedFaviconUsage>& favicon_usage);
104 176
105 // Sets the favicon for a page. 177 // Sets the favicon for a page.
106 void SetFavicon(const GURL& page_url, 178 void SetFavicon(const GURL& page_url,
107 const GURL& icon_url, 179 const GURL& icon_url,
108 const std::vector<unsigned char>& image_data, 180 const std::vector<unsigned char>& image_data,
109 history::IconType icon_type); 181 history::IconType icon_type);
110 182
111 private: 183 private:
112 HistoryService* history_service_; 184 HistoryService* history_service_;
113 185
114 // Helper to forward an empty result if we cannot get the history service. 186 // Helper to forward an empty result if we cannot get the history service.
115 void ForwardEmptyResultAsync(GetFaviconRequest* request); 187 void ForwardEmptyResultAsync(GetFaviconRequest* request);
116 188
189 // Helper function for GetFaviconImageForURL(), GetRawFaviconForURL() and
190 // GetFaviconForURL().
191 Handle GetFaviconForURLImpl(
192 Profile* profile,
193 const GURL& page_url,
194 int icon_types,
195 int desired_size_in_dip,
196 const std::vector<ui::ScaleFactor>& desired_scale_factors,
197 CancelableRequestConsumerBase* consumer,
198 GetFaviconRequest* request);
199
200 // Intermediate callback for GetFaviconImage() and GetFaviconImageForURL()
201 // so that history service can deal solely with FaviconResultsCallback.
202 // Builds history::FaviconImageResult from |favicon_bitmap_results| and runs
203 // |callback|.
204 void GetFaviconImageCallback(
205 int desired_size_in_dip,
206 FaviconImageCallback callback,
207 Handle handle,
208 std::vector<history::FaviconBitmapResult> favicon_bitmap_results,
209 history::IconURLSizesMap icon_url_sizes_map);
210
211 // Intermediate callback for GetRawFavicon() and GetRawFaviconForURL()
212 // so that history service can deal solely with FaviconResultsCallback.
213 // Resizes history::FaviconBitmapResult if necessary and runs |callback|.
214 void GetRawFaviconCallback(
215 int desired_size_in_dip,
216 ui::ScaleFactor desired_scale_factor,
217 FaviconRawCallback callback,
218 Handle handle,
219 std::vector<history::FaviconBitmapResult> favicon_bitmap_results,
220 history::IconURLSizesMap icon_url_sizes_map);
221
117 DISALLOW_COPY_AND_ASSIGN(FaviconService); 222 DISALLOW_COPY_AND_ASSIGN(FaviconService);
118 }; 223 };
119 224
120 #endif // CHROME_BROWSER_FAVICON_FAVICON_SERVICE_H_ 225 #endif // CHROME_BROWSER_FAVICON_FAVICON_SERVICE_H_
OLDNEW
« no previous file with comments | « chrome/browser/favicon/favicon_handler_unittest.cc ('k') | chrome/browser/favicon/favicon_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698