chromium/third_party/blink/web_tests/fast/events/touch/multi-touch-inside-iframes.html

<html>
<script src="../../../resources/js-test.js"></script>
<style>
iframe {
  width: 100px;
  height: 100px;
  margin: 0;
  padding: 0;
  border: 1px solid black;
}

#iframe1
{
position:absolute;
left:50px;
top:50px;
}

#iframe2
{
position:absolute;
left:200px;
top:50px;
}

#output
{
position:absolute;
top:150px;
}

</style>
<body onload="runTest()">
<iframe id="iframe1" src="./resources/multi-touch-inside-iframes2.html"></iframe>
<iframe id="iframe2" src="./resources/multi-touch-inside-iframes2.html"></iframe>
<div id="output">
<p id="description"></p>
<div id="console"></div>
</div>
<script type="text/javascript">
description('Test multi-touch is sent to the same iframe.');

var touchEventCount = 0;
var title = 0;

function onTouch(event, receiver)
{
    ev = event;
    touchreceiver = receiver;
    switch (touchEventCount) {
        case 0:
            shouldBeEqualToString('ev.type', 'touchstart');
            shouldBeEqualToString('touchreceiver', 'iframe1');
            shouldBe("ev.changedTouches.length", "1");
            shouldBe("ev.touches.length", "1");
            shouldBe("ev.targetTouches.length", "1");
            shouldBe("ev.touches[0].pageX", "50");
            shouldBe("ev.touches[0].pageY", "50");
            shouldBe('ev.touches[0].identifier', '0');
            shouldBeEqualToString('ev.touches[0].target.ownerDocument.title', 'iframe1');
            shouldBeEqualToString('ev.changedTouches[0].target.ownerDocument.title', 'iframe1');
            shouldBeEqualToString('ev.targetTouches[0].target.ownerDocument.title', 'iframe1');
            break;
        case 1:
            shouldBeEqualToString('ev.type', 'touchmove');
            shouldBeEqualToString('touchreceiver', 'iframe1');
            shouldBe("ev.changedTouches.length", "1");
            shouldBe("ev.touches.length", "2");
            shouldBe("ev.targetTouches.length", "1");
            shouldBe("ev.touches[0].pageX", "150");
            shouldBe("ev.touches[0].pageY", "150");
            shouldBe('ev.touches[0].identifier', '0');
            shouldBe('ev.touches[1].identifier', '1');
            shouldBe('ev.changedTouches[0].identifier', '0');
            shouldBeEqualToString('ev.touches[0].target.ownerDocument.title', 'iframe1');
            shouldBeEqualToString('ev.changedTouches[0].target.ownerDocument.title', 'iframe1');
            shouldBeEqualToString('ev.targetTouches[0].target.ownerDocument.title', 'iframe1');
            shouldBeEqualToString('ev.touches[1].target.nodeName', '#document');
            shouldBeEqualToString('ev.touches[1].target.title', 'iframe1');
            break;
        case 2:
            shouldBeEqualToString('ev.type', 'touchend');
            shouldBeEqualToString('touchreceiver', 'iframe1');
            shouldBe("ev.changedTouches.length", "1");
            shouldBe("ev.touches.length", "1");
            shouldBe("ev.targetTouches.length", "0");
            shouldBeEqualToString('ev.changedTouches[0].target.ownerDocument.title', 'iframe1');
            shouldBe('ev.changedTouches[0].identifier', '0');
            shouldBeEqualToString('ev.touches[0].target.nodeName', '#document');
            shouldBeEqualToString('ev.touches[0].target.title', 'iframe1');
            shouldBe('ev.touches[0].identifier', '1');
            break;
        case 3:
            shouldBeEqualToString('ev.type', 'touchstart');
            shouldBeEqualToString('touchreceiver', 'iframe2');
            shouldBe("ev.changedTouches.length", "1");
            shouldBe("ev.touches.length", "1");
            shouldBe("ev.targetTouches.length", "1");
            shouldBe("ev.touches[0].pageX", "50");
            shouldBe("ev.touches[0].pageY", "50");
            shouldBeEqualToString('ev.touches[0].target.ownerDocument.title', 'iframe2');
            shouldBeEqualToString('ev.changedTouches[0].target.ownerDocument.title', 'iframe2');
            shouldBeEqualToString('ev.targetTouches[0].target.ownerDocument.title', 'iframe2');
            break;
        case 4:
            shouldBeEqualToString('ev.type', 'touchend');
            shouldBeEqualToString('touchreceiver', 'iframe2');
            shouldBe("ev.changedTouches.length", "1");
            shouldBe("ev.touches.length", "0");
            shouldBe("ev.targetTouches.length", "0");
            shouldBeEqualToString('ev.changedTouches[0].target.ownerDocument.title', 'iframe2');
            isSuccessfullyParsed();
            testRunner.notifyDone();
    }
    touchEventCount++;
}

function runTest() {
    document.getElementById("iframe1").contentWindow.document.title = "iframe1";
    document.getElementById("iframe2").contentWindow.document.title = "iframe2";
    if (window.eventSender) {
        eventSender.clearTouchPoints();
        // Touch the center of iframe1. 50px is offset to iframe1 in main frame,
        // 1px for the iframe border, 50px to get to centre.
        debug('First touch is on iframe1.');
        shouldBeEqualToString('document.elementFromPoint(101, 101).id', 'iframe1');
        eventSender.addTouchPoint(101, 101);
        eventSender.touchStart();
        debug('');

        debug('Second touch is on iframe2, nothing should happen.');
        shouldBeEqualToString('document.elementFromPoint(251, 101).id', 'iframe2');
        eventSender.addTouchPoint(251, 101);
        eventSender.touchStart();
        debug('');

        debug('Moves the first touch outside iframe1.');
        eventSender.updateTouchPoint(0, 201, 201);
        eventSender.touchMove();
        debug('');

        debug('Release the first touch.');
        eventSender.releaseTouchPoint(0);
        eventSender.touchEnd();
        debug('');

        debug('Third touch is on iframe2, nothing should happen.');
        shouldBeEqualToString('document.elementFromPoint(261, 101).id', 'iframe2');
        eventSender.addTouchPoint(261, 101);
        eventSender.touchStart();
        debug('');

        debug('Release all touches on iframe2, and touch iframe2 again.');
        eventSender.releaseTouchPoint(0);
        eventSender.releaseTouchPoint(1);
        eventSender.touchEnd();
        eventSender.addTouchPoint(251, 101);
        eventSender.touchStart();
        debug('');

        debug('Touch iframe1, nothing shoud happen.');
        eventSender.addTouchPoint(101, 101);
        eventSender.touchStart();
        debug('');

        debug('Release all touches.');
        eventSender.releaseTouchPoint(0);
        eventSender.releaseTouchPoint(1);
        eventSender.touchEnd();
    } else {
       debug('This test requires DRT.');
    }
}

if (window.testRunner) {
    testRunner.waitUntilDone();
}
</script>
</body>
</html>