#ifndef CHROME_BROWSER_ASH_PHONEHUB_BROWSER_TABS_METADATA_FETCHER_IMPL_H_
#define CHROME_BROWSER_ASH_PHONEHUB_BROWSER_TABS_METADATA_FETCHER_IMPL_H_
#include <vector>
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "chromeos/ash/components/phonehub/browser_tabs_metadata_fetcher.h"
#include "chromeos/ash/components/phonehub/browser_tabs_model.h"
namespace favicon_base {
struct FaviconImageResult;
}
namespace favicon {
class HistoryUiFaviconRequestHandler;
}
namespace ash::phonehub {
class BrowserTabsMetadataFetcherImpl : public BrowserTabsMetadataFetcher {
public:
explicit BrowserTabsMetadataFetcherImpl(
favicon::HistoryUiFaviconRequestHandler* favicon_request_handler);
~BrowserTabsMetadataFetcherImpl() override;
void Fetch(
const sync_sessions::SyncedSession* session,
base::OnceCallback<void(BrowserTabsMetadataResponse)> callback) override;
private:
void OnAllFaviconsFetched();
void OnFaviconReady(
size_t index_in_results,
base::OnceClosure done_closure,
const favicon_base::FaviconImageResult& favicon_image_result);
const raw_ptr<favicon::HistoryUiFaviconRequestHandler>
favicon_request_handler_;
std::vector<BrowserTabsModel::BrowserTabMetadata> results_;
base::OnceCallback<void(BrowserTabsMetadataResponse)> callback_;
base::WeakPtrFactory<BrowserTabsMetadataFetcherImpl> weak_ptr_factory_{this};
};
}
#endif