thumbnail_source.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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 <map> 9#include <string> 10 11#include "base/basictypes.h" 12#include "base/memory/ref_counted.h" 13#include "content/public/browser/url_data_source.h" 14 15class Profile; 16 17namespace base { 18class RefCountedMemory; 19} 20 21namespace thumbnails { 22class ThumbnailService; 23} 24 25// ThumbnailSource is the gateway between network-level chrome: requests for 26// thumbnails and the history/top-sites backend that serves these. 27class ThumbnailSource : public content::URLDataSource { 28 public: 29 explicit ThumbnailSource(Profile* profile); 30 31 // content::URLDataSource implementation. 32 virtual std::string GetSource() OVERRIDE; 33 virtual void StartDataRequest( 34 const std::string& path, 35 bool is_incognito, 36 const content::URLDataSource::GotDataCallback& callback) OVERRIDE; 37 virtual std::string GetMimeType(const std::string& path) const OVERRIDE; 38 virtual 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 // Transient mappings from an ID-based path to an URL-based path. 54 // The key is an ID-string, the value is a URL string. 55 // Mappings are added in ShouldServiceRequest() and erased once 56 // the request is serviced in StartDataRequest(). 57 // TODO(dhollowa): Consider passing the |request| object through 58 // to the StartDataRequest() call. 59 mutable std::map<std::string, std::string> id_to_url_map_; 60 61 // Only used when servicing requests on the UI thread. 62 Profile* const profile_; 63 64 DISALLOW_COPY_AND_ASSIGN(ThumbnailSource); 65}; 66 67#endif // CHROME_BROWSER_UI_WEBUI_NTP_THUMBNAIL_SOURCE_H_ 68