1 // Copyright 2014 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_THUMBNAILS_THUMBNAIL_LIST_SOURCE_H_ 6 #define CHROME_BROWSER_THUMBNAILS_THUMBNAIL_LIST_SOURCE_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/memory/ref_counted.h" 12 #include "base/memory/weak_ptr.h" 13 #include "chrome/browser/history/history_types.h" 14 #include "content/public/browser/url_data_source.h" 15 16 class Profile; 17 18 namespace base { 19 class RefCountedMemory; 20 } 21 22 namespace thumbnails { 23 class ThumbnailService; 24 } 25 26 // ThumbnailListSource renders a webpage to list all thumbnails stored in 27 // TopSites, along with all associated URLs. The thumbnail images are embedded 28 // into the HTML via Base64, so we can easily produce a dump of TopSites and 29 // the thumbnails it stores. 30 class ThumbnailListSource : public content::URLDataSource { 31 public: 32 explicit ThumbnailListSource(Profile* profile); 33 34 // content::URLDataSource implementation. 35 virtual std::string GetSource() const OVERRIDE; 36 virtual void StartDataRequest( 37 const std::string& path, 38 int render_process_id, 39 int render_frame_id, 40 const content::URLDataSource::GotDataCallback& callback) OVERRIDE; 41 virtual std::string GetMimeType(const std::string& path) const OVERRIDE; 42 virtual base::MessageLoop* MessageLoopForRequestPath( 43 const std::string& path) const OVERRIDE; 44 virtual bool ShouldServiceRequest( 45 const net::URLRequest* request) const OVERRIDE; 46 virtual bool ShouldReplaceExistingSource() const OVERRIDE; 47 48 private: 49 virtual ~ThumbnailListSource(); 50 51 void OnMostVisitedURLsAvailable( 52 const content::URLDataSource::GotDataCallback& callback, 53 const history::MostVisitedURLList& mvurl_list); 54 55 // ThumbnailService. 56 scoped_refptr<thumbnails::ThumbnailService> thumbnail_service_; 57 58 // Only used when servicing requests on the UI thread. 59 Profile* const profile_; 60 61 // For callbacks may be run after destruction. 62 base::WeakPtrFactory<ThumbnailListSource> weak_ptr_factory_; 63 64 DISALLOW_COPY_AND_ASSIGN(ThumbnailListSource); 65 }; 66 67 68 #endif // CHROME_BROWSER_THUMBNAILS_THUMBNAIL_LIST_SOURCE_H_ 69