| Index: chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc
|
| diff --git a/chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc b/chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc
|
| index 7fbfaff40df028ec4058da88f620404cea6bfb3f..101297547eafe91bce6b6d6236e9b9ebdccd0c77 100644
|
| --- a/chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc
|
| +++ b/chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc
|
| @@ -384,21 +384,21 @@ void ChromeSpeechRecognitionManagerDelegate::CheckRenderViewType(
|
| content::RenderViewHost::FromID(render_process_id, render_view_id);
|
|
|
| bool allowed = false;
|
| - bool ask_permission = false;
|
| + bool check_permission = false;
|
|
|
| if (!render_view_host) {
|
| if (!js_api) {
|
| // If there is no render view, we cannot show the speech bubble, so this
|
| // is not allowed.
|
| allowed = false;
|
| - ask_permission = false;
|
| + check_permission = false;
|
| } else {
|
| // This happens for extensions. Manifest should be checked for permission.
|
| allowed = true;
|
| - ask_permission = false;
|
| + check_permission = false;
|
| }
|
| BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
|
| - base::Bind(callback, ask_permission, allowed));
|
| + base::Bind(callback, check_permission, allowed));
|
| return;
|
| }
|
|
|
| @@ -412,17 +412,25 @@ void ChromeSpeechRecognitionManagerDelegate::CheckRenderViewType(
|
| // click.
|
| if (view_type == extensions::VIEW_TYPE_TAB_CONTENTS ||
|
| view_type == extensions::VIEW_TYPE_APP_SHELL ||
|
| - view_type == extensions::VIEW_TYPE_VIRTUAL_KEYBOARD) {
|
| - // If it is a tab, we can show the speech input bubble or ask for
|
| + view_type == extensions::VIEW_TYPE_VIRTUAL_KEYBOARD ||
|
| + // Only allow requests through JavaScript API (|js_api| = true).
|
| + // Requests originating from html element (|js_api| = false) would want
|
| + // to show bubble which isn't quite intuitive from a background page. Also
|
| + // see todo above about issues with rendering such bubbles from extension
|
| + // popups.
|
| + (view_type == extensions::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE &&
|
| + js_api)) {
|
| + // If it is a tab, we can show the speech input bubble or check for
|
| + // permission. For apps, this means manifest would be checked for
|
| // permission.
|
|
|
| allowed = true;
|
| if (js_api)
|
| - ask_permission = true;
|
| + check_permission = true;
|
| }
|
|
|
| BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
|
| - base::Bind(callback, ask_permission, allowed));
|
| + base::Bind(callback, check_permission, allowed));
|
| }
|
|
|
| } // namespace speech
|
|
|