| Index: chrome/browser/history/history_backend.h
|
| diff --git a/chrome/browser/history/history_backend.h b/chrome/browser/history/history_backend.h
|
| index 1bea48930eee146b956f0d45b60b95d3b51c673b..4346d82fe65b85f7b3ec0ff61596fb532723e2e5 100644
|
| --- a/chrome/browser/history/history_backend.h
|
| +++ b/chrome/browser/history/history_backend.h
|
| @@ -23,6 +23,7 @@
|
| #include "chrome/browser/history/visit_tracker.h"
|
| #include "chrome/browser/search_engines/template_url_id.h"
|
| #include "sql/init_status.h"
|
| +#include "ui/base/layout.h"
|
|
|
| class BookmarkService;
|
| class TestingProfile;
|
| @@ -248,29 +249,42 @@ class HistoryBackend : public base::RefCountedThreadSafe<HistoryBackend>,
|
|
|
| // Favicon -------------------------------------------------------------------
|
|
|
| - void GetFavicon(scoped_refptr<GetFaviconRequest> request,
|
| - const GURL& icon_url,
|
| - int icon_types);
|
| + void GetFavicons(scoped_refptr<GetFaviconRequest> request,
|
| + const std::vector<GURL>& icon_urls,
|
| + int icon_types,
|
| + int desired_size_in_dip,
|
| + const std::vector<ui::ScaleFactor>& desired_scale_factors);
|
|
|
| - void GetFaviconForURL(scoped_refptr<GetFaviconRequest> request,
|
| - const GURL& page_url,
|
| - int icon_types);
|
| + void GetFaviconsForURL(
|
| + scoped_refptr<GetFaviconRequest> request,
|
| + const GURL& page_url,
|
| + int icon_types,
|
| + int desired_size_in_dip,
|
| + const std::vector<ui::ScaleFactor>& desired_scale_factors);
|
|
|
| - void GetFaviconForID(scoped_refptr<GetFaviconRequest> request, FaviconID id);
|
| + void GetFaviconForID(
|
| + scoped_refptr<GetFaviconRequest> request,
|
| + FaviconID favicon_id,
|
| + int desired_size_in_dip,
|
| + ui::ScaleFactor desired_scale_factor);
|
|
|
| - void SetFavicon(const GURL& page_url,
|
| - const GURL& icon_url,
|
| - scoped_refptr<base::RefCountedMemory> data,
|
| - IconType icon_type);
|
| + void UpdateFaviconMappingsAndFetch(
|
| + scoped_refptr<GetFaviconRequest> request,
|
| + const GURL& page_url,
|
| + const std::vector<GURL>& icon_urls,
|
| + int icon_types,
|
| + int desired_size_in_dip,
|
| + const std::vector<ui::ScaleFactor>& desired_scale_factors);
|
|
|
| - void UpdateFaviconMappingAndFetch(scoped_refptr<GetFaviconRequest> request,
|
| - const GURL& page_url,
|
| - const GURL& icon_url,
|
| - IconType icon_type);
|
| + void SetFavicons(
|
| + const GURL& page_url,
|
| + IconType icon_type,
|
| + const std::vector<FaviconBitmapData>& favicon_bitmap_data,
|
| + const IconURLSizesMap& icon_url_sizes);
|
|
|
| - void SetFaviconOutOfDateForPage(const GURL& page_url);
|
| + void SetFaviconsOutOfDateForPage(const GURL& page_url);
|
|
|
| - void CloneFavicon(const GURL& old_page_url, const GURL& new_page_url);
|
| + void CloneFavicons(const GURL& old_page_url, const GURL& new_page_url);
|
|
|
| void SetImportedFavicons(
|
| const std::vector<ImportedFaviconUsage>& favicon_usage);
|
| @@ -459,15 +473,30 @@ class HistoryBackend : public base::RefCountedThreadSafe<HistoryBackend>,
|
| FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddPageVisitSource);
|
| FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddPageArgsSource);
|
| FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddVisitsSource);
|
| + FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetMostRecentVisits);
|
| FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, RemoveVisitsSource);
|
| FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, RemoveVisitsTransitions);
|
| FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, MigrationVisitSource);
|
| FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, MigrationIconMapping);
|
| - FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, SetFaviconMapping);
|
| - FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, AddOrUpdateIconMapping);
|
| - FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, SetSameFaviconURLForTwoPages);
|
| - FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetMostRecentVisits);
|
| - FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetFaviconForURL);
|
| + FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest,
|
| + SetFaviconMappingsForPageAndRedirects);
|
| + FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest,
|
| + SetFaviconMappingsForPageDuplicates);
|
| + FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, SetFavicons);
|
| + FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest,
|
| + SetFaviconsSameFaviconURLForTwoPages);
|
| + FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, SetFaviconsDeleteBitmaps);
|
| + FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, SetFaviconsReplaceBitmapData);
|
| + FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest,
|
| + UpdateFaviconMappingsAndFetchMultipleIconTypes);
|
| + FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetFaviconsFromDBEmpty);
|
| + FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest,
|
| + GetFaviconsFromDBNoFaviconBitmaps);
|
| + FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest,
|
| + GetFaviconsFromDBSelectClosestMatch);
|
| + FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetFaviconsFromDBSingleIconURL);
|
| + FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetFaviconsFromDBIconType);
|
| + FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, GetFaviconsFromDBExpired);
|
| FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest,
|
| CloneFaviconIsRestrictedToSameDomain);
|
| FRIEND_TEST_ALL_PREFIXES(HistoryBackendTest, QueryFilteredURLs);
|
| @@ -579,32 +608,110 @@ class HistoryBackend : public base::RefCountedThreadSafe<HistoryBackend>,
|
|
|
| // Favicons ------------------------------------------------------------------
|
|
|
| - // Used by both UpdateFaviconMappingAndFetch and GetFavicon.
|
| - // If page_url is non-null and SetFavicon has previously been invoked for
|
| - // icon_url the favicon url for page_url (and all redirects) is set to
|
| - // icon_url.
|
| - // Only a single type can be given in icon_type when page_url is specified.
|
| - void UpdateFaviconMappingAndFetchImpl(
|
| - const GURL* page_url,
|
| - const GURL& icon_url,
|
| + // Used by both UpdateFaviconMappingsAndFetch and GetFavicons.
|
| + // If |page_url| is non-null, the icon urls for |page_url| (and all
|
| + // redirects) are set to the subset of |icon_urls| for which icons are
|
| + // already stored in the database.
|
| + // If |page_url| is non-null, |icon_types| can be multiple icon types
|
| + // only if |icon_types| == TOUCH_ICON | TOUCH_PRECOMPOSED_ICON.
|
| + // If multiple icon types are specified, |page_url| will be mapped to the
|
| + // icon URLs of the largest type available in the database.
|
| + void UpdateFaviconMappingsAndFetchImpl(
|
| scoped_refptr<GetFaviconRequest> request,
|
| - int icon_type);
|
| -
|
| - // Sets the favicon url id for page_url to id. This will also broadcast
|
| - // notifications as necessary.
|
| - void SetFaviconMapping(const GURL& page_url,
|
| - FaviconID id,
|
| - IconType icon_type);
|
| -
|
| - // Updates the FaviconID associated with the url of a page. If there is an
|
| - // existing mapping between |page_url| and |id| this does nothing and returns
|
| - // false. If the mapping needs to be added or updated, true is returned. If
|
| - // there is an existing mapping but it does not map to |id|, then the |id| of
|
| - // the replaced FaviconID is set in |replaced_icon_id|.
|
| - bool AddOrUpdateIconMapping(const GURL& page_url,
|
| - FaviconID id,
|
| - IconType icon_type,
|
| - FaviconID* replaced_icon_id);
|
| + const GURL* page_url,
|
| + const std::vector<GURL>& icon_urls,
|
| + int icon_types,
|
| + int desired_size_in_dip,
|
| + const std::vector<ui::ScaleFactor>& desired_scale_factors);
|
| +
|
| + // Set the favicon bitmaps for |icon_id|.
|
| + // For each entry in |favicon_bitmap_data|, if a favicon bitmap already
|
| + // exists at the entry's pixel size, replace the favicon bitmap's data with
|
| + // the entry's bitmap data. Otherwise add a new favicon bitmap.
|
| + void SetFaviconBitmaps(
|
| + FaviconID icon_id,
|
| + const std::vector<FaviconBitmapData>& favicon_bitmap_data);
|
| +
|
| + // Returns true if |favicon_bitmap_data| and |icon_url_sizes| passed to
|
| + // SetFavicons() are valid.
|
| + // Criteria:
|
| + // 1) |icon_url_sizes| contains no more than
|
| + // kMaxFaviconsPerPage icon URLs.
|
| + // kMaxFaviconBitmapsPerIconURL favicon sizes for each icon URL.
|
| + // 2) The icon URLs and favicon sizes of |favicon_bitmap_data| are a subset
|
| + // of |icon_url_sizes|.
|
| + // 3) The favicon sizes for entries in |icon_url_sizes| which have associated
|
| + // data in |favicon_bitmap_data| is not history::GetDefaultFaviconSizes().
|
| + // 4) FaviconBitmapData::bitmap_data contains non NULL bitmap data.
|
| + bool ValidateSetFaviconsParams(
|
| + const std::vector<FaviconBitmapData>& favicon_bitmap_data,
|
| + const IconURLSizesMap& icon_url_sizes) const;
|
| +
|
| + // Sets the sizes that the thumbnail database knows that the favicon at
|
| + // |icon_id| is available from the web. See history_types.h for a more
|
| + // detailed description of FaviconSizes.
|
| + // Deletes any favicon bitmaps currently mapped to |icon_id| whose pixel
|
| + // sizes are not contained in |favicon_sizes|.
|
| + void SetFaviconSizes(FaviconID icon_id, const FaviconSizes& favicon_sizes);
|
| +
|
| + // Returns true if there are favicons for |page_url| and one of the types in
|
| + // |icon_types|.
|
| + // |favicon_bitmap_results| is set to the favicon bitmaps which most closely
|
| + // match |desired_size_in_dip| and |desired_scale_factors|. If
|
| + // |desired_size_in_dip| is 0, the largest favicon bitmap with one of the icon
|
| + // types in |icon_types| is returned. If |icon_types| contains multiple icon
|
| + // types and there are several matched icon types in the database, results
|
| + // will only be returned for a single icon type in the priority of
|
| + // TOUCH_PRECOMPOSED_ICON, TOUCH_ICON, and FAVICON. See the comment for
|
| + // GetFaviconResultsForBestMatch() for more details on how
|
| + // |favicon_bitmap_results| is constructed.
|
| + // |icon_url_sizes| is set to a mapping of all the icon URLs which are mapped
|
| + // to |page_url| to the sizes of the favicon bitmaps available at each icon
|
| + // URL on the web.
|
| + bool GetFaviconsFromDB(
|
| + const GURL& page_url,
|
| + int icon_types,
|
| + const int desired_size_in_dip,
|
| + const std::vector<ui::ScaleFactor>& desired_scale_factors,
|
| + std::vector<FaviconBitmapResult>* favicon_bitmap_results,
|
| + IconURLSizesMap* icon_url_sizes);
|
| +
|
| + // Returns the favicon bitmaps which most closely match |desired_size_in_dip|
|
| + // and |desired_scale_factors| in |favicon_bitmap_results|. If
|
| + // |desired_size_in_dip| is 0, only the largest favicon bitmap is returned.
|
| + // Goodness is computed via SelectFaviconBitmapIDs(). It is computed on a
|
| + // per favicon id basis, thus all |favicon_bitmap_results| are guaranteed to
|
| + // be for the same FaviconID. |favicon_bitmap_results| will have at most one
|
| + // entry for each desired scale factor. There will be less entries if the same
|
| + // favicon bitmap is the best result for multiple scale factors.
|
| + // Returns true if there were no errors.
|
| + bool GetFaviconBitmapResultsForBestMatch(
|
| + const std::vector<FaviconID>& candidate_favicon_ids,
|
| + int desired_size_in_dip,
|
| + const std::vector<ui::ScaleFactor>& desired_scale_factors,
|
| + std::vector<FaviconBitmapResult>* favicon_bitmap_results);
|
| +
|
| + // Build mapping of the icon URLs for |favicon_ids| to the sizes of the
|
| + // favicon bitmaps available at each icon URL on the web. Favicon bitmaps
|
| + // might not be cached in the thumbnail database for any of the sizes in the
|
| + // returned map. See history_types.h for a more detailed description of
|
| + // IconURLSizesMap.
|
| + // Returns true if map was successfully built.
|
| + bool BuildIconURLSizesMap(const std::vector<FaviconID>& favicon_ids,
|
| + IconURLSizesMap* icon_url_sizes);
|
| +
|
| + // Maps the favicon ids in |icon_ids| to |page_url| (and all redirects)
|
| + // for |icon_type|. This will also broadcast notifications as necessary.
|
| + void SetFaviconMappingsForPageAndRedirects(
|
| + const GURL& page_url,
|
| + IconType icon_type,
|
| + const std::vector<FaviconID>& icon_ids);
|
| +
|
| + // Maps the favicon ids in |icon_ids| to |page_url| for |icon_type|.
|
| + // Returns true if the function changed some of |page_url|'s mappings.
|
| + bool SetFaviconMappingsForPage(const GURL& page_url,
|
| + IconType icon_type,
|
| + const std::vector<FaviconID>& icon_ids);
|
|
|
| // Generic stuff -------------------------------------------------------------
|
|
|
| @@ -648,19 +755,6 @@ class HistoryBackend : public base::RefCountedThreadSafe<HistoryBackend>,
|
| // NULL during testing.
|
| BookmarkService* GetBookmarkService();
|
|
|
| - // If there is a favicon for |page_url| and one of the types in |icon_types|,
|
| - // |favicon| is set appropriately and true is returned.
|
| - bool GetFaviconFromDB(
|
| - const GURL& page_url,
|
| - int icon_types,
|
| - std::vector<FaviconBitmapResult>* favicon_bitmap_results);
|
| -
|
| - // Get favicon by the given |favicon_id|, the |favicon| is set appropriately
|
| - // and true if returned on success, otherwise false is returned.
|
| - bool GetFaviconFromDB(
|
| - FaviconID favicon_id,
|
| - std::vector<FaviconBitmapResult>* favicon_bitmap_results);
|
| -
|
| // Notify any observers of an addition to the visit database.
|
| void NotifyVisitObservers(const VisitRow& visit);
|
|
|
|
|