async-custom-formats-write-fail.tentative.https.html (5002B)
1 <!doctype html> 2 <meta charset="utf-8"> 3 <title>Async Clipboard web custom format write validation tests</title> 4 <link rel="help" href="https://w3c.github.io/clipboard-apis/#async-clipboard-api"> 5 <body>Body needed for test_driver.click()</body> 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 <script src="/resources/testdriver.js"></script> 9 <script src="/resources/testdriver-vendor.js"></script> 10 <script src="resources/user-activation.js"></script> 11 <script> 12 'use strict'; 13 14 promise_test(async t => { 15 await tryGrantWritePermission(); 16 17 const customFormatArray = []; 18 const customFormatMap = {}; 19 for (let i = 0; i <= 100; i++) { 20 customFormatArray.push("web text/CustomFormat" + i); 21 const blobInput = new Blob(['input data'], {type: customFormatArray[i]}); 22 customFormatMap[customFormatArray[i]] = blobInput; 23 } 24 const clipboardItemInput = new ClipboardItem(customFormatMap); 25 await waitForUserActivation(); 26 await promise_rejects_dom(t, 'NotAllowedError', 27 navigator.clipboard.write([clipboardItemInput])); 28 }, 'navigator.clipboard.write() fails for more than 100 custom formats'); 29 30 promise_test(async t => { 31 await tryGrantWritePermission(); 32 33 const format1 = 'application/x-custom-format-clipboard-test-format-1'; 34 const format2 = 'application/x-custom-format-clipboard-test-format-2'; 35 const blobInput1 = new Blob(['input data 1'], {type: format1}); 36 const blobInput2 = new Blob(['input data 2'], {type: format2}); 37 const clipboardItemInput = new ClipboardItem( 38 {[format1]: blobInput1, [format2]: blobInput2}); 39 await waitForUserActivation(); 40 await promise_rejects_dom(t, 'NotAllowedError', 41 navigator.clipboard.write([clipboardItemInput])); 42 }, 'navigator.clipboard.write() fails for custom formats without web prefix'); 43 44 promise_test(async t => { 45 await tryGrantWritePermission(); 46 47 const format1 = 'web '; 48 const format2 = 'web a'; 49 const blobInput1 = new Blob(['input data 1'], {type: format1}); 50 const blobInput2 = new Blob(['input data 2'], {type: format2}); 51 const clipboardItemInput = new ClipboardItem( 52 {[format1]: blobInput1, [format2]: blobInput2}); 53 await waitForUserActivation(); 54 await promise_rejects_dom(t, 'NotAllowedError', 55 navigator.clipboard.write([clipboardItemInput])); 56 }, 'navigator.clipboard.write() fails for custom formats with web prefix, but invalid MIME types'); 57 58 promise_test(async t => { 59 await tryGrantWritePermission(); 60 61 const format1 = 'web text/plain'; 62 const format2 = 'text/custom'; 63 const blobInput1 = new Blob(['input data 1'], {type: format2}); 64 const clipboardItemInput = new ClipboardItem( 65 {[format1]: blobInput1}); 66 await waitForUserActivation(); 67 await promise_rejects_dom(t, 'NotAllowedError', 68 navigator.clipboard.write([clipboardItemInput])); 69 }, 'navigator.clipboard.write() fails for custom format with web prefix, but different Blob type'); 70 71 promise_test(async t => { 72 await tryGrantWritePermission(); 73 74 const format1 = 'web Text/plain'; 75 const format2 = 'text/plain'; 76 const blobInput1 = new Blob(['input data 1'], {type: format2}); 77 const clipboardItemInput = new ClipboardItem( 78 {[format1]: blobInput1}); 79 await waitForUserActivation(); 80 await promise_rejects_dom(t, 'NotAllowedError', 81 navigator.clipboard.write([clipboardItemInput])); 82 }, 'navigator.clipboard.write() fails for custom format with different case than the Blob type'); 83 84 promise_test(async t => { 85 await tryGrantWritePermission(); 86 87 const format1 = 'web text/plain'; 88 const format2 = 'Text/plain'; 89 const blobInput1 = new Blob(['input data 1'], {type: format1}); 90 const clipboardItemInput = new ClipboardItem( 91 {[format2]: blobInput1}); 92 await waitForUserActivation(); 93 await promise_rejects_dom(t, 'NotAllowedError', 94 navigator.clipboard.write([clipboardItemInput])); 95 }, 'navigator.clipboard.write() fails for invalid mime type that is different than the Blob type'); 96 97 promise_test(async t => { 98 await tryGrantWritePermission(); 99 100 const format1 = 'web Text/plain'; 101 const format2 = 'web text/plain'; 102 const blobInput1 = new Blob(['input data 1'], {type: format2}); 103 const clipboardItemInput = new ClipboardItem( 104 {[format1]: blobInput1}); 105 await waitForUserActivation(); 106 await promise_rejects_dom(t, 'NotAllowedError', 107 navigator.clipboard.write([clipboardItemInput])); 108 }, 'navigator.clipboard.write() fails for invalid mime type with web prefix and the Blob type'); 109 110 promise_test(async t => { 111 await tryGrantWritePermission(); 112 113 const format1 = 'Text/plain'; 114 const format2 = 'text/plain'; 115 const blobInput1 = new Blob(['input data 1'], {type: format2}); 116 const clipboardItemInput = new ClipboardItem( 117 {[format1]: blobInput1}); 118 await waitForUserActivation(); 119 await promise_rejects_dom(t, 'NotAllowedError', 120 navigator.clipboard.write([clipboardItemInput])); 121 }, 'navigator.clipboard.write() fails for custom format and Blob type with different case'); 122 123 </script>