mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Auto merge of #23485 - Manishearth:xrtest, r=asajeffrey
Basic XR Testing support This adds support for the XRTest and FakeXRDeviceController APIs from https://github.com/immersive-web/webxr-test-api, and plugs them into the `mock` backend of rust-webvr. Tested with [a modified webxr test page](https://github.com/immersive-web/webxr-test-api) r? @jdm @asajeffrey <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/23485) <!-- Reviewable:end -->
This commit is contained in:
commit
7c8a4ecead
18 changed files with 306 additions and 13 deletions
49
components/script/dom/webidls/FakeXRDeviceController.webidl
Normal file
49
components/script/dom/webidls/FakeXRDeviceController.webidl
Normal file
|
@ -0,0 +1,49 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
// https://github.com/immersive-web/webxr-test-api/
|
||||
|
||||
[Exposed=Window, Pref="dom.webxr.test"]
|
||||
interface FakeXRDeviceController {
|
||||
// Creates and attaches a XRFrameOfReference of the type specified to the device.
|
||||
// void setFrameOfReference(XRFrameOfReferenceType, FakeXRFrameOfReferenceInit);
|
||||
|
||||
// // Sets the values to be used for subsequent
|
||||
// // requestAnimationFrame() callbacks.
|
||||
[Throws] void setViews(sequence<FakeXRViewInit> views);
|
||||
|
||||
[Throws] void setViewerOrigin(FakeXRRigidTransform origin);
|
||||
|
||||
// Simulates the user activating the reset pose on a device.
|
||||
// void simulateResetPose();
|
||||
|
||||
// Simulates the platform ending the sessions.
|
||||
// void simulateForcedEndSessions();
|
||||
|
||||
// Simulates devices focusing and blurring sessions.
|
||||
// void simulateBlurSession(XRSession);
|
||||
// void simulateFocusSession(XRSession);
|
||||
|
||||
// void setBoundsGeometry(Array<FakeXRBoundsPoint> boundsCoodinates)l
|
||||
|
||||
// Promise<FakeXRInputSourceController>
|
||||
// simulateInputSourceConnection(FakeXRInputSourceInit);
|
||||
};
|
||||
|
||||
dictionary FakeXRViewInit {
|
||||
required XREye eye;
|
||||
// https://immersive-web.github.io/webxr/#view-projection-matrix
|
||||
required sequence<float> projectionMatrix;
|
||||
// https://immersive-web.github.io/webxr/#view-offset
|
||||
required FakeXRRigidTransform viewOffset;
|
||||
};
|
||||
|
||||
dictionary FakeXRBoundsPoint {
|
||||
double x; double z;
|
||||
};
|
||||
|
||||
dictionary FakeXRRigidTransform {
|
||||
required sequence<float> position;
|
||||
required sequence<float> orientation;
|
||||
};
|
|
@ -28,3 +28,8 @@ dictionary XRSessionCreationOptions {
|
|||
XRSessionMode mode = "inline";
|
||||
// XRPresentationContext outputContext;
|
||||
};
|
||||
|
||||
partial interface XR {
|
||||
// https://github.com/immersive-web/webxr-test-api/
|
||||
[SameObject, Pref="dom.webxr.test"] readonly attribute XRTest test;
|
||||
};
|
||||
|
|
25
components/script/dom/webidls/XRTest.webidl
Normal file
25
components/script/dom/webidls/XRTest.webidl
Normal file
|
@ -0,0 +1,25 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
// https://github.com/immersive-web/webxr-test-api/
|
||||
|
||||
[Exposed=Window, Pref="dom.webxr.test"]
|
||||
interface XRTest {
|
||||
// Simulates connecting a device to the system.
|
||||
// Used to instantiate a fake device for use in tests.
|
||||
Promise<FakeXRDeviceController> simulateDeviceConnection(FakeXRDeviceInit init);
|
||||
|
||||
// // Simulates a device being disconnected from the system.
|
||||
// Promise<void> simulateDeviceDisconnection(XRDevice);
|
||||
|
||||
// // Simulates a user activation (aka user gesture) for the current scope.
|
||||
// // The activation is only guaranteed to be valid in the provided function and only applies to WebXR
|
||||
// // Device API methods.
|
||||
// void simulateUserActivation(Function);
|
||||
};
|
||||
|
||||
dictionary FakeXRDeviceInit {
|
||||
// TODO: Subject to change to match spec changes.
|
||||
required boolean supportsImmersive;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue