| Index: chrome/browser/speech/speech_input_extension_manager.cc
|
| ===================================================================
|
| --- chrome/browser/speech/speech_input_extension_manager.cc (revision 176116)
|
| +++ chrome/browser/speech/speech_input_extension_manager.cc (working copy)
|
| @@ -6,9 +6,11 @@
|
|
|
| #include "base/bind.h"
|
| #include "base/json/json_writer.h"
|
| +#include "base/lazy_instance.h"
|
| #include "base/utf_string_conversions.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/extensions/event_router.h"
|
| +#include "chrome/browser/extensions/extension_function_registry.h"
|
| #include "chrome/browser/extensions/extension_host.h"
|
| #include "chrome/browser/extensions/extension_process_manager.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| @@ -17,6 +19,7 @@
|
| #include "chrome/browser/profiles/profile_dependency_manager.h"
|
| #include "chrome/browser/profiles/profile_keyed_service.h"
|
| #include "chrome/browser/profiles/profile_keyed_service_factory.h"
|
| +#include "chrome/browser/speech/speech_input_extension_api.h"
|
| #include "chrome/common/chrome_notification_types.h"
|
| #include "chrome/common/extensions/extension.h"
|
| #include "content/public/browser/browser_thread.h"
|
| @@ -58,84 +61,8 @@
|
| const char kOnSoundStartEvent[] = "experimental.speechInput.onSoundStart";
|
| const char kOnSoundEndEvent[] = "experimental.speechInput.onSoundEnd";
|
|
|
| -// Wrap an SpeechInputExtensionManager using scoped_refptr to avoid
|
| -// assertion failures on destruction because of not using release().
|
| -class SpeechInputExtensionManagerWrapper : public ProfileKeyedService {
|
| - public:
|
| - explicit SpeechInputExtensionManagerWrapper(
|
| - SpeechInputExtensionManager* manager)
|
| - : manager_(manager) {}
|
| -
|
| - virtual ~SpeechInputExtensionManagerWrapper() {}
|
| -
|
| - SpeechInputExtensionManager* manager() const { return manager_.get(); }
|
| -
|
| - private:
|
| - // Methods from ProfileKeyedService.
|
| - virtual void Shutdown() OVERRIDE {
|
| - manager()->ShutdownOnUIThread();
|
| - }
|
| -
|
| - scoped_refptr<SpeechInputExtensionManager> manager_;
|
| -};
|
| }
|
|
|
| -// Factory for SpeechInputExtensionManagers as profile keyed services.
|
| -class SpeechInputExtensionManager::Factory : public ProfileKeyedServiceFactory {
|
| - public:
|
| - static void Initialize();
|
| - static Factory* GetInstance();
|
| -
|
| - SpeechInputExtensionManagerWrapper* GetForProfile(Profile* profile);
|
| -
|
| - private:
|
| - friend struct DefaultSingletonTraits<Factory>;
|
| -
|
| - Factory();
|
| - virtual ~Factory();
|
| -
|
| - // ProfileKeyedServiceFactory methods:
|
| - virtual ProfileKeyedService* BuildServiceInstanceFor(
|
| - Profile* profile) const OVERRIDE;
|
| - virtual bool ServiceRedirectedInIncognito() const OVERRIDE { return false; }
|
| - virtual bool ServiceIsNULLWhileTesting() const OVERRIDE { return true; }
|
| - virtual bool ServiceIsCreatedWithProfile() const OVERRIDE { return true; }
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(Factory);
|
| -};
|
| -
|
| -void SpeechInputExtensionManager::Factory::Initialize() {
|
| - GetInstance();
|
| -}
|
| -
|
| -SpeechInputExtensionManager::Factory*
|
| - SpeechInputExtensionManager::Factory::GetInstance() {
|
| - return Singleton<SpeechInputExtensionManager::Factory>::get();
|
| -}
|
| -
|
| -SpeechInputExtensionManagerWrapper*
|
| - SpeechInputExtensionManager::Factory::GetForProfile(
|
| - Profile* profile) {
|
| - return static_cast<SpeechInputExtensionManagerWrapper*>(
|
| - GetServiceForProfile(profile, true));
|
| -}
|
| -
|
| -SpeechInputExtensionManager::Factory::Factory()
|
| - : ProfileKeyedServiceFactory("SpeechInputExtensionManager",
|
| - ProfileDependencyManager::GetInstance()) {
|
| -}
|
| -
|
| -SpeechInputExtensionManager::Factory::~Factory() {
|
| -}
|
| -
|
| -ProfileKeyedService*
|
| - SpeechInputExtensionManager::Factory::BuildServiceInstanceFor(
|
| - Profile* profile) const {
|
| - scoped_refptr<SpeechInputExtensionManager> manager(
|
| - new SpeechInputExtensionManager(profile));
|
| - return new SpeechInputExtensionManagerWrapper(manager);
|
| -}
|
| -
|
| SpeechInputExtensionInterface::SpeechInputExtensionInterface() {
|
| }
|
|
|
| @@ -159,17 +86,14 @@
|
|
|
| SpeechInputExtensionManager* SpeechInputExtensionManager::GetForProfile(
|
| Profile* profile) {
|
| - SpeechInputExtensionManagerWrapper* wrapper =
|
| - Factory::GetInstance()->GetForProfile(profile);
|
| - if (!wrapper)
|
| + extensions::SpeechInputAPI* speech_input_api =
|
| + extensions::ProfileKeyedAPIFactory<extensions::SpeechInputAPI>::
|
| + GetForProfile(profile);
|
| + if (!speech_input_api)
|
| return NULL;
|
| - return wrapper->manager();
|
| + return speech_input_api->manager();
|
| }
|
|
|
| -void SpeechInputExtensionManager::InitializeFactory() {
|
| - Factory::Initialize();
|
| -}
|
| -
|
| void SpeechInputExtensionManager::Observe(int type,
|
| const content::NotificationSource& source,
|
| const content::NotificationDetails& details) {
|
| @@ -765,3 +689,31 @@
|
| void SpeechInputExtensionManager::OnAudioLevelsChange(int session_id,
|
| float volume,
|
| float noise_volume) {}
|
| +
|
| +namespace extensions {
|
| +
|
| +SpeechInputAPI::SpeechInputAPI(Profile* profile)
|
| + : manager_(new SpeechInputExtensionManager(profile)) {
|
| + ExtensionFunctionRegistry* registry =
|
| + ExtensionFunctionRegistry::GetInstance();
|
| + registry->RegisterFunction<StartSpeechInputFunction>();
|
| + registry->RegisterFunction<StopSpeechInputFunction>();
|
| + registry->RegisterFunction<IsRecordingSpeechInputFunction>();
|
| +}
|
| +
|
| +SpeechInputAPI::~SpeechInputAPI() {
|
| +}
|
| +
|
| +void SpeechInputAPI::Shutdown() {
|
| + manager_->ShutdownOnUIThread();
|
| +}
|
| +
|
| +static base::LazyInstance<ProfileKeyedAPIFactory<SpeechInputAPI> >
|
| + g_factory = LAZY_INSTANCE_INITIALIZER;
|
| +
|
| +// static
|
| +ProfileKeyedAPIFactory<SpeechInputAPI>* SpeechInputAPI::GetFactoryInstance() {
|
| + return &g_factory.Get();
|
| +}
|
| +
|
| +} // namespace extensions
|
|
|