// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/favicon_service.h" #include "chrome/browser/history/history.h" #include "chrome/browser/history/history_backend.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/webui/chrome_web_ui_factory.h" #include "chrome/common/url_constants.h" FaviconService::FaviconService(Profile* profile) : profile_(profile) { } FaviconService::Handle FaviconService::GetFavicon( const GURL& icon_url, history::IconType icon_type, CancelableRequestConsumerBase* consumer, FaviconDataCallback* callback) { GetFaviconRequest* request = new GetFaviconRequest(callback); AddRequest(request, consumer); HistoryService* hs = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); if (hs) hs->GetFavicon(request, icon_url, icon_type); else ForwardEmptyResultAsync(request); return request->handle(); } FaviconService::Handle FaviconService::UpdateFaviconMappingAndFetch( const GURL& page_url, const GURL& icon_url, history::IconType icon_type, CancelableRequestConsumerBase* consumer, FaviconService::FaviconDataCallback* callback) { GetFaviconRequest* request = new GetFaviconRequest(callback); AddRequest(request, consumer); HistoryService* hs = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); if (hs) hs->UpdateFaviconMappingAndFetch(request, page_url, icon_url, icon_type); else ForwardEmptyResultAsync(request); return request->handle(); } FaviconService::Handle FaviconService::GetFaviconForURL( const GURL& page_url, int icon_types, CancelableRequestConsumerBase* consumer, FaviconDataCallback* callback) { GetFaviconRequest* request = new GetFaviconRequest(callback); AddRequest(request, consumer); FaviconService::Handle handle = request->handle(); if (page_url.SchemeIs(chrome::kChromeUIScheme) || page_url.SchemeIs(chrome::kExtensionScheme)) { ChromeWebUIFactory::GetInstance()->GetFaviconForURL( profile_, request, page_url); } else { HistoryService* hs = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); if (hs) hs->GetFaviconForURL(request, page_url, icon_types); else ForwardEmptyResultAsync(request); } return handle; } void FaviconService::SetFaviconOutOfDateForPage(const GURL& page_url) { HistoryService* hs = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); if (hs) hs->SetFaviconOutOfDateForPage(page_url); } void FaviconService::SetImportedFavicons( const std::vector<history::ImportedFaviconUsage>& favicon_usage) { HistoryService* hs = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); if (hs) hs->SetImportedFavicons(favicon_usage); } void FaviconService::SetFavicon(const GURL& page_url, const GURL& icon_url, const std::vector<unsigned char>& image_data, history::IconType icon_type) { HistoryService* hs = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS); if (hs) hs->SetFavicon(page_url, icon_url, image_data, icon_type); } FaviconService::~FaviconService() { } void FaviconService::ForwardEmptyResultAsync(GetFaviconRequest* request) { request->ForwardResultAsync(FaviconDataCallback::TupleType( request->handle(), history::FaviconData())); }