| Index: chrome/browser/speech/extension_api/tts_engine_extension_api.cc
|
| diff --git a/chrome/browser/speech/extension_api/tts_engine_extension_api.cc b/chrome/browser/speech/extension_api/tts_engine_extension_api.cc
|
| index 389bffebed0dafdc5b226518b8b0e402e0db18d4..de8e24d4af8500aa5e9755330933621b14a2c2c0 100644
|
| --- a/chrome/browser/speech/extension_api/tts_engine_extension_api.cc
|
| +++ b/chrome/browser/speech/extension_api/tts_engine_extension_api.cc
|
| @@ -37,7 +37,7 @@ std::string TrimLanguageCode(std::string lang) {
|
| }
|
| }
|
|
|
| -void GetExtensionVoices(Profile* profile, ListValue* result_voices) {
|
| +void GetExtensionVoices(Profile* profile, std::vector<VoiceData>* out_voices) {
|
| ExtensionService* service = profile->GetExtensionService();
|
| DCHECK(service);
|
| extensions::EventRouter* event_router =
|
| @@ -63,34 +63,29 @@ void GetExtensionVoices(Profile* profile, ListValue* result_voices) {
|
|
|
| for (size_t i = 0; i < tts_voices->size(); ++i) {
|
| const extensions::TtsVoice& voice = tts_voices->at(i);
|
| - DictionaryValue* result_voice = new DictionaryValue();
|
| - if (!voice.voice_name.empty())
|
| - result_voice->SetString(constants::kVoiceNameKey, voice.voice_name);
|
| - if (!voice.lang.empty())
|
| - result_voice->SetString(constants::kLangKey, voice.lang);
|
| - if (!voice.gender.empty())
|
| - result_voice->SetString(constants::kGenderKey, voice.gender);
|
| - result_voice->SetString(constants::kExtensionIdKey, extension->id());
|
| -
|
| - ListValue* event_types = new ListValue();
|
| +
|
| + out_voices->push_back(VoiceData());
|
| + VoiceData& result_voice = out_voices->back();
|
| +
|
| + result_voice.name = voice.voice_name;
|
| + result_voice.lang = voice.lang;
|
| + result_voice.gender = voice.gender;
|
| + result_voice.extension_id = extension->id();
|
| +
|
| for (std::set<std::string>::const_iterator iter =
|
| voice.event_types.begin();
|
| iter != voice.event_types.end();
|
| ++iter) {
|
| - event_types->Append(Value::CreateStringValue(*iter));
|
| + result_voice.events.push_back(*iter);
|
| }
|
| +
|
| // If the extension sends end events, the controller will handle
|
| // queueing and send interrupted and cancelled events.
|
| if (voice.event_types.find(constants::kEventTypeEnd) !=
|
| voice.event_types.end()) {
|
| - event_types->Append(
|
| - Value::CreateStringValue(constants::kEventTypeCancelled));
|
| - event_types->Append(Value::CreateStringValue(
|
| - constants::kEventTypeInterrupted));
|
| + result_voice.events.push_back(constants::kEventTypeCancelled);
|
| + result_voice.events.push_back(constants::kEventTypeInterrupted);
|
| }
|
| -
|
| - result_voice->Set(constants::kEventTypesKey, event_types);
|
| - result_voices->Append(result_voice);
|
| }
|
| }
|
| }
|
| @@ -211,8 +206,8 @@ void ExtensionTtsEngineSpeak(Utterance* utterance,
|
|
|
| // Pass through most options to the speech engine, but remove some
|
| // that are handled internally.
|
| - DictionaryValue* options = static_cast<DictionaryValue*>(
|
| - utterance->options()->DeepCopy());
|
| + scoped_ptr<DictionaryValue> options(static_cast<DictionaryValue*>(
|
| + utterance->options()->DeepCopy()));
|
| if (options->HasKey(constants::kRequiredEventTypesKey))
|
| options->Remove(constants::kRequiredEventTypesKey, NULL);
|
| if (options->HasKey(constants::kDesiredEventTypesKey))
|
| @@ -226,7 +221,7 @@ void ExtensionTtsEngineSpeak(Utterance* utterance,
|
| if (options->HasKey(constants::kOnEventKey))
|
| options->Remove(constants::kOnEventKey, NULL);
|
|
|
| - args->Set(1, options);
|
| + args->Set(1, options.release());
|
| args->Set(2, Value::CreateIntegerValue(utterance->id()));
|
|
|
| scoped_ptr<extensions::Event> event(new extensions::Event(
|
|
|