cc: Fix high/low res scale collisions
[chromium-blink-merge.git] / components / favicon / core / favicon_driver_impl.h
blobf4a93d643b00fcf687e7677c4526b6942f0970c1
1 // Copyright 2015 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.
5 #ifndef COMPONENTS_FAVICON_CORE_FAVICON_DRIVER_IMPL_H_
6 #define COMPONENTS_FAVICON_CORE_FAVICON_DRIVER_IMPL_H_
8 #include <vector>
10 #include "base/macros.h"
11 #include "components/favicon/core/favicon_driver.h"
13 class GURL;
14 class SkBitmap;
16 namespace bookmarks {
17 class BookmarkModel;
20 namespace gfx {
21 class Image;
22 class Size;
25 namespace history {
26 class HistoryService;
29 namespace favicon {
31 class FaviconDriverObserver;
32 class FaviconHandler;
33 class FaviconService;
34 struct FaviconURL;
36 // FaviconDriverImpl is a partial implementation of FaviconDriver that allow
37 // sharing implementation between different embedder.
39 // FaviconDriverImpl works with FaviconHandlers to fetch the favicons. It
40 // fetches the given page's icons, requesting them from history backend. If the
41 // icon is not available or expired, the icon will be downloaded and saved in
42 // the history backend.
43 class FaviconDriverImpl : public FaviconDriver {
44 public:
45 // Favicon download callback.
46 // Public for testing.
47 void DidDownloadFavicon(int id,
48 int http_status_code,
49 const GURL& image_url,
50 const std::vector<SkBitmap>& bitmaps,
51 const std::vector<gfx::Size>& original_bitmap_sizes);
53 // FaviconDriver implementation.
54 void FetchFavicon(const GURL& url) override;
55 void SaveFavicon() override;
56 bool IsBookmarked(const GURL& url) override;
57 void OnFaviconAvailable(const gfx::Image& image,
58 const GURL& icon_url,
59 bool is_active_favicon) override;
60 bool HasPendingTasksForTest() override;
62 protected:
63 FaviconDriverImpl(FaviconService* favicon_service,
64 history::HistoryService* history_service,
65 bookmarks::BookmarkModel* bookmark_model);
66 ~FaviconDriverImpl() override;
68 // Returns whether downloading favicon for |url| previously failed.
69 bool WasUnableToDownloadFavicon(const GURL& url);
71 // Informs FaviconService that the favicon for |url| is out of date. If
72 // |force_reload| is true, then discard information about favicon download
73 // failures.
74 void SetFaviconOutOfDateForPage(const GURL& url, bool force_reload);
76 // Broadcasts new favicon URL candidates to FaviconHandlers.
77 void OnUpdateFaviconURL(const std::vector<FaviconURL>& candidates);
79 private:
80 // KeyedServices used by FaviconDriverImpl. They may be null during testing,
81 // but if they are defined, they must outlive the FaviconDriverImpl.
82 FaviconService* favicon_service_;
83 history::HistoryService* history_service_;
84 bookmarks::BookmarkModel* bookmark_model_;
86 // FaviconHandlers used to download the different kind of favicons. Both
87 // |touch_icon_handler_| and |large_icon_handler_| may be null depending
88 // on the platform or variations.
89 scoped_ptr<FaviconHandler> favicon_handler_;
90 scoped_ptr<FaviconHandler> touch_icon_handler_;
91 scoped_ptr<FaviconHandler> large_icon_handler_;
93 DISALLOW_COPY_AND_ASSIGN(FaviconDriverImpl);
96 } // namespace favicon
98 #endif // COMPONENTS_FAVICON_CORE_FAVICON_DRIVER_IMPL_H_