OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/android/vr_shell/vr_shell_delegate.h" | 5 #include "chrome/browser/android/vr_shell/vr_shell_delegate.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
10 #include "base/callback_helpers.h" | 10 #include "base/callback_helpers.h" |
11 #include "chrome/browser/android/vr_shell/non_presenting_gvr_delegate.h" | 11 #include "chrome/browser/android/vr_shell/non_presenting_gvr_delegate.h" |
12 #include "device/vr/android/gvr/gvr_delegate.h" | 12 #include "device/vr/android/gvr/gvr_delegate.h" |
13 #include "device/vr/android/gvr/gvr_device.h" | 13 #include "device/vr/android/gvr/gvr_device.h" |
14 #include "device/vr/android/gvr/gvr_device_provider.h" | 14 #include "device/vr/android/gvr/gvr_device_provider.h" |
15 #include "jni/VrShellDelegate_jni.h" | 15 #include "jni/VrShellDelegate_jni.h" |
16 | 16 |
17 using base::android::JavaParamRef; | 17 using base::android::JavaParamRef; |
18 using base::android::AttachCurrentThread; | 18 using base::android::AttachCurrentThread; |
19 | 19 |
20 namespace vr_shell { | 20 namespace vr_shell { |
21 | 21 |
22 VrShellDelegate::VrShellDelegate(JNIEnv* env, jobject obj) { | 22 VrShellDelegate::VrShellDelegate(JNIEnv* env, jobject obj) |
| 23 : weak_ptr_factory_(this) { |
23 DVLOG(1) << __FUNCTION__ << "=" << this; | 24 DVLOG(1) << __FUNCTION__ << "=" << this; |
24 j_vr_shell_delegate_.Reset(env, obj); | 25 j_vr_shell_delegate_.Reset(env, obj); |
25 } | 26 } |
26 | 27 |
27 VrShellDelegate::~VrShellDelegate() { | 28 VrShellDelegate::~VrShellDelegate() { |
28 DVLOG(1) << __FUNCTION__ << "=" << this; | 29 DVLOG(1) << __FUNCTION__ << "=" << this; |
29 if (device_provider_) { | 30 if (device_provider_) { |
30 device_provider_->Device()->OnExitPresent(); | 31 device_provider_->Device()->OnExitPresent(); |
31 device_provider_->Device()->OnDelegateChanged(); | 32 device_provider_->Device()->OnDelegateChanged(); |
32 } | 33 } |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 } | 101 } |
101 | 102 |
102 base::ResetAndReturn(&present_callback_).Run(success); | 103 base::ResetAndReturn(&present_callback_).Run(success); |
103 pending_successful_present_request_ = false; | 104 pending_successful_present_request_ = false; |
104 } | 105 } |
105 | 106 |
106 void VrShellDelegate::DisplayActivate(JNIEnv* env, | 107 void VrShellDelegate::DisplayActivate(JNIEnv* env, |
107 const JavaParamRef<jobject>& obj) { | 108 const JavaParamRef<jobject>& obj) { |
108 if (device_provider_) { | 109 if (device_provider_) { |
109 device_provider_->Device()->OnActivate( | 110 device_provider_->Device()->OnActivate( |
110 device::mojom::VRDisplayEventReason::MOUNTED); | 111 device::mojom::VRDisplayEventReason::MOUNTED, |
| 112 base::Bind(&VrShellDelegate::OnActivateDisplayHandled, |
| 113 weak_ptr_factory_.GetWeakPtr())); |
111 } | 114 } |
112 } | 115 } |
113 | 116 |
114 void VrShellDelegate::UpdateVSyncInterval(JNIEnv* env, | 117 void VrShellDelegate::UpdateVSyncInterval(JNIEnv* env, |
115 const JavaParamRef<jobject>& obj, | 118 const JavaParamRef<jobject>& obj, |
116 jlong timebase_nanos, | 119 jlong timebase_nanos, |
117 jdouble interval_seconds) { | 120 jdouble interval_seconds) { |
118 timebase_nanos_ = timebase_nanos; | 121 timebase_nanos_ = timebase_nanos; |
119 interval_seconds_ = interval_seconds; | 122 interval_seconds_ = interval_seconds; |
120 if (presenting_delegate_) { | 123 if (presenting_delegate_) { |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 JNIEnv* env = AttachCurrentThread(); | 199 JNIEnv* env = AttachCurrentThread(); |
197 gvr_context* context = reinterpret_cast<gvr_context*>( | 200 gvr_context* context = reinterpret_cast<gvr_context*>( |
198 Java_VrShellDelegate_createNonPresentingNativeContext( | 201 Java_VrShellDelegate_createNonPresentingNativeContext( |
199 env, j_vr_shell_delegate_.obj())); | 202 env, j_vr_shell_delegate_.obj())); |
200 non_presenting_delegate_ = | 203 non_presenting_delegate_ = |
201 base::MakeUnique<NonPresentingGvrDelegate>(context); | 204 base::MakeUnique<NonPresentingGvrDelegate>(context); |
202 non_presenting_delegate_->UpdateVSyncInterval(timebase_nanos_, | 205 non_presenting_delegate_->UpdateVSyncInterval(timebase_nanos_, |
203 interval_seconds_); | 206 interval_seconds_); |
204 } | 207 } |
205 | 208 |
| 209 void VrShellDelegate::OnActivateDisplayHandled(bool present_requested) { |
| 210 if (!present_requested) { |
| 211 // WebVR page didn't request presentation in the vrdisplayactivate handler. |
| 212 // Tell VrShell that we are in VR Browsing Mode. |
| 213 ExitWebVRPresent(); |
| 214 } |
| 215 } |
| 216 |
206 device::GvrDelegate* VrShellDelegate::GetDelegate() { | 217 device::GvrDelegate* VrShellDelegate::GetDelegate() { |
207 if (presenting_delegate_) | 218 if (presenting_delegate_) |
208 return presenting_delegate_; | 219 return presenting_delegate_; |
209 return non_presenting_delegate_.get(); | 220 return non_presenting_delegate_.get(); |
210 } | 221 } |
211 | 222 |
212 void VrShellDelegate::SetListeningForActivate(bool listening) { | 223 void VrShellDelegate::SetListeningForActivate(bool listening) { |
213 JNIEnv* env = AttachCurrentThread(); | 224 JNIEnv* env = AttachCurrentThread(); |
214 Java_VrShellDelegate_setListeningForWebVrActivate( | 225 Java_VrShellDelegate_setListeningForWebVrActivate( |
215 env, j_vr_shell_delegate_.obj(), listening); | 226 env, j_vr_shell_delegate_.obj(), listening); |
(...skipping 10 matching lines...) Expand all Loading... |
226 jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 237 jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
227 return reinterpret_cast<intptr_t>(new VrShellDelegate(env, obj)); | 238 return reinterpret_cast<intptr_t>(new VrShellDelegate(env, obj)); |
228 } | 239 } |
229 | 240 |
230 static void OnLibraryAvailable(JNIEnv* env, const JavaParamRef<jclass>& clazz) { | 241 static void OnLibraryAvailable(JNIEnv* env, const JavaParamRef<jclass>& clazz) { |
231 device::GvrDelegateProvider::SetInstance( | 242 device::GvrDelegateProvider::SetInstance( |
232 base::Bind(&VrShellDelegate::CreateVrShellDelegate)); | 243 base::Bind(&VrShellDelegate::CreateVrShellDelegate)); |
233 } | 244 } |
234 | 245 |
235 } // namespace vr_shell | 246 } // namespace vr_shell |
OLD | NEW |