Chromium Code Reviews| Index: chrome/browser/extensions/favicon_downloader.h |
| diff --git a/chrome/browser/extensions/favicon_downloader.h b/chrome/browser/extensions/favicon_downloader.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..df8771c73883c91482db7624e76cf461cdf0ad98 |
| --- /dev/null |
| +++ b/chrome/browser/extensions/favicon_downloader.h |
| @@ -0,0 +1,104 @@ |
| +// Copyright 2013 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. |
| + |
| +#ifndef CHROME_BROWSER_EXTENSIONS_FAVICON_DOWNLOADER_H_ |
| +#define CHROME_BROWSER_EXTENSIONS_FAVICON_DOWNLOADER_H_ |
| + |
| +#include <map> |
| +#include <set> |
| +#include <vector> |
| + |
| +#include "base/callback.h" |
| +#include "base/memory/weak_ptr.h" |
| +#include "content/public/browser/web_contents_observer.h" |
| + |
| +class SkBitmap; |
| + |
| +namespace content { |
| +struct FaviconURL; |
| +} |
| + |
| +namespace gfx { |
| +class Size; |
| +} |
| + |
| +// Class to help download all favicons for a tab. |
| +class FaviconDownloader : public content::WebContentsObserver { |
| + public: |
| + typedef std::map<GURL, std::vector<SkBitmap> > FaviconMap; |
| + typedef base::Callback<void( |
| + bool, /* success */ |
| + /* A map of icon urls to the bitmaps provided by that url. */ |
| + const FaviconMap&)> |
| + FaviconDownloaderCallback; |
| + // |extra_favicon_urls| allows callers to provide icon urls that aren't |
| + // |provided by the renderer (e.g touch icons on non-android environments). |
| + FaviconDownloader(content::WebContents* web_contents, |
| + const std::vector<GURL>& extra_favicon_urls, |
| + FaviconDownloaderCallback callback); |
| + virtual ~FaviconDownloader(); |
| + |
| + void Start(); |
| + |
| + private: |
| + friend class TestFaviconDownloader; |
| + |
| + // Initiates a download of the image at |url| and returns the download id. |
| + // This is overridden in testing. |
| + virtual int DownloadImage(const GURL& url); |
| + |
| + // Queries FaviconTabHelper for the page's current favicon URLs. |
| + // This is overridden in testing. |
| + virtual std::vector<content::FaviconURL> GetFaviconURLsFromWebContents(); |
| + |
| + // Fetches icons for the given urls. |
| + // |callback| is run when all downloads complete. |
|
benwells
2013/12/12 21:17:57
Nit: what |callback|?
Update: Oh - the |callback_
calamity
2013/12/13 03:11:55
Done.
|
| + void FetchIcons(const std::vector<content::FaviconURL>& favicon_urls); |
| + void FetchIcons(const std::vector<GURL>& urls); |
| + |
| + // Icon download callback. |
| + void DidDownloadFavicon(int id, |
| + int http_status_code, |
| + const GURL& image_url, |
| + const std::vector<SkBitmap>& bitmaps, |
| + const std::vector<gfx::Size>& original_bitmap_sizes); |
| + |
| + // content::WebContentsObserver overrides: |
| + virtual void DidNavigateMainFrame( |
| + const content::LoadCommittedDetails& details, |
| + const content::FrameNavigateParams& params) OVERRIDE; |
| + virtual void DidUpdateFaviconURL( |
| + int32 page_id, |
| + const std::vector<content::FaviconURL>& candidates) OVERRIDE; |
| + |
| + // Whether we have received favicons from the renderer. |
| + // FaviconURLs are received from GetFaviconURLsFromWebContents() if available. |
|
benwells
2013/12/12 21:17:57
Nit: I'd recommend just the first line of this com
calamity
2013/12/13 03:11:55
Done.
|
| + // Otherwise they are provided when WebContentsObserver::DidUpdateFaviconURL() |
| + // is called. |
| + bool got_favicon_urls_; |
| + |
| + // URLs that aren't given by WebContentsObserver::DidUpdateFaviconURL() that |
| + // should be used for this favicon. This is necessary in order to get touch |
| + // icons on non-android environments. |
| + std::vector<GURL> extra_favicon_urls_; |
| + |
| + // The icons which were downloaded. Populated by FetchIcons(). |
| + FaviconMap favicon_map_; |
| + |
| + // Request ids of in-progress requests. |
| + std::set<int> in_progress_requests_; |
| + |
| + // Urls for which a download has already been initiated. Used to prevent |
| + // duplicate downloads of the same url. |
| + std::set<GURL> processed_urls_; |
| + |
| + // Callback to run on favicon download completion. |
| + FaviconDownloaderCallback callback_; |
| + |
| + base::WeakPtrFactory<FaviconDownloader> weak_ptr_factory_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(FaviconDownloader); |
| +}; |
| + |
| +#endif // CHROME_BROWSER_EXTENSIONS_FAVICON_DOWNLOADER_H_ |