<!DOCTYPE html>
<html>
<head>
    <title>Touch Adjustment : Adjust to context menu providers - bug 94101</title>
    <script src="../resources/ahem.js"></script>
    <script src="../resources/js-test.js"></script>
    <script src="resources/touchadjustment.js"></script>
    <style>
        #sandbox {
            position: absolute;
            top: 0px;
            left: 0px;
            width: 400px;
            height: 200px;
        }
        #sandbox p {
            padding: 5px;
            font: 20px Ahem;
        }
    </style>
</head>
<body>

<script>
    function onClick() {}
</script>

<div id=sandbox>
    <p id=p0><a id=a0 href="#a0">Link with URL.</a>
    <p id=p1><span id=span0 onclick=onClick>Text with onclick handler.</span>
    <p id=p2><img id=img0 height=20 width=100 src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPAQMAAAABGAcJAAAAA1BMVEUAgACc+aWRAAAADElEQVR42mNgIAEAAAAtAAH7KhMqAAAAAElFTkSuQmCC"></img>
</div>

<p id='description'></p>
<div id='console'></div>

<script>
    // Set up shortcut access to elements
    var e = {};
    ['sandbox', 'a0', 'span0', 'img0', 'p0', 'p1', 'p2'].forEach(function(a) {
        e[a] = document.getElementById(a);
    });

    function testDirectTouches()
    {
        // Check links can be targeted with context menu gesture.
        testTouchPointContextMenu(touchPoint(100, 35, 10), e.a0);
        // Check onclick can be targeted with activate gesture.
        testTouchPoint(touchPoint(100, 100, 10), e.span0);
        // Check onclick can not be targeted with context menu.
        testTouchPointContextMenu(touchPoint(100, 100, 10), null);
        // But that the adjusted point still hits it, if no better target is available
        var adjustedPoint = adjustTouchPointContextMenu(touchPoint(100, 100, 10));
        if (adjustedPoint) {
            shouldBeNode(document.elementFromPoint(adjustedPoint.x, adjustedPoint.y), e.span0);
        }
        // Check images can be targeted with context menu.
        testTouchPointContextMenu(offsetTouchPoint(findAbsoluteBounds(e.img0), 'center', 0, 5, 5), e.img0);
    }

    function testAdjustedTouches()
    {
        // Check we if we adjust the context menu onto the link.
        testTouchPointContextMenu(touchPoint(100, 50, 10), e.a0);
        // Check we if we do not adjust the context menu onto the onclick element.
        testTouchPointContextMenu(touchPoint(100, 70, 10), null);
        // Check the link is strongly preferred.
        testTouchPointContextMenu(touchPoint(100, 60, 20), e.a0);
        // Check adjustment onto the image.
        testTouchPointContextMenu(touchPoint(20, 140, 10), e.img0);
        // Check the image is strongly preferred for context menu gestures.
        testTouchPointContextMenu(touchPoint(20, 120, 30), e.img0);
        // But the onclick handler would be preferred for activate gestures.
        testTouchPoint(touchPoint(20, 120, 30), e.span0);
    }

    function runTests()
    {
        if (window.testRunner && window.internals && internals.touchNodeAdjustedToBestContextMenuNode) {
            description('Test touch adjustment for context-menu gestures.');
            // Set editing-behaviour to win, so context-menu gesture does not trigger selections.
            internals.settings.setEditingBehavior('win');
            testDirectTouches();
            testAdjustedTouches();
            e.sandbox.style.display = 'none';
        }
    }
    runTests();
</script>


</body>
</html>
