Update requiredness of some fields

This commit is contained in:
Manish Goregaokar 2019-07-01 18:04:06 -07:00
parent c19240a454
commit 480a9988d1
6 changed files with 30 additions and 40 deletions

View file

@ -54,16 +54,10 @@ pub fn get_views(views: &[FakeXRViewInit]) -> Fallible<(MockVRView, MockVRView)>
_ => return Err(Error::NotSupported), _ => return Err(Error::NotSupported),
}; };
// can be removed once https://github.com/servo/servo/issues/23640 is fixed
let (position_l, position_r) = match (&left.viewOffset.position, &right.viewOffset.position) {
(&Some(ref l), &Some(ref r)) => (l, r),
_ => return Err(Error::Type("Must specify position".into())),
};
if left.projectionMatrix.len() != 16 || if left.projectionMatrix.len() != 16 ||
right.projectionMatrix.len() != 16 || right.projectionMatrix.len() != 16 ||
position_l.len() != 3 || left.viewOffset.position.len() != 3 ||
position_r.len() != 3 right.viewOffset.position.len() != 3
{ {
return Err(Error::Type("Incorrectly sized array".into())); return Err(Error::Type("Incorrectly sized array".into()));
} }
@ -77,9 +71,9 @@ pub fn get_views(views: &[FakeXRViewInit]) -> Fallible<(MockVRView, MockVRView)>
let mut offset_l = [0.; 3]; let mut offset_l = [0.; 3];
let mut offset_r = [0.; 3]; let mut offset_r = [0.; 3];
let v: Vec<_> = position_l.iter().map(|x| **x).collect(); let v: Vec<_> = left.viewOffset.position.iter().map(|x| **x).collect();
offset_l.copy_from_slice(&v); offset_l.copy_from_slice(&v);
let v: Vec<_> = position_r.iter().map(|x| **x).collect(); let v: Vec<_> = right.viewOffset.position.iter().map(|x| **x).collect();
offset_r.copy_from_slice(&v); offset_r.copy_from_slice(&v);
let left = MockVRView { let left = MockVRView {
projection: proj_l, projection: proj_l,
@ -93,25 +87,14 @@ pub fn get_views(views: &[FakeXRViewInit]) -> Fallible<(MockVRView, MockVRView)>
} }
pub fn get_origin(origin: &FakeXRRigidTransformInit) -> Fallible<([f32; 3], [f32; 4])> { pub fn get_origin(origin: &FakeXRRigidTransformInit) -> Fallible<([f32; 3], [f32; 4])> {
// can be removed once https://github.com/servo/servo/issues/23640 is fixed if origin.position.len() != 3 || origin.orientation.len() != 4 {
let position = if let Some(ref position) = origin.position {
position
} else {
return Err(Error::Type("Missing position field".into()));
};
let orientation = if let Some(ref orientation) = origin.orientation {
orientation
} else {
return Err(Error::Type("Missing orientation field".into()));
};
if position.len() != 4 || orientation.len() != 4 {
return Err(Error::Type("Incorrectly sized array".into())); return Err(Error::Type("Incorrectly sized array".into()));
} }
let mut p = [0.; 3]; let mut p = [0.; 3];
let mut o = [0.; 4]; let mut o = [0.; 4];
let v: Vec<_> = position.iter().map(|x| **x).collect(); let v: Vec<_> = origin.position.iter().map(|x| **x).collect();
p.copy_from_slice(&v[0..3]); p.copy_from_slice(&v[0..3]);
let v: Vec<_> = orientation.iter().map(|x| **x).collect(); let v: Vec<_> = origin.orientation.iter().map(|x| **x).collect();
o.copy_from_slice(&v); o.copy_from_slice(&v);
Ok((p, o)) Ok((p, o))

View file

@ -14,8 +14,7 @@ interface FakeXRDevice {
// Promise<void> disconnect(); // Promise<void> disconnect();
// Sets the origin of the viewer // Sets the origin of the viewer
// dict must be optional because of https://github.com/servo/servo/issues/23640 [Throws] void setViewerOrigin(FakeXRRigidTransformInit origin, optional boolean emulatedPosition = false);
[Throws] void setViewerOrigin(optional FakeXRRigidTransformInit origin, optional boolean emulatedPosition = false);
// // Simulates devices focusing and blurring sessions. // // Simulates devices focusing and blurring sessions.
// void simulateVisibilityChange(XRVisibilityState); // void simulateVisibilityChange(XRVisibilityState);
@ -53,7 +52,6 @@ dictionary FakeXRBoundsPoint {
}; };
dictionary FakeXRRigidTransformInit { dictionary FakeXRRigidTransformInit {
// should be required, see https://github.com/servo/servo/issues/23640 required sequence<float> position;
sequence<float> position; required sequence<float> orientation;
sequence<float> orientation;
}; };

View file

@ -52,12 +52,16 @@ impl XRTestMethods for XRTest {
return p; return p;
} }
let origin = match get_origin(&init.viewerOrigin) { let origin = if let Some(ref o) = init.viewerOrigin {
Ok(origin) => origin, match get_origin(&o) {
Err(e) => { Ok(origin) => origin,
p.reject_error(e); Err(e) => {
return p; p.reject_error(e);
}, return p;
},
}
} else {
Default::default()
}; };
let views = match get_views(&init.views) { let views = match get_views(&init.views) {

View file

@ -19683,15 +19683,15 @@
"testharness" "testharness"
], ],
"webxr/create_session.html": [ "webxr/create_session.html": [
"306ab85d3b1b914d2dd7c11a3b03dccd990148ae", "ddec5add27b84e8e2febe3789d326f1e9fb7f508",
"testharness" "testharness"
], ],
"webxr/obtain_frame.html": [ "webxr/obtain_frame.html": [
"99d8fd1ef152e4030444c3ca42482d28c3e855d3", "e2b4424d5779baedf6bdb50f1b3151336f31a4cb",
"testharness" "testharness"
], ],
"webxr/resources/webxr-util.js": [ "webxr/resources/webxr-util.js": [
"b644ba72ac801bc8f659e9678d31ab23db0b7281", "554c1c183d3710e54dc60704dad0aac542ffd67c",
"support" "support"
] ]
}, },

View file

@ -2,11 +2,16 @@
<head> <head>
<script src="/resources/testharness.js"></script> <script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="./resources/webxr-util.js"></script>
</head> </head>
<body> <body>
<script> <script>
async_test(function(t) { async_test(function(t) {
navigator.xr.test.simulateDeviceConnection({supportsImmersive: true}).then((m) => { navigator.xr.test.simulateDeviceConnection({
supportsImmersive: true,
views: TEST_VIEWS,
viewerOrigin: {position: [0.5, 0.1, 0.1], orientation: [1, 0, 0, 1] }
}).then((m) => {
return navigator.xr.requestSession({mode: "immersive-vr"}) return navigator.xr.requestSession({mode: "immersive-vr"})
}).then(() => t.done()); }).then(() => t.done());
}); });

View file

@ -14,7 +14,7 @@
let mock = await navigator.xr.test.simulateDeviceConnection({ let mock = await navigator.xr.test.simulateDeviceConnection({
supportsImmersive: true, supportsImmersive: true,
views: TEST_VIEWS, views: TEST_VIEWS,
viewerOrigin: {position: [0.5, 0.1, 0.1, 1], orientation: [1, 0, 0, 1] } viewerOrigin: {position: [0.5, 0.1, 0.1], orientation: [1, 0, 0, 1] }
}); });
let session = await navigator.xr.requestSession({mode: "immersive-vr"}); let session = await navigator.xr.requestSession({mode: "immersive-vr"});
await session.updateRenderState({"baseLayer": new XRWebGLLayer(session, gl, {})}); await session.updateRenderState({"baseLayer": new XRWebGLLayer(session, gl, {})});