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

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

Issue 8386074: Add a tray notification UI for speech input recording in the extension API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixing one missing include for moving the API. Created 9 years, 1 month 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/speech_input/extension_speech_input_manager. h" 5 #include "chrome/browser/speech/extension_speech_input_manager.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "base/values.h" 10 #include "base/values.h"
11 #include "chrome/browser/extensions/extension_event_router.h" 11 #include "chrome/browser/extensions/extension_event_router.h"
12 #include "chrome/browser/extensions/speech_input/extension_speech_input_api_cons tants.h" 12 #include "chrome/browser/extensions/extension_service.h"
13 #include "chrome/browser/prefs/pref_service.h"
13 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/browser/profiles/profile_dependency_manager.h" 15 #include "chrome/browser/profiles/profile_dependency_manager.h"
15 #include "chrome/browser/profiles/profile_keyed_service.h" 16 #include "chrome/browser/profiles/profile_keyed_service.h"
16 #include "chrome/browser/profiles/profile_keyed_service_factory.h" 17 #include "chrome/browser/profiles/profile_keyed_service_factory.h"
18 #include "chrome/browser/speech/extension_speech_input_api_constants.h"
19 #include "chrome/browser/speech/extension_speech_input_notification_ui.h"
17 #include "chrome/common/chrome_notification_types.h" 20 #include "chrome/common/chrome_notification_types.h"
18 #include "chrome/common/extensions/extension.h" 21 #include "chrome/common/extensions/extension.h"
22 #include "chrome/common/pref_names.h"
19 #include "content/public/browser/browser_thread.h" 23 #include "content/public/browser/browser_thread.h"
20 #include "content/public/browser/notification_service.h" 24 #include "content/public/browser/notification_service.h"
21 25
22 using content::BrowserThread; 26 using content::BrowserThread;
23 27
24 using namespace speech_input; 28 using namespace speech_input;
25 29
26 namespace constants = extension_speech_input_api_constants; 30 namespace constants = extension_speech_input_api_constants;
27 31
28 namespace { 32 namespace {
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 115
112 ExtensionSpeechInterface::ExtensionSpeechInterface() { 116 ExtensionSpeechInterface::ExtensionSpeechInterface() {
113 } 117 }
114 118
115 ExtensionSpeechInterface::~ExtensionSpeechInterface() { 119 ExtensionSpeechInterface::~ExtensionSpeechInterface() {
116 } 120 }
117 121
118 ExtensionSpeechInputManager::ExtensionSpeechInputManager(Profile* profile) 122 ExtensionSpeechInputManager::ExtensionSpeechInputManager(Profile* profile)
119 : profile_(profile), 123 : profile_(profile),
120 state_(kIdle), 124 state_(kIdle),
121 speech_interface_(NULL) { 125 speech_interface_(NULL),
126 notification_(profile) {
122 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, 127 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
123 content::Source<Profile>(profile_)); 128 content::Source<Profile>(profile_));
124 } 129 }
125 130
126 ExtensionSpeechInputManager::~ExtensionSpeechInputManager() { 131 ExtensionSpeechInputManager::~ExtensionSpeechInputManager() {
127 } 132 }
128 133
129 ExtensionSpeechInputManager* ExtensionSpeechInputManager::GetForProfile( 134 ExtensionSpeechInputManager* ExtensionSpeechInputManager::GetForProfile(
130 Profile* profile) { 135 Profile* profile) {
131 ExtensionSpeechInputManagerWrapper *wrapper = 136 ExtensionSpeechInputManagerWrapper *wrapper =
(...skipping 18 matching lines...) Expand all
150 } 155 }
151 } 156 }
152 157
153 void ExtensionSpeechInputManager::ShutdownOnUIThread() { 158 void ExtensionSpeechInputManager::ShutdownOnUIThread() {
154 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 159 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
155 VLOG(1) << "Profile shutting down."; 160 VLOG(1) << "Profile shutting down.";
156 161
157 base::AutoLock auto_lock(state_lock_); 162 base::AutoLock auto_lock(state_lock_);
158 DCHECK(state_ != kShutdown); 163 DCHECK(state_ != kShutdown);
159 if (state_ != kIdle) { 164 if (state_ != kIdle) {
165 notification_.Hide();
160 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 166 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
161 base::Bind(&ExtensionSpeechInputManager::ForceStopOnIOThread, this)); 167 base::Bind(&ExtensionSpeechInputManager::ForceStopOnIOThread, this));
162 } 168 }
163 state_ = kShutdown; 169 state_ = kShutdown;
164 VLOG(1) << "Entering the shutdown sink state."; 170 VLOG(1) << "Entering the shutdown sink state.";
165 registrar_.RemoveAll(); 171 registrar_.RemoveAll();
166 profile_ = NULL; 172 profile_ = NULL;
167 } 173 }
168 174
169 void ExtensionSpeechInputManager::ExtensionUnloaded( 175 void ExtensionSpeechInputManager::ExtensionUnloaded(
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 272 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
267 273
268 base::AutoLock auto_lock(state_lock_); 274 base::AutoLock auto_lock(state_lock_);
269 if (state_ == kShutdown) 275 if (state_ == kShutdown)
270 return; 276 return;
271 277
272 DCHECK_EQ(state_, kStarting); 278 DCHECK_EQ(state_, kStarting);
273 VLOG(1) << "State changed to recording"; 279 VLOG(1) << "State changed to recording";
274 state_ = kRecording; 280 state_ = kRecording;
275 281
282 const Extension* extension = profile_->GetExtensionService()->
283 GetExtensionById(extension_id_in_use_, true);
284 DCHECK(extension);
285
286 bool show_notification = !profile_->GetPrefs()->GetBoolean(
287 prefs::kSpeechInputTrayNotificationShown);
288
289 notification_.Show(extension, show_notification);
290
291 if (show_notification) {
292 profile_->GetPrefs()->SetBoolean(
293 prefs::kSpeechInputTrayNotificationShown, true);
294 }
295
276 VLOG(1) << "Sending start notification"; 296 VLOG(1) << "Sending start notification";
277 content::NotificationService::current()->Notify( 297 content::NotificationService::current()->Notify(
278 chrome::NOTIFICATION_EXTENSION_SPEECH_INPUT_RECORDING_STARTED, 298 chrome::NOTIFICATION_EXTENSION_SPEECH_INPUT_RECORDING_STARTED,
279 content::Source<Profile>(profile_), 299 content::Source<Profile>(profile_),
280 content::Details<std::string>(&extension_id_in_use_)); 300 content::Details<std::string>(&extension_id_in_use_));
281 } 301 }
282 302
283 void ExtensionSpeechInputManager::OnRecognizerError( 303 void ExtensionSpeechInputManager::OnRecognizerError(
284 int caller_id, SpeechInputError error) { 304 int caller_id, SpeechInputError error) {
285 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 305 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 void ExtensionSpeechInputManager::DispatchError( 415 void ExtensionSpeechInputManager::DispatchError(
396 const std::string& error, bool dispatch_event) { 416 const std::string& error, bool dispatch_event) {
397 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 417 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
398 418
399 std::string extension_id; 419 std::string extension_id;
400 { 420 {
401 base::AutoLock auto_lock(state_lock_); 421 base::AutoLock auto_lock(state_lock_);
402 if (state_ == kShutdown) 422 if (state_ == kShutdown)
403 return; 423 return;
404 424
425 if (state_ == kRecording)
426 notification_.Hide();
427
405 extension_id = extension_id_in_use_; 428 extension_id = extension_id_in_use_;
406 ResetToIdleState(); 429 ResetToIdleState();
407 430
408 // Will set the error property in the ongoing extension function calls. 431 // Will set the error property in the ongoing extension function calls.
409 ExtensionError details(extension_id, error); 432 ExtensionError details(extension_id, error);
410 content::NotificationService::current()->Notify( 433 content::NotificationService::current()->Notify(
411 chrome::NOTIFICATION_EXTENSION_SPEECH_INPUT_FAILED, 434 chrome::NOTIFICATION_EXTENSION_SPEECH_INPUT_FAILED,
412 content::Source<Profile>(profile_), 435 content::Source<Profile>(profile_),
413 content::Details<ExtensionError>(&details)); 436 content::Details<ExtensionError>(&details));
414 } 437 }
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 622 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
600 VLOG(1) << "Stop succeeded (UI thread)"; 623 VLOG(1) << "Stop succeeded (UI thread)";
601 624
602 base::AutoLock auto_lock(state_lock_); 625 base::AutoLock auto_lock(state_lock_);
603 if (state_ == kShutdown) 626 if (state_ == kShutdown)
604 return; 627 return;
605 628
606 std::string extension_id = extension_id_in_use_; 629 std::string extension_id = extension_id_in_use_;
607 ResetToIdleState(); 630 ResetToIdleState();
608 631
632 notification_.Hide();
633
609 content::NotificationService::current()->Notify( 634 content::NotificationService::current()->Notify(
610 chrome::NOTIFICATION_EXTENSION_SPEECH_INPUT_RECORDING_STOPPED, 635 chrome::NOTIFICATION_EXTENSION_SPEECH_INPUT_RECORDING_STOPPED,
611 // Guarded by the state_ == kShutdown check. 636 // Guarded by the state_ == kShutdown check.
612 content::Source<Profile>(profile_), 637 content::Source<Profile>(profile_),
613 content::Details<std::string>(&extension_id)); 638 content::Details<std::string>(&extension_id));
614 } 639 }
640
641 void ExtensionSpeechInputManager::SetInputVolume(int caller_id,
642 float volume,
643 float noise_volume) {
644 DCHECK_EQ(caller_id, kSpeechCallerId);
645 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
646 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
647 base::Bind(&ExtensionSpeechInputManager::SetInputVolumeOnUIThread,
648 this, volume));
649 }
650
651 void ExtensionSpeechInputManager::SetInputVolumeOnUIThread(
652 float volume) {
653 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
654 notification_.SetVUMeterVolume(volume);
655 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698