diff options
Diffstat (limited to 'chromium/extensions/shell/browser/shell_speech_recognition_manager_delegate.cc')
-rw-r--r-- | chromium/extensions/shell/browser/shell_speech_recognition_manager_delegate.cc | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/chromium/extensions/shell/browser/shell_speech_recognition_manager_delegate.cc b/chromium/extensions/shell/browser/shell_speech_recognition_manager_delegate.cc new file mode 100644 index 00000000000..c4ce068cce7 --- /dev/null +++ b/chromium/extensions/shell/browser/shell_speech_recognition_manager_delegate.cc @@ -0,0 +1,132 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "extensions/shell/browser/shell_speech_recognition_manager_delegate.h" + +#include "base/bind.h" +#include "content/public/browser/browser_thread.h" +#include "content/public/browser/render_view_host.h" +#include "content/public/browser/speech_recognition_manager.h" +#include "content/public/browser/speech_recognition_session_context.h" +#include "content/public/browser/web_contents.h" +#include "extensions/browser/view_type_utils.h" + +using content::BrowserThread; +using content::SpeechRecognitionManager; +using content::WebContents; + +namespace extensions { +namespace speech { + +ShellSpeechRecognitionManagerDelegate::ShellSpeechRecognitionManagerDelegate() { +} + +ShellSpeechRecognitionManagerDelegate:: +~ShellSpeechRecognitionManagerDelegate() { +} + +void ShellSpeechRecognitionManagerDelegate::OnRecognitionStart(int session_id) { +} + +void ShellSpeechRecognitionManagerDelegate::OnAudioStart(int session_id) { +} + +void ShellSpeechRecognitionManagerDelegate::OnEnvironmentEstimationComplete( + int session_id) { +} + +void ShellSpeechRecognitionManagerDelegate::OnSoundStart(int session_id) { +} + +void ShellSpeechRecognitionManagerDelegate::OnSoundEnd(int session_id) { +} + +void ShellSpeechRecognitionManagerDelegate::OnAudioEnd(int session_id) { +} + +void ShellSpeechRecognitionManagerDelegate::OnRecognitionEnd(int session_id) { +} + +void ShellSpeechRecognitionManagerDelegate::OnRecognitionResults( + int session_id, + const content::SpeechRecognitionResults& result) { +} + +void ShellSpeechRecognitionManagerDelegate::OnRecognitionError( + int session_id, + const content::SpeechRecognitionError& error) { +} + +void ShellSpeechRecognitionManagerDelegate::OnAudioLevelsChange( + int session_id, + float volume, + float noise_volume) { +} + +void ShellSpeechRecognitionManagerDelegate::GetDiagnosticInformation( + bool* can_report_metrics, + std::string* hardware_info) { +} + +void ShellSpeechRecognitionManagerDelegate::CheckRecognitionIsAllowed( + int session_id, + base::Callback<void(bool ask_user, bool is_allowed)> callback) { + DCHECK_CURRENTLY_ON(BrowserThread::IO); + + const content::SpeechRecognitionSessionContext& context = + SpeechRecognitionManager::GetInstance()->GetSessionContext(session_id); + + // Make sure that initiators (extensions/web pages) properly set the + // |render_process_id| field, which is needed later to retrieve the profile. + DCHECK_NE(context.render_process_id, 0); + + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, + base::Bind(&CheckRenderViewType, + callback, + context.render_process_id, + context.render_view_id)); +} + +content::SpeechRecognitionEventListener* +ShellSpeechRecognitionManagerDelegate::GetEventListener() { + return this; +} + +bool ShellSpeechRecognitionManagerDelegate::FilterProfanities( + int render_process_id) { + // TODO(zork): Determine where this preference should come from. + return true; +} + +// static +void ShellSpeechRecognitionManagerDelegate::CheckRenderViewType( + base::Callback<void(bool ask_user, bool is_allowed)> callback, + int render_process_id, + int render_view_id) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + content::RenderViewHost* render_view_host = + content::RenderViewHost::FromID(render_process_id, render_view_id); + bool allowed = false; + bool check_permission = false; + + if (render_view_host) { + WebContents* web_contents = + WebContents::FromRenderViewHost(render_view_host); + extensions::ViewType view_type = extensions::GetViewType(web_contents); + + if (view_type == extensions::VIEW_TYPE_APP_WINDOW || + view_type == extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) { + allowed = true; + check_permission = true; + } else { + LOG(WARNING) << "Speech recognition only supported in Apps."; + } + } + + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, + base::Bind(callback, check_permission, allowed)); +} + +} // namespace speech +} // namespace extensions |