blob: 870d5037ecdea722752232fcd0444afa69e4ce3d [file] [log] [blame]
<!doctype html>
<script src="../../../resources/js-test.js"></script>
<script src="resources/shadow-dom.js"></script>
<body></body>
<script>
function prepareTree() {
document.body.appendChild(
createDOM('div', {id: 'host_open'},
createShadowRoot({mode: 'open', id: 'open_shadow'},
createDOM('div', {id: 'inner_open'},
createShadowRoot({mode: 'open', id: 'open_shadow_in_open_shadow'},
createDOM('span', {id: 'target_open', tabindex: '0'},
document.createTextNode('open')))))));
document.body.appendChild(
createDOM('div', {id: 'host_closed'},
createShadowRoot({mode: 'closed', id: 'closed_shadow'},
createDOM('div', {id: 'inner_closed'},
createShadowRoot({mode: 'open', id: 'open_shadow_in_closed_shadow'},
createDOM('span', {id: 'target_closed', tabindex: '0'},
document.createTextNode('closed')))))));
}
function clickHandler(e) {
eventPath = e.path;
}
debug('Event.path should include only unclosed nodes.');
prepareTree();
var targetOpen = getNodeInComposedTree('host_open/inner_open/target_open');
var targetClosed = getNodeInComposedTree('host_closed/inner_closed/target_closed');
targetOpen.addEventListener('click', clickHandler, false);
targetClosed.addEventListener('click', clickHandler, false);
debug("\nDispaching a click event on #target_open, listening on #target_open.");
var eventPath = null;
targetOpen.click();
// Expected: <span#target_open>, #open_shadow_in_open_shadow, <div#inner_open>,
// #open_shadow, <div#host_open>, <body>, <html>, #document, window
shouldBe('eventPath.length', '9');
debug("\nevent.path for #target_open:");
debug(dumpNodeList(eventPath));
debug("\nDispaching a click event on #target_closed, listening on #target_closed.");
eventPath = null;
targetClosed.click();
// Expected: <span#target_closed>, #open_shadow_in_closed_shadow, <div#inner_closed>,
// #closed_shadow, <div#host_closed>, <body>, <html>, #document, window
shouldBe('eventPath.length', '9');
debug("\nevent.path for #target_closed:");
debug(dumpNodeList(eventPath));
targetOpen.removeEventListener('click', clickHandler, false);
targetClosed.removeEventListener('click', clickHandler, false);
document.body.addEventListener('click', clickHandler, false);
debug("\nDispaching a click event on #target_open, listening on document.body.");
var eventPath = null;
targetOpen.click();
// Expected: <span#target_open>, #open_shadow_in_open_shadow, <div#inner_open>,
// #open_shadow, <div#host_open>, <body>, <html>, #document, window
shouldBe('eventPath.length', '9');
debug("\nevent.path for #target_open:");
debug(dumpNodeList(eventPath));
debug("\nDispaching a click event on #target_closed, listening on document.body.");
eventPath = null;
targetClosed.click();
// For this test, <span> and closed shadow root are excluded from the open shadow case,
// thus 9 - 4 = 5.
// Expected: <div#host_closed>, <body>, <html>, #document, window
shouldBe('eventPath.length', '5');
debug("\nevent.path for #target_closed:");
debug(dumpNodeList(eventPath));
</script>