Index: device/vr/vr_device_manager.cc |
diff --git a/device/vr/vr_device_manager.cc b/device/vr/vr_device_manager.cc |
index 4d960baa732c89037c35cb0ab5fe796fffd7edf3..f037bcc647c5aef71b3dbd23f44c5c84e280950f 100644 |
--- a/device/vr/vr_device_manager.cc |
+++ b/device/vr/vr_device_manager.cc |
@@ -22,8 +22,6 @@ VRDeviceManager* g_vr_device_manager = nullptr; |
VRDeviceManager::VRDeviceManager() |
: vr_initialized_(false), keep_alive_(false) { |
- bindings_.set_connection_error_handler( |
- base::Bind(&VRDeviceManager::OnConnectionError, base::Unretained(this))); |
// Register VRDeviceProviders for the current platform |
#if defined(OS_ANDROID) |
std::unique_ptr<VRDeviceProvider> cardboard_provider( |
@@ -44,19 +42,6 @@ VRDeviceManager::~VRDeviceManager() { |
g_vr_device_manager = nullptr; |
} |
-void VRDeviceManager::BindRequest(mojo::InterfaceRequest<VRService> request) { |
- VRDeviceManager* device_manager = GetInstance(); |
- device_manager->bindings_.AddBinding(device_manager, std::move(request)); |
-} |
- |
-void VRDeviceManager::OnConnectionError() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- if (bindings_.empty() && !keep_alive_) { |
- // Delete the device manager when it has no active connections. |
- delete g_vr_device_manager; |
- } |
-} |
- |
VRDeviceManager* VRDeviceManager::GetInstance() { |
if (!g_vr_device_manager) |
g_vr_device_manager = new VRDeviceManager(); |
@@ -76,6 +61,25 @@ bool VRDeviceManager::HasInstance() { |
return !!g_vr_device_manager; |
} |
+void VRDeviceManager::AddService(VRServiceImpl* service) { |
+ LOG(ERROR) << "VRDeviceManager::AddService"; |
+ services_.push_back(service); |
+ |
+ // Ensure that the device providers are initialized |
+ InitializeProviders(); |
+} |
+ |
+void VRDeviceManager::RemoveService(VRServiceImpl* service) { |
+ LOG(ERROR) << "VRDeviceManager::RemoveService"; |
+ services_.erase(std::remove(services_.begin(), services_.end(), service), |
+ services_.end()); |
+ |
+ if (services_.empty() && !keep_alive_) { |
+ // Delete the device manager when it has no active connections. |
+ delete g_vr_device_manager; |
+ } |
+} |
+ |
mojo::Array<VRDisplayPtr> VRDeviceManager::GetVRDevices() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
@@ -118,6 +122,13 @@ VRDevice* VRDeviceManager::GetDevice(unsigned int index) { |
return iter->second; |
} |
+// These dispatchers must use Clone() instead of std::move to ensure that |
+// if there are multiple registered services they all get a copy of the data. |
+void VRDeviceManager::OnDeviceChanged(VRDisplayPtr device) { |
+ for (const auto& service : services_) |
+ service->client()->OnDisplayChanged(device.Clone()); |
+} |
+ |
void VRDeviceManager::InitializeProviders() { |
if (vr_initialized_) { |
return; |
@@ -134,23 +145,4 @@ void VRDeviceManager::RegisterProvider( |
providers_.push_back(make_linked_ptr(provider.release())); |
} |
-void VRDeviceManager::GetDisplays(const GetDisplaysCallback& callback) { |
- callback.Run(GetVRDevices()); |
-} |
- |
-void VRDeviceManager::GetPose(uint32_t index, const GetPoseCallback& callback) { |
- VRDevice* device = GetDevice(index); |
- if (device) { |
- callback.Run(device->GetPose()); |
- } else { |
- callback.Run(nullptr); |
- } |
-} |
- |
-void VRDeviceManager::ResetPose(uint32_t index) { |
- VRDevice* device = GetDevice(index); |
- if (device) |
- device->ResetPose(); |
-} |
- |
} // namespace device |