Chromium Code Reviews| Index: device/vr/vr_device.cc |
| diff --git a/device/vr/vr_device.cc b/device/vr/vr_device.cc |
| index 5e3d7fc253d6fa29c2755622baf9241df7ca49b5..e1108fbc3b86a3664908a3f6849b6da880b0b793 100644 |
| --- a/device/vr/vr_device.cc |
| +++ b/device/vr/vr_device.cc |
| @@ -4,13 +4,14 @@ |
| #include "device/vr/vr_device.h" |
| #include "device/vr/vr_device_provider.h" |
| +#include "device/vr/vr_service_impl.h" |
| namespace device { |
| unsigned int VRDevice::next_id_ = 1; |
| VRDevice::VRDevice(VRDeviceProvider* provider) |
| - : provider_(provider), id_(next_id_) { |
| + : presenting_service_(nullptr), provider_(provider), id_(next_id_) { |
| // Prevent wraparound. Devices with this ID will be treated as invalid. |
| if (next_id_ != VR_DEVICE_LAST_ID) |
| next_id_++; |
| @@ -18,8 +19,49 @@ VRDevice::VRDevice(VRDeviceProvider* provider) |
| VRDevice::~VRDevice() {} |
| -bool VRDevice::RequestPresent(bool secure_origin) { |
| +bool VRDevice::RequestPresent(VRServiceImpl* service, bool secure_origin) { |
| return true; |
| }; |
| +void VRDevice::AddService(VRServiceImpl* service) { |
| + // Create a VRDisplayImpl for this service/device pair |
| + VRDisplayImpl* display_impl = service->GetVRDisplayImpl(this); |
| + displays_.insert( |
| + std::pair<VRServiceImpl*, VRDisplayImpl*>(service, display_impl)); |
|
dcheng
2016/11/04 05:12:21
Use std::make_pair
|
| +} |
| + |
| +void VRDevice::RemoveService(VRServiceImpl* service) { |
| + ExitPresent(service); |
| + displays_.erase(service); |
| +} |
| + |
| +bool VRDevice::IsAccessAllowed(VRServiceImpl* service) { |
| + return (!presenting_service_ || presenting_service_ == service); |
| +} |
| + |
| +bool VRDevice::IsPresentingService(VRServiceImpl* service) { |
| + return (presenting_service_ && presenting_service_ == service); |
| +} |
| + |
| +void VRDevice::OnDisplayChanged() { |
| + mojom::VRDisplayInfoPtr vr_device_info = GetVRDevice(); |
| + if (vr_device_info.is_null()) |
| + return; |
| + |
| + for (const auto& display : displays_) { |
| + mojom::VRDisplayClient* client = display.second->client(); |
| + if (client) |
| + client->OnDisplayChanged(vr_device_info.Clone()); |
| + } |
| +} |
| + |
| +void VRDevice::OnExitPresent(VRServiceImpl* service) { |
| + DisplayClientMap::iterator it = displays_.find(service); |
| + if (it != displays_.end()) { |
| + mojom::VRDisplayClient* client = it->second->client(); |
| + if (client) |
| + client->OnExitPresent(); |
| + } |
| +} |
| + |
| } // namespace device |