#pragma once
#include "ActiveDOMObject.h"
#include "EventTarget.h"
#include "JSDOMPromiseDeferred.h"
#include "VREye.h"
#include <wtf/RefCounted.h>
namespace WebCore {
class RequestAnimationFrameCallback;
class VRDisplayCapabilities;
class VREyeParameters;
class VRFrameData;
class VRPose;
class VRStageParameters;
struct VRLayerInit;
class VRDisplay : public RefCounted<VRDisplay>, public EventTargetWithInlineData, public ActiveDOMObject {
public:
static Ref<VRDisplay> create(ScriptExecutionContext&);
virtual ~VRDisplay();
using RefCounted<VRDisplay>::ref;
using RefCounted<VRDisplay>::deref;
bool isConnected() const;
bool isPresenting() const;
const VRDisplayCapabilities& capabilities() const;
VRStageParameters* stageParameters() const;
const VREyeParameters& getEyeParameters(VREye) const;
unsigned displayId() const;
const String& displayName() const;
bool getFrameData(VRFrameData&) const;
Ref<VRPose> getPose() const;
void resetPose();
double depthNear() const;
void setDepthNear(double);
double depthFar() const;
void setDepthFar(double);
long requestAnimationFrame(Ref<RequestAnimationFrameCallback>&&);
void cancelAnimationFrame(unsigned);
void requestPresent(const Vector<VRLayerInit>&, Ref<DeferredPromise>&&);
void exitPresent(Ref<DeferredPromise>&&);
const Vector<VRLayerInit>& getLayers() const;
void submitFrame();
private:
VRDisplay(ScriptExecutionContext&);
EventTargetInterface eventTargetInterface() const override { return VRDisplayEventTargetInterfaceType; }
ScriptExecutionContext* scriptExecutionContext() const override { return ActiveDOMObject::scriptExecutionContext(); }
void refEventTarget() override { ref(); }
void derefEventTarget() override { deref(); }
bool hasPendingActivity() const override;
const char* activeDOMObjectName() const override;
bool canSuspendForDocumentSuspension() const override;
void stop() override;
Ref<VRDisplayCapabilities> m_capabilities;
Ref<VREyeParameters> m_eyeParameters;
};
}