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

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

Issue 12982009: Fixed the speech crash when the render view has gone away then users click "try again" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/speech/chrome_speech_recognition_manager_delegate.h" 5 #include "chrome/browser/speech/chrome_speech_recognition_manager_delegate.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 268
269 // Note, the session might have been destroyed, therefore avoid calls to the 269 // Note, the session might have been destroyed, therefore avoid calls to the
270 // manager which imply its existance (e.g., GetSessionContext()). 270 // manager which imply its existance (e.g., GetSessionContext()).
271 GetBubbleController()->CloseBubble(); 271 GetBubbleController()->CloseBubble();
272 last_session_config_.reset(); 272 last_session_config_.reset();
273 273
274 // Clicking outside the bubble means we should abort. 274 // Clicking outside the bubble means we should abort.
275 SpeechRecognitionManager::GetInstance()->AbortSession(session_id); 275 SpeechRecognitionManager::GetInstance()->AbortSession(session_id);
276 } 276 }
277 277
278 void ChromeSpeechRecognitionManagerDelegate::RestartLastSession() { 278 void ChromeSpeechRecognitionManagerDelegate::RestartLastSession() {
tommi (sloooow) - chröme 2013/03/28 10:38:46 Hmm... rename to MaybeRestartLastSession?
279 DCHECK(last_session_config_.get()); 279 if (!last_session_config_.get())
280 return;
tommi (sloooow) - chröme 2013/03/28 10:38:46 what effect does this have on the functionality? A
281
280 SpeechRecognitionManager* manager = SpeechRecognitionManager::GetInstance(); 282 SpeechRecognitionManager* manager = SpeechRecognitionManager::GetInstance();
281 const int new_session_id = manager->CreateSession(*last_session_config_); 283 const int new_session_id = manager->CreateSession(*last_session_config_);
282 DCHECK_NE(SpeechRecognitionManager::kSessionIDInvalid, new_session_id); 284 DCHECK_NE(SpeechRecognitionManager::kSessionIDInvalid, new_session_id);
283 last_session_config_.reset(); 285 last_session_config_.reset();
284 manager->StartSession(new_session_id); 286 manager->StartSession(new_session_id);
285 } 287 }
286 288
287 void ChromeSpeechRecognitionManagerDelegate::TabClosedCallback( 289 void ChromeSpeechRecognitionManagerDelegate::TabClosedCallback(
288 int render_process_id, int render_view_id) { 290 int render_process_id, int render_view_id) {
289 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 291 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
(...skipping 14 matching lines...) Expand all
304 } 306 }
305 } 307 }
306 308
307 void ChromeSpeechRecognitionManagerDelegate::OnRecognitionStart( 309 void ChromeSpeechRecognitionManagerDelegate::OnRecognitionStart(
308 int session_id) { 310 int session_id) {
309 const content::SpeechRecognitionSessionContext& context = 311 const content::SpeechRecognitionSessionContext& context =
310 SpeechRecognitionManager::GetInstance()->GetSessionContext(session_id); 312 SpeechRecognitionManager::GetInstance()->GetSessionContext(session_id);
311 313
312 if (RequiresBubble(session_id)) { 314 if (RequiresBubble(session_id)) {
313 // Copy the configuration of the session (for the "try again" button). 315 // Copy the configuration of the session (for the "try again" button).
314 last_session_config_.reset(new content::SpeechRecognitionSessionConfig( 316 last_session_config_.reset(new content::SpeechRecognitionSessionConfig(
tommi (sloooow) - chröme 2013/03/28 10:38:46 I'm looking for this constructor in the code but I
315 SpeechRecognitionManager::GetInstance()->GetSessionConfig(session_id))); 317 SpeechRecognitionManager::GetInstance()->GetSessionConfig(session_id)));
316 318
317 // Create and show the bubble. 319 // Create and show the bubble.
318 GetBubbleController()->CreateBubble(session_id, 320 GetBubbleController()->CreateBubble(session_id,
319 context.render_process_id, 321 context.render_process_id,
320 context.render_view_id, 322 context.render_view_id,
321 context.element_rect); 323 context.element_rect);
322 } 324 }
323 325
324 // Register callback to auto abort session on tab closure. 326 // Register callback to auto abort session on tab closure.
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 context.render_process_id, 467 context.render_process_id,
466 context.render_view_id, 468 context.render_view_id,
467 RequiresTrayIcon(session_id))); 469 RequiresTrayIcon(session_id)));
468 } 470 }
469 471
470 content::SpeechRecognitionEventListener* 472 content::SpeechRecognitionEventListener*
471 ChromeSpeechRecognitionManagerDelegate::GetEventListener() { 473 ChromeSpeechRecognitionManagerDelegate::GetEventListener() {
472 return this; 474 return this;
473 } 475 }
474 476
477 void ChromeSpeechRecognitionManagerDelegate::OnAbortSessionsForListener(
478 SpeechRecognitionEventListener* listener) {
tommi (sloooow) - chröme 2013/03/28 10:38:46 Passing the listener here feels hacky. I would ra
479 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
480 if (last_session_config_->event_listener == listener)
481 last_session_config_.reset();
482 }
483
475 void ChromeSpeechRecognitionManagerDelegate::CheckRenderViewType( 484 void ChromeSpeechRecognitionManagerDelegate::CheckRenderViewType(
476 base::Callback<void(bool ask_user, bool is_allowed)> callback, 485 base::Callback<void(bool ask_user, bool is_allowed)> callback,
477 int render_process_id, 486 int render_process_id,
478 int render_view_id, 487 int render_view_id,
479 bool js_api) { 488 bool js_api) {
480 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 489 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
481 const content::RenderViewHost* render_view_host = 490 const content::RenderViewHost* render_view_host =
482 content::RenderViewHost::FromID(render_process_id, render_view_id); 491 content::RenderViewHost::FromID(render_process_id, render_view_id);
483 492
484 bool allowed = false; 493 bool allowed = false;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 } 532 }
524 533
525 SpeechRecognitionBubbleController* 534 SpeechRecognitionBubbleController*
526 ChromeSpeechRecognitionManagerDelegate::GetBubbleController() { 535 ChromeSpeechRecognitionManagerDelegate::GetBubbleController() {
527 if (!bubble_controller_.get()) 536 if (!bubble_controller_.get())
528 bubble_controller_ = new SpeechRecognitionBubbleController(this); 537 bubble_controller_ = new SpeechRecognitionBubbleController(this);
529 return bubble_controller_.get(); 538 return bubble_controller_.get();
530 } 539 }
531 540
532 } // namespace speech 541 } // namespace speech
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698