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_UI_WEBUI_NTP_THUMBNAIL_SOURCE_H_ 6 #define CHROME_BROWSER_UI_WEBUI_NTP_THUMBNAIL_SOURCE_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/memory/ref_counted.h" 12 #include "content/public/browser/url_data_source.h" 13 14 class Profile; 15 16 namespace base { 17 class RefCountedMemory; 18 } 19 20 namespace thumbnails { 21 class ThumbnailService; 22 } 23 24 // ThumbnailSource is the gateway between network-level chrome: requests for 25 // thumbnails and the history/top-sites backend that serves these. 26 class ThumbnailSource : public content::URLDataSource { 27 public: 28 ThumbnailSource(Profile* profile, bool capture_thumbnails); 29 30 // content::URLDataSource implementation. 31 virtual std::string GetSource() const OVERRIDE; 32 virtual void StartDataRequest( 33 const std::string& path, 34 int render_process_id, 35 int render_view_id, 36 const content::URLDataSource::GotDataCallback& callback) OVERRIDE; 37 virtual std::string GetMimeType(const std::string& path) const OVERRIDE; 38 virtual base::MessageLoop* MessageLoopForRequestPath( 39 const std::string& path) const OVERRIDE; 40 virtual bool ShouldServiceRequest( 41 const net::URLRequest* request) const OVERRIDE; 42 43 private: 44 virtual ~ThumbnailSource(); 45 46 // Raw PNG representation of the thumbnail to show when the thumbnail 47 // database doesn't have a thumbnail for a webpage. 48 scoped_refptr<base::RefCountedMemory> default_thumbnail_; 49 50 // ThumbnailService. 51 scoped_refptr<thumbnails::ThumbnailService> thumbnail_service_; 52 53 // Only used when servicing requests on the UI thread. 54 Profile* const profile_; 55 56 // Indicate that, when a URL for which we don't have a thumbnail is requested 57 // from this source, then Chrome should capture a thumbnail next time it 58 // navigates to this URL. This is useful when the thumbnail URLs are generated 59 // by an external service rather than TopSites, so Chrome can learn about the 60 // URLs for which it should get thumbnails. Sources that capture thumbnails 61 // are also be more lenient when matching thumbnail URLs by checking for 62 // existing thumbnails in the database that contain a URL matching the prefix 63 // of the requested URL. 64 const bool capture_thumbnails_; 65 66 DISALLOW_COPY_AND_ASSIGN(ThumbnailSource); 67 }; 68 69 #endif // CHROME_BROWSER_UI_WEBUI_NTP_THUMBNAIL_SOURCE_H_ 70