blob: 6951c11a53eb875be19d2682b6fae5a6d1ae165d [file] [log] [blame]
<!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>