| <!DOCTYPE html> |
| <title>getAnimations in dirty iframe</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="../../testcommon.js"></script> |
| <style> |
| iframe { |
| width: 200px; |
| height: 40px; |
| } |
| </style> |
| <body> |
| <script> |
| |
| const createFrame = async test => { |
| const iframe = createElement(test, "iframe"); |
| const contents = "" + |
| "<style>" + |
| " div { color: red; }" + |
| " @keyframes test {" + |
| " from { color: green; }" + |
| " to { color: green; }" + |
| " }" + |
| " @media (min-width: 300px) {" + |
| " div { animation: test 1s linear forwards; }" + |
| " }" + |
| "</style>" + |
| "<div id=div>Green</div>"; |
| iframe.setAttribute("srcdoc", contents); |
| await new Promise(resolve => iframe.addEventListener("load", resolve)); |
| return iframe; |
| }; |
| |
| const iframeTest = (getAnimations, interfaceName) => { |
| promise_test(async test => { |
| const frame = await createFrame(test); |
| const inner_div = frame.contentDocument.getElementById('div'); |
| assert_equals(getComputedStyle(inner_div).color, 'rgb(255, 0, 0)'); |
| |
| frame.style.width = '400px'; |
| const animations = getAnimations(inner_div); |
| assert_equals(animations.length, 1); |
| assert_equals(getComputedStyle(inner_div).color, 'rgb(0, 128, 0)'); |
| }, `Calling ${interfaceName}.getAnimations updates layout of parent frame if needed`); |
| } |
| |
| iframeTest(element => element.getAnimations(), 'Element'); |
| iframeTest(element => element.ownerDocument.getAnimations(), 'Document'); |
| |
| </script> |
| </body> |