// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/lacros/sync/crosapi_session_sync_favicon_delegate.h"
#include "chromeos/crosapi/mojom/synced_session_client.mojom.h"
#include "components/favicon/core/history_ui_favicon_request_handler.h"
#include "components/favicon_base/favicon_types.h"
#include "url/gurl.h"
CrosapiSessionSyncFaviconDelegate::CrosapiSessionSyncFaviconDelegate(
favicon::HistoryUiFaviconRequestHandler* favicon_request_handler)
: favicon_request_handler_(favicon_request_handler) {}
CrosapiSessionSyncFaviconDelegate::~CrosapiSessionSyncFaviconDelegate() =
default;
void CrosapiSessionSyncFaviconDelegate::GetFaviconImageForPageURL(
const GURL& url,
GetFaviconImageForPageURLCallback callback) {
if (!favicon_request_handler_) {
std::move(callback).Run(gfx::ImageSkia());
return;
}
favicon_request_handler_->GetFaviconImageForPageURL(
url,
base::BindOnce(&CrosapiSessionSyncFaviconDelegate::OnFaviconReady,
weak_ptr_factory_.GetWeakPtr(), std::move(callback)),
favicon::HistoryUiFaviconRequestOrigin::kRecentTabs);
}
mojo::PendingRemote<crosapi::mojom::SyncedSessionClientFaviconDelegate>
CrosapiSessionSyncFaviconDelegate::CreateRemote() {
return receiver_.BindNewPipeAndPassRemote();
}
void CrosapiSessionSyncFaviconDelegate::OnFaviconReady(
GetFaviconImageForPageURLCallback callback,
const favicon_base::FaviconImageResult& favicon_image_result) {
std::move(callback).Run(favicon_image_result.image.AsImageSkia());
}