blob: 5c827add2f6534cee71fdd3a60d1675cdca808b3 [file] [log] [blame]
<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true 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: 100px;
padding: 1em;
}
</style>
</head>
<script>
jsTestIsAsync = true;
doneWriting = false;
doneReading = false;
description("This test verifies that multiple images can be written to and read from the system clipboard. To manually run the test, tap the copy button, and then tap paste.");
async function runTest() {
const copyButton = document.getElementById("copy");
const pasteButton = document.getElementById("paste");
const imagesContainer = document.getElementById("imagesContainer");
copyButton.addEventListener("click", async event => {
await navigator.clipboard.write([
new ClipboardItem({ "image/png" : Promise.resolve(imageBlob()) }),
new ClipboardItem({ "image/png" : Promise.resolve(imageBlob(sampleBase64PNGImageData2())) })
]);
doneWriting = true;
});
pasteButton.addEventListener("click", async event => {
try {
items = await navigator.clipboard.read();
shouldBe("items.length", "2");
for (const item of items) {
window.item = item;
shouldBe("item.types.length", "1");
shouldBeTrue("item.types.includes('image/png')");
const imageData = await item.getType("image/png");
const image = await loadImage(imageData);
imagesContainer.appendChild(image);
await image.decode();
const clientRect = image.getBoundingClientRect();
testPassed(`Pasted ${clientRect.width} by ${clientRect.height} image.`);
}
} catch (exception) {
testFailed(`Caught exception: ${exception}`);
} finally {
doneReading = true;
}
});
await UIHelper.activateElement(copyButton);
await new Promise(resolve => shouldBecomeEqual("doneWriting", "true", resolve));
await UIHelper.activateElement(pasteButton);
await new Promise(resolve => shouldBecomeEqual("doneReading", "true", resolve));
[pasteButton, copyButton].map(button => button.remove());
finishJSTest();
}
addEventListener("load", runTest);
</script>
<body>
<button id="copy">Copy</button>
<button id="paste">Paste</button>
<div id="imagesContainer"></div>
</body>
</html>