| Index: device/vr/android/gvr/gvr_device_provider.cc
|
| diff --git a/device/vr/android/gvr/gvr_device_provider.cc b/device/vr/android/gvr/gvr_device_provider.cc
|
| index 8a3637d25902a91e6e08143cae45ada582d26a32..d29ae9ddfc21199f89f05fa427c5ccfdea617c72 100644
|
| --- a/device/vr/android/gvr/gvr_device_provider.cc
|
| +++ b/device/vr/android/gvr/gvr_device_provider.cc
|
| @@ -23,9 +23,7 @@ using base::android::GetApplicationContext;
|
|
|
| namespace device {
|
|
|
| -GvrDeviceProvider::GvrDeviceProvider()
|
| - : VRDeviceProvider(),
|
| - main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()) {}
|
| +GvrDeviceProvider::GvrDeviceProvider() : weak_ptr_factory_(this) {}
|
|
|
| GvrDeviceProvider::~GvrDeviceProvider() {
|
| device::GvrDelegateProvider* delegate_provider =
|
| @@ -62,12 +60,10 @@ bool GvrDeviceProvider::RequestPresent() {
|
| return false;
|
|
|
| // RequestWebVRPresent is async as a render thread may be created.
|
| - return delegate_provider->RequestWebVRPresent(this);
|
| + return delegate_provider->RequestWebVRPresent(weak_ptr_factory_.GetWeakPtr());
|
| }
|
|
|
| void GvrDeviceProvider::ExitPresent() {
|
| - DCHECK(main_thread_task_runner_->BelongsToCurrentThread());
|
| -
|
| if (!vr_device_)
|
| return;
|
|
|
| @@ -84,26 +80,29 @@ void GvrDeviceProvider::ExitPresent() {
|
| delegate_provider->ExitWebVRPresent();
|
| }
|
|
|
| -void GvrDeviceProvider::OnGvrDelegateReady(GvrDelegate* delegate) {
|
| - main_thread_task_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&GvrDeviceProvider::GvrDelegateReady, base::Unretained(this),
|
| - base::Unretained(delegate)));
|
| +void GvrDeviceProvider::OnGvrDelegateReady(
|
| + const base::WeakPtr<GvrDelegate>& delegate) {
|
| + if (!vr_device_)
|
| + return;
|
| + vr_device_->SetDelegate(delegate);
|
| + GamepadDataFetcherManager::GetInstance()->AddFactory(
|
| + new GvrGamepadDataFetcher::Factory(delegate, vr_device_->id()));
|
| }
|
|
|
| void GvrDeviceProvider::OnGvrDelegateRemoved() {
|
| - DCHECK(main_thread_task_runner_->BelongsToCurrentThread());
|
| - if (!vr_device_)
|
| - return;
|
| ExitPresent();
|
| }
|
|
|
| -void GvrDeviceProvider::GvrDelegateReady(GvrDelegate* delegate) {
|
| - DCHECK(main_thread_task_runner_->BelongsToCurrentThread());
|
| +void GvrDeviceProvider::OnDisplayBlur() {
|
| + if (!vr_device_)
|
| + return;
|
| + vr_device_->OnDisplayBlur();
|
| +}
|
|
|
| - vr_device_->SetDelegate(delegate);
|
| - GamepadDataFetcherManager::GetInstance()->AddFactory(
|
| - new GvrGamepadDataFetcher::Factory(delegate, vr_device_->id()));
|
| +void GvrDeviceProvider::OnDisplayFocus() {
|
| + if (!vr_device_)
|
| + return;
|
| + vr_device_->OnDisplayFocus();
|
| }
|
|
|
| } // namespace device
|
|
|