Chromium Code Reviews| Index: LayoutTests/fast/events/elementsFromPoint-iframes.html |
| diff --git a/LayoutTests/fast/events/elementsFromPoint-iframes.html b/LayoutTests/fast/events/elementsFromPoint-iframes.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..7dbda36cccce7ba19a8be7c3964ebcb8578b78e2 |
| --- /dev/null |
| +++ b/LayoutTests/fast/events/elementsFromPoint-iframes.html |
| @@ -0,0 +1,70 @@ |
| +<!DOCTYPE HTML> |
| +<script src="../../resources/js-test.js"></script> |
| +<style> |
| +html, body { |
| + margin: 0; |
| + padding: 0; |
| +} |
| +body { |
| + height: 500px; |
| +} |
| +#iframe { |
| + width: 200px; |
| + height: 200px; |
| +} |
| +#iframeScrollbars { |
| + position: absolute; |
| + top: 0; |
| + left: 0; |
| + transform: translate(50px, 50px); |
| + width: 150px; |
| + height: 150px; |
| + overflow-y: scroll; |
|
Rick Byers
2015/02/20 20:02:24
great test case - I've also seen hit-testing probl
|
| + overflow-x: scroll; |
| +} |
| +</style> |
| +<iframe id="iframe" src="data:text/html,<div id='div' style='width: 100px; height: 100px; background: red'></div>"></iframe> |
| +<iframe id="iframeScrollbars" src="data:text/html,<div id='big' style='width: 500px; height: 500px; background: blue;'></div><div id='div' style='position: absolute; top: 0; left: 0; width: 100px; height: 100px; background: green;'>"></iframe> |
| +<div id="console"></div> |
| +<script> |
| +window.jsTestIsAsync = true; |
| +if (window.testRunner) |
| + testRunner.dumpAsText(); |
| + |
| +function assertElementInSequence(sequence, value, expectedInSequence) { |
| + if (expectedInSequence) |
| + shouldBeGreaterThanOrEqual(sequence + '.indexOf(' + value + ')', '0'); |
| + else |
| + shouldBeEqualToNumber(sequence + '.indexOf(' + value + ')', -1); |
| +} |
| + |
| +function checkElementsFromPointFourCorners(evalDoc, evalElement) { |
| + var element = eval(evalElement); |
| + var shouldReceivePointerEvents = window.getComputedStyle(element).pointerEvents != "none"; |
| + var rect = element.getBoundingClientRect(); |
| + |
| + var topLeft = (rect.left + 1) + ', ' + (rect.top + 1); |
| + var topRight = (rect.right - 1) + ', ' + (rect.top + 1); |
| + var bottomLeft = (rect.left + 1) + ', ' + (rect.bottom - 1); |
| + var bottomRight = (rect.right - 1) + ', ' + (rect.bottom - 1); |
| + assertElementInSequence(evalDoc + '.elementsFromPoint(' + topLeft + ')', evalElement, shouldReceivePointerEvents); |
| + assertElementInSequence(evalDoc + '.elementsFromPoint(' + topRight + ')', evalElement, shouldReceivePointerEvents); |
| + assertElementInSequence(evalDoc + '.elementsFromPoint(' + bottomLeft + ')', evalElement, shouldReceivePointerEvents); |
| + assertElementInSequence(evalDoc + '.elementsFromPoint(' + bottomRight + ')', evalElement, shouldReceivePointerEvents); |
| +} |
| + |
| +onload = function() { |
| + checkElementsFromPointFourCorners('document', 'iframe'); |
| + checkElementsFromPointFourCorners('document.getElementById(\'iframe\').contentDocument', 'document.getElementById(\'iframe\').contentDocument.getElementById(\'div\')'); |
| + checkElementsFromPointFourCorners('document', 'iframeScrollbars'); |
| + checkElementsFromPointFourCorners('document.getElementById(\'iframeScrollbars\').contentDocument', 'document.getElementById(\'iframeScrollbars\').contentDocument.getElementById(\'div\')'); |
| + |
| + // Ensure that elements outside the inner document's viewport are not returned. |
| + shouldBeEqualToNumber('document.getElementById(\'iframeScrollbars\').contentDocument.elementsFromPoint(-1, -1).length', 0); |
| + shouldBeEqualToNumber('document.getElementById(\'iframeScrollbars\').contentDocument.elementsFromPoint(1, 1).length', 2); |
| + shouldBeEqualToNumber('document.getElementById(\'iframeScrollbars\').contentDocument.elementsFromPoint(500, 500).length', 0); |
| + shouldBeEqualToNumber('document.getElementById(\'iframeScrollbars\').contentDocument.elementsFromPoint(140, 140).length', 0); |
| + |
| + finishJSTest(); |
| +} |
| +</script> |