| <!DOCTYPE html> <!-- webkit-test-runner [ domPasteAllowed=false useFlexibleViewport=true experimental:AsyncClipboardAPIEnabled=true ] --> |
| <html> |
| <meta charset="utf8"> |
| <head> |
| <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> |
| <script src="../../resources/js-test.js"></script> |
| <script src="../../resources/ui-helper.js"></script> |
| <script src="./resources/async-clipboard-helpers.js"></script> |
| <style> |
| button { |
| width: 100%; |
| height: 100px; |
| } |
| |
| iframe { |
| width: 100%; |
| height: 100px; |
| } |
| </style> |
| </head> |
| <script> |
| jsTestIsAsync = true; |
| finishedWriting = false; |
| |
| async function runTest() { |
| description("This test verifies that if platform pasteboard contents are changed immediately after calling Clipboard.write(), the promise should be rejected. This test needs to be run in WebKitTestRunner or DumpRenderTree."); |
| |
| const copyButton = document.getElementById("copy"); |
| copyButton.addEventListener("click", async event => { |
| const item = new ClipboardItem({ |
| "text/plain" : new Promise(async function(resolve) { |
| await UIHelper.delayFor(0); |
| await UIHelper.copyText("foo"); |
| resolve("bar"); |
| }) |
| }); |
| try { |
| await navigator.clipboard.write([item]); |
| testFailed(`Did not expect to write the item.`); |
| } catch (exception) { |
| testPassed(`Failed to write clipboard item with ${exception.name}.`); |
| } finally { |
| finishedWriting = true; |
| } |
| }); |
| |
| await UIHelper.activateElement(copyButton); |
| await new Promise(resolve => shouldBecomeEqual("finishedWriting", "true", resolve)); |
| |
| copyButton.remove(); |
| finishJSTest(); |
| } |
| |
| addEventListener("load", runTest); |
| </script> |
| <body> |
| <div><button id="copy">Copy</button></div> |
| <div id="description"></div> |
| <div id="console"></div> |
| </body> |
| </html> |