elementsFromPoint-shadowroot.html (2962B)
1 <!DOCTYPE HTML> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script src="resources/elementsFromPoint.js"></script> 5 <style> 6 html, body { 7 margin: 0; 8 padding: 0; 9 } 10 body { 11 height: 500px; 12 } 13 </style> 14 <body> 15 <div id="host"></div> 16 <div id="blockHost"></div> 17 <span id="inlineBlockHost" style="display:inline-block;"></span> 18 <input type="submit" id="submit"> 19 <script> 20 function assertElementsFromPoint(doc, x, y, expected) { 21 var query = doc + '.elementsFromPoint(' + x + ',' + y + ')'; 22 var sequence = eval(query); 23 assert_equals(nodeListToString(sequence), nodeListToString(expected), query); 24 } 25 26 function createBox(id) { 27 var div = document.createElement('div'); 28 div.id = id; 29 div.style.width = '100px'; 30 div.style.height = '10px'; 31 return div; 32 } 33 34 function centerX(element) { 35 return element.offsetLeft + element.offsetWidth / 2; 36 } 37 38 function centerY(element) { 39 return element.offsetTop + element.offsetHeight / 2; 40 } 41 42 var shadowRoot = host.attachShadow({mode: 'closed'}); 43 var box11 = createBox('box11'); 44 var box12 = createBox('box12'); 45 var box13 = createBox('box13'); 46 shadowRoot.appendChild(box11); 47 shadowRoot.appendChild(box12); 48 shadowRoot.appendChild(box13); 49 50 var nestedHost = document.createElement('div'); 51 var nestedShadowRoot = nestedHost.attachShadow({mode: 'closed'}); 52 var box21 = createBox('box21'); 53 var box22 = createBox('box22'); 54 var box23 = createBox('box23'); 55 nestedShadowRoot.appendChild(box21); 56 nestedShadowRoot.appendChild(box22); 57 nestedShadowRoot.appendChild(box23); 58 59 shadowRoot.appendChild(nestedHost); 60 61 var x12 = centerX(box12); 62 var y12 = centerY(box12); 63 var x22 = centerX(box22); 64 var y22 = centerY(box22); 65 66 var root3 = blockHost.attachShadow({mode: 'closed'}); 67 root3.appendChild(document.createTextNode('text1')); 68 var root4 = inlineBlockHost.attachShadow({mode: 'closed'}); 69 root4.appendChild(document.createTextNode('text2')); 70 71 test(function() { 72 assertElementsFromPoint('document', x22, y22, [host, document.body, document.documentElement]); 73 assertElementsFromPoint('document', centerX(blockHost), centerY(blockHost), 74 [blockHost, document.body, document.documentElement]); 75 assertElementsFromPoint('document', centerX(inlineBlockHost), centerY(inlineBlockHost), 76 [inlineBlockHost, document.body, document.documentElement]); 77 assertElementsFromPoint('document', centerX(submit), centerY(submit), 78 [submit, document.body, document.documentElement]); 79 }, 'elementsFromPoint on the document root should not return elements in shadow trees'); 80 81 test(function() { 82 assert_not_equals(shadowRoot.elementsFromPoint(x12, y12).indexOf(box12), -1); 83 assert_not_equals(shadowRoot.elementsFromPoint(x22, y22).indexOf(nestedHost), -1); 84 assert_not_equals(nestedShadowRoot.elementsFromPoint(x22, y22).indexOf(box22), -1); 85 }, 'elementsFromPoint on a shadow root should include elements in that shadow tree'); 86 </script> 87 </body>