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_UI_WEBUI_FAVICON_SOURCE_H_ 6#define CHROME_BROWSER_UI_WEBUI_FAVICON_SOURCE_H_ 7#pragma once 8 9#include <string> 10 11#include "base/basictypes.h" 12#include "base/memory/ref_counted.h" 13#include "chrome/browser/favicon_service.h" 14#include "chrome/browser/ui/webui/chrome_url_data_manager.h" 15 16class GURL; 17class Profile; 18 19// FaviconSource is the gateway between network-level chrome: 20// requests for favicons and the history backend that serves these. 21class FaviconSource : public ChromeURLDataManager::DataSource { 22 public: 23 explicit FaviconSource(Profile* profile); 24 25 // Called when the network layer has requested a resource underneath 26 // the path we registered. 27 virtual void StartDataRequest(const std::string& path, 28 bool is_incognito, 29 int request_id); 30 31 virtual std::string GetMimeType(const std::string&) const; 32 33 virtual bool ShouldReplaceExistingSource() const; 34 35 private: 36 // Called when favicon data is available from the history backend. 37 void OnFaviconDataAvailable(FaviconService::Handle request_handle, 38 history::FaviconData favicon); 39 40 // Sends the default favicon. 41 void SendDefaultResponse(int request_id); 42 43 virtual ~FaviconSource(); 44 45 Profile* profile_; 46 CancelableRequestConsumerT<int, 0> cancelable_consumer_; 47 48 // Raw PNG representation of the favicon to show when the favicon 49 // database doesn't have a favicon for a webpage. 50 scoped_refptr<RefCountedMemory> default_favicon_; 51 52 DISALLOW_COPY_AND_ASSIGN(FaviconSource); 53}; 54 55#endif // CHROME_BROWSER_UI_WEBUI_FAVICON_SOURCE_H_ 56