fune/testing/web-platform/tests/clipboard-apis/async-custom-formats-write-fail.tentative.https.html
Kagami Sascha Rosylight 52f9697770 Bug 1875837 - Make clipboard-read/write permission optional in clipboard WPT r=webdriver-reviewers,dom-core,edgar,whimboo
Blink is the only engine supporting it, and thus it should not be the WPT requirement.

Some tests still need the testing pref, and for now this patch gives the pref for such failing tests without modifying them, for simplicity sake. Modification can happen separately.

Differential Revision: https://phabricator.services.mozilla.com/D201999
2024-03-27 17:38:18 +00:00

123 lines
4.9 KiB
HTML

<!doctype html>
<meta charset="utf-8">
<title>Async Clipboard web custom format write validation tests</title>
<link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api">
<body>Body needed for test_driver.click()</body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="resources/user-activation.js"></script>
<script>
'use strict';
promise_test(async t => {
await tryGrantWritePermission();
const customFormatArray = [];
const customFormatMap = {};
for (let i = 0; i <= 100; i++) {
customFormatArray.push("web text/CustomFormat" + i);
const blobInput = new Blob(['input data'], {type: customFormatArray[i]});
customFormatMap[customFormatArray[i]] = blobInput;
}
const clipboardItemInput = new ClipboardItem(customFormatMap);
await waitForUserActivation();
await promise_rejects_dom(t, 'NotAllowedError',
navigator.clipboard.write([clipboardItemInput]));
}, 'navigator.clipboard.write() fails for more than 100 custom formats');
promise_test(async t => {
await tryGrantWritePermission();
const format1 = 'application/x-custom-format-clipboard-test-format-1';
const format2 = 'application/x-custom-format-clipboard-test-format-2';
const blobInput1 = new Blob(['input data 1'], {type: format1});
const blobInput2 = new Blob(['input data 2'], {type: format2});
const clipboardItemInput = new ClipboardItem(
{[format1]: blobInput1, [format2]: blobInput2});
await waitForUserActivation();
await promise_rejects_dom(t, 'NotAllowedError',
navigator.clipboard.write([clipboardItemInput]));
}, 'navigator.clipboard.write() fails for custom formats without web prefix');
promise_test(async t => {
await tryGrantWritePermission();
const format1 = 'web ';
const format2 = 'web a';
const blobInput1 = new Blob(['input data 1'], {type: format1});
const blobInput2 = new Blob(['input data 2'], {type: format2});
const clipboardItemInput = new ClipboardItem(
{[format1]: blobInput1, [format2]: blobInput2});
await waitForUserActivation();
await promise_rejects_dom(t, 'NotAllowedError',
navigator.clipboard.write([clipboardItemInput]));
}, 'navigator.clipboard.write() fails for custom formats with web prefix, but invalid MIME types');
promise_test(async t => {
await tryGrantWritePermission();
const format1 = 'web text/plain';
const format2 = 'text/custom';
const blobInput1 = new Blob(['input data 1'], {type: format2});
const clipboardItemInput = new ClipboardItem(
{[format1]: blobInput1});
await waitForUserActivation();
await promise_rejects_dom(t, 'NotAllowedError',
navigator.clipboard.write([clipboardItemInput]));
}, 'navigator.clipboard.write() fails for custom format with web prefix, but different Blob type');
promise_test(async t => {
await tryGrantWritePermission();
const format1 = 'web Text/plain';
const format2 = 'text/plain';
const blobInput1 = new Blob(['input data 1'], {type: format2});
const clipboardItemInput = new ClipboardItem(
{[format1]: blobInput1});
await waitForUserActivation();
await promise_rejects_dom(t, 'NotAllowedError',
navigator.clipboard.write([clipboardItemInput]));
}, 'navigator.clipboard.write() fails for custom format with different case than the Blob type');
promise_test(async t => {
await tryGrantWritePermission();
const format1 = 'web text/plain';
const format2 = 'Text/plain';
const blobInput1 = new Blob(['input data 1'], {type: format1});
const clipboardItemInput = new ClipboardItem(
{[format2]: blobInput1});
await waitForUserActivation();
await promise_rejects_dom(t, 'NotAllowedError',
navigator.clipboard.write([clipboardItemInput]));
}, 'navigator.clipboard.write() fails for invalid mime type that is different than the Blob type');
promise_test(async t => {
await tryGrantWritePermission();
const format1 = 'web Text/plain';
const format2 = 'web text/plain';
const blobInput1 = new Blob(['input data 1'], {type: format2});
const clipboardItemInput = new ClipboardItem(
{[format1]: blobInput1});
await waitForUserActivation();
await promise_rejects_dom(t, 'NotAllowedError',
navigator.clipboard.write([clipboardItemInput]));
}, 'navigator.clipboard.write() fails for invalid mime type with web prefix and the Blob type');
promise_test(async t => {
await tryGrantWritePermission();
const format1 = 'Text/plain';
const format2 = 'text/plain';
const blobInput1 = new Blob(['input data 1'], {type: format2});
const clipboardItemInput = new ClipboardItem(
{[format1]: blobInput1});
await waitForUserActivation();
await promise_rejects_dom(t, 'NotAllowedError',
navigator.clipboard.write([clipboardItemInput]));
}, 'navigator.clipboard.write() fails for custom format and Blob type with different case');
</script>