Chromium Code Reviews| Index: chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc |
| =================================================================== |
| --- chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc (revision 138369) |
| +++ chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc (working copy) |
| @@ -14,15 +14,15 @@ |
| #include "chrome/browser/prefs/pref_service.h" |
| #include "chrome/browser/profiles/profile_manager.h" |
| #include "chrome/browser/tab_contents/tab_util.h" |
| -#include "chrome/common/chrome_view_type.h" |
| +#include "chrome/browser/view_type_utils.h" |
| #include "chrome/common/pref_names.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/render_view_host.h" |
| -#include "content/public/browser/render_view_host_delegate.h" |
| #include "content/public/browser/resource_context.h" |
| #include "content/public/browser/speech_recognition_manager.h" |
| #include "content/public/browser/speech_recognition_session_config.h" |
| #include "content/public/browser/speech_recognition_session_context.h" |
| +#include "content/public/browser/web_contents.h" |
| #include "content/public/common/speech_recognition_error.h" |
| #include "content/public/common/speech_recognition_result.h" |
| #include "grit/generated_resources.h" |
| @@ -35,6 +35,7 @@ |
| using content::BrowserThread; |
| using content::SpeechRecognitionManager; |
| +using content::WebContents; |
| namespace { |
| const int kNoActiveBubble = |
| @@ -309,20 +310,22 @@ |
| int render_process_id, |
| int render_view_id) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - const content::RenderViewHost* render_view_host = |
| + content::RenderViewHost* render_view_host = |
|
Avi (use Gerrit)
2012/05/23 04:40:35
Since you fixed FromRenderViewHost you could leave
jam
2012/05/23 05:08:16
Done.
|
| content::RenderViewHost::FromID(render_process_id, render_view_id); |
| - |
| - // For host delegates other than VIEW_TYPE_TAB_CONTENTS we can't reliably show |
| - // a popup, including the speech input bubble. In these cases for privacy |
| - // reasons we don't want to start recording if the user can't be properly |
| - // notified. An example of this is trying to show the speech input bubble |
| - // within an extension popup: http://crbug.com/92083. In these situations the |
| - // speech input extension API should be used instead. |
| - |
| - const bool allowed = (render_view_host != NULL && |
| - render_view_host->GetDelegate() != NULL && |
| - render_view_host->GetDelegate()->GetRenderViewType() == |
| - chrome::VIEW_TYPE_TAB_CONTENTS); |
| + bool allowed = false; |
| + if (render_view_host) { |
| + // For host delegates other than VIEW_TYPE_TAB_CONTENTS we can't reliably |
| + // show a popup, including the speech input bubble. In these cases for |
| + // privacy reasons we don't want to start recording if the user can't be |
| + // properly notified. An example of this is trying to show the speech input |
| + // bubble within an extension popup: http://crbug.com/92083. In these |
| + // situations the speech input extension API should be used instead. |
| + WebContents* web_contents = |
| + WebContents::FromRenderViewHost(render_view_host); |
| + chrome::ViewType view_type = chrome::GetViewType(web_contents); |
| + if (view_type == chrome::VIEW_TYPE_TAB_CONTENTS) |
| + allowed = true; |
| + } |
| BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| base::Bind(callback, session_id, allowed)); |
| } |