[WebVR] Add IDLs and stubs
https://bugs.webkit.org/show_bug.cgi?id=174202
Reviewed by Dean Jackson.
Source/WebCore:
Adding the complete set of IDLs for the WebVR 1.1 spec including the interface stubs which
currently do nothing.
Tests: webvr/webvr-disabled.html
webvr/webvr-enabled.html
* CMakeLists.txt:
* DerivedSources.make:
* Modules/webvr/DOMWindowWebVR.idl: Added.
* Modules/webvr/GamepadWebVR.cpp: Added.
(WebCore::GamepadWebVR::GamepadWebVR):
(WebCore::GamepadWebVR::~GamepadWebVR):
(WebCore::GamepadWebVR::displayId):
* Modules/webvr/GamepadWebVR.h: Added.
* Modules/webvr/GamepadWebVR.idl: Added.
* Modules/webvr/NavigatorWebVR.cpp: Added.
(WebCore::NavigatorWebVR::getVRDisplays):
(WebCore::NavigatorWebVR::activeVRDisplays):
(WebCore::NavigatorWebVR::vrEnabled):
* Modules/webvr/NavigatorWebVR.h: Added.
* Modules/webvr/NavigatorWebVR.idl: Added.
* Modules/webvr/VRDisplay.cpp: Added.
(WebCore::VRDisplay::create):
(WebCore::VRDisplay::VRDisplay):
(WebCore::VRDisplay::isConnected const):
(WebCore::VRDisplay::isPresenting const):
(WebCore::VRDisplay::capabilities const):
(WebCore::VRDisplay::stageParameters const):
(WebCore::VRDisplay::getEyeParameters const):
(WebCore::VRDisplay::displayId const):
(WebCore::VRDisplay::displayName const):
(WebCore::VRDisplay::getFrameData const):
(WebCore::VRDisplay::getPose const):
(WebCore::VRDisplay::resetPose):
(WebCore::VRDisplay::depthNear const):
(WebCore::VRDisplay::setDepthNear):
(WebCore::VRDisplay::depthFar const):
(WebCore::VRDisplay::setDepthFar):
(WebCore::VRDisplay::requestAnimationFrame):
(WebCore::VRDisplay::cancelAnimationFrame):
(WebCore::VRDisplay::requestPresent):
(WebCore::VRDisplay::exitPresent):
(WebCore::VRDisplay::getLayers const):
(WebCore::VRDisplay::submitFrame):
(WebCore::VRDisplay::hasPendingActivity const):
(WebCore::VRDisplay::activeDOMObjectName const):
(WebCore::VRDisplay::canSuspendForDocumentSuspension const):
(WebCore::VRDisplay::stop):
* Modules/webvr/VRDisplay.h: Added.
* Modules/webvr/VRDisplay.idl: Added.
* Modules/webvr/VRDisplayCapabilities.cpp: Added.
(WebCore::VRDisplayCapabilities::hasPosition const):
(WebCore::VRDisplayCapabilities::hasOrientation const):
(WebCore::VRDisplayCapabilities::hasExternalDisplay const):
(WebCore::VRDisplayCapabilities::canPresent const):
(WebCore::VRDisplayCapabilities::maxLayer const):
* Modules/webvr/VRDisplayCapabilities.h: Added.
(WebCore::VRDisplayCapabilities::create):
* Modules/webvr/VRDisplayCapabilities.idl: Added.
* Modules/webvr/VRDisplayEvent.cpp: Added.
(WebCore::VRDisplayEvent::VRDisplayEvent):
(WebCore::VRDisplayEvent::display const):
(WebCore::VRDisplayEvent::reason const):
(WebCore::VRDisplayEvent::eventInterface const):
* Modules/webvr/VRDisplayEvent.h: Added.
* Modules/webvr/VRDisplayEvent.idl: Added.
* Modules/webvr/VRDisplayEventReason.h: Added.
* Modules/webvr/VRDisplayEventReason.idl: Added.
* Modules/webvr/VREye.h: Added.
* Modules/webvr/VREye.idl: Added.
* Modules/webvr/VREyeParameters.cpp: Added.
(WebCore::VREyeParameters::VREyeParameters):
(WebCore::VREyeParameters::offset const):
(WebCore::VREyeParameters::fieldOfView const):
(WebCore::VREyeParameters::renderWidth const):
(WebCore::VREyeParameters::renderHeight const):
* Modules/webvr/VREyeParameters.h: Added.
(WebCore::VREyeParameters::create):
* Modules/webvr/VREyeParameters.idl: Added.
* Modules/webvr/VRFieldOfView.cpp: Added.
(WebCore::VRFieldOfView::upDegrees const):
(WebCore::VRFieldOfView::rightDegrees const):
(WebCore::VRFieldOfView::downDegrees const):
(WebCore::VRFieldOfView::leftDegrees const):
* Modules/webvr/VRFieldOfView.h: Added.
(WebCore::VRFieldOfView::create):
* Modules/webvr/VRFieldOfView.idl: Added.
* Modules/webvr/VRFrameData.cpp: Added.
(WebCore::VRFrameData::VRFrameData):
(WebCore::VRFrameData::timestamp const):
(WebCore::VRFrameData::leftProjectionMatrix const):
(WebCore::VRFrameData::leftViewMatrix const):
(WebCore::VRFrameData::rightProjectionMatrix const):
(WebCore::VRFrameData::rightViewMatrix const):
(WebCore::VRFrameData::pose const):
* Modules/webvr/VRFrameData.h: Added.
(WebCore::VRFrameData::create):
* Modules/webvr/VRFrameData.idl: Added.
* Modules/webvr/VRLayerInit.h: Added.
* Modules/webvr/VRLayerInit.idl: Added.
* Modules/webvr/VRPose.cpp: Added.
(WebCore::VRPose::position const):
(WebCore::VRPose::linearVelocity const):
(WebCore::VRPose::linearAcceleration const):
(WebCore::VRPose::orientation const):
(WebCore::VRPose::angularVelocity const):
(WebCore::VRPose::angularAcceleration const):
* Modules/webvr/VRPose.h: Added.
(WebCore::VRPose::create):
* Modules/webvr/VRPose.idl: Added.
* Modules/webvr/VRStageParameters.cpp: Added.
(WebCore::VRStageParameters::sittingToStandingTransform const):
(WebCore::VRStageParameters::sizeX const):
(WebCore::VRStageParameters::sizeZ const):
* Modules/webvr/VRStageParameters.h: Added.
(WebCore::VRStageParameters::create):
* Modules/webvr/VRStageParameters.idl: Added.
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/WebCoreBuiltinNames.h:
* dom/EventNames.h:
* dom/EventNames.in:
* dom/EventTargetFactory.in:
* features.json:
* page/RuntimeEnabledFeatures.h:
(WebCore::RuntimeEnabledFeatures::setWebVREnabled):
(WebCore::RuntimeEnabledFeatures::webVREnabled const):
* testing/InternalSettings.cpp:
(WebCore::InternalSettings::Backup::restoreTo):
(WebCore::InternalSettings::setWebVREnabled):
* testing/InternalSettings.h:
* testing/InternalSettings.idl:
Source/WebKit:
* Shared/WebPreferencesDefinitions.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updatePreferences):
LayoutTests:
New tests to verify that WebVR is properly enabled/disabled at runtime.
* webvr/webvr-disabled-expected.txt: Added.
* webvr/webvr-disabled.html: Added.
* webvr/webvr-enabled-expected.txt: Added.
* webvr/webvr-enabled.html: Added.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@221966 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/Modules/webvr/VRDisplay.cpp b/Source/WebCore/Modules/webvr/VRDisplay.cpp
new file mode 100644
index 0000000..3a5270a
--- /dev/null
+++ b/Source/WebCore/Modules/webvr/VRDisplay.cpp
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2017 Igalia S.L. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "VRDisplay.h"
+
+#include "VRDisplayCapabilities.h"
+#include "VREyeParameters.h"
+#include "VRLayerInit.h"
+#include "VRPose.h"
+
+namespace WebCore {
+
+Ref<VRDisplay> VRDisplay::create(ScriptExecutionContext& context)
+{
+ auto display = adoptRef(*new VRDisplay(context));
+ display->suspendIfNeeded();
+ return display;
+}
+
+VRDisplay::VRDisplay(ScriptExecutionContext& context)
+ : ActiveDOMObject(&context)
+ , m_capabilities(VRDisplayCapabilities::create())
+ , m_eyeParameters(VREyeParameters::create())
+{
+}
+
+VRDisplay::~VRDisplay() = default;
+
+bool VRDisplay::isConnected() const
+{
+ return false;
+}
+
+bool VRDisplay::isPresenting() const
+{
+ return false;
+}
+
+const VRDisplayCapabilities& VRDisplay::capabilities() const
+{
+ return m_capabilities;
+}
+
+VRStageParameters* VRDisplay::stageParameters() const
+{
+ return nullptr;
+}
+
+const VREyeParameters& VRDisplay::getEyeParameters(VREye) const
+{
+ return m_eyeParameters;
+}
+
+unsigned VRDisplay::displayId() const
+{
+ return 0;
+}
+
+const String& VRDisplay::displayName() const
+{
+ return emptyString();
+}
+
+bool VRDisplay::getFrameData(VRFrameData&) const
+{
+ return false;
+}
+
+Ref<VRPose> VRDisplay::getPose() const
+{
+ return VRPose::create();
+}
+
+void VRDisplay::resetPose()
+{
+}
+
+double VRDisplay::depthNear() const
+{
+ return 0;
+}
+
+void VRDisplay::setDepthNear(double)
+{
+}
+
+double VRDisplay::depthFar() const
+{
+ return 0;
+}
+
+void VRDisplay::setDepthFar(double)
+{
+}
+
+long VRDisplay::requestAnimationFrame(Ref<RequestAnimationFrameCallback>&&)
+{
+ return 0;
+}
+
+void VRDisplay::cancelAnimationFrame(unsigned)
+{
+}
+
+void VRDisplay::requestPresent(const Vector<VRLayerInit>&, Ref<DeferredPromise>&&)
+{
+}
+
+void VRDisplay::exitPresent(Ref<DeferredPromise>&&)
+{
+}
+
+const Vector<VRLayerInit>& VRDisplay::getLayers() const
+{
+ static auto mockLayers = makeNeverDestroyed(Vector<VRLayerInit> { });
+ return mockLayers;
+}
+
+void VRDisplay::submitFrame()
+{
+}
+
+bool VRDisplay::hasPendingActivity() const
+{
+ return false;
+}
+
+const char* VRDisplay::activeDOMObjectName() const
+{
+ return "VRDisplay";
+}
+
+bool VRDisplay::canSuspendForDocumentSuspension() const
+{
+ return false;
+}
+
+void VRDisplay::stop()
+{
+}
+
+} // namespace WebCore