#ifndef CHROME_BROWSER_GLIC_GLIC_ZERO_STATE_SUGGESTIONS_MANAGER_H_
#define CHROME_BROWSER_GLIC_GLIC_ZERO_STATE_SUGGESTIONS_MANAGER_H_
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "base/functional/callback_forward.h"
#include "chrome/browser/glic/host/context/glic_tab_data.h"
namespace contextual_cueing {
class ContextualCueingService;
class CachingZeroStateSuggestionsManager;
}
namespace glic {
class GlicSharingManager;
class GlicInstance;
class Host;
class GlicZeroStateSuggestionsManager {
public:
GlicZeroStateSuggestionsManager(
GlicSharingManager* sharing_manager,
GlicInstance* glic_instance,
contextual_cueing::ContextualCueingService* contextual_cueing_service);
virtual ~GlicZeroStateSuggestionsManager();
void NotifyZeroStateSuggestionsOnFocusedTabDataChanged(
bool is_first_run,
const std::vector<std::string>& supported_tools,
const mojom::TabData* focused_tab_data);
void NotifyZeroStateSuggestionsOnPinnedTabChanged(
bool is_first_run,
const std::vector<std::string>& supported_tools,
const std::vector<content::WebContents*>& pinned_tab_data);
void NotifyZeroStateSuggestionsOnPinnedTabDataChanged(
bool is_first_run,
const std::vector<std::string>& supported_tools,
const TabDataChange& data);
void ObserveZeroStateSuggestions(
bool is_notifying,
bool is_first_run,
const std::vector<std::string>& supported_tools,
glic::mojom::WebClientHandler::GetZeroStateSuggestionsAndSubscribeCallback
callback);
void Reset();
private:
void FilterTabs(std::vector<content::WebContents*>& tabs);
void OnZeroStateSuggestionsFetched(
mojom::WebClientHandler::GetZeroStateSuggestionsAndSubscribeCallback
callback,
std::vector<std::string> returned_suggestions);
void OnZeroStateSuggestionsNotify(
bool is_first_run,
const std::vector<std::string>& supported_tools,
std::vector<std::string> returned_suggestions);
base::WeakPtr<GlicZeroStateSuggestionsManager> GetWeakPtr();
Host& host();
raw_ptr<GlicSharingManager> sharing_manager_;
raw_ptr<GlicInstance> glic_instance_;
raw_ptr<Host> host_;
std::unique_ptr<contextual_cueing::CachingZeroStateSuggestionsManager>
caching_zero_state_manager_;
raw_ptr<contextual_cueing::ContextualCueingService>
contextual_cueing_service_;
mojom::ZeroStateSuggestionsOptions current_zero_state_suggestions_options_;
base::CallbackListSubscription
current_zero_state_suggestions_focus_change_subscription_;
base::CallbackListSubscription
current_zero_state_suggestions_pinned_tab_change_subscription_;
base::CallbackListSubscription
current_zero_state_suggestions_pinned_tab_data_change_subscription_;
bool pause_pinned_subscription_updates_ = false;
base::WeakPtrFactory<GlicZeroStateSuggestionsManager> weak_ptr_factory_{this};
};
}
#endif