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 |