| <!DOCTYPE html> <!-- webkit-test-runner [ 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 { |
| display: block; |
| margin: 40px 0; |
| } |
| </style> |
| </head> |
| <script> |
| jsTestIsAsync = true; |
| doneWritingFirstImage = false; |
| doneWritingSecondImage = false; |
| |
| async function runTest() { |
| description("This test verifies that navigator.clipboard.writeText sanitizes 'image/png'. To manually run the test, click the buttons labeled (1), (2), and then (3)"); |
| |
| const writeValidImageButton = document.getElementById("valid"); |
| const writeInvalidImageButton = document.getElementById("invalid"); |
| const writeBothImagesButton = document.getElementById("both"); |
| |
| const validImageItem = new ClipboardItem({ "image/png" : imageBlob() }); |
| const invalidImageItem = new ClipboardItem({ "image/png" : imageBlob("ThisIsNotActuallyBase64ImageData") }); |
| |
| writeValidImageButton.addEventListener("click", async () => { |
| try { |
| await navigator.clipboard.write([validImageItem]); |
| testPassed("Wrote a valid image to the clipboard."); |
| } catch (exception) { |
| testFailed("Did not write a valid image to the clipboard."); |
| } finally { |
| doneWritingFirstImage = true; |
| } |
| }); |
| |
| writeInvalidImageButton.addEventListener("click", async () => { |
| try { |
| await navigator.clipboard.write([invalidImageItem]); |
| testFailed("Should not have written anything to the clipboard."); |
| } catch (exception) { |
| testPassed("Did not write an invalid image to the clipboard."); |
| } finally { |
| doneWritingSecondImage = true; |
| } |
| }); |
| |
| writeBothImagesButton.addEventListener("click", async () => { |
| try { |
| await navigator.clipboard.write([validImageItem, invalidImageItem]); |
| testFailed("Should not have written anything to the clipboard."); |
| } catch (exception) { |
| testPassed("Did not write an invalid image to the clipboard."); |
| } finally { |
| [writeValidImageButton, writeInvalidImageButton, writeBothImagesButton].map(button => button.remove()); |
| finishJSTest(); |
| } |
| }); |
| |
| if (!window.testRunner) |
| return; |
| |
| await UIHelper.activateElement(writeValidImageButton); |
| await new Promise(resolve => shouldBecomeEqual("doneWritingFirstImage", "true", resolve)); |
| await UIHelper.activateElement(writeInvalidImageButton); |
| await new Promise(resolve => shouldBecomeEqual("doneWritingSecondImage", "true", resolve)); |
| await UIHelper.activateElement(writeBothImagesButton); |
| } |
| |
| addEventListener("load", runTest); |
| </script> |
| <body> |
| <button id="valid">1. Write valid item</button> |
| <button id="invalid">2. Write invalid item</button> |
| <button id="both">3. Write valid and invalid items</button> |
| <p id="description"></p> |
| <p id="console"></p> |
| </body> |
| </html> |