Index: chrome/browser/android/vr_shell/vr_shell_delegate.cc |
diff --git a/chrome/browser/android/vr_shell/vr_shell_delegate.cc b/chrome/browser/android/vr_shell/vr_shell_delegate.cc |
index ae4acc523ce7317b1e0c39f8bad9a523af61170c..cffe81ba46bd5df71cf13784615fcdd040f03d20 100644 |
--- a/chrome/browser/android/vr_shell/vr_shell_delegate.cc |
+++ b/chrome/browser/android/vr_shell/vr_shell_delegate.cc |
@@ -67,17 +67,30 @@ void VrShellDelegate::ExitWebVRIfNecessary(JNIEnv* env, jobject obj) { |
device_provider_->OnGvrDelegateRemoved(); |
} |
-bool VrShellDelegate::RequestWebVRPresent( |
- base::WeakPtr<device::GvrDeviceProvider> device_provider) { |
- // Only set one device provider at a time |
+void VrShellDelegate::SetPresentResult(JNIEnv* env, jobject obj, |
+ jboolean result) { |
+ CHECK(!present_callback_.is_null()); |
+ present_callback_.Run(result); |
+ present_callback_.Reset(); |
+} |
+ |
+void VrShellDelegate::RequestWebVRPresent( |
+ base::WeakPtr<device::GvrDeviceProvider> device_provider, |
+ const base::Callback<void(bool)>& callback) { |
+ if (!present_callback_.is_null()) { |
+ // Can only handle one request at a time. This is also extremely unlikely to |
+ // happen in practice. |
+ callback.Run(false); |
+ } |
+ // Only set one device provider at a time. |
DCHECK(!device_provider_); |
+ |
device_provider_ = device_provider; |
+ present_callback_ = callback; |
- // If/When VRShell is ready for use it will call OnVrShellReady. |
+ // If/When VRShell is ready for use it will call SetPresentResult. |
JNIEnv* env = AttachCurrentThread(); |
- Java_VrShellDelegate_enterVRIfNecessary(env, j_vr_shell_delegate_.obj(), |
- true); |
- return true; |
+ Java_VrShellDelegate_presentRequested(env, j_vr_shell_delegate_.obj(), true); |
} |
void VrShellDelegate::ExitWebVRPresent() { |