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

Unified Diff: chrome/browser/extensions/extension_tts_engine_api.cc

Issue 9808024: Move TTS extension API to chrome/browser/speech/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix chromeos compile error, rebase Created 8 years, 9 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/extensions/extension_tts_engine_api.h ('k') | chrome/browser/speech/extension_api/OWNERS » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/extension_tts_engine_api.cc
diff --git a/chrome/browser/extensions/extension_tts_engine_api.cc b/chrome/browser/extensions/extension_tts_engine_api.cc
deleted file mode 100644
index d3ee523c900e52bea7367296244fe13551aff264..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/extension_tts_engine_api.cc
+++ /dev/null
@@ -1,266 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/extensions/extension_tts_engine_api.h"
-
-#include <string>
-
-#include "base/json/json_writer.h"
-#include "base/values.h"
-#include "chrome/browser/extensions/extension_event_router.h"
-#include "chrome/browser/extensions/extension_service.h"
-#include "chrome/browser/extensions/extension_tts_api_constants.h"
-#include "chrome/browser/extensions/extension_tts_api_controller.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/extensions/extension.h"
-
-namespace constants = extension_tts_api_constants;
-
-namespace events {
-const char kOnSpeak[] = "ttsEngine.onSpeak";
-const char kOnStop[] = "ttsEngine.onStop";
-}; // namespace events
-
-void GetExtensionVoices(Profile* profile, ListValue* result_voices) {
- ExtensionService* service = profile->GetExtensionService();
- DCHECK(service);
- ExtensionEventRouter* event_router = profile->GetExtensionEventRouter();
- DCHECK(event_router);
-
- const ExtensionSet* extensions = service->extensions();
- ExtensionSet::const_iterator iter;
- for (iter = extensions->begin(); iter != extensions->end(); ++iter) {
- const Extension* extension = *iter;
-
- if (!event_router->ExtensionHasEventListener(
- extension->id(), events::kOnSpeak) ||
- !event_router->ExtensionHasEventListener(
- extension->id(), events::kOnStop)) {
- continue;
- }
-
- const std::vector<Extension::TtsVoice>& tts_voices =
- extension->tts_voices();
- for (size_t i = 0; i < tts_voices.size(); ++i) {
- const Extension::TtsVoice& voice = tts_voices[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();
- for (std::set<std::string>::const_iterator iter =
- voice.event_types.begin();
- iter != voice.event_types.end();
- ++iter) {
- event_types->Append(Value::CreateStringValue(*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->Set(constants::kEventTypesKey, event_types);
- result_voices->Append(result_voice);
- }
- }
-}
-
-bool GetMatchingExtensionVoice(
- Utterance* utterance,
- const Extension** matching_extension,
- size_t* voice_index) {
- // This will only happen during unit testing. Otherwise, an utterance
- // will always have an associated profile.
- if (!utterance->profile())
- return false;
-
- ExtensionService* service = utterance->profile()->GetExtensionService();
- DCHECK(service);
- ExtensionEventRouter* event_router =
- utterance->profile()->GetExtensionEventRouter();
- DCHECK(event_router);
-
- *matching_extension = NULL;
- *voice_index = -1;
- const ExtensionSet* extensions = service->extensions();
- ExtensionSet::const_iterator iter;
- for (iter = extensions->begin(); iter != extensions->end(); ++iter) {
- const Extension* extension = *iter;
-
- if (!event_router->ExtensionHasEventListener(
- extension->id(), events::kOnSpeak) ||
- !event_router->ExtensionHasEventListener(
- extension->id(), events::kOnStop)) {
- continue;
- }
-
- if (!utterance->extension_id().empty() &&
- utterance->extension_id() != extension->id()) {
- continue;
- }
-
- const std::vector<Extension::TtsVoice>& tts_voices =
- extension->tts_voices();
- for (size_t i = 0; i < tts_voices.size(); ++i) {
- const Extension::TtsVoice& voice = tts_voices[i];
- if (!voice.voice_name.empty() &&
- !utterance->voice_name().empty() &&
- voice.voice_name != utterance->voice_name()) {
- continue;
- }
- if (!voice.lang.empty() &&
- !utterance->lang().empty() &&
- voice.lang != utterance->lang()) {
- continue;
- }
- if (!voice.gender.empty() &&
- !utterance->gender().empty() &&
- voice.gender != utterance->gender()) {
- continue;
- }
- if (utterance->required_event_types().size() > 0) {
- bool has_all_required_event_types = true;
- for (std::set<std::string>::const_iterator iter =
- utterance->required_event_types().begin();
- iter != utterance->required_event_types().end();
- ++iter) {
- if (voice.event_types.find(*iter) == voice.event_types.end()) {
- has_all_required_event_types = false;
- break;
- }
- }
- if (!has_all_required_event_types)
- continue;
- }
-
- *matching_extension = extension;
- *voice_index = i;
- return true;
- }
- }
-
- return false;
-}
-
-void ExtensionTtsEngineSpeak(Utterance* utterance,
- const Extension* extension,
- size_t voice_index) {
- // See if the engine supports the "end" event; if so, we can keep the
- // utterance around and track it. If not, we're finished with this
- // utterance now.
- const std::set<std::string> event_types =
- extension->tts_voices()[voice_index].event_types;
- bool sends_end_event =
- (event_types.find(constants::kEventTypeEnd) != event_types.end());
-
- ListValue args;
- args.Set(0, Value::CreateStringValue(utterance->text()));
-
- // Pass through most options to the speech engine, but remove some
- // that are handled internally.
- DictionaryValue* options = static_cast<DictionaryValue*>(
- utterance->options()->DeepCopy());
- if (options->HasKey(constants::kRequiredEventTypesKey))
- options->Remove(constants::kRequiredEventTypesKey, NULL);
- if (options->HasKey(constants::kDesiredEventTypesKey))
- options->Remove(constants::kDesiredEventTypesKey, NULL);
- if (sends_end_event && options->HasKey(constants::kEnqueueKey))
- options->Remove(constants::kEnqueueKey, NULL);
- if (options->HasKey(constants::kSrcIdKey))
- options->Remove(constants::kSrcIdKey, NULL);
- if (options->HasKey(constants::kIsFinalEventKey))
- options->Remove(constants::kIsFinalEventKey, NULL);
-
- args.Set(1, options);
- args.Set(2, Value::CreateIntegerValue(utterance->id()));
- std::string json_args;
- base::JSONWriter::Write(&args, &json_args);
-
- utterance->profile()->GetExtensionEventRouter()->DispatchEventToExtension(
- extension->id(),
- events::kOnSpeak,
- json_args,
- utterance->profile(),
- GURL());
-}
-
-void ExtensionTtsEngineStop(Utterance* utterance) {
- utterance->profile()->GetExtensionEventRouter()->DispatchEventToExtension(
- utterance->extension_id(),
- events::kOnStop,
- "[]",
- utterance->profile(),
- GURL());
-}
-
-bool ExtensionTtsEngineSendTtsEventFunction::RunImpl() {
- int utterance_id;
- std::string error_message;
- EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &utterance_id));
-
- DictionaryValue* event;
- EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &event));
-
- std::string event_type;
- EXTENSION_FUNCTION_VALIDATE(
- event->GetString(constants::kEventTypeKey, &event_type));
-
- int char_index = 0;
- if (event->HasKey(constants::kCharIndexKey)) {
- EXTENSION_FUNCTION_VALIDATE(
- event->GetInteger(constants::kCharIndexKey, &char_index));
- }
-
- // Make sure the extension has included this event type in its manifest.
- bool event_type_allowed = false;
- const Extension* extension = GetExtension();
- for (size_t i = 0; i < extension->tts_voices().size(); i++) {
- const Extension::TtsVoice& voice = extension->tts_voices()[i];
- if (voice.event_types.find(event_type) != voice.event_types.end()) {
- event_type_allowed = true;
- break;
- }
- }
- if (!event_type_allowed) {
- error_ = constants::kErrorUndeclaredEventType;
- return false;
- }
-
- ExtensionTtsController* controller = ExtensionTtsController::GetInstance();
- if (event_type == constants::kEventTypeStart) {
- controller->OnTtsEvent(
- utterance_id, TTS_EVENT_START, char_index, std::string());
- } else if (event_type == constants::kEventTypeEnd) {
- controller->OnTtsEvent(
- utterance_id, TTS_EVENT_END, char_index, std::string());
- } else if (event_type == constants::kEventTypeWord) {
- controller->OnTtsEvent(
- utterance_id, TTS_EVENT_WORD, char_index, std::string());
- } else if (event_type == constants::kEventTypeSentence) {
- controller->OnTtsEvent(
- utterance_id, TTS_EVENT_SENTENCE, char_index, std::string());
- } else if (event_type == constants::kEventTypeMarker) {
- controller->OnTtsEvent(
- utterance_id, TTS_EVENT_MARKER, char_index, std::string());
- } else if (event_type == constants::kEventTypeError) {
- std::string error_message;
- event->GetString(constants::kErrorMessageKey, &error_message);
- controller->OnTtsEvent(
- utterance_id, TTS_EVENT_ERROR, char_index, error_message);
- } else {
- EXTENSION_FUNCTION_VALIDATE(false);
- }
-
- return true;
-}
« no previous file with comments | « chrome/browser/extensions/extension_tts_engine_api.h ('k') | chrome/browser/speech/extension_api/OWNERS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698