blob: 0a70dba5a4befa8fc6a99e0b6c54cd1885204e4f [file] [log] [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#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;
// Implementation of TtsUtterance.
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_; }
// TtsUtterance overrides.
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;
// Returns the associated WebContents, may be null.
WebContents* GetWebContents() override;
bool ShouldAlwaysBeSpoken() override;
private:
// The BrowserContext that initiated this utterance.
raw_ptr<BrowserContext> browser_context_;
// True if the constructor was supplied with a WebContents.
const bool was_created_with_web_contents_;
base::WeakPtr<WebContents> web_contents_;
// The content embedder engine ID of the engine providing TTS for this
// utterance, or empty if native TTS is being used.
std::string engine_id_;
// True if this utterance is spoken by a remote TTS engine.
bool spoken_by_remote_engine_ = false;
// The unique ID of this utterance, used to associate callback functions
// with utterances.
int id_;
// The id of the next utterance, so we can associate requests with
// responses.
static int next_utterance_id_;
// The text to speak.
std::string text_;
// The full options arg passed to tts.speak, which may include fields
// other than the ones we explicitly parse, below.
base::Value::Dict options_;
// The source engine's ID of this utterance, so that it can associate
// events with the appropriate callback.
int src_id_;
// The URL of the page where called speak was called.
GURL src_url_;
// The delegate to be called when an utterance event is fired. This is owned
// by the utterance.
std::unique_ptr<UtteranceEventDelegate> event_delegate_;
// The parsed options.
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_;
// The index of the current char being spoken.
int char_index_;
// True if this utterance received an event indicating it's done.
bool finished_;
// True if this utterance should always be spoken.
bool should_always_be_spoken_ = false;
};
} // namespace content
#endif // CONTENT_BROWSER_SPEECH_TTS_UTTERANCE_IMPL_H_