Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 <!DOCTYPE HTML> | |
| 2 <script src="../../resources/js-test.js"></script> | |
| 3 <style> | |
| 4 html, body { | |
| 5 margin: 0; | |
| 6 padding: 0; | |
| 7 } | |
| 8 body { | |
| 9 height: 500px; | |
| 10 } | |
| 11 #iframe { | |
| 12 width: 200px; | |
| 13 height: 200px; | |
| 14 } | |
| 15 #iframeScrollbars { | |
| 16 position: absolute; | |
| 17 top: 0; | |
| 18 left: 0; | |
| 19 transform: translate(50px, 50px); | |
| 20 width: 150px; | |
| 21 height: 150px; | |
| 22 overflow-y: scroll; | |
|
Rick Byers
2015/02/20 20:02:24
great test case - I've also seen hit-testing probl
| |
| 23 overflow-x: scroll; | |
| 24 } | |
| 25 </style> | |
| 26 <iframe id="iframe" src="data:text/html,<div id='div' style='width: 100px; heigh t: 100px; background: red'></div>"></iframe> | |
| 27 <iframe id="iframeScrollbars" src="data:text/html,<div id='big' style='width: 50 0px; height: 500px; background: blue;'></div><div id='div' style='position: abso lute; top: 0; left: 0; width: 100px; height: 100px; background: green;'>"></ifra me> | |
| 28 <div id="console"></div> | |
| 29 <script> | |
| 30 window.jsTestIsAsync = true; | |
| 31 if (window.testRunner) | |
| 32 testRunner.dumpAsText(); | |
| 33 | |
| 34 function assertElementInSequence(sequence, value, expectedInSequence) { | |
| 35 if (expectedInSequence) | |
| 36 shouldBeGreaterThanOrEqual(sequence + '.indexOf(' + value + ')', '0'); | |
| 37 else | |
| 38 shouldBeEqualToNumber(sequence + '.indexOf(' + value + ')', -1); | |
| 39 } | |
| 40 | |
| 41 function checkElementsFromPointFourCorners(evalDoc, evalElement) { | |
| 42 var element = eval(evalElement); | |
| 43 var shouldReceivePointerEvents = window.getComputedStyle(element).pointerEve nts != "none"; | |
| 44 var rect = element.getBoundingClientRect(); | |
| 45 | |
| 46 var topLeft = (rect.left + 1) + ', ' + (rect.top + 1); | |
| 47 var topRight = (rect.right - 1) + ', ' + (rect.top + 1); | |
| 48 var bottomLeft = (rect.left + 1) + ', ' + (rect.bottom - 1); | |
| 49 var bottomRight = (rect.right - 1) + ', ' + (rect.bottom - 1); | |
| 50 assertElementInSequence(evalDoc + '.elementsFromPoint(' + topLeft + ')', eva lElement, shouldReceivePointerEvents); | |
| 51 assertElementInSequence(evalDoc + '.elementsFromPoint(' + topRight + ')', ev alElement, shouldReceivePointerEvents); | |
| 52 assertElementInSequence(evalDoc + '.elementsFromPoint(' + bottomLeft + ')', evalElement, shouldReceivePointerEvents); | |
| 53 assertElementInSequence(evalDoc + '.elementsFromPoint(' + bottomRight + ')', evalElement, shouldReceivePointerEvents); | |
| 54 } | |
| 55 | |
| 56 onload = function() { | |
| 57 checkElementsFromPointFourCorners('document', 'iframe'); | |
| 58 checkElementsFromPointFourCorners('document.getElementById(\'iframe\').conte ntDocument', 'document.getElementById(\'iframe\').contentDocument.getElementById (\'div\')'); | |
| 59 checkElementsFromPointFourCorners('document', 'iframeScrollbars'); | |
| 60 checkElementsFromPointFourCorners('document.getElementById(\'iframeScrollbar s\').contentDocument', 'document.getElementById(\'iframeScrollbars\').contentDoc ument.getElementById(\'div\')'); | |
| 61 | |
| 62 // Ensure that elements outside the inner document's viewport are not return ed. | |
| 63 shouldBeEqualToNumber('document.getElementById(\'iframeScrollbars\').content Document.elementsFromPoint(-1, -1).length', 0); | |
| 64 shouldBeEqualToNumber('document.getElementById(\'iframeScrollbars\').content Document.elementsFromPoint(1, 1).length', 2); | |
| 65 shouldBeEqualToNumber('document.getElementById(\'iframeScrollbars\').content Document.elementsFromPoint(500, 500).length', 0); | |
| 66 shouldBeEqualToNumber('document.getElementById(\'iframeScrollbars\').content Document.elementsFromPoint(140, 140).length', 0); | |
| 67 | |
| 68 finishJSTest(); | |
| 69 } | |
| 70 </script> | |
| OLD | NEW |