| Index: chrome/browser/extensions/extension_tts_api_chromeos.cc
|
| diff --git a/chrome/browser/extensions/extension_tts_api_chromeos.cc b/chrome/browser/extensions/extension_tts_api_chromeos.cc
|
| index cf58b3d918d2a0c7db4b41ad679c71f1cd2b3e74..b35d4608b6fc6215bd13b9f0fa8cca55b8c67809 100644
|
| --- a/chrome/browser/extensions/extension_tts_api_chromeos.cc
|
| +++ b/chrome/browser/extensions/extension_tts_api_chromeos.cc
|
| @@ -7,15 +7,14 @@
|
| #include "base/memory/weak_ptr.h"
|
| #include "base/message_loop.h"
|
| #include "base/string_number_conversions.h"
|
| -#include "chrome/browser/chromeos/cros/cros_library.h"
|
| -#include "chrome/browser/chromeos/cros/speech_synthesis_library.h"
|
| +#include "chrome/browser/chromeos/dbus/dbus_thread_manager.h"
|
| +#include "chrome/browser/chromeos/dbus/speech_synthesizer_client.h"
|
| #include "chrome/browser/extensions/extension_tts_api_controller.h"
|
| #include "chrome/browser/extensions/extension_tts_api_platform.h"
|
|
|
| using base::DoubleToString;
|
|
|
| namespace {
|
| -const char kCrosLibraryNotLoadedError[] = "Cros shared library not loaded.";
|
| const int kSpeechCheckDelayIntervalMs = 100;
|
| };
|
|
|
| @@ -40,10 +39,11 @@ class ExtensionTtsPlatformImplChromeOs : public ExtensionTtsPlatformImpl {
|
|
|
| private:
|
| ExtensionTtsPlatformImplChromeOs()
|
| - : ALLOW_THIS_IN_INITIALIZER_LIST(ptr_factory_(this)) {}
|
| + : ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {}
|
| virtual ~ExtensionTtsPlatformImplChromeOs() {}
|
|
|
| void PollUntilSpeechFinishes(int utterance_id);
|
| + void ContinuePollingIfSpeechIsNotFinished(int utterance_id, bool result);
|
|
|
| void AppendSpeakOption(std::string key,
|
| std::string value,
|
| @@ -51,7 +51,7 @@ class ExtensionTtsPlatformImplChromeOs : public ExtensionTtsPlatformImpl {
|
|
|
| int utterance_id_;
|
| int utterance_length_;
|
| - base::WeakPtrFactory<ExtensionTtsPlatformImplChromeOs> ptr_factory_;
|
| + base::WeakPtrFactory<ExtensionTtsPlatformImplChromeOs> weak_ptr_factory_;
|
|
|
| friend struct DefaultSingletonTraits<ExtensionTtsPlatformImplChromeOs>;
|
|
|
| @@ -68,12 +68,6 @@ bool ExtensionTtsPlatformImplChromeOs::Speak(
|
| const std::string& utterance,
|
| const std::string& lang,
|
| const UtteranceContinuousParameters& params) {
|
| - chromeos::CrosLibrary* cros_library = chromeos::CrosLibrary::Get();
|
| - if (!cros_library->EnsureLoaded()) {
|
| - set_error(kCrosLibraryNotLoadedError);
|
| - return false;
|
| - }
|
| -
|
| utterance_id_ = utterance_id;
|
| utterance_length_ = utterance.size();
|
|
|
| @@ -81,14 +75,14 @@ bool ExtensionTtsPlatformImplChromeOs::Speak(
|
|
|
| if (!lang.empty()) {
|
| AppendSpeakOption(
|
| - chromeos::SpeechSynthesisLibrary::kSpeechPropertyLocale,
|
| + chromeos::SpeechSynthesizerClient::kSpeechPropertyLocale,
|
| lang,
|
| &options);
|
| }
|
|
|
| if (params.rate >= 0.0) {
|
| AppendSpeakOption(
|
| - chromeos::SpeechSynthesisLibrary::kSpeechPropertyRate,
|
| + chromeos::SpeechSynthesizerClient::kSpeechPropertyRate,
|
| DoubleToString(params.rate),
|
| &options);
|
| }
|
| @@ -96,7 +90,7 @@ bool ExtensionTtsPlatformImplChromeOs::Speak(
|
| if (params.pitch >= 0.0) {
|
| // The TTS service allows a range of 0 to 2 for speech pitch.
|
| AppendSpeakOption(
|
| - chromeos::SpeechSynthesisLibrary::kSpeechPropertyPitch,
|
| + chromeos::SpeechSynthesizerClient::kSpeechPropertyPitch,
|
| DoubleToString(params.pitch),
|
| &options);
|
| }
|
| @@ -105,36 +99,29 @@ bool ExtensionTtsPlatformImplChromeOs::Speak(
|
| // The Chrome OS TTS service allows a range of 0 to 5 for speech volume,
|
| // but 5 clips, so map to a range of 0...4.
|
| AppendSpeakOption(
|
| - chromeos::SpeechSynthesisLibrary::kSpeechPropertyVolume,
|
| + chromeos::SpeechSynthesizerClient::kSpeechPropertyVolume,
|
| DoubleToString(params.volume * 4),
|
| &options);
|
| }
|
|
|
| - if (!options.empty()) {
|
| - cros_library->GetSpeechSynthesisLibrary()->SetSpeakProperties(
|
| - options.c_str());
|
| - }
|
| + chromeos::SpeechSynthesizerClient* speech_synthesizer_client =
|
| + chromeos::DBusThreadManager::Get()->speech_synthesizer_client();
|
|
|
| - bool result =
|
| - cros_library->GetSpeechSynthesisLibrary()->Speak(utterance.c_str());
|
| + if (!options.empty())
|
| + speech_synthesizer_client->SetSpeakProperties(options);
|
|
|
| - if (result) {
|
| - ExtensionTtsController* controller = ExtensionTtsController::GetInstance();
|
| - controller->OnTtsEvent(utterance_id_, TTS_EVENT_START, 0, std::string());
|
| - PollUntilSpeechFinishes(utterance_id_);
|
| - }
|
| + speech_synthesizer_client->Speak(utterance);
|
| + ExtensionTtsController* controller = ExtensionTtsController::GetInstance();
|
| + controller->OnTtsEvent(utterance_id_, TTS_EVENT_START, 0, std::string());
|
| + PollUntilSpeechFinishes(utterance_id_);
|
|
|
| - return result;
|
| + return true;
|
| }
|
|
|
| bool ExtensionTtsPlatformImplChromeOs::StopSpeaking() {
|
| - if (chromeos::CrosLibrary::Get()->EnsureLoaded()) {
|
| - return chromeos::CrosLibrary::Get()->GetSpeechSynthesisLibrary()->
|
| - StopSpeaking();
|
| - }
|
| -
|
| - set_error(kCrosLibraryNotLoadedError);
|
| - return false;
|
| + chromeos::DBusThreadManager::Get()->speech_synthesizer_client()->
|
| + StopSpeaking();
|
| + return true;
|
| }
|
|
|
| bool ExtensionTtsPlatformImplChromeOs::SendsEvent(TtsEventType event_type) {
|
| @@ -149,26 +136,30 @@ void ExtensionTtsPlatformImplChromeOs::PollUntilSpeechFinishes(
|
| // This utterance must have been interrupted or cancelled.
|
| return;
|
| }
|
| + chromeos::SpeechSynthesizerClient* speech_synthesizer_client =
|
| + chromeos::DBusThreadManager::Get()->speech_synthesizer_client();
|
| + speech_synthesizer_client->IsSpeaking(base::Bind(
|
| + &ExtensionTtsPlatformImplChromeOs::ContinuePollingIfSpeechIsNotFinished,
|
| + weak_ptr_factory_.GetWeakPtr(), utterance_id));
|
| +}
|
|
|
| - chromeos::CrosLibrary* cros_library = chromeos::CrosLibrary::Get();
|
| - ExtensionTtsController* controller = ExtensionTtsController::GetInstance();
|
| -
|
| - if (!cros_library->EnsureLoaded()) {
|
| - controller->OnTtsEvent(
|
| - utterance_id_, TTS_EVENT_ERROR, 0, kCrosLibraryNotLoadedError);
|
| +void ExtensionTtsPlatformImplChromeOs::ContinuePollingIfSpeechIsNotFinished(
|
| + int utterance_id, bool is_speaking) {
|
| + if (utterance_id != utterance_id_) {
|
| + // This utterance must have been interrupted or cancelled.
|
| return;
|
| }
|
| -
|
| - if (!cros_library->GetSpeechSynthesisLibrary()->IsSpeaking()) {
|
| + if (!is_speaking) {
|
| + ExtensionTtsController* controller = ExtensionTtsController::GetInstance();
|
| controller->OnTtsEvent(
|
| utterance_id_, TTS_EVENT_END, utterance_length_, std::string());
|
| return;
|
| }
|
| -
|
| + // Continue polling.
|
| MessageLoop::current()->PostDelayedTask(
|
| FROM_HERE, base::Bind(
|
| &ExtensionTtsPlatformImplChromeOs::PollUntilSpeechFinishes,
|
| - ptr_factory_.GetWeakPtr(),
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| utterance_id),
|
| kSpeechCheckDelayIntervalMs);
|
| }
|
| @@ -179,9 +170,9 @@ void ExtensionTtsPlatformImplChromeOs::AppendSpeakOption(
|
| std::string* options) {
|
| *options +=
|
| key +
|
| - chromeos::SpeechSynthesisLibrary::kSpeechPropertyEquals +
|
| + chromeos::SpeechSynthesizerClient::kSpeechPropertyEquals +
|
| value +
|
| - chromeos::SpeechSynthesisLibrary::kSpeechPropertyDelimiter;
|
| + chromeos::SpeechSynthesizerClient::kSpeechPropertyDelimiter;
|
| }
|
|
|
| // static
|
|
|