Chromium Code Reviews| Index: chrome/browser/android/vr_shell/vr_shell.cc |
| diff --git a/chrome/browser/android/vr_shell/vr_shell.cc b/chrome/browser/android/vr_shell/vr_shell.cc |
| index 1917ddbef19bccb8195c63e9dc0a1d1bd400e840..a9db12820d9c340e0cd25b0a1d9ec8db149b5ecf 100644 |
| --- a/chrome/browser/android/vr_shell/vr_shell.cc |
| +++ b/chrome/browser/android/vr_shell/vr_shell.cc |
| @@ -30,6 +30,8 @@ |
| #include "chrome/browser/android/vr_shell/vr_shell_gl.h" |
| #include "chrome/browser/android/vr_shell/vr_usage_monitor.h" |
| #include "chrome/browser/android/vr_shell/vr_web_contents_observer.h" |
| +#include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h" |
| +#include "chrome/browser/media/webrtc/media_stream_capture_indicator.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/navigation_controller.h" |
| #include "content/public/browser/render_view_host.h" |
| @@ -61,6 +63,9 @@ namespace vr_shell { |
| namespace { |
| vr_shell::VrShell* g_instance; |
| +constexpr base::TimeDelta poll_media_access_interval_ = |
| + base::TimeDelta::FromSecondsD(0.01); |
| + |
| void SetIsInVR(content::WebContents* contents, bool is_in_vr) { |
| if (contents && contents->GetRenderWidgetHostView()) |
| contents->GetRenderWidgetHostView()->SetIsInVR(is_in_vr); |
| @@ -512,11 +517,46 @@ void VrShell::OnVRVsyncProviderRequest( |
| void VrShell::UpdateVSyncInterval(int64_t timebase_nanos, |
| double interval_seconds) { |
| + PollMediaAccessFlag(); |
| PostToGlThreadWhenReady(base::Bind(&VrShellGl::UpdateVSyncInterval, |
| gl_thread_->GetVrShellGl(), timebase_nanos, |
| interval_seconds)); |
| } |
| +void VrShell::PollMediaAccessFlag() { |
| + poll_capturing_media_task_.Cancel(); |
| + |
| + poll_capturing_media_task_.Reset(base::Bind(&VrShell::PollMediaAccessFlag, |
| + weak_ptr_factory_.GetWeakPtr())); |
|
mthiesse
2017/05/12 22:43:59
No need for weakptr, just cancel the callback in t
asimjour1
2017/05/12 22:57:04
Done.
|
| + main_thread_task_runner_->PostDelayedTask( |
| + FROM_HERE, poll_capturing_media_task_.callback(), |
| + poll_media_access_interval_); |
| + |
| + scoped_refptr<MediaStreamCaptureIndicator> indicator = |
| + MediaCaptureDevicesDispatcher::GetInstance() |
| + ->GetMediaStreamCaptureIndicator(); |
| + bool is_capturing_audio = indicator->IsCapturingAudio(web_contents_); |
| + if (is_capturing_audio != is_capturing_audio_) |
| + PostToGlThreadWhenReady(base::Bind(&VrShellGl::SetAudioCapturingWarning, |
| + gl_thread_->GetVrShellGl(), |
| + is_capturing_audio)); |
| + is_capturing_audio_ = is_capturing_audio; |
| + |
| + bool is_capturing_video = indicator->IsCapturingVideo(web_contents_); |
| + if (is_capturing_video != is_capturing_video_) |
| + PostToGlThreadWhenReady(base::Bind(&VrShellGl::SetVideoCapturingWarning, |
| + gl_thread_->GetVrShellGl(), |
| + is_capturing_video)); |
| + is_capturing_video_ = is_capturing_video; |
| + |
| + bool is_capturing_screen = indicator->IsBeingMirrored(web_contents_); |
| + if (is_capturing_screen != is_capturing_screen_) |
| + PostToGlThreadWhenReady(base::Bind(&VrShellGl::SetScreenCapturingWarning, |
| + gl_thread_->GetVrShellGl(), |
| + is_capturing_screen)); |
| + is_capturing_screen_ = is_capturing_screen; |
| +} |
| + |
| void VrShell::SetContentCssSize(float width, float height, float dpr) { |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| Java_VrShellImpl_setContentCssSize(env, j_vr_shell_.obj(), width, height, |