| <html> |
| <script src="../../../resources/js-test-pre.js"></script> |
| <style> |
| #iframe1 { |
| width: 200px; |
| height: 200px; |
| margin: 0; |
| padding: 0; |
| border: 1px solid black; |
| position:absolute; |
| left:50px; |
| top:50px; |
| background: red; |
| } |
| |
| #output |
| { |
| position:absolute; |
| top:250px; |
| } |
| |
| </style> |
| <body onload="runTest()"> |
| <iframe id="iframe1" src="./resources/multi-touch-inside-nested-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"); |
| 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", "1"); |
| shouldBe("ev.targetTouches.length", "1"); |
| shouldBe("ev.touches[0].pageX", "200"); |
| shouldBe("ev.touches[0].pageY", "200"); |
| 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 2: |
| shouldBeEqualToString('ev.type', 'touchend'); |
| shouldBeEqualToString('touchreceiver', 'iframe1'); |
| shouldBe("ev.changedTouches.length", "1"); |
| shouldBe("ev.touches.length", "0"); |
| shouldBe("ev.targetTouches.length", "0"); |
| shouldBeEqualToString('ev.changedTouches[0].target.ownerDocument.title', 'iframe1'); |
| 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", "30"); |
| shouldBe("ev.touches[0].pageY", "30"); |
| 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', 'touchstart'); |
| shouldBeEqualToString('touchreceiver', 'iframe2'); |
| shouldBe("ev.changedTouches.length", "1"); |
| shouldBe("ev.touches.length", "2"); |
| shouldBe("ev.targetTouches.length", "1"); |
| shouldBe("ev.touches[0].pageX", "30"); |
| shouldBe("ev.touches[0].pageY", "30"); |
| 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 5: |
| shouldBeEqualToString('ev.type', 'touchend'); |
| shouldBeEqualToString('touchreceiver', 'iframe2'); |
| shouldBe("ev.changedTouches.length", "2"); |
| shouldBe("ev.touches.length", "0"); |
| shouldBe("ev.targetTouches.length", "0"); |
| shouldBeEqualToString('ev.changedTouches[0].target.ownerDocument.title', 'iframe2'); |
| shouldBeEqualToString('ev.changedTouches[1].target.ownerDocument.title', 'iframe2'); |
| isSuccessfullyParsed(); |
| testRunner.notifyDone(); |
| } |
| touchEventCount++; |
| } |
| |
| function runTest() { |
| if (window.eventSender) { |
| eventSender.clearTouchPoints(); |
| // Touch the center of innter iframe. 50px is offset to outer iframe in main frame, |
| // 2px for the iframe borders, 100px to get to centre. |
| debug('First touch is on inner iframe.'); |
| eventSender.addTouchPoint(152, 152); |
| eventSender.touchStart(); |
| debug(''); |
| |
| debug('Second touch is on outer iframe, nothing should happen.'); |
| eventSender.addTouchPoint(71, 71); |
| eventSender.touchStart(); |
| debug(''); |
| |
| debug('Moves the first touch outside inner iframe.'); |
| eventSender.updateTouchPoint(0, 302, 302); |
| eventSender.touchMove(); |
| debug(''); |
| |
| debug('Release the first touch.'); |
| eventSender.releaseTouchPoint(0); |
| eventSender.touchEnd(); |
| debug(''); |
| |
| debug('Third touch is on outer iframe, nothing should happen.'); |
| eventSender.addTouchPoint(81, 81); |
| eventSender.touchStart(); |
| debug(''); |
| |
| debug('Release all touches on outer iframe, and touch outer iframe again.'); |
| eventSender.releaseTouchPoint(0); |
| eventSender.releaseTouchPoint(1); |
| eventSender.touchEnd(); |
| eventSender.addTouchPoint(81, 81); |
| eventSender.touchStart(); |
| debug(''); |
| |
| debug('Touch inner iframe, this will trigger onTouch as it is inside outer iframe.'); |
| eventSender.addTouchPoint(152, 152); |
| 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(); |
| } |
| |
| function getTitle() { |
| title++; |
| return 'iframe' + title; |
| } |
| </script> |
| </body> |
| </html> |