Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(114)

Unified Diff: chrome/browser/speech/tts_controller.cc

Issue 12589005: Implement web speech synthesis. (Closed) Base URL: http://git.chromium.org/chromium/src.git@webtts
Patch Set: Fix android build Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/speech/tts_controller.h ('k') | chrome/browser/speech/tts_message_filter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/speech/tts_controller.cc
diff --git a/chrome/browser/speech/tts_controller.cc b/chrome/browser/speech/tts_controller.cc
index 6fbe4e2b81a780223c41045f7472faf90a74288b..f6bff5213c8dc79db179db4286ebcf39780b894a 100644
--- a/chrome/browser/speech/tts_controller.cc
+++ b/chrome/browser/speech/tts_controller.cc
@@ -8,9 +8,7 @@
#include <vector>
#include "base/float_util.h"
-#include "base/json/json_writer.h"
#include "base/values.h"
-#include "chrome/browser/extensions/event_router.h"
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/speech/extension_api/tts_engine_extension_api.h"
@@ -23,39 +21,18 @@
namespace constants = tts_extension_api_constants;
namespace {
-
// A value to be used to indicate that there is no char index available.
const int kInvalidCharIndex = -1;
+} // namespace
-namespace events {
-const char kOnEvent[] = "tts.onEvent";
-}; // namespace events
-
-std::string TtsEventTypeToString(TtsEventType event_type) {
- switch (event_type) {
- case TTS_EVENT_START:
- return constants::kEventTypeStart;
- case TTS_EVENT_END:
- return constants::kEventTypeEnd;
- case TTS_EVENT_WORD:
- return constants::kEventTypeWord;
- case TTS_EVENT_SENTENCE:
- return constants::kEventTypeSentence;
- case TTS_EVENT_MARKER:
- return constants::kEventTypeMarker;
- case TTS_EVENT_INTERRUPTED:
- return constants::kEventTypeInterrupted;
- case TTS_EVENT_CANCELLED:
- return constants::kEventTypeCancelled;
- case TTS_EVENT_ERROR:
- return constants::kEventTypeError;
- default:
- NOTREACHED();
- return std::string();
- }
+
+bool IsFinalTtsEventType(TtsEventType event_type) {
+ return (event_type == TTS_EVENT_END ||
+ event_type == TTS_EVENT_INTERRUPTED ||
+ event_type == TTS_EVENT_CANCELLED ||
+ event_type == TTS_EVENT_ERROR);
}
-} // namespace
//
// UtteranceContinuousParameters
@@ -69,6 +46,16 @@ UtteranceContinuousParameters::UtteranceContinuousParameters()
//
+// VoiceData
+//
+
+
+VoiceData::VoiceData() {}
+
+VoiceData::~VoiceData() {}
+
+
+//
// Utterance
//
@@ -79,6 +66,7 @@ Utterance::Utterance(Profile* profile)
: profile_(profile),
id_(next_utterance_id_++),
src_id_(-1),
+ event_delegate_(NULL),
can_enqueue_(false),
char_index_(0),
finished_(false) {
@@ -92,43 +80,15 @@ Utterance::~Utterance() {
void Utterance::OnTtsEvent(TtsEventType event_type,
int char_index,
const std::string& error_message) {
- std::string event_type_string = TtsEventTypeToString(event_type);
if (char_index >= 0)
char_index_ = char_index;
- if (event_type == TTS_EVENT_END ||
- event_type == TTS_EVENT_INTERRUPTED ||
- event_type == TTS_EVENT_CANCELLED ||
- event_type == TTS_EVENT_ERROR) {
+ if (IsFinalTtsEventType(event_type))
finished_ = true;
- }
- if (desired_event_types_.size() > 0 &&
- desired_event_types_.find(event_type_string) ==
- desired_event_types_.end()) {
- return;
- }
- if (src_id_ < 0)
- return;
-
- DictionaryValue* details = new DictionaryValue();
- if (char_index != kInvalidCharIndex)
- details->SetInteger(constants::kCharIndexKey, char_index);
- details->SetString(constants::kEventTypeKey, event_type_string);
- if (event_type == TTS_EVENT_ERROR) {
- details->SetString(constants::kErrorMessageKey, error_message);
- }
- details->SetInteger(constants::kSrcIdKey, src_id_);
- details->SetBoolean(constants::kIsFinalEventKey, finished_);
-
- scoped_ptr<ListValue> arguments(new ListValue());
- arguments->Set(0, details);
-
- scoped_ptr<extensions::Event> event(new extensions::Event(
- events::kOnEvent, arguments.Pass()));
- event->restrict_to_profile = profile_;
- event->event_url = src_url_;
- extensions::ExtensionSystem::Get(profile_)->event_router()->
- DispatchEventToExtension(src_extension_id_, event.Pass());
+ if (event_delegate_)
+ event_delegate_->OnTtsEvent(this, event_type, char_index, error_message);
+ if (finished_)
+ event_delegate_ = NULL;
}
void Utterance::Finish() {
@@ -252,46 +212,35 @@ void TtsController::OnTtsEvent(int utterance_id,
}
}
-ListValue* TtsController::GetVoices(Profile* profile) {
- ListValue* result_voices = new ListValue();
+void TtsController::GetVoices(Profile* profile,
+ std::vector<VoiceData>* out_voices) {
TtsPlatformImpl* platform_impl = GetPlatformImpl();
if (platform_impl && platform_impl->PlatformImplAvailable()) {
- DictionaryValue* result_voice = new DictionaryValue();
- result_voice->SetString(
- constants::kVoiceNameKey, constants::kNativeVoiceName);
- if (!platform_impl->gender().empty())
- result_voice->SetString(constants::kGenderKey, platform_impl->gender());
- ListValue* event_types = new ListValue();
+ out_voices->push_back(VoiceData());
+ VoiceData& voice = out_voices->back();
+ voice.name = constants::kNativeVoiceName;
+ voice.gender = platform_impl->gender();
// All platforms must send end events, and cancelled and interrupted
// events are generated from the controller.
DCHECK(platform_impl->SendsEvent(TTS_EVENT_END));
- event_types->Append(Value::CreateStringValue(constants::kEventTypeEnd));
- event_types->Append(Value::CreateStringValue(
- constants::kEventTypeCancelled));
- event_types->Append(Value::CreateStringValue(
- constants::kEventTypeInterrupted));
+ voice.events.push_back(constants::kEventTypeEnd);
+ voice.events.push_back(constants::kEventTypeCancelled);
+ voice.events.push_back(constants::kEventTypeInterrupted);
if (platform_impl->SendsEvent(TTS_EVENT_START))
- event_types->Append(Value::CreateStringValue(constants::kEventTypeStart));
+ voice.events.push_back(constants::kEventTypeStart);
if (platform_impl->SendsEvent(TTS_EVENT_WORD))
- event_types->Append(Value::CreateStringValue(constants::kEventTypeWord));
+ voice.events.push_back(constants::kEventTypeWord);
if (platform_impl->SendsEvent(TTS_EVENT_SENTENCE))
- event_types->Append(Value::CreateStringValue(
- constants::kEventTypeSentence));
+ voice.events.push_back(constants::kEventTypeSentence);
if (platform_impl->SendsEvent(TTS_EVENT_MARKER))
- event_types->Append(Value::CreateStringValue(
- constants::kEventTypeMarker));
+ voice.events.push_back(constants::kEventTypeMarker);
if (platform_impl->SendsEvent(TTS_EVENT_ERROR))
- event_types->Append(Value::CreateStringValue(
- constants::kEventTypeError));
- result_voice->Set(constants::kEventTypesKey, event_types);
- result_voices->Append(result_voice);
+ voice.events.push_back(constants::kEventTypeError);
}
- GetExtensionVoices(profile, result_voices);
-
- return result_voices;
+ GetExtensionVoices(profile, out_voices);
}
bool TtsController::IsSpeaking() {
« no previous file with comments | « chrome/browser/speech/tts_controller.h ('k') | chrome/browser/speech/tts_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698