blob: a881862357e341c539d5d0b43b736a435a62daa8 [file] [log] [blame]
[email protected]b8da3a32013-01-22 23:54:081// Copyright (c) 2013 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#ifndef ANDROID_WEBVIEW_BROWSER_ICON_HELPER_H_
6#define ANDROID_WEBVIEW_BROWSER_ICON_HELPER_H_
7
avide7d5c22015-12-20 05:48:448#include <stdint.h>
9
[email protected]b8da3a32013-01-22 23:54:0810#include <string>
Takuto Ikuta8332bf9d2019-01-05 03:58:0011#include <unordered_set>
avide7d5c22015-12-20 05:48:4412
avide7d5c22015-12-20 05:48:4413#include "base/macros.h"
toyoshim0df1d3a2016-09-09 09:52:4814#include "content/public/browser/reload_type.h"
[email protected]b8da3a32013-01-22 23:54:0815#include "content/public/browser/web_contents_observer.h"
Miyoung Shin5709ab02020-02-19 06:50:4116#include "third_party/blink/public/mojom/favicon/favicon_url.mojom-forward.h"
[email protected]492c64c2013-07-19 10:39:4617#include "url/gurl.h"
[email protected]b8da3a32013-01-22 23:54:0818
19class SkBitmap;
20
[email protected]263cb08f2013-09-18 00:26:3021namespace gfx {
22class Size;
23}
24
[email protected]b8da3a32013-01-22 23:54:0825namespace android_webview {
26
27// A helper that observes favicon changes for Webview.
28class IconHelper : public content::WebContentsObserver {
29 public:
30 class Listener {
31 public:
[email protected]8cbb1e552013-10-04 23:21:2632 virtual bool ShouldDownloadFavicon(const GURL& icon_url) = 0;
[email protected]492c64c2013-07-19 10:39:4633 virtual void OnReceivedIcon(const GURL& icon_url,
34 const SkBitmap& bitmap) = 0;
[email protected]b8da3a32013-01-22 23:54:0835 virtual void OnReceivedTouchIconUrl(const std::string& url,
36 const bool precomposed) = 0;
37 protected:
38 virtual ~Listener() {}
39 };
40
41 explicit IconHelper(content::WebContents* web_contents);
dcheng996c125c2015-02-04 02:25:4942 ~IconHelper() override;
[email protected]b8da3a32013-01-22 23:54:0843
44 void SetListener(Listener* listener);
45
46 // From WebContentsObserver
dcheng996c125c2015-02-04 02:25:4947 void DidUpdateFaviconURL(
Yuzu Saijo0c263c702020-06-08 03:41:2448 content::RenderFrameHost* render_frame_host,
Miyoung Shin5709ab02020-02-19 06:50:4149 const std::vector<blink::mojom::FaviconURLPtr>& candidates) override;
Alexander Timinc4f70172020-05-13 22:32:4250 void DidStartNavigation(content::NavigationHandle* navigation) override;
[email protected]b8da3a32013-01-22 23:54:0851
[email protected]263cb08f2013-09-18 00:26:3052 void DownloadFaviconCallback(
53 int id,
54 int http_status_code,
55 const GURL& image_url,
56 const std::vector<SkBitmap>& bitmaps,
57 const std::vector<gfx::Size>& original_bitmap_sizes);
[email protected]b8da3a32013-01-22 23:54:0858
59 private:
[email protected]971b2e92014-04-30 12:10:5860 void MarkUnableToDownloadFavicon(const GURL& icon_url);
61 bool WasUnableToDownloadFavicon(const GURL& icon_url) const;
62 void ClearUnableToDownloadFavicons();
63
[email protected]b8da3a32013-01-22 23:54:0864 Listener* listener_;
65
Daniel Cheng9a59e462019-11-18 22:47:3066 using MissingFaviconURLHash = size_t;
Takuto Ikuta8332bf9d2019-01-05 03:58:0067 std::unordered_set<MissingFaviconURLHash> missing_favicon_urls_;
[email protected]971b2e92014-04-30 12:10:5868
[email protected]b8da3a32013-01-22 23:54:0869 DISALLOW_COPY_AND_ASSIGN(IconHelper);
70};
71
72} // namespace android_webview
73
74#endif // ANDROID_WEBVIEW_BROWSER_ICON_HELPER_H_