#ifndef CONTENT_BROWSER_SPEECH_TTS_UTTERANCE_IMPL_H_
#define CONTENT_BROWSER_SPEECH_TTS_UTTERANCE_IMPL_H_
#include <memory>
#include <string>
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/unguessable_token.h"
#include "base/values.h"
#include "content/common/content_export.h"
#include "content/public/browser/tts_utterance.h"
namespace content {
class BrowserContext;
class WebContents;
class CONTENT_EXPORT TtsUtteranceImpl : public TtsUtterance {
public:
TtsUtteranceImpl(BrowserContext* browser_context, WebContents* web_contents);
TtsUtteranceImpl(content::BrowserContext* browser_context,
bool should_always_be_spoken);
~TtsUtteranceImpl() override;
bool was_created_with_web_contents() const {
return was_created_with_web_contents_;
}
void set_spoken_by_remote_engine(bool value) {
spoken_by_remote_engine_ = value;
}
bool spoken_by_remote_engine() const { return spoken_by_remote_engine_; }
void OnTtsEvent(TtsEventType event_type,
int char_index,
int length,
const std::string& error_message) override;
void Finish() override;
void SetText(const std::string& text) override;
const std::string& GetText() override;
void SetOptions(base::Value::Dict options) override;
const base::Value::Dict* GetOptions() override;
void SetSrcId(int src_id) override;
int GetSrcId() override;
void SetSrcUrl(const GURL& src_url) override;
const GURL& GetSrcUrl() override;
void SetVoiceName(const std::string& voice_name) override;
const std::string& GetVoiceName() override;
void SetLang(const std::string& lang) override;
const std::string& GetLang() override;
void SetContinuousParameters(const double rate,
const double pitch,
const double volume) override;
const UtteranceContinuousParameters& GetContinuousParameters() override;
void SetShouldClearQueue(bool value) override;
bool GetShouldClearQueue() override;
void SetRequiredEventTypes(
const base::flat_set<TtsEventType>& types) override;
const base::flat_set<TtsEventType>& GetRequiredEventTypes() override;
void SetDesiredEventTypes(const base::flat_set<TtsEventType>& types) override;
const base::flat_set<TtsEventType>& GetDesiredEventTypes() override;
void SetEngineId(const std::string& engine_id) override;
const std::string& GetEngineId() override;
void SetEventDelegate(
std::unique_ptr<UtteranceEventDelegate> event_delegate) override;
UtteranceEventDelegate* GetEventDelegate() override;
BrowserContext* GetBrowserContext() override;
void ClearBrowserContext() override;
int GetId() override;
bool IsFinished() override;
WebContents* GetWebContents() override;
bool ShouldAlwaysBeSpoken() override;
private:
raw_ptr<BrowserContext> browser_context_;
const bool was_created_with_web_contents_;
base::WeakPtr<WebContents> web_contents_;
std::string engine_id_;
bool spoken_by_remote_engine_ = false;
int id_;
static int next_utterance_id_;
std::string text_;
base::Value::Dict options_;
int src_id_;
GURL src_url_;
std::unique_ptr<UtteranceEventDelegate> event_delegate_;
std::string voice_name_;
std::string lang_;
UtteranceContinuousParameters continuous_parameters_;
bool should_clear_queue_;
base::flat_set<TtsEventType> required_event_types_;
base::flat_set<TtsEventType> desired_event_types_;
int char_index_;
bool finished_;
bool should_always_be_spoken_ = false;
};
}
#endif