Index: device/vr/vr_service_impl.cc |
diff --git a/device/vr/vr_service_impl.cc b/device/vr/vr_service_impl.cc |
index 9d0fb36618c53e59443d23faf2597e3da3f59b4d..05b75b07221d06b45bbbbd7a4705902fad213047 100644 |
--- a/device/vr/vr_service_impl.cc |
+++ b/device/vr/vr_service_impl.cc |
@@ -14,7 +14,8 @@ |
namespace device { |
-VRServiceImpl::VRServiceImpl() : listening_for_activate_(false) {} |
+VRServiceImpl::VRServiceImpl() |
+ : listening_for_activate_(false), weak_ptr_factory_(this) {} |
VRServiceImpl::~VRServiceImpl() { |
// Destroy VRDisplay before calling RemoveService below. RemoveService might |
@@ -29,22 +30,6 @@ void VRServiceImpl::Create(mojo::InterfaceRequest<mojom::VRService> request) { |
std::move(request)); |
} |
-// Gets a VRDisplayPtr unique to this service so that the associated page can |
-// communicate with the VRDevice. |
-VRDisplayImpl* VRServiceImpl::GetVRDisplayImpl(VRDevice* device) { |
- auto it = displays_.find(device); |
- if (it != displays_.end()) |
- return it->second.get(); |
- |
- VRDisplayImpl* display_impl = new VRDisplayImpl(device, this); |
- displays_[device] = base::WrapUnique(display_impl); |
- return display_impl; |
-} |
- |
-void VRServiceImpl::RemoveDevice(VRDevice* device) { |
- displays_.erase(device); |
-} |
- |
void VRServiceImpl::SetClient(mojom::VRServiceClientPtr service_client, |
const SetClientCallback& callback) { |
DCHECK(!client_.get()); |
@@ -58,10 +43,39 @@ void VRServiceImpl::SetClient(mojom::VRServiceClientPtr service_client, |
callback.Run(device_manager->GetNumberOfConnectedDevices()); |
} |
+void VRServiceImpl::ConnectDevice(VRDevice* device) { |
+ DCHECK(displays_.count(device) == 0); |
+ base::Callback<void(mojom::VRDisplayInfoPtr)> on_created = |
+ base::Bind(&VRServiceImpl::OnVRDisplayInfoCreated, |
+ weak_ptr_factory_.GetWeakPtr(), device); |
+ device->CreateVRDisplayInfo(on_created); |
+} |
+ |
void VRServiceImpl::SetListeningForActivate(bool listening) { |
listening_for_activate_ = listening; |
VRDeviceManager* device_manager = VRDeviceManager::GetInstance(); |
device_manager->ListeningForActivateChanged(listening); |
} |
+// Creates a VRDisplayPtr unique to this service so that the associated page can |
+// communicate with the VRDevice. |
+void VRServiceImpl::OnVRDisplayInfoCreated( |
+ VRDevice* device, |
+ mojom::VRDisplayInfoPtr display_info) { |
+ // TODO(crbug/701027): make sure that client_ is never null by initializing it |
+ // in the constructor. |
+ if (!client_) { |
+ DLOG(ERROR) << "Cannot create VR display because connection to render " |
+ "process is not established"; |
+ return; |
+ } |
+ displays_[device] = base::MakeUnique<VRDisplayImpl>( |
+ device, this, client_.get(), std::move(display_info)); |
+} |
+ |
+VRDisplayImpl* VRServiceImpl::GetVRDisplayImplForTesting(VRDevice* device) { |
+ auto it = displays_.find(device); |
+ return (it == displays_.end()) ? nullptr : it->second.get(); |
+} |
+ |
} // namespace device |