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 4563d1a04fbeab6197f542c9d37eea07f992f740..17a7ea3f9c603694d09864451bed19822a4e59aa 100644 |
--- a/chrome/browser/android/vr_shell/vr_shell_delegate.cc |
+++ b/chrome/browser/android/vr_shell/vr_shell_delegate.cc |
@@ -46,9 +46,14 @@ |
void VrShellDelegate::SetDelegate(device::GvrDelegate* delegate, |
gvr_context* context) { |
+ context_ = context; |
delegate_ = delegate; |
// Clean up the non-presenting delegate. |
- if (delegate_ && non_presenting_delegate_) { |
+ if (non_presenting_delegate_) { |
+ device::mojom::VRVSyncProviderRequest request = |
+ non_presenting_delegate_->OnSwitchToPresentingDelegate(); |
+ if (request.is_pending()) |
+ delegate->OnVRVsyncProviderRequest(std::move(request)); |
non_presenting_delegate_ = nullptr; |
JNIEnv* env = AttachCurrentThread(); |
Java_VrShellDelegate_shutdownNonPresentingNativeContext( |
@@ -131,16 +136,8 @@ |
Java_VrShellDelegate_openNewTab(env, j_vr_shell_delegate_.obj(), incognito); |
} |
-device::mojom::VRSubmitFrameClientPtr VrShellDelegate::TakeSubmitFrameClient() { |
- return std::move(submit_client_); |
-} |
- |
void VrShellDelegate::SetDeviceProvider( |
device::GvrDeviceProvider* device_provider) { |
- if (device_provider_ == device_provider) |
- return; |
- if (device_provider_) |
- ClearDeviceProvider(); |
CHECK(!device_provider_); |
device_provider_ = device_provider; |
if (!delegate_) |
@@ -157,7 +154,6 @@ |
} |
void VrShellDelegate::RequestWebVRPresent( |
- device::mojom::VRSubmitFrameClientPtr submit_client, |
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 |
@@ -167,7 +163,6 @@ |
} |
present_callback_ = std::move(callback); |
- submit_client_ = std::move(submit_client); |
// If/When VRShell is ready for use it will call SetPresentResult. |
JNIEnv* env = AttachCurrentThread(); |
@@ -185,11 +180,19 @@ |
return weak_ptr_factory_.GetWeakPtr(); |
} |
+void VrShellDelegate::OnVRVsyncProviderRequest( |
+ device::mojom::VRVSyncProviderRequest request) { |
+ GetDelegate()->OnVRVsyncProviderRequest(std::move(request)); |
+} |
+ |
void VrShellDelegate::CreateNonPresentingDelegate() { |
JNIEnv* env = AttachCurrentThread(); |
gvr_context* context = reinterpret_cast<gvr_context*>( |
Java_VrShellDelegate_createNonPresentingNativeContext( |
env, j_vr_shell_delegate_.obj())); |
+ if (!context) |
+ return; |
+ context_ = context; |
non_presenting_delegate_ = |
base::MakeUnique<NonPresentingGvrDelegate>(context); |
non_presenting_delegate_->UpdateVSyncInterval(timebase_nanos_, |