blob: d4930f71df933c6a30d118bb7ab2d0f0f4c90b34 [file] [edit]
<!DOCTYPE html> <!-- webkit-test-runner [ SpatialPortalEnabled=true ModelElementEnabled=true ModelProcessEnabled=true allowTestOnlyIPC=true ] -->
<html>
<head>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="../resources/ui-helper.js"></script>
<style>
.portal { spatial: portal; width: 400px; height: 200px; }
</style>
<body>
<div id="outer">
<div id="inner" class="portal">
<model id="model"><source src="../model-element/resources/cube.usdz"></model>
</div>
</div>
<script>
'use strict';
window.internals?.disableModelLoadDelaysForTesting();
promise_test(async t => {
const outer = document.getElementById("outer");
const inner = document.getElementById("inner");
const model = document.getElementById("model");
await model.ready;
await UIHelper.ensureStablePresentationUpdate();
assert_true(internals.establishesSpatialPortal(inner), "the inner portal is live while it has no portal ancestor");
assert_equals(internals.numberOfHostedModelsInSpatialPortal(inner), 1, "the inner portal hosts the model");
// Turning the ancestor into a portal must suppress the descendant portal.
outer.classList.add("portal");
await UIHelper.ensureStablePresentationUpdate();
assert_true(internals.establishesSpatialPortal(outer), "the outer element establishes a portal once it gains spatial: portal");
assert_false(internals.establishesSpatialPortal(inner), "the inner portal is suppressed by the new ancestor portal");
assert_equals(internals.numberOfHostedModelsInSpatialPortal(inner), 0, "the suppressed inner portal hosts nothing");
// Removing it again must hand the model back to the inner portal.
outer.classList.remove("portal");
await UIHelper.ensureStablePresentationUpdate();
assert_false(internals.establishesSpatialPortal(outer), "the outer element stops establishing a portal");
assert_true(internals.establishesSpatialPortal(inner), "the inner portal is restored");
}, "Toggling spatial: portal on an ancestor suppresses and restores a descendant portal");
</script>
</body>
</html>