#ifndef ASH_QUICK_INSERT_QUICK_INSERT_INSERT_MEDIA_REQUEST_H_
#define ASH_QUICK_INSERT_QUICK_INSERT_INSERT_MEDIA_REQUEST_H_
#include <optional>
#include <string>
#include <variant>
#include "ash/ash_export.h"
#include "ash/quick_insert/quick_insert_insert_media.h"
#include "ash/quick_insert/quick_insert_rich_media.h"
#include "base/functional/callback_forward.h"
#include "base/scoped_observation.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
#include "ui/base/ime/input_method_observer.h"
namespace ui {
class InputMethod;
class TextInputClient;
}
namespace ash {
struct QuickInsertWebPasteTarget;
class ASH_EXPORT QuickInsertInsertMediaRequest
: public ui::InputMethodObserver {
public:
enum class Result {
kSuccess,
kTimeout,
kUnsupported,
kNotFound,
};
using OnCompleteCallback = base::OnceCallback<void(Result)>;
explicit QuickInsertInsertMediaRequest(
ui::InputMethod* input_method,
const QuickInsertRichMedia& media,
base::TimeDelta insert_timeout,
base::OnceCallback<std::optional<QuickInsertWebPasteTarget>()>
get_web_paste_target = {},
OnCompleteCallback on_complete_callback = {});
~QuickInsertInsertMediaRequest() override;
void OnFocus() override {}
void OnBlur() override {}
void OnCaretBoundsChanged(const ui::TextInputClient* client) override {}
void OnTextInputStateChanged(const ui::TextInputClient* client) override;
void OnInputMethodDestroyed(const ui::InputMethod* input_method) override;
private:
void CancelPendingInsert();
std::optional<QuickInsertRichMedia> media_to_insert_;
base::OnceCallback<std::optional<QuickInsertWebPasteTarget>()>
get_web_paste_target_;
base::ScopedObservation<ui::InputMethod, ui::InputMethodObserver>
observation_{this};
base::OneShotTimer insert_timeout_timer_;
OnCompleteCallback on_complete_callback_;
};
}
#endif