#ifndef CHROMEOS_COMPONENTS_MAHI_PUBLIC_CPP_MAHI_MANAGER_H_
#define CHROMEOS_COMPONENTS_MAHI_PUBLIC_CPP_MAHI_MANAGER_H_
#include <stdint.h>
#include <string>
#include <vector>
#include "base/component_export.h"
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "base/unguessable_token.h"
#include "chromeos/crosapi/mojom/mahi.mojom.h"
#include "ui/gfx/image/image_skia.h"
class GURL;
namespace gfx {
class Rect;
}
namespace chromeos {
struct COMPONENT_EXPORT(MAHI_PUBLIC_CPP) MahiOutline {
int id;
std::u16string outline_content;
bool operator==(const MahiOutline&) const;
};
enum class COMPONENT_EXPORT(MAHI_PUBLIC_CPP) MahiGetContentResponseStatus {
kSuccess = 0,
kContentExtractionError = 1,
kUnknownError = 2,
};
enum class COMPONENT_EXPORT(MAHI_PUBLIC_CPP) MahiResponseStatus {
kSuccess = 0,
kUnknownError = 1,
kInappropriate = 2,
kLowQuota = 3,
kQuotaLimitHit = 4,
kResourceExhausted = 5,
kContentExtractionError = 6,
kCantFindOutputData = 7,
kRestrictedCountry = 8,
kUnsupportedLanguage = 9,
kMaxValue = kUnsupportedLanguage,
};
class COMPONENT_EXPORT(MAHI_PUBLIC_CPP) MahiManager {
public:
MahiManager(const MahiManager&) = delete;
MahiManager& operator=(const MahiManager&) = delete;
virtual ~MahiManager();
static MahiManager* Get();
virtual std::u16string GetContentTitle() = 0;
virtual gfx::ImageSkia GetContentIcon() = 0;
virtual GURL GetContentUrl() = 0;
virtual std::u16string GetSelectedText() = 0;
using MahiContentCallback =
base::OnceCallback<void(std::u16string, MahiGetContentResponseStatus)>;
virtual void GetContent(MahiContentCallback callback) = 0;
using MahiSummaryCallback =
base::OnceCallback<void(std::u16string, MahiResponseStatus)>;
virtual void GetSummary(MahiSummaryCallback callback) = 0;
using MahiElucidationCallback =
base::OnceCallback<void(std::u16string, MahiResponseStatus)>;
virtual void GetElucidation(MahiElucidationCallback callback) = 0;
using MahiOutlinesCallback =
base::OnceCallback<void(std::vector<MahiOutline>, MahiResponseStatus)>;
virtual void GetOutlines(MahiOutlinesCallback callback) = 0;
virtual void GoToOutlineContent(int outline_id) = 0;
using MahiAnswerQuestionCallback =
base::OnceCallback<void(std::optional<std::u16string>,
MahiResponseStatus)>;
virtual void AnswerQuestion(const std::u16string& question,
bool current_panel_content,
MahiAnswerQuestionCallback callback) = 0;
using MahiAnswerQuestionCallbackRepeating =
base::RepeatingCallback<void(std::optional<std::u16string>,
MahiResponseStatus)>;
virtual void AnswerQuestionRepeating(
const std::u16string& question,
bool current_panel_content,
MahiAnswerQuestionCallbackRepeating callback) = 0;
virtual bool AllowRepeatingAnswers() = 0;
using MahiGetSuggestedQuestionCallback =
base::OnceCallback<void(std::u16string, MahiResponseStatus)>;
virtual void GetSuggestedQuestion(
MahiGetSuggestedQuestionCallback callback) = 0;
virtual void SetCurrentFocusedPageInfo(
crosapi::mojom::MahiPageInfoPtr info) = 0;
virtual void OnContextMenuClicked(
crosapi::mojom::MahiContextMenuRequestPtr context_menu_request) = 0;
virtual void OpenFeedbackDialog() = 0;
virtual void OpenMahiPanel(int64_t display_id,
const gfx::Rect& mahi_menu_bounds) = 0;
virtual bool IsEnabled() = 0;
virtual void SetMediaAppPDFFocused() = 0;
virtual void MediaAppPDFClosed(
const base::UnguessableToken media_app_client_id) {}
virtual std::optional<base::UnguessableToken> GetMediaAppPDFClientId() const;
virtual void ClearCache() {}
protected:
MahiManager();
};
class COMPONENT_EXPORT(MAHI_PUBLIC_CPP) ScopedMahiManagerSetter {
public:
explicit ScopedMahiManagerSetter(MahiManager* manager);
ScopedMahiManagerSetter(const ScopedMahiManagerSetter&) = delete;
ScopedMahiManagerSetter& operator=(const ScopedMahiManagerSetter&) = delete;
~ScopedMahiManagerSetter();
private:
static ScopedMahiManagerSetter* instance_;
raw_ptr<MahiManager> real_manager_instance_ = nullptr;
};
}
#endif