blob: df9fae48ee7f6e23706c3dbb81e4817161192a7f [file] [log] [blame]
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_FAVICON_MODEL_FAVICON_LOADER_H_
#define IOS_CHROME_BROWSER_FAVICON_MODEL_FAVICON_LOADER_H_
#include "base/memory/raw_ptr.h"
#include "base/task/cancelable_task_tracker.h"
#include "components/keyed_service/core/keyed_service.h"
class GURL;
@class FaviconAttributes;
// A class that manages asynchronously loading favicons.
class FaviconLoader : public KeyedService {
public:
// Type for completion block for FaviconForURL().
using FaviconAttributesCompletionBlock = void (^)(FaviconAttributes*);
FaviconLoader() = default;
FaviconLoader(const FaviconLoader&) = delete;
FaviconLoader& operator=(const FaviconLoader&) = delete;
~FaviconLoader() override = default;
// Tries to find a FaviconAttributes in `favicon_cache_` with `page_url`:
// If found, invokes `favicon_block_handler` and exits.
// If not found, invokes `favicon_block_handler` with a default placeholder
// then invokes it again asynchronously with the favicon fetched by trying
// following methods:
// 1. Use `large_icon_service_` to fetch from local DB managed by
// HistoryService;
// 2. Use `large_icon_service_` to fetch from Google Favicon server if
// `fallback_to_google_server=true` (`size_in_points` is ignored when
// fetching from the Google server);
// ======================================================================
// IMPORTANT NOTE: You must only set `fallback_to_google_server` if it's
// acceptable to send history data to Google, per `CanSendHistoryData()`
// or equivalent checks.
// ======================================================================
// 3. Create a favicon base on the fallback style from `large_icon_service`.
// TODO(crbug.com/40266381): Remove the `fallback_to_google_server` param, and
// instead have FaviconLoader determine this internally, based on
// `CanSendHistoryData()`.
virtual void FaviconForPageUrl(
const GURL& page_url,
float size_in_points,
float min_size_in_points,
bool fallback_to_google_server,
FaviconAttributesCompletionBlock favicon_block_handler) = 0;
// Tries to find a FaviconAttributes in `favicon_cache_` with `page_url`:
// If found, invokes `favicon_block_handler` and exits.
// If not found, invokes `favicon_block_handler` with a default placeholder
// then invokes it again asynchronously with the favicon fetched by trying
// following methods:
// 1. Use `large_icon_service_` to fetch from local DB managed by
// HistoryService;
// 2. Create a favicon base on the fallback style from `large_icon_service`.
virtual void FaviconForPageUrlOrHost(
const GURL& page_url,
float size_in_points,
FaviconAttributesCompletionBlock favicon_block_handler) = 0;
// Tries to find a FaviconAttributes in `favicon_cache_` with `icon_url`:
// If found, invokes `favicon_block_handler` and exits.
// If not found, invokes `favicon_block_handler` with a default placeholder
// then invokes it again asynchronously with the favicon fetched by trying
// following methods:
// 1. Use `large_icon_service_` to fetch from local DB managed by
// HistoryService;
// 2. Create a favicon base on the fallback style from `large_icon_service`.
virtual void FaviconForIconUrl(
const GURL& icon_url,
float size_in_points,
float min_size_in_points,
FaviconAttributesCompletionBlock favicon_block_handler) = 0;
// Cancel all incomplete requests.
virtual void CancellAllRequests() = 0;
// Return a weak pointer to the current object.
virtual base::WeakPtr<FaviconLoader> AsWeakPtr() = 0;
};
#endif // IOS_CHROME_BROWSER_FAVICON_MODEL_FAVICON_LOADER_H_