• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_HISTORY_TOP_SITES_H_
6 #define CHROME_BROWSER_HISTORY_TOP_SITES_H_
7 
8 #include "base/basictypes.h"
9 #include "base/callback.h"
10 #include "base/gtest_prod_util.h"
11 #include "base/memory/ref_counted.h"
12 #include "chrome/browser/common/cancelable_request.h"
13 #include "chrome/browser/history/history_service.h"
14 #include "chrome/browser/history/history_types.h"
15 #include "components/history/core/common/thumbnail_score.h"
16 #include "third_party/skia/include/core/SkColor.h"
17 #include "ui/gfx/image/image.h"
18 
19 class GURL;
20 class Profile;
21 
22 namespace base {
23 class FilePath;
24 class RefCountedBytes;
25 class RefCountedMemory;
26 }
27 
28 namespace history {
29 
30 class TopSitesCache;
31 
32 // Interface for TopSites, which stores the data for the top "most visited"
33 // sites. This includes a cache of the most visited data from history, as well
34 // as the corresponding thumbnails of those sites.
35 //
36 // Some methods should only be called from the UI thread (see method
37 // descriptions below). All others are assumed to be threadsafe.
38 class TopSites
39     : public base::RefCountedThreadSafe<TopSites>,
40       public content::NotificationObserver {
41  public:
TopSites()42   TopSites() {}
43 
44   // Initializes TopSites.
45   static TopSites* Create(Profile* profile, const base::FilePath& db_name);
46 
47   // Sets the given thumbnail for the given URL. Returns true if the thumbnail
48   // was updated. False means either the URL wasn't known to us, or we felt
49   // that our current thumbnail was superior to the given one. Should be called
50   // from the UI thread.
51   virtual bool SetPageThumbnail(const GURL& url,
52                                 const gfx::Image& thumbnail,
53                                 const ThumbnailScore& score) = 0;
54 
55   // While testing the history system, we want to set the thumbnail to a piece
56   // of static memory.
57   virtual bool SetPageThumbnailToJPEGBytes(
58       const GURL& url,
59       const base::RefCountedMemory* memory,
60       const ThumbnailScore& score) = 0;
61 
62   typedef base::Callback<void(const MostVisitedURLList&)>
63       GetMostVisitedURLsCallback;
64 
65   // Returns a list of most visited URLs via a callback, if
66   // |include_forced_urls| is false includes only non-forced URLs. This may be
67   // invoked on any thread. NOTE: the callback is called immediately if we have
68   // the data cached. If data is not available yet, callback will later be
69   // posted to the thread called this function.
70   virtual void GetMostVisitedURLs(
71       const GetMostVisitedURLsCallback& callback,
72       bool include_forced_urls) = 0;
73 
74   // Gets a thumbnail for a given page. Returns true iff we have the thumbnail.
75   // This may be invoked on any thread.
76   // If an exact thumbnail URL match fails, |prefix_match| specifies whether or
77   // not to try harder by matching the query thumbnail URL as URL prefix (as
78   // defined by UrlIsPrefix()).
79   // As this method may be invoked on any thread the ref count needs to be
80   // incremented before this method returns, so this takes a scoped_refptr*.
81   virtual bool GetPageThumbnail(
82       const GURL& url,
83       bool prefix_match,
84       scoped_refptr<base::RefCountedMemory>* bytes) = 0;
85 
86   // Get a thumbnail score for a given page. Returns true iff we have the
87   // thumbnail score.  This may be invoked on any thread. The score will
88   // be copied to |score|.
89   virtual bool GetPageThumbnailScore(const GURL& url,
90                                      ThumbnailScore* score) = 0;
91 
92   // Get a temporary thumbnail score for a given page. Returns true iff we
93   // have the thumbnail score. Useful when checking if we should update a
94   // thumbnail for a given page. The score will be copied to |score|.
95   virtual bool GetTemporaryPageThumbnailScore(const GURL& url,
96                                               ThumbnailScore* score) = 0;
97 
98   // Asks TopSites to refresh what it thinks the top sites are. This may do
99   // nothing. Should be called from the UI thread.
100   virtual void SyncWithHistory() = 0;
101 
102   // Blacklisted URLs
103 
104   // Returns true if there is at least one item in the blacklist.
105   virtual bool HasBlacklistedItems() const = 0;
106 
107   // Add a URL to the blacklist. Should be called from the UI thread.
108   virtual void AddBlacklistedURL(const GURL& url) = 0;
109 
110   // Removes a URL from the blacklist. Should be called from the UI thread.
111   virtual void RemoveBlacklistedURL(const GURL& url) = 0;
112 
113   // Returns true if the URL is blacklisted. Should be called from the UI
114   // thread.
115   virtual bool IsBlacklisted(const GURL& url) = 0;
116 
117   // Clear the blacklist. Should be called from the UI thread.
118   virtual void ClearBlacklistedURLs() = 0;
119 
120   // Shuts down top sites.
121   virtual void Shutdown() = 0;
122 
123   // Query history service for the list of available thumbnails. Returns the
124   // handle for the request, or NULL if a request could not be made.
125   // Public only for testing purposes.
126   virtual CancelableRequestProvider::Handle StartQueryForMostVisited() = 0;
127 
128   // Returns true if the given URL is known to the top sites service.
129   // This function also returns false if TopSites isn't loaded yet.
130   virtual bool IsKnownURL(const GURL& url) = 0;
131 
132   // Follows the cached redirect chain to convert any URL to its
133   // canonical version. If no redirect chain is known for the URL,
134   // return it without modification.
135   virtual const std::string& GetCanonicalURLString(const GURL& url) const = 0;
136 
137   // Returns true if the top sites list of non-forced URLs is full (i.e. we
138   // already have the maximum number of non-forced top sites).  This function
139   // also returns false if TopSites isn't loaded yet.
140   virtual bool IsNonForcedFull() = 0;
141 
142   // Returns true if the top sites list of forced URLs is full (i.e. we already
143   // have the maximum number of forced top sites).  This function also returns
144   // false if TopSites isn't loaded yet.
145   virtual bool IsForcedFull() = 0;
146 
147   virtual bool loaded() const = 0;
148 
149   // Returns the set of prepopulate pages.
150   virtual MostVisitedURLList GetPrepopulatePages() = 0;
151 
152   // Adds or updates a |url| for which we should force the capture of a
153   // thumbnail next time it's visited. If there is already a non-forced URL
154   // matching this |url| this call has no effect. Indicate this URL was laste
155   // forced at |time| so we can evict the older URLs when needed. Should be
156   // called from the UI thread.
157   virtual bool AddForcedURL(const GURL& url, const base::Time& time) = 0;
158 
159   struct PrepopulatedPage {
160     // The string resource for the url.
161     int url_id;
162     // The string resource for the page title.
163     int title_id;
164     // The raw data resource for the favicon.
165     int favicon_id;
166     // The raw data resource for the thumbnail.
167     int thumbnail_id;
168     // The best color to highlight the page (should roughly match favicon).
169     SkColor color;
170   };
171  protected:
~TopSites()172   virtual ~TopSites() {}
173 
174  private:
175   friend class base::RefCountedThreadSafe<TopSites>;
176 };
177 
178 #if defined(OS_ANDROID)
179 extern const TopSites::PrepopulatedPage kPrepopulatedPages[1];
180 #else
181 extern const TopSites::PrepopulatedPage kPrepopulatedPages[2];
182 #endif
183 
184 }  // namespace history
185 
186 #endif  // CHROME_BROWSER_HISTORY_TOP_SITES_H_
187