Home | History | Annotate | Download | only in browser
      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 #include "chrome/browser/favicon_service.h"
      6 
      7 #include "chrome/browser/history/history.h"
      8 #include "chrome/browser/history/history_backend.h"
      9 #include "chrome/browser/profiles/profile.h"
     10 #include "chrome/browser/ui/webui/chrome_web_ui_factory.h"
     11 #include "chrome/common/url_constants.h"
     12 
     13 FaviconService::FaviconService(Profile* profile) : profile_(profile) {
     14 }
     15 
     16 FaviconService::Handle FaviconService::GetFavicon(
     17     const GURL& icon_url,
     18     history::IconType icon_type,
     19     CancelableRequestConsumerBase* consumer,
     20     FaviconDataCallback* callback) {
     21   GetFaviconRequest* request = new GetFaviconRequest(callback);
     22   AddRequest(request, consumer);
     23   HistoryService* hs = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS);
     24   if (hs)
     25     hs->GetFavicon(request, icon_url, icon_type);
     26   else
     27     ForwardEmptyResultAsync(request);
     28   return request->handle();
     29 }
     30 
     31 FaviconService::Handle FaviconService::UpdateFaviconMappingAndFetch(
     32     const GURL& page_url,
     33     const GURL& icon_url,
     34     history::IconType icon_type,
     35     CancelableRequestConsumerBase* consumer,
     36     FaviconService::FaviconDataCallback* callback) {
     37   GetFaviconRequest* request = new GetFaviconRequest(callback);
     38   AddRequest(request, consumer);
     39   HistoryService* hs = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS);
     40   if (hs)
     41     hs->UpdateFaviconMappingAndFetch(request, page_url, icon_url, icon_type);
     42   else
     43     ForwardEmptyResultAsync(request);
     44   return request->handle();
     45 }
     46 
     47 FaviconService::Handle FaviconService::GetFaviconForURL(
     48     const GURL& page_url,
     49     int icon_types,
     50     CancelableRequestConsumerBase* consumer,
     51     FaviconDataCallback* callback) {
     52   GetFaviconRequest* request = new GetFaviconRequest(callback);
     53   AddRequest(request, consumer);
     54   FaviconService::Handle handle = request->handle();
     55   if (page_url.SchemeIs(chrome::kChromeUIScheme) ||
     56       page_url.SchemeIs(chrome::kExtensionScheme)) {
     57     ChromeWebUIFactory::GetInstance()->GetFaviconForURL(
     58         profile_, request, page_url);
     59   } else {
     60     HistoryService* hs = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS);
     61     if (hs)
     62       hs->GetFaviconForURL(request, page_url, icon_types);
     63     else
     64       ForwardEmptyResultAsync(request);
     65   }
     66   return handle;
     67 }
     68 
     69 void FaviconService::SetFaviconOutOfDateForPage(const GURL& page_url) {
     70   HistoryService* hs = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS);
     71   if (hs)
     72     hs->SetFaviconOutOfDateForPage(page_url);
     73 }
     74 
     75 void FaviconService::SetImportedFavicons(
     76     const std::vector<history::ImportedFaviconUsage>& favicon_usage) {
     77   HistoryService* hs = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS);
     78   if (hs)
     79     hs->SetImportedFavicons(favicon_usage);
     80 }
     81 
     82 void FaviconService::SetFavicon(const GURL& page_url,
     83                                 const GURL& icon_url,
     84                                 const std::vector<unsigned char>& image_data,
     85                                 history::IconType icon_type) {
     86   HistoryService* hs = profile_->GetHistoryService(Profile::EXPLICIT_ACCESS);
     87   if (hs)
     88     hs->SetFavicon(page_url, icon_url, image_data, icon_type);
     89 }
     90 
     91 FaviconService::~FaviconService() {
     92 }
     93 
     94 void FaviconService::ForwardEmptyResultAsync(GetFaviconRequest* request) {
     95   request->ForwardResultAsync(FaviconDataCallback::TupleType(
     96       request->handle(), history::FaviconData()));
     97 }
     98