| // Copyright (c) 2011 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_BACKEND_H_ |
| #define CHROME_BROWSER_HISTORY_TOP_SITES_BACKEND_H_ |
| #pragma once |
| |
| #include "base/file_path.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "chrome/browser/history/history_types.h" |
| #include "content/browser/cancelable_request.h" |
| |
| class FilePath; |
| |
| namespace history { |
| |
| class TopSitesDatabase; |
| |
| // Service used by TopSites to have db interaction happen on the DB thread. All |
| // public methods are invoked on the ui thread and get funneled to the DB |
| // thread. |
| class TopSitesBackend |
| : public base::RefCountedThreadSafe<TopSitesBackend>, |
| public CancelableRequestProvider { |
| public: |
| TopSitesBackend(); |
| |
| void Init(const FilePath& path); |
| |
| // Schedules the db to be shutdown. |
| void Shutdown(); |
| |
| // The boolean parameter indicates if the DB existed on disk or needs to be |
| // migrated. |
| typedef Callback3<Handle, scoped_refptr<MostVisitedThumbnails>, bool >::Type |
| GetMostVisitedThumbnailsCallback; |
| typedef CancelableRequest1<TopSitesBackend::GetMostVisitedThumbnailsCallback, |
| scoped_refptr<MostVisitedThumbnails> > |
| GetMostVisitedThumbnailsRequest; |
| |
| // Fetches MostVisitedThumbnails. |
| Handle GetMostVisitedThumbnails(CancelableRequestConsumerBase* consumer, |
| GetMostVisitedThumbnailsCallback* callback); |
| |
| // Updates top sites database from the specified delta. |
| void UpdateTopSites(const TopSitesDelta& delta); |
| |
| // Sets the thumbnail. |
| void SetPageThumbnail(const MostVisitedURL& url, |
| int url_rank, |
| const Images& thumbnail); |
| |
| // Deletes the database and recreates it. |
| void ResetDatabase(); |
| |
| typedef Callback1<Handle>::Type EmptyRequestCallback; |
| typedef CancelableRequest<TopSitesBackend::EmptyRequestCallback> |
| EmptyRequestRequest; |
| |
| // Schedules a request that does nothing on the DB thread, but then notifies |
| // the callback on the calling thread. This is used to make sure the db has |
| // finished processing a request. |
| Handle DoEmptyRequest(CancelableRequestConsumerBase* consumer, |
| EmptyRequestCallback* callback); |
| |
| private: |
| friend class base::RefCountedThreadSafe<TopSitesBackend>; |
| |
| ~TopSitesBackend(); |
| |
| // Invokes Init on the db_. |
| void InitDBOnDBThread(const FilePath& path); |
| |
| // Shuts down the db. |
| void ShutdownDBOnDBThread(); |
| |
| // Does the work of getting the most visted thumbnails. |
| void GetMostVisitedThumbnailsOnDBThread( |
| scoped_refptr<GetMostVisitedThumbnailsRequest> request); |
| |
| // Updates top sites. |
| void UpdateTopSitesOnDBThread(const TopSitesDelta& delta); |
| |
| // Sets the thumbnail. |
| void SetPageThumbnailOnDBThread(const MostVisitedURL& url, |
| int url_rank, |
| const Images& thumbnail); |
| |
| // Resets the database. |
| void ResetDatabaseOnDBThread(const FilePath& file_path); |
| |
| // Notifies the request. |
| void DoEmptyRequestOnDBThread(scoped_refptr<EmptyRequestRequest> request); |
| |
| FilePath db_path_; |
| |
| scoped_ptr<TopSitesDatabase> db_; |
| |
| DISALLOW_COPY_AND_ASSIGN(TopSitesBackend); |
| }; |
| |
| } // namespace history |
| |
| #endif // CHROME_BROWSER_HISTORY_TOP_SITES_BACKEND_H_ |