| <!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> |