• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
FaviconService(Profile * profile)13 FaviconService::FaviconService(Profile* profile) : profile_(profile) {
14 }
15 
GetFavicon(const GURL & icon_url,history::IconType icon_type,CancelableRequestConsumerBase * consumer,FaviconDataCallback * callback)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 
UpdateFaviconMappingAndFetch(const GURL & page_url,const GURL & icon_url,history::IconType icon_type,CancelableRequestConsumerBase * consumer,FaviconService::FaviconDataCallback * callback)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 
GetFaviconForURL(const GURL & page_url,int icon_types,CancelableRequestConsumerBase * consumer,FaviconDataCallback * callback)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 
SetFaviconOutOfDateForPage(const GURL & page_url)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 
SetImportedFavicons(const std::vector<history::ImportedFaviconUsage> & favicon_usage)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 
SetFavicon(const GURL & page_url,const GURL & icon_url,const std::vector<unsigned char> & image_data,history::IconType icon_type)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 
~FaviconService()91 FaviconService::~FaviconService() {
92 }
93 
ForwardEmptyResultAsync(GetFaviconRequest * request)94 void FaviconService::ForwardEmptyResultAsync(GetFaviconRequest* request) {
95   request->ForwardResultAsync(FaviconDataCallback::TupleType(
96       request->handle(), history::FaviconData()));
97 }
98