| Index: chrome/browser/extensions/extension_tts_api.cc
|
| ===================================================================
|
| --- chrome/browser/extensions/extension_tts_api.cc (revision 62145)
|
| +++ chrome/browser/extensions/extension_tts_api.cc (working copy)
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2010 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.
|
|
|
| @@ -6,12 +6,10 @@
|
|
|
| #include <string>
|
|
|
| +#include "base/float_util.h"
|
| #include "base/values.h"
|
| #include "base/string_number_conversions.h"
|
|
|
| -#include "chrome/browser/chromeos/cros/cros_library.h"
|
| -#include "chrome/browser/chromeos/cros/speech_synthesis_library.h"
|
| -
|
| namespace util = extension_tts_api_util;
|
|
|
| using base::DoubleToString;
|
| @@ -23,68 +21,56 @@
|
|
|
| bool ExtensionTtsSpeakFunction::RunImpl() {
|
| std::string utterance;
|
| - std::string options = "";
|
| + std::string language;
|
| + std::string gender;
|
| + double rate = -1.0;
|
| + double pitch = -1.0;
|
| + double volume = -1.0;
|
| +
|
| DictionaryValue* speak_options = NULL;
|
| EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &utterance));
|
| +
|
| if (args_->GetDictionary(1, &speak_options)) {
|
| - std::string str_value;
|
| - double real_value;
|
| - if (speak_options->HasKey(util::kLanguageNameKey) &&
|
| - speak_options->GetString(util::kLanguageNameKey, &str_value)) {
|
| - util::AppendSpeakOption(
|
| - std::string(util::kNameKey), str_value, &options);
|
| + if (speak_options->HasKey(util::kLanguageNameKey)) {
|
| + speak_options->GetString(util::kLanguageNameKey, &language);
|
| }
|
| - if (speak_options->HasKey(util::kGenderKey) &&
|
| - speak_options->GetString(util::kGenderKey, &str_value)) {
|
| - util::AppendSpeakOption(
|
| - std::string(util::kGenderKey), str_value, &options);
|
| +
|
| + if (speak_options->HasKey(util::kGenderKey)) {
|
| + speak_options->GetString(util::kGenderKey, &gender);
|
| }
|
| - if (util::ReadNumberByKey(speak_options, util::kRateKey, &real_value)) {
|
| - // The TTS service allows a range of 0 to 5 for speech rate.
|
| - util::AppendSpeakOption(std::string(util::kRateKey),
|
| - DoubleToString(real_value * 5), &options);
|
| +
|
| + if (util::ReadNumberByKey(speak_options, util::kRateKey, &rate)) {
|
| + if (!base::IsFinite(rate) || rate < 0.0 || rate > 1.0) {
|
| + rate = -1.0;
|
| + }
|
| }
|
| - if (util::ReadNumberByKey(speak_options, util::kPitchKey, &real_value)) {
|
| - // The TTS service allows a range of 0 to 2 for speech pitch.
|
| - util::AppendSpeakOption(std::string(util::kPitchKey),
|
| - DoubleToString(real_value * 2), &options);
|
| +
|
| + if (util::ReadNumberByKey(speak_options, util::kPitchKey, &pitch)) {
|
| + if (!base::IsFinite(pitch) || pitch < 0.0 || pitch > 1.0) {
|
| + pitch = -1.0;
|
| + }
|
| }
|
| - if (util::ReadNumberByKey(speak_options, util::kVolumeKey, &real_value)) {
|
| - // The TTS service allows a range of 0 to 5 for speech volume.
|
| - util::AppendSpeakOption(std::string(util::kVolumeKey),
|
| - DoubleToString(real_value * 5), &options);
|
| +
|
| + if (util::ReadNumberByKey(speak_options, util::kVolumeKey, &volume)) {
|
| + if (!base::IsFinite(volume) || volume < 0.0 || volume > 1.0) {
|
| + volume = -1.0;
|
| + }
|
| }
|
| }
|
| - if (chromeos::CrosLibrary::Get()->EnsureLoaded()) {
|
| - if (!options.empty()) {
|
| - chromeos::CrosLibrary::Get()->GetSpeechSynthesisLibrary()->
|
| - SetSpeakProperties(options.c_str());
|
| - }
|
| - bool ret = chromeos::CrosLibrary::Get()->GetSpeechSynthesisLibrary()->
|
| - Speak(utterance.c_str());
|
| - result_.reset();
|
| - return ret;
|
| - }
|
| - error_ = kCrosLibraryNotLoadedError;
|
| - return false;
|
| +
|
| + ExtensionTtsPlatformImpl* impl = ExtensionTtsPlatformImpl::GetInstance();
|
| + impl->clear_error();
|
| + return impl->Speak(utterance, language, gender, rate, pitch, volume);
|
| }
|
|
|
| bool ExtensionTtsStopSpeakingFunction::RunImpl() {
|
| - if (chromeos::CrosLibrary::Get()->EnsureLoaded()) {
|
| - return chromeos::CrosLibrary::Get()->GetSpeechSynthesisLibrary()->
|
| - StopSpeaking();
|
| - }
|
| - error_ = kCrosLibraryNotLoadedError;
|
| - return false;
|
| + ExtensionTtsPlatformImpl* impl = ExtensionTtsPlatformImpl::GetInstance();
|
| + impl->clear_error();
|
| + return impl->StopSpeaking();
|
| }
|
|
|
| bool ExtensionTtsIsSpeakingFunction::RunImpl() {
|
| - if (chromeos::CrosLibrary::Get()->EnsureLoaded()) {
|
| - result_.reset(Value::CreateBooleanValue(
|
| - chromeos::CrosLibrary::Get()->GetSpeechSynthesisLibrary()->
|
| - IsSpeaking()));
|
| - return true;
|
| - }
|
| - error_ = kCrosLibraryNotLoadedError;
|
| - return false;
|
| + ExtensionTtsPlatformImpl* impl = ExtensionTtsPlatformImpl::GetInstance();
|
| + impl->clear_error();
|
| + return impl->IsSpeaking();
|
| }
|
|
|