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

Side by Side Diff: chrome/browser/speech/tts_extension_loader_chromeos.cc

Issue 361363003: Support onvoiceschanged for extension-based tts engines. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Clang Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/speech/tts_extension_loader_chromeos.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/speech/tts_extension_loader_chromeos.h"
6
7 #include "base/logging.h"
8 #include "base/memory/singleton.h"
9 #include "chrome/browser/extensions/component_loader.h"
10 #include "chrome/browser/extensions/extension_service.h"
11 #include "chrome/browser/extensions/extension_system_factory.h"
12 #include "chrome/browser/profiles/incognito_helpers.h"
13 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/browser/speech/extension_api/tts_engine_extension_api.h"
15 #include "chrome/browser/speech/tts_controller.h"
16 #include "chrome/common/extensions/extension_constants.h"
17 #include "components/keyed_service/content/browser_context_dependency_manager.h"
18 #include "components/keyed_service/content/browser_context_keyed_service_factory .h"
19 #include "components/keyed_service/core/keyed_service.h"
20 #include "extensions/browser/event_router.h"
21 #include "extensions/browser/extension_system.h"
22 #include "grit/browser_resources.h"
23
24 // Factory to load one instance of TtsExtensionLoaderChromeOs per profile.
25 class TtsExtensionLoaderChromeOsFactory
26 : public BrowserContextKeyedServiceFactory {
27 public:
28 static TtsExtensionLoaderChromeOs* GetForProfile(Profile* profile) {
29 return static_cast<TtsExtensionLoaderChromeOs*>(
30 GetInstance()->GetServiceForBrowserContext(profile, true));
31 }
32
33 static TtsExtensionLoaderChromeOsFactory* GetInstance() {
34 return Singleton<TtsExtensionLoaderChromeOsFactory>::get();
35 }
36
37 private:
38 friend struct DefaultSingletonTraits<TtsExtensionLoaderChromeOsFactory>;
39
40 TtsExtensionLoaderChromeOsFactory() : BrowserContextKeyedServiceFactory(
41 "TtsExtensionLoaderChromeOs",
42 BrowserContextDependencyManager::GetInstance()) {
43 DependsOn(extensions::ExtensionSystemFactory::GetInstance());
44 }
45
46 virtual ~TtsExtensionLoaderChromeOsFactory() {}
47
48 virtual content::BrowserContext* GetBrowserContextToUse(
49 content::BrowserContext* context) const OVERRIDE {
50 // If given an incognito profile (including the Chrome OS login
51 // profile), share the service with the original profile.
52 return chrome::GetBrowserContextRedirectedInIncognito(context);
53 }
54
55 virtual KeyedService* BuildServiceInstanceFor(
56 content::BrowserContext* profile) const OVERRIDE {
57 return new TtsExtensionLoaderChromeOs(static_cast<Profile*>(profile));
58 }
59 };
60
61 TtsExtensionLoaderChromeOs*
62 TtsExtensionLoaderChromeOs::GetInstance(Profile* profile) {
63 return TtsExtensionLoaderChromeOsFactory::GetInstance()
64 ->GetForProfile(profile);
65 }
66
67 TtsExtensionLoaderChromeOs::TtsExtensionLoaderChromeOs(
68 Profile* profile)
69 : profile_(profile) {
70 tts_state_ = IsTtsLoadedInThisProfile() ? TTS_LOADED : TTS_NOT_LOADED;
71
72 extensions::ExtensionSystem* system =
73 extensions::ExtensionSystem::Get(profile_);
74 DCHECK(system);
75 extensions::EventRouter* event_router = system->event_router();
76 DCHECK(event_router);
77 event_router->RegisterObserver(this, tts_engine_events::kOnSpeak);
78 event_router->RegisterObserver(this, tts_engine_events::kOnStop);
79 }
80
81 bool TtsExtensionLoaderChromeOs::LoadTtsExtension() {
82 if (tts_state_ == TTS_LOADED || tts_state_ == TTS_LOADING)
83 return false;
84
85 // Load the component extension into this profile.
86 VLOG(1) << "Loading TTS component extension.";
87 tts_state_ = TTS_LOADING;
88 ExtensionService* extension_service =
89 extensions::ExtensionSystem::Get(profile_)->extension_service();
90 DCHECK(extension_service);
91 extension_service->component_loader()->AddChromeOsSpeechSynthesisExtension();
92 return true;
93 }
94
95 void TtsExtensionLoaderChromeOs::Shutdown() {
96 extensions::EventRouter::Get(profile_)->UnregisterObserver(this);
97 }
98
99 bool TtsExtensionLoaderChromeOs::IsTtsLoadedInThisProfile() {
100 extensions::ExtensionSystem* system =
101 extensions::ExtensionSystem::Get(profile_);
102 DCHECK(system);
103 extensions::EventRouter* event_router = system->event_router();
104 DCHECK(event_router);
105 if (event_router->ExtensionHasEventListener(
106 extension_misc::kSpeechSynthesisExtensionId,
107 tts_engine_events::kOnSpeak) &&
108 event_router->ExtensionHasEventListener(
109 extension_misc::kSpeechSynthesisExtensionId,
110 tts_engine_events::kOnStop)) {
111 return true;
112 }
113
114 return false;
115 }
116
117 void TtsExtensionLoaderChromeOs::OnListenerAdded(
118 const extensions::EventListenerInfo& details) {
119 if (details.extension_id != extension_misc::kSpeechSynthesisExtensionId)
120 return;
121
122 if (!IsTtsLoadedInThisProfile())
123 return;
124
125 if (tts_state_ == TTS_LOADING) {
126 VLOG(1) << "TTS component extension loaded, retrying queued utterances.";
127 tts_state_ = TTS_LOADED;
128 TtsController::GetInstance()->RetrySpeakingQueuedUtterances();
129 }
130 }
OLDNEW
« no previous file with comments | « chrome/browser/speech/tts_extension_loader_chromeos.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698