| <html> |
| <!-- This test reproduces a divide-by-zero error that is hopefully fixed by |
| https://bugs.webkit.org/show_bug.cgi?id=79136. In that bug, a layer that gets |
| translated by z so that it is coplanar with the camera origin. As a result, when |
| trying to project a point from the container space to the local space, the |
| implementation had a divide-by-zero which made hit-testing results incorrect. --> |
| |
| <head> |
| <style type="text/css"> |
| /* Marquee content. */ |
| #camera { |
| position: absolute; |
| top: 100px; |
| left: 100px; |
| -webkit-perspective: 800px; |
| } |
| |
| #container { |
| -webkit-transform-style: preserve-3d; |
| -webkit-transform: translateZ(800px) |
| } |
| |
| #layer { |
| position: absolute; |
| width: 200px; |
| height: 200px; |
| background-color: green; |
| |
| /* This should theoretically cancel out the container's transform, and hit-testing should work. */ |
| -webkit-transform: translateZ(-800px); |
| } |
| |
| #background { |
| position: absolute; |
| width: 400px; |
| height: 400px; |
| background-color: gray; |
| } |
| |
| #layer:hover { |
| background-color: orange; |
| } |
| |
| #results { |
| position: absolute; |
| top: 420px; |
| left: 20px; |
| } |
| </style> |
| |
| <script src="resources/hit-test-utils.js"></script> |
| <script> |
| var hitTestData = [ |
| { 'point': [98, 200], 'target' : 'background' }, |
| { 'point': [302, 200], 'target' : 'background' }, |
| { 'point': [200, 98], 'target' : 'background' }, |
| { 'point': [200, 302], 'target' : 'background' }, |
| { 'point': [101, 200], 'target' : 'layer' }, |
| { 'point': [299, 200], 'target' : 'layer' }, |
| { 'point': [200, 101], 'target' : 'layer' }, |
| { 'point': [200, 299], 'target' : 'layer' }, |
| ]; |
| |
| window.addEventListener('load', runTest, false); |
| </script> |
| </head> |
| |
| <body> |
| |
| <div id="background"></div> |
| |
| <div id="camera"> |
| <div id="container"> |
| <div id="layer"> |
| The text on this element should be selectable. |
| Hovering on this element should cause a highlight. |
| </div> |
| </div> |
| </div> |
| |
| <div id="results"></div> |
| |
| </body> |
| </html> |