Remove the dependency of Extension API from tts_chromeos

Moving the extension api dependency from TtsPlatformImplChromeOs
to TtsExtensionEngine through TtsEngineDelegate.
This is part of an effort to move TTS to content.

BUG=347045

Review URL: https://codereview.chromium.org/434083003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@287160 0039d316-1c4b-4281-b951-d872f2087c98
parent b3c3fde3
......@@ -8,11 +8,15 @@
#include "base/json/json_writer.h"
#include "base/values.h"
#include "chrome/browser/extensions/component_loader.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/speech/extension_api/tts_engine_extension_observer.h"
#include "chrome/browser/speech/extension_api/tts_extension_api.h"
#include "chrome/browser/speech/extension_api/tts_extension_api_constants.h"
#include "chrome/browser/speech/tts_controller.h"
#include "chrome/common/extensions/api/speech/tts_engine_manifest_handler.h"
#include "chrome/common/extensions/extension_constants.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/common/console_message_level.h"
......@@ -210,6 +214,26 @@ void TtsExtensionEngine::Resume(Utterance* utterance) {
WarnIfMissingPauseOrResumeListener(profile, event_router, id);
}
bool TtsExtensionEngine::LoadBuiltInTtsExtension(Profile* profile) {
#if defined(OS_CHROMEOS)
// Check to see if the engine was previously loaded.
if (TtsEngineExtensionObserver::GetInstance(profile)->SawExtensionLoad(
extension_misc::kSpeechSynthesisExtensionId, true)) {
return false;
}
// Load the component extension into this profile.
ExtensionService* extension_service =
extensions::ExtensionSystem::Get(profile)->extension_service();
DCHECK(extension_service);
extension_service->component_loader()
->AddChromeOsSpeechSynthesisExtension();
return true;
#else
return false;
#endif
}
bool ExtensionTtsEngineSendTtsEventFunction::RunSync() {
int utterance_id;
EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &utterance_id));
......
......@@ -40,6 +40,7 @@ class TtsExtensionEngine : public TtsEngineDelegate {
virtual void Stop(Utterance* utterance) OVERRIDE;
virtual void Pause(Utterance* utterance) OVERRIDE;
virtual void Resume(Utterance* utterance) OVERRIDE;
virtual bool LoadBuiltInTtsExtension(Profile* profile) OVERRIDE;
};
// Hidden/internal extension function used to allow TTS engine extensions
......
......@@ -2,20 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/extensions/component_loader.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/speech/extension_api/tts_engine_extension_observer.h"
#include "chrome/browser/speech/tts_platform.h"
#include "chrome/common/extensions/extension_constants.h"
#include "extensions/browser/extension_system.h"
// Chrome OS doesn't have native TTS, instead it includes a built-in
// component extension that provides speech synthesis. This class includes
// an implementation of LoadBuiltInTtsExtension and dummy implementations of
// everything else.
class TtsPlatformImplChromeOs
: public TtsPlatformImpl {
class Profile;
class TtsPlatformImplChromeOs : public TtsPlatformImpl {
public:
// TtsPlatformImpl overrides:
virtual bool PlatformImplAvailable() OVERRIDE {
......@@ -23,19 +19,11 @@ class TtsPlatformImplChromeOs
}
virtual bool LoadBuiltInTtsExtension(Profile* profile) OVERRIDE {
// Check to see if the engine was previously loaded.
if (TtsEngineExtensionObserver::GetInstance(profile)->SawExtensionLoad(
extension_misc::kSpeechSynthesisExtensionId, true)) {
return false;
}
// Load the component extension into this profile.
ExtensionService* extension_service =
extensions::ExtensionSystem::Get(profile)->extension_service();
DCHECK(extension_service);
extension_service->component_loader()
->AddChromeOsSpeechSynthesisExtension();
return true;
TtsEngineDelegate* tts_engine_delegate =
TtsController::GetInstance()->GetTtsEngineDelegate();
if (tts_engine_delegate)
return tts_engine_delegate->LoadBuiltInTtsExtension(profile);
return false;
}
virtual bool Speak(
......
......@@ -98,6 +98,9 @@ class TtsEngineDelegate {
// Resume speaking this utterance.
virtual void Resume(Utterance* utterance) = 0;
// Load the built-in component extension for ChromeOS.
virtual bool LoadBuiltInTtsExtension(Profile* profile) = 0;
};
// Class that wants to receive events on utterances.
......@@ -321,6 +324,10 @@ class TtsController {
// extensions.
virtual void SetTtsEngineDelegate(TtsEngineDelegate* delegate) = 0;
// Get the delegate that processes TTS requests with user-installed
// extensions.
virtual TtsEngineDelegate* GetTtsEngineDelegate() = 0;
// For unit testing.
virtual void SetPlatformImpl(TtsPlatformImpl* platform_impl) = 0;
virtual int QueueSize() = 0;
......
......@@ -457,3 +457,7 @@ void TtsControllerImpl::SetTtsEngineDelegate(
TtsEngineDelegate* delegate) {
tts_engine_delegate_ = delegate;
}
TtsEngineDelegate* TtsControllerImpl::GetTtsEngineDelegate() {
return tts_engine_delegate_;
}
......@@ -42,6 +42,7 @@ class TtsControllerImpl : public TtsController {
virtual void RemoveVoicesChangedDelegate(
VoicesChangedDelegate* delegate) OVERRIDE;
virtual void SetTtsEngineDelegate(TtsEngineDelegate* delegate) OVERRIDE;
virtual TtsEngineDelegate* GetTtsEngineDelegate() OVERRIDE;
virtual void SetPlatformImpl(TtsPlatformImpl* platform_impl) OVERRIDE;
virtual int QueueSize() OVERRIDE;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment