68 lines
2.7 KiB
HTML
68 lines
2.7 KiB
HTML
<!DOCTYPE html>
|
|
<body>
|
|
<script src=/resources/testharness.js></script>
|
|
<script src=/resources/testharnessreport.js></script>
|
|
<script src="resources/webxr_util.js"></script>
|
|
<script src="resources/webxr_test_constants.js"></script>
|
|
|
|
<script>
|
|
function testFunctionGenerator(createSessionFromEventCallback) {
|
|
return function(session, testDeviceController, t) {
|
|
let done = false;
|
|
|
|
function createSession() {
|
|
return new Promise((resolve) => {
|
|
navigator.xr.requestSession("immersive-vr")
|
|
.then((new_session) => {
|
|
// The test framework ensures that the created session ends,
|
|
// but will not do cleanup for this session, so if it gets
|
|
// created, we need to ensure that it gets cleaned up.
|
|
return new_session.end();
|
|
}).then(() => {
|
|
done = true;
|
|
resolve();
|
|
}).catch((err) => {
|
|
// Only one catch is needed for the whole promise chain.
|
|
// If ending the new session throws, it's fine to fail as
|
|
// we'd otherwise end up in a bad state.
|
|
t.step(() => {
|
|
assert_unreached("Session creation should not throw: " + err);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
function onSessionEnd() {
|
|
if (createSessionFromEventCallback) {
|
|
createSession();
|
|
}
|
|
}
|
|
|
|
session.addEventListener("end", onSessionEnd, false);
|
|
|
|
// We need to simulate the user activation before we call end as
|
|
// otherwise (depending on the implementation) it can interfere with
|
|
// the scheduling of the dispatched event/promise, and make session
|
|
// creation succeed even when there may be bugs preventing it from
|
|
// doing so in real scenarios.
|
|
navigator.xr.test.simulateUserActivation(() => {
|
|
session.end().then(() => {
|
|
if (!createSessionFromEventCallback) {
|
|
createSession();
|
|
}
|
|
});
|
|
});
|
|
|
|
return t.step_wait(() => done);
|
|
};
|
|
}
|
|
|
|
xr_session_promise_test("Create new session in OnSessionEnded event",
|
|
testFunctionGenerator(/*createSessionFromEventCallback=*/true),
|
|
TRACKED_IMMERSIVE_DEVICE, 'immersive-vr');
|
|
|
|
xr_session_promise_test("Create mew session in end promise",
|
|
testFunctionGenerator(/*createSessionFromEventCallback=*/false),
|
|
TRACKED_IMMERSIVE_DEVICE, 'immersive-vr');
|
|
</script>
|
|
</body>
|