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 "components/history/core/browser/history_types.h" 14#include "content/public/browser/url_data_source.h" 15 16class Profile; 17 18namespace base { 19class RefCountedMemory; 20} 21 22namespace thumbnails { 23class 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. 30class 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