#include "chrome/browser/ui/webui/favicon_source.h"
#include <cmath>
#include "base/functional/bind.h"
#include "base/functional/callback_helpers.h"
#include "base/metrics/histogram_functions.h"
#include "base/strings/string_number_conversions.h"
#include "chrome/browser/favicon/favicon_service_factory.h"
#include "chrome/browser/favicon/favicon_utils.h"
#include "chrome/browser/favicon/history_ui_favicon_request_handler_factory.h"
#include "chrome/browser/history/top_sites_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search/instant_service.h"
#include "chrome/browser/ui/webui/webui_util_desktop.h"
#include "chrome/common/url_constants.h"
#include "chrome/common/webui_url_constants.h"
#include "components/favicon/core/history_ui_favicon_request_handler.h"
#include "components/favicon_base/favicon_url_parser.h"
#include "components/history/core/browser/top_sites.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/web_contents.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/common/constants.h"
#include "extensions/common/manifest.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/resource/resource_scale_factor.h"
#include "ui/base/webui/web_ui_util.h"
#include "ui/gfx/codec/png_codec.h"
#include "ui/native_theme/native_theme.h"
#include "ui/resources/grit/ui_resources.h"
#include "url/gurl.h"
namespace {
constexpr int kMaxDesiredSizeInPixel = …;
GURL GetUnsafeRequestOrigin(const content::WebContents::Getter& wc_getter) { … }
bool ParseHistoryUiOrigin(const GURL& url,
favicon::HistoryUiFaviconRequestOrigin* origin) { … }
}
FaviconSource::FaviconSource(Profile* profile,
chrome::FaviconUrlFormat url_format)
: … { … }
FaviconSource::~FaviconSource() { … }
std::string FaviconSource::GetSource() { … }
void FaviconSource::StartDataRequest(
const GURL& url,
const content::WebContents::Getter& wc_getter,
content::URLDataSource::GotDataCallback callback) { … }
std::string FaviconSource::GetMimeType(const GURL&) { … }
bool FaviconSource::AllowCaching() { … }
bool FaviconSource::ShouldReplaceExistingSource() { … }
bool FaviconSource::ShouldServiceRequest(
const GURL& url,
content::BrowserContext* browser_context,
int render_process_id) { … }
ui::NativeTheme* FaviconSource::GetNativeTheme(
const content::WebContents::Getter& wc_getter) { … }
void FaviconSource::OnFaviconDataAvailable(
content::URLDataSource::GotDataCallback callback,
const chrome::ParsedFaviconPath& parsed,
const content::WebContents::Getter& wc_getter,
const favicon_base::FaviconRawBitmapResult& bitmap_result) { … }
void FaviconSource::SendDefaultResponse(
content::URLDataSource::GotDataCallback callback,
const chrome::ParsedFaviconPath& parsed,
const content::WebContents::Getter& wc_getter) { … }
void FaviconSource::SendDefaultResponse(
content::URLDataSource::GotDataCallback callback,
const content::WebContents::Getter& wc_getter,
bool force_light_mode) { … }
void FaviconSource::SendDefaultResponse(
content::URLDataSource::GotDataCallback callback,
int size_in_dip,
float scale_factor,
bool dark_mode) { … }
base::RefCountedMemory* FaviconSource::LoadIconBytes(float scale_factor,
int resource_id) { … }