1 // Copyright (c) 2011 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_BACKEND_H_ 6 #define CHROME_BROWSER_HISTORY_TOP_SITES_BACKEND_H_ 7 #pragma once 8 9 #include "base/file_path.h" 10 #include "base/memory/ref_counted.h" 11 #include "base/memory/scoped_ptr.h" 12 #include "chrome/browser/history/history_types.h" 13 #include "content/browser/cancelable_request.h" 14 15 class FilePath; 16 17 namespace history { 18 19 class TopSitesDatabase; 20 21 // Service used by TopSites to have db interaction happen on the DB thread. All 22 // public methods are invoked on the ui thread and get funneled to the DB 23 // thread. 24 class TopSitesBackend 25 : public base::RefCountedThreadSafe<TopSitesBackend>, 26 public CancelableRequestProvider { 27 public: 28 TopSitesBackend(); 29 30 void Init(const FilePath& path); 31 32 // Schedules the db to be shutdown. 33 void Shutdown(); 34 35 // The boolean parameter indicates if the DB existed on disk or needs to be 36 // migrated. 37 typedef Callback3<Handle, scoped_refptr<MostVisitedThumbnails>, bool >::Type 38 GetMostVisitedThumbnailsCallback; 39 typedef CancelableRequest1<TopSitesBackend::GetMostVisitedThumbnailsCallback, 40 scoped_refptr<MostVisitedThumbnails> > 41 GetMostVisitedThumbnailsRequest; 42 43 // Fetches MostVisitedThumbnails. 44 Handle GetMostVisitedThumbnails(CancelableRequestConsumerBase* consumer, 45 GetMostVisitedThumbnailsCallback* callback); 46 47 // Updates top sites database from the specified delta. 48 void UpdateTopSites(const TopSitesDelta& delta); 49 50 // Sets the thumbnail. 51 void SetPageThumbnail(const MostVisitedURL& url, 52 int url_rank, 53 const Images& thumbnail); 54 55 // Deletes the database and recreates it. 56 void ResetDatabase(); 57 58 typedef Callback1<Handle>::Type EmptyRequestCallback; 59 typedef CancelableRequest<TopSitesBackend::EmptyRequestCallback> 60 EmptyRequestRequest; 61 62 // Schedules a request that does nothing on the DB thread, but then notifies 63 // the callback on the calling thread. This is used to make sure the db has 64 // finished processing a request. 65 Handle DoEmptyRequest(CancelableRequestConsumerBase* consumer, 66 EmptyRequestCallback* callback); 67 68 private: 69 friend class base::RefCountedThreadSafe<TopSitesBackend>; 70 71 ~TopSitesBackend(); 72 73 // Invokes Init on the db_. 74 void InitDBOnDBThread(const FilePath& path); 75 76 // Shuts down the db. 77 void ShutdownDBOnDBThread(); 78 79 // Does the work of getting the most visted thumbnails. 80 void GetMostVisitedThumbnailsOnDBThread( 81 scoped_refptr<GetMostVisitedThumbnailsRequest> request); 82 83 // Updates top sites. 84 void UpdateTopSitesOnDBThread(const TopSitesDelta& delta); 85 86 // Sets the thumbnail. 87 void SetPageThumbnailOnDBThread(const MostVisitedURL& url, 88 int url_rank, 89 const Images& thumbnail); 90 91 // Resets the database. 92 void ResetDatabaseOnDBThread(const FilePath& file_path); 93 94 // Notifies the request. 95 void DoEmptyRequestOnDBThread(scoped_refptr<EmptyRequestRequest> request); 96 97 FilePath db_path_; 98 99 scoped_ptr<TopSitesDatabase> db_; 100 101 DISALLOW_COPY_AND_ASSIGN(TopSitesBackend); 102 }; 103 104 } // namespace history 105 106 #endif // CHROME_BROWSER_HISTORY_TOP_SITES_BACKEND_H_ 107