blob: 89c330452156e783b9b35aeb4519fb277736987a [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#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() : presenting_service_(nullptr), id_(next_id_) {
// Prevent wraparound. Devices with this ID will be treated as invalid.
if (next_id_ != VR_DEVICE_LAST_ID)
next_id_++;
}
VRDevice::~VRDevice() {}
bool VRDevice::RequestPresent(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::make_pair(service, display_impl));
}
void VRDevice::RemoveService(VRServiceImpl* service) {
if (IsPresentingService(service))
ExitPresent();
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::OnChanged() {
mojom::VRDisplayInfoPtr vr_device_info = GetVRDevice();
if (vr_device_info.is_null())
return;
for (const auto& display : displays_)
display.second->client()->OnChanged(vr_device_info.Clone());
}
void VRDevice::OnExitPresent() {
DisplayClientMap::iterator it = displays_.find(presenting_service_);
if (it != displays_.end())
it->second->client()->OnExitPresent();
SetPresentingService(nullptr);
}
void VRDevice::OnBlur() {
for (const auto& display : displays_)
display.second->client()->OnBlur();
}
void VRDevice::OnFocus() {
for (const auto& display : displays_)
display.second->client()->OnFocus();
}
void VRDevice::OnActivate(mojom::VRDisplayEventReason reason) {
for (const auto& display : displays_)
display.second->client()->OnActivate(reason);
}
void VRDevice::OnDeactivate(mojom::VRDisplayEventReason reason) {
for (const auto& display : displays_)
display.second->client()->OnDeactivate(reason);
}
void VRDevice::SetPresentingService(VRServiceImpl* service) {
presenting_service_ = service;
}
} // namespace device