| <!doctype html> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/resources/testdriver.js"></script> |
| <script src="/resources/testdriver-vendor.js"></script> |
| <script src="/resources/testdriver-actions.js"></script> |
| <style> |
| iframe { |
| width: 300px; |
| height: 300px; |
| top: 100px; |
| left: 100px; |
| border: 0; |
| position: absolute; |
| background: green; |
| } |
| #outerFrame { |
| width: 500px; |
| height: 500px; |
| background: blue; |
| } |
| </style> |
| <body onload="run()"> |
| <div id='outerFrame'> |
| <iframe id='iframe' src="resources/pointerevent_mouse_pointercapture_inactivate_pointer-iframe.html"></iframe> |
| </div> |
| </body> |
| |
| <script type="text/javascript"> |
| function run() { |
| capture_count = 0; |
| |
| document.addEventListener("gotpointercapture", function(){ |
| capture_count ++; |
| }) |
| |
| iframe.contentDocument.addEventListener("gotpointercapture", function(){ |
| capture_count ++; |
| }) |
| |
| document.addEventListener("pointerdown", function(event){ |
| // Outer frame got pointer down, set capture to inner frame. |
| iframe.contentDocument.getElementById("target").setPointerCapture(event.pointerId); |
| }); |
| |
| |
| iframe.contentDocument.addEventListener("pointerdown", function(event){ |
| // Inner frame got pointer down, set capture to outer frame. |
| outerFrame.setPointerCapture(event.pointerId); |
| }); |
| |
| |
| promise_test(async(test) => { |
| let eventWatcher = new EventWatcher(test, document, ["pointerup"]); |
| let donePromise = eventWatcher.wait_for(["pointerup"], { record: 'all' }); |
| await injectEvent(50, 50); |
| // wait for pointerUp before running the test |
| await donePromise; |
| assert_equals(capture_count, 0, "Inner frame can not capture when pointer is activate in outer frame") |
| }, "setPointerCapture: pointer active in outer frame, set capture to inner frame"); |
| |
| |
| promise_test(async(test) => { |
| let eventWatcher = new EventWatcher(test, iframe.contentDocument, ["pointerup"]); |
| let donePromise = eventWatcher.wait_for(["pointerup"], { record: 'all' }); |
| await injectEvent(250, 250); |
| // wait for pointerUp before running the test |
| await donePromise; |
| assert_equals(capture_count, 0, "Outer frame can not capture when pointer is activate in inner frame") |
| }, "setPointerCapture: pointer active in inner frame, set capture to outer frame"); |
| |
| function injectEvent(x, y) { |
| return new test_driver.Actions() |
| .pointerMove(x, y) |
| .pointerDown() |
| .pointerMove(x, y) |
| .pointerUp() |
| .send(); |
| } |
| } |
| </script> |
| </html> |