// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_ASH_PICKER_PICKER_LINK_SUGGESTER_H_
#define CHROME_BROWSER_UI_ASH_PICKER_PICKER_LINK_SUGGESTER_H_
#include <vector>
#include "ash/public/cpp/picker/picker_search_result.h"
#include "base/functional/callback_forward.h"
#include "base/memory/weak_ptr.h"
#include "base/task/cancelable_task_tracker.h"
class Profile;
namespace favicon {
class FaviconService;
}
namespace favicon_base {
struct FaviconImageResult;
}
namespace history {
class HistoryService;
class QueryResults;
class URLResult;
} // namespace history
// A class to suggest links based on recent browsing history.
class PickerLinkSuggester {
public:
using SuggestedLinksCallback =
base::RepeatingCallback<void(std::vector<ash::PickerSearchResult>)>;
explicit PickerLinkSuggester(Profile* profile);
~PickerLinkSuggester();
PickerLinkSuggester(const PickerLinkSuggester&) = delete;
PickerLinkSuggester& operator=(const PickerLinkSuggester&) = delete;
void GetSuggestedLinks(size_t max_links, SuggestedLinksCallback callback);
void set_favicon_service_for_test(favicon::FaviconService* service) {
favicon_service_ = service;
}
private:
void OnGetBrowsingHistory(SuggestedLinksCallback callback,
history::QueryResults results);
void OnGetFaviconImage(
history::URLResult result,
base::OnceCallback<void(ash::PickerSearchResult)> callback,
const favicon_base::FaviconImageResult& favicon_image_result);
raw_ptr<history::HistoryService> history_service_;
base::CancelableTaskTracker history_query_tracker_;
raw_ptr<favicon::FaviconService> favicon_service_;
std::vector<base::CancelableTaskTracker> favicon_query_trackers_;
std::vector<ash::PickerSearchResult> suggested_links_;
base::WeakPtrFactory<PickerLinkSuggester> weak_factory_{this};
};
#endif // CHROME_BROWSER_UI_ASH_PICKER_PICKER_LINK_SUGGESTER_H_