| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>Touch Adjustment : Adjust correctly for scroll offset - bug 86205</title> |
| <script src="../resources/js-test-pre.js"></script> |
| <script src="resources/touchadjustment.js"></script> |
| <style> |
| #scrolloffsetcontainer { |
| position: absolute; |
| top: 500px; |
| height: 1000px; |
| } |
| body { |
| margin: 0px; |
| } |
| #div0 { margin-left: 20px; height: 100px; box-sizing: border-box; } |
| #div1 { margin-left: 10px; height: 100px; box-sizing: border-box; } |
| </style> |
| </head> |
| <body> |
| |
| <div id=scrolloffsetcontainer> |
| <div id=div0> |
| <a id=a0 href="#div0">Link 0</a> |
| </div> |
| <div id=div1> |
| <a id=a1 href="#div1">Link 1</a> |
| </div> |
| </div> |
| |
| <p id='description'></p> |
| <div id='console'></div> |
| |
| <script> |
| var adjustedNode; |
| var adjustedPoint; |
| // Set up shortcut access to elements |
| var e = {}; |
| ['scrolloffsetcontainer', 'div0', 'div1', 'a0', 'a1'].forEach(function(a) { |
| e[a] = document.getElementById(a); |
| }); |
| |
| function adjustedPointAtTouch(x, y, radius) |
| { |
| var x = x - radius; |
| var y = y - radius; |
| var width = radius * 2; |
| var height = radius * 2; |
| var position = internals.touchPositionAdjustedToBestClickableNode(x, y, width, height); |
| return position; |
| } |
| |
| function testDirectTouches() |
| { |
| testTouchPoint(touchPoint(40, 130, 50), e.a0); |
| testTouchPoint(touchPoint(30, 230, 50), e.a1); |
| } |
| function testAdjustedTouches() |
| { |
| adjustedPoint = adjustedPointAtTouch(10, 120, 80); |
| shouldBeNonNull('adjustedPoint'); |
| adjustedNode = document.elementFromPoint(adjustedPoint.x, adjustedPoint.y); |
| shouldBe('adjustedNode', 'e.a0'); |
| |
| adjustedPoint = adjustedPointAtTouch(5, 220, 80); |
| shouldBeNonNull('adjustedPoint'); |
| adjustedNode = document.elementFromPoint(adjustedPoint.x, adjustedPoint.y); |
| shouldBe('adjustedNode', 'e.a1'); |
| } |
| |
| function runTests() |
| { |
| if (window.testRunner && window.internals && internals.touchNodeAdjustedToBestClickableNode) { |
| description('Test touch adjustment when main frame is scroll offset.'); |
| window.scrollBy(0,400); |
| testDirectTouches(); |
| testAdjustedTouches(); |
| e.scrolloffsetcontainer.style.display = 'none'; |
| } |
| } |
| runTests(); |
| </script> |
| |
| <script src="../resources/js-test-post.js"></script> |
| |
| </body> |
| </html> |