diff options
Diffstat (limited to 'chrome/browser/speech/extension_api/tts_extension_api.cc')
-rw-r--r-- | chrome/browser/speech/extension_api/tts_extension_api.cc | 136 |
1 files changed, 95 insertions, 41 deletions
diff --git a/chrome/browser/speech/extension_api/tts_extension_api.cc b/chrome/browser/speech/extension_api/tts_extension_api.cc index 177bad6..117bf732 100644 --- a/chrome/browser/speech/extension_api/tts_extension_api.cc +++ b/chrome/browser/speech/extension_api/tts_extension_api.cc @@ -22,33 +22,51 @@ namespace events { const char kOnEvent[] = "tts.onEvent"; }; // namespace events -namespace { - const char *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 ""; + 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 constants::kEventTypeError; } } -} // anonymous namespace +TtsEventType TtsEventTypeFromString(const std::string& str) { + if (str == constants::kEventTypeStart) + return TTS_EVENT_START; + if (str == constants::kEventTypeEnd) + return TTS_EVENT_END; + if (str == constants::kEventTypeWord) + return TTS_EVENT_WORD; + if (str == constants::kEventTypeSentence) + return TTS_EVENT_SENTENCE; + if (str == constants::kEventTypeMarker) + return TTS_EVENT_MARKER; + if (str == constants::kEventTypeInterrupted) + return TTS_EVENT_INTERRUPTED; + if (str == constants::kEventTypeCancelled) + return TTS_EVENT_CANCELLED; + if (str == constants::kEventTypeError) + return TTS_EVENT_ERROR; + + NOTREACHED(); + return TTS_EVENT_ERROR; +} namespace extensions { @@ -69,15 +87,14 @@ void TtsExtensionEventHandler::OnTtsEvent(Utterance* utterance, if (utterance->src_id() < 0) return; - std::string event_type_string = TtsEventTypeToString(event_type); - const std::set<std::string>& desired_event_types = + const std::set<TtsEventType>& desired_event_types = utterance->desired_event_types(); if (desired_event_types.size() > 0 && - desired_event_types.find(event_type_string) == - desired_event_types.end()) { + desired_event_types.find(event_type) == desired_event_types.end()) { return; } + const char *event_type_string = TtsEventTypeToString(event_type); scoped_ptr<DictionaryValue> details(new DictionaryValue()); if (char_index >= 0) details->SetInteger(constants::kCharIndexKey, char_index); @@ -132,13 +149,18 @@ bool TtsSpeakFunction::RunImpl() { return false; } - std::string gender; + std::string gender_str; + TtsGenderType gender; if (options->HasKey(constants::kGenderKey)) EXTENSION_FUNCTION_VALIDATE( - options->GetString(constants::kGenderKey, &gender)); - if (!gender.empty() && - gender != constants::kGenderFemale && - gender != constants::kGenderMale) { + options->GetString(constants::kGenderKey, &gender_str)); + if (gender_str == constants::kGenderMale) { + gender = TTS_GENDER_MALE; + } else if (gender_str == constants::kGenderFemale) { + gender = TTS_GENDER_FEMALE; + } else if (gender_str.empty()) { + gender = TTS_GENDER_NONE; + } else { error_ = constants::kErrorInvalidGender; return false; } @@ -179,27 +201,27 @@ bool TtsSpeakFunction::RunImpl() { options->GetBoolean(constants::kEnqueueKey, &can_enqueue)); } - std::set<std::string> required_event_types; + std::set<TtsEventType> required_event_types; if (options->HasKey(constants::kRequiredEventTypesKey)) { ListValue* list; EXTENSION_FUNCTION_VALIDATE( options->GetList(constants::kRequiredEventTypesKey, &list)); for (size_t i = 0; i < list->GetSize(); ++i) { std::string event_type; - if (!list->GetString(i, &event_type)) - required_event_types.insert(event_type); + if (list->GetString(i, &event_type)) + required_event_types.insert(TtsEventTypeFromString(event_type.c_str())); } } - std::set<std::string> desired_event_types; + std::set<TtsEventType> desired_event_types; if (options->HasKey(constants::kDesiredEventTypesKey)) { ListValue* list; EXTENSION_FUNCTION_VALIDATE( options->GetList(constants::kDesiredEventTypesKey, &list)); for (size_t i = 0; i < list->GetSize(); ++i) { std::string event_type; - if (!list->GetString(i, &event_type)) - desired_event_types.insert(event_type); + if (list->GetString(i, &event_type)) + desired_event_types.insert(TtsEventTypeFromString(event_type.c_str())); } } @@ -269,14 +291,46 @@ bool TtsGetVoicesFunction::RunImpl() { result_voice->SetString(constants::kVoiceNameKey, voice.name); if (!voice.lang.empty()) result_voice->SetString(constants::kLangKey, voice.lang); - if (!voice.gender.empty()) - result_voice->SetString(constants::kGenderKey, voice.gender); + if (voice.gender == TTS_GENDER_MALE) + result_voice->SetString(constants::kGenderKey, constants::kGenderMale); + else if (voice.gender == TTS_GENDER_FEMALE) + result_voice->SetString(constants::kGenderKey, constants::kGenderFemale); if (!voice.extension_id.empty()) result_voice->SetString(constants::kExtensionIdKey, voice.extension_id); ListValue* event_types = new ListValue(); - for (size_t j = 0; j < voice.events.size(); ++j) - event_types->Append(Value::CreateStringValue(voice.events[j])); + for (std::set<TtsEventType>::iterator iter = voice.events.begin(); + iter != voice.events.end(); ++iter) { + const char* event_name_constant = NULL; + switch (*iter) { + case TTS_EVENT_START: + event_name_constant = constants::kEventTypeStart; + break; + case TTS_EVENT_END: + event_name_constant = constants::kEventTypeEnd; + break; + case TTS_EVENT_WORD: + event_name_constant = constants::kEventTypeWord; + break; + case TTS_EVENT_SENTENCE: + event_name_constant = constants::kEventTypeSentence; + break; + case TTS_EVENT_MARKER: + event_name_constant = constants::kEventTypeMarker; + break; + case TTS_EVENT_INTERRUPTED: + event_name_constant = constants::kEventTypeInterrupted; + break; + case TTS_EVENT_CANCELLED: + event_name_constant = constants::kEventTypeCancelled; + break; + case TTS_EVENT_ERROR: + event_name_constant = constants::kEventTypeError; + break; + } + if (event_name_constant) + event_types->Append(Value::CreateStringValue(event_name_constant)); + } result_voice->Set(constants::kEventTypesKey, event_types); result_voices->Append(result_voice); |