Auto merge of #24133 - paulrouget:userAction, r=jdm

Do not allow XR session on non user-activated events

This sets the thread in "user interaction mode" when the dispatched event is trusted. I also tried an approach where we would not rely on the dispatched event but just set "user interaction mode" when we get a compositor event (which, we can assume, are only user generated). That worked as well.

Fixes #23787.

<!-- 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/24133)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2019-09-20 06:54:19 -04:00 committed by GitHub
commit 293ccd07e8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 54 additions and 15 deletions

View file

@ -702192,7 +702192,7 @@
"testharness"
],
"webxr/xrWebGLLayer_constructor.https.html": [
"0584da79c12def757f951ec53c4c048f18c39b8c",
"7e57f4286c66ea9f8380791840dada3d82b611fe",
"testharness"
],
"webxr/xrWebGLLayer_framebuffer_draw.https.html": [

View file

@ -1,4 +0,0 @@
[xrDevice_requestSession_immersive_no_gesture.https.html]
[Requesting immersive session outside of a user gesture rejects]
expected: FAIL

View file

@ -7658,9 +7658,6 @@
]
]
},
"stub": {
"css/blockify_inline_element.html": []
},
"support": {
".gitignore": [
[]
@ -19747,11 +19744,11 @@
"testharness"
],
"webxr/create_session.html": [
"e68ea81893a65793094f9086cdd6d73800ee1c14",
"af76c5a812d7d05a0158194560933def3fbdb9f9",
"testharness"
],
"webxr/obtain_frame.html": [
"39698805b476c7e469548d25ece59560a596604d",
"74fda5bad43e8ea95552e65380e83952680e8469",
"testharness"
],
"webxr/resources/webxr-util.js": [

View file

@ -12,7 +12,11 @@
views: TEST_VIEWS,
viewerOrigin: {position: [0.5, 0.1, 0.1], orientation: [1, 0, 0, 1] }
}).then((m) => {
return navigator.xr.requestSession("immersive-vr")
let sessionPromise;
navigator.xr.test.simulateUserActivation(() => {
sessionPromise = navigator.xr.requestSession("immersive-vr")
});
return sessionPromise;
}).then(() => t.done());
});
</script>

View file

@ -16,7 +16,11 @@
views: TEST_VIEWS,
viewerOrigin: {position: [0.5, 0.1, 0.1], orientation: [1, 0, 0, 1] }
});
let session = await navigator.xr.requestSession("immersive-vr");
let sessionPromise;
navigator.xr.test.simulateUserActivation(() => {
sessionPromise = navigator.xr.requestSession("immersive-vr");
});
let session = await sessionPromise;
await session.updateRenderState({"baseLayer": new XRWebGLLayer(session, gl, {})});
let resolve;

View file

@ -17,8 +17,11 @@ xr_promise_test("Ensure that XRWebGLLayer's constructor throws appropriate error
let gl = webglCanvas.getContext('webgl', glAttributes);
return navigator.xr.test.simulateDeviceConnection(TRACKED_IMMERSIVE_DEVICE)
.then(() => {
return navigator.xr.requestSession('inline')
.then((session) => {
let sessionPromise;
navigator.xr.test.simulateUserActivation(function() {
sessionPromise = navigator.xr.requestSession('inline');
});
return sessionPromise.then((session) => {
try {
let webglLayerIncompatible = new XRWebGLLayer(session, gl);
} catch (err) {