82 lines
2.7 KiB
HTML
82 lines
2.7 KiB
HTML
<!DOCTYPE html>
|
|
<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>
|
|
let testName = "Ensures that the XRSession's visibilityState is correctly "
|
|
+ "reported and that the associated visibilitychange event fires.";
|
|
|
|
let watcherDone = new Event("watcherdone");
|
|
let frameFired = new Event("framefired");
|
|
|
|
let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
|
|
|
|
let testFunction = function(session, fakeDeviceController, t) {
|
|
let eventWatcher = new EventWatcher(
|
|
t, session, ["visibilitychange", "framefired", "watcherdone"]);
|
|
let eventPromise = eventWatcher.wait_for(
|
|
["visibilitychange", "visibilitychange", "framefired", "watcherdone"]);
|
|
|
|
function onFrame(timestamp, frame) {
|
|
t.step( () => {
|
|
// The session should not fire any animation frames while the visibility
|
|
// state is hidden.
|
|
assert_not_equals(session.visibilityState, "hidden");
|
|
});
|
|
|
|
// Make sure the frame does fire when the visibility is changed back to "visible"
|
|
session.dispatchEvent(frameFired);
|
|
}
|
|
|
|
function onSessionVisibilityChangeHidden(event) {
|
|
t.step( () => {
|
|
assert_equals(session.visibilityState, "hidden");
|
|
});
|
|
|
|
session.removeEventListener("visibilitychange", onSessionVisibilityChangeHidden, false);
|
|
session.addEventListener("visibilitychange", onSessionVisibilityChangeVisible, false);
|
|
|
|
session.requestAnimationFrame(onFrame)
|
|
|
|
t.step_timeout(() => {
|
|
fakeDeviceController.simulateVisibilityChange("visible");
|
|
}, 300);
|
|
}
|
|
|
|
function onSessionVisibilityChangeVisible(event) {
|
|
t.step( () => {
|
|
assert_equals(session.visibilityState, "visible");
|
|
});
|
|
|
|
session.removeEventListener("visibilitychange", onSessionVisibilityChangeVisible, false);
|
|
session.addEventListener("visibilitychange", onSessionVisibilityChangeInvalid, false);
|
|
fakeDeviceController.simulateVisibilityChange("visible");
|
|
|
|
t.step_timeout(() => {
|
|
session.dispatchEvent(watcherDone);
|
|
}, 300);
|
|
}
|
|
|
|
function onSessionVisibilityChangeInvalid(event) {
|
|
t.step( () => {
|
|
assert_not_reached("Should not fire visibilitychange events for the same state");
|
|
});
|
|
}
|
|
|
|
t.step( () => {
|
|
// Session visibility should start out as "visible"
|
|
assert_equals(session.visibilityState, "visible");
|
|
});
|
|
|
|
session.addEventListener("visibilitychange", onSessionVisibilityChangeHidden, false);
|
|
fakeDeviceController.simulateVisibilityChange("hidden");
|
|
|
|
return eventPromise;
|
|
};
|
|
|
|
xr_session_promise_test(
|
|
testName, testFunction, fakeDeviceInitParams, 'immersive-vr');
|
|
|
|
</script>
|