blob: 105000468fcc8c9cfa05fbe0cda1da226ee24e22 [file] [log] [blame]
<!DOCTYPE html>
<script src='../../resources/testharness.js'></script>
<script src='../../resources/testharnessreport.js'></script>
<script src='../resources/shadow-dom.js'></script>
<div id='host'>
<template data-mode='v0'>
<content></content>
</template>
<div id='hostV1'>
<template data-mode='open'>
<div id='hostV1inV1'>
<template data-mode='open'>
<div id='hostV0inV1inV1'>
<template data-mode='v0'>
<canvas></canvas>
</template>
</div>
</template>
</div>
</template>
</div>
</div>
<script>
async_test((test) => {
document.onpointerlockerror = test.unreached_func('onpointerlockerror is not expected.');
document.onpointerlockchange = test.step_func(() => {
// Not interested in handling before or after exitPointerLock.
if (document.pointerLockElement === null)
return;
assert_equals(document.pointerLockElement, canvas, 'if it is in V0 shadow, return as it is.');
assert_equals(host.shadowRoot.pointerLockElement, null);
assert_equals(hostV1.shadowRoot.pointerLockElement, hostV1inV1)
assert_equals(hostV1inV1.shadowRoot.pointerLockElement, canvas);
assert_equals(hostV0inV1inV1.shadowRoot.pointerLockElement, null);
document.exitPointerLock();
test.done();
});
convertTemplatesToShadowRootsWithin(host);
var hostV1inV1 = hostV1.shadowRoot.querySelector('#hostV1inV1');
var hostV0inV1inV1 = hostV1inV1.shadowRoot.querySelector('#hostV0inV1inV1');
test.step(() => {
assert_equals(document.pointerLockElement, null);
assert_equals(host.shadowRoot.pointerLockElement, null);
assert_equals(hostV1.shadowRoot.pointerLockElement, null);
assert_equals(hostV1inV1.shadowRoot.pointerLockElement, null);
assert_equals(hostV0inV1inV1.shadowRoot.pointerLockElement, null);
});
var canvas = hostV0inV1inV1.shadowRoot.querySelector('canvas');
canvas.requestPointerLock();
}, 'Test for pointerLockElement adjustment for Shadow DOM V0/V1 combination.');
</script>