| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_HISTORY_TOP_SITES_H_ |
| #define CHROME_BROWSER_HISTORY_TOP_SITES_H_ |
| |
| #include "base/basictypes.h" |
| #include "base/callback.h" |
| #include "base/gtest_prod_util.h" |
| #include "base/memory/ref_counted.h" |
| #include "chrome/browser/common/cancelable_request.h" |
| #include "chrome/browser/history/history_service.h" |
| #include "chrome/browser/history/history_types.h" |
| #include "chrome/common/thumbnail_score.h" |
| #include "third_party/skia/include/core/SkColor.h" |
| #include "ui/gfx/image/image.h" |
| |
| class GURL; |
| class Profile; |
| |
| namespace base { |
| class FilePath; |
| class RefCountedBytes; |
| class RefCountedMemory; |
| } |
| |
| namespace history { |
| |
| class TopSitesCache; |
| |
| // Interface for TopSites, which stores the data for the top "most visited" |
| // sites. This includes a cache of the most visited data from history, as well |
| // as the corresponding thumbnails of those sites. |
| // |
| // Some methods should only be called from the UI thread (see method |
| // descriptions below). All others are assumed to be threadsafe. |
| class TopSites |
| : public base::RefCountedThreadSafe<TopSites>, |
| public content::NotificationObserver { |
| public: |
| TopSites() {} |
| |
| // Initializes TopSites. |
| static TopSites* Create(Profile* profile, const base::FilePath& db_name); |
| |
| // Sets the given thumbnail for the given URL. Returns true if the thumbnail |
| // was updated. False means either the URL wasn't known to us, or we felt |
| // that our current thumbnail was superior to the given one. Should be called |
| // from the UI thread. |
| virtual bool SetPageThumbnail(const GURL& url, |
| const gfx::Image& thumbnail, |
| const ThumbnailScore& score) = 0; |
| |
| // While testing the history system, we want to set the thumbnail to a piece |
| // of static memory. |
| virtual bool SetPageThumbnailToJPEGBytes( |
| const GURL& url, |
| const base::RefCountedMemory* memory, |
| const ThumbnailScore& score) = 0; |
| |
| typedef base::Callback<void(const MostVisitedURLList&)> |
| GetMostVisitedURLsCallback; |
| |
| // Returns a list of most visited URLs via a callback, if |
| // |include_forced_urls| is false includes only non-forced URLs. This may be |
| // invoked on any thread. NOTE: the callback is called immediately if we have |
| // the data cached. If data is not available yet, callback will later be |
| // posted to the thread called this function. |
| virtual void GetMostVisitedURLs( |
| const GetMostVisitedURLsCallback& callback, |
| bool include_forced_urls) = 0; |
| |
| // Gets a thumbnail for a given page. Returns true iff we have the thumbnail. |
| // This may be invoked on any thread. |
| // If an exact thumbnail URL match fails, |prefix_match| specifies whether or |
| // not to try harder by matching the query thumbnail URL as URL prefix (as |
| // defined by UrlIsPrefix()). |
| // As this method may be invoked on any thread the ref count needs to be |
| // incremented before this method returns, so this takes a scoped_refptr*. |
| virtual bool GetPageThumbnail( |
| const GURL& url, |
| bool prefix_match, |
| scoped_refptr<base::RefCountedMemory>* bytes) = 0; |
| |
| // Get a thumbnail score for a given page. Returns true iff we have the |
| // thumbnail score. This may be invoked on any thread. The score will |
| // be copied to |score|. |
| virtual bool GetPageThumbnailScore(const GURL& url, |
| ThumbnailScore* score) = 0; |
| |
| // Get a temporary thumbnail score for a given page. Returns true iff we |
| // have the thumbnail score. Useful when checking if we should update a |
| // thumbnail for a given page. The score will be copied to |score|. |
| virtual bool GetTemporaryPageThumbnailScore(const GURL& url, |
| ThumbnailScore* score) = 0; |
| |
| // Asks TopSites to refresh what it thinks the top sites are. This may do |
| // nothing. Should be called from the UI thread. |
| virtual void SyncWithHistory() = 0; |
| |
| // Blacklisted URLs |
| |
| // Returns true if there is at least one item in the blacklist. |
| virtual bool HasBlacklistedItems() const = 0; |
| |
| // Add a URL to the blacklist. Should be called from the UI thread. |
| virtual void AddBlacklistedURL(const GURL& url) = 0; |
| |
| // Removes a URL from the blacklist. Should be called from the UI thread. |
| virtual void RemoveBlacklistedURL(const GURL& url) = 0; |
| |
| // Returns true if the URL is blacklisted. Should be called from the UI |
| // thread. |
| virtual bool IsBlacklisted(const GURL& url) = 0; |
| |
| // Clear the blacklist. Should be called from the UI thread. |
| virtual void ClearBlacklistedURLs() = 0; |
| |
| // Shuts down top sites. |
| virtual void Shutdown() = 0; |
| |
| // Query history service for the list of available thumbnails. Returns the |
| // handle for the request, or NULL if a request could not be made. |
| // Public only for testing purposes. |
| virtual CancelableRequestProvider::Handle StartQueryForMostVisited() = 0; |
| |
| // Returns true if the given URL is known to the top sites service. |
| // This function also returns false if TopSites isn't loaded yet. |
| virtual bool IsKnownURL(const GURL& url) = 0; |
| |
| // Follows the cached redirect chain to convert any URL to its |
| // canonical version. If no redirect chain is known for the URL, |
| // return it without modification. |
| virtual const std::string& GetCanonicalURLString(const GURL& url) const = 0; |
| |
| // Returns true if the top sites list of non-forced URLs is full (i.e. we |
| // already have the maximum number of non-forced top sites). This function |
| // also returns false if TopSites isn't loaded yet. |
| virtual bool IsNonForcedFull() = 0; |
| |
| // Returns true if the top sites list of forced URLs is full (i.e. we already |
| // have the maximum number of forced top sites). This function also returns |
| // false if TopSites isn't loaded yet. |
| virtual bool IsForcedFull() = 0; |
| |
| virtual bool loaded() const = 0; |
| |
| // Returns the set of prepopulate pages. |
| virtual MostVisitedURLList GetPrepopulatePages() = 0; |
| |
| // Adds or updates a |url| for which we should force the capture of a |
| // thumbnail next time it's visited. If there is already a non-forced URL |
| // matching this |url| this call has no effect. Indicate this URL was laste |
| // forced at |time| so we can evict the older URLs when needed. Should be |
| // called from the UI thread. |
| virtual bool AddForcedURL(const GURL& url, const base::Time& time) = 0; |
| |
| struct PrepopulatedPage { |
| // The string resource for the url. |
| int url_id; |
| // The string resource for the page title. |
| int title_id; |
| // The raw data resource for the favicon. |
| int favicon_id; |
| // The raw data resource for the thumbnail. |
| int thumbnail_id; |
| // The best color to highlight the page (should roughly match favicon). |
| SkColor color; |
| }; |
| protected: |
| virtual ~TopSites() {} |
| |
| private: |
| friend class base::RefCountedThreadSafe<TopSites>; |
| }; |
| |
| #if defined(OS_ANDROID) |
| extern const TopSites::PrepopulatedPage kPrepopulatedPages[1]; |
| #else |
| extern const TopSites::PrepopulatedPage kPrepopulatedPages[2]; |
| #endif |
| |
| } // namespace history |
| |
| #endif // CHROME_BROWSER_HISTORY_TOP_SITES_H_ |