| <!DOCTYPE HTML> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="resources/elementsFromPoint.js"></script> | |
| <style> | |
| html, body { | |
| margin: 0; | |
| padding: 0; | |
| } | |
| body { | |
| height: 500px; | |
| } | |
| </style> | |
| <body> | |
| <div id="host"></div> | |
| <div id="blockHost"></div> | |
| <span id="inlineBlockHost" style="display:inline-block;"></span> | |
| <input type="submit" id="submit"> | |
| <script> | |
| function assertElementsFromPoint(doc, x, y, expected) { | |
| var query = doc + '.elementsFromPoint(' + x + ',' + y + ')'; | |
| var sequence = eval(query); | |
| assert_equals(nodeListToString(sequence), nodeListToString(expected), query); | |
| } | |
| function createBox(id) { | |
| var div = document.createElement('div'); | |
| div.id = id; | |
| div.style.width = '100px'; | |
| div.style.height = '10px'; | |
| return div; | |
| } | |
| function centerX(element) { | |
| return element.offsetLeft + element.offsetWidth / 2; | |
| } | |
| function centerY(element) { | |
| return element.offsetTop + element.offsetHeight / 2; | |
| } | |
| var shadowRoot = host.attachShadow({mode: 'closed'}); | |
| var box11 = createBox('box11'); | |
| var box12 = createBox('box12'); | |
| var box13 = createBox('box13'); | |
| shadowRoot.appendChild(box11); | |
| shadowRoot.appendChild(box12); | |
| shadowRoot.appendChild(box13); | |
| var nestedHost = document.createElement('div'); | |
| var nestedShadowRoot = nestedHost.attachShadow({mode: 'closed'}); | |
| var box21 = createBox('box21'); | |
| var box22 = createBox('box22'); | |
| var box23 = createBox('box23'); | |
| nestedShadowRoot.appendChild(box21); | |
| nestedShadowRoot.appendChild(box22); | |
| nestedShadowRoot.appendChild(box23); | |
| shadowRoot.appendChild(nestedHost); | |
| var x12 = centerX(box12); | |
| var y12 = centerY(box12); | |
| var x22 = centerX(box22); | |
| var y22 = centerY(box22); | |
| var root3 = blockHost.attachShadow({mode: 'closed'}); | |
| root3.appendChild(document.createTextNode('text1')); | |
| var root4 = inlineBlockHost.attachShadow({mode: 'closed'}); | |
| root4.appendChild(document.createTextNode('text2')); | |
| test(function() { | |
| assertElementsFromPoint('document', x22, y22, [host, document.body, document.documentElement]); | |
| assertElementsFromPoint('document', centerX(blockHost), centerY(blockHost), | |
| [blockHost, document.body, document.documentElement]); | |
| assertElementsFromPoint('document', centerX(inlineBlockHost), centerY(inlineBlockHost), | |
| [inlineBlockHost, document.body, document.documentElement]); | |
| assertElementsFromPoint('document', centerX(submit), centerY(submit), | |
| [submit, document.body, document.documentElement]); | |
| }, 'elementsFromPoint on the document root should not return elements in shadow trees'); | |
| test(function() { | |
| assert_not_equals(shadowRoot.elementsFromPoint(x12, y12).indexOf(box12), -1); | |
| assert_not_equals(shadowRoot.elementsFromPoint(x22, y22).indexOf(nestedHost), -1); | |
| assert_not_equals(nestedShadowRoot.elementsFromPoint(x22, y22).indexOf(box22), -1); | |
| }, 'elementsFromPoint on a shadow root should include elements in that shadow tree'); | |
| </script> | |
| </body> |