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