async-navigator-clipboard-basics.https.html (5406B)
1 <!doctype html> 2 <meta charset="utf-8"> 3 <title>Async Clipboard input type 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 13 // Permissions are required in order to invoke navigator.clipboard functions in 14 // an automated test. 15 async function getPermissions() { 16 await tryGrantReadPermission(); 17 await tryGrantWritePermission(); 18 await waitForUserActivation(); 19 } 20 21 test(() => { 22 assert_not_equals(navigator.clipboard, undefined); 23 assert_true(navigator.clipboard instanceof Clipboard); 24 assert_equals(navigator.clipboard, navigator.clipboard); 25 }, 'navigator.clipboard exists'); 26 27 promise_test(async () => { 28 await getPermissions(); 29 const blob = new Blob(['hello'], {type: 'text/plain'}); 30 const item = new ClipboardItem({'text/plain': blob}); 31 32 await navigator.clipboard.write([item]); 33 }, 'navigator.clipboard.write([text/plain ClipboardItem]) succeeds'); 34 35 promise_test(async t => { 36 await getPermissions(); 37 const blob1 = new Blob(['hello'], {type: 'text/plain'}); 38 const blob2 = new Blob(['world'], {type: 'text/plain'}); 39 40 const item1 = new ClipboardItem({'text/plain': blob1}); 41 const item2 = new ClipboardItem({'text/plain': blob2}); 42 43 await promise_rejects_dom(t, "NotAllowedError", 44 navigator.clipboard.write([item1, item2])); 45 }, 'navigator.clipboard.write([>1 ClipboardItems]) fails (not implemented)'); 46 47 promise_test(async t => { 48 await getPermissions(); 49 await promise_rejects_js(t, TypeError, navigator.clipboard.write()); 50 }, 'navigator.clipboard.write() fails (expect [ClipboardItem])'); 51 52 promise_test(async t => { 53 await getPermissions(); 54 await promise_rejects_js(t, TypeError, navigator.clipboard.write(null)); 55 }, 'navigator.clipboard.write(null) fails (expect [ClipboardItem])'); 56 57 promise_test(async t => { 58 await getPermissions(); 59 await promise_rejects_js(t, TypeError, 60 navigator.clipboard.write('Bad string')); 61 }, 'navigator.clipboard.write(DOMString) fails (expect [ClipboardItem])'); 62 63 promise_test(async t => { 64 await getPermissions(); 65 const blob = new Blob(['hello'], {type: 'text/plain'}); 66 await promise_rejects_js(t, TypeError, navigator.clipboard.write(blob)); 67 }, 'navigator.clipboard.write(Blob) fails (expect [ClipboardItem])'); 68 69 promise_test(async () => { 70 await getPermissions(); 71 await navigator.clipboard.writeText('New clipboard text'); 72 }, 'navigator.clipboard.writeText(DOMString) succeeds'); 73 74 promise_test(async t => { 75 await getPermissions(); 76 await promise_rejects_js(t, TypeError, 77 navigator.clipboard.writeText()); 78 }, 'navigator.clipboard.writeText() fails (expect DOMString)'); 79 80 promise_test(async () => { 81 await getPermissions(); 82 const item = new ClipboardItem({'text/plain': 'test'}); 83 await navigator.clipboard.write([item]); 84 }, 'navigator.clipboard.write({string : DOMString}) succeeds'); 85 86 promise_test(async () => { 87 await getPermissions(); 88 const fetched = await fetch('/clipboard-apis/resources/greenbox.png'); 89 const image = await fetched.blob(); 90 const item = new ClipboardItem({'image/png': image}); 91 92 await navigator.clipboard.write([item]); 93 }, 'navigator.clipboard.write({string : image/png Blob}) succeeds'); 94 95 promise_test(async() => { 96 await getPermissions(); 97 const fetched = await fetch('/clipboard-apis/resources/greenbox.png'); 98 const image = await fetched.blob(); 99 const item = new ClipboardItem({ 100 'text/plain': new Blob(['first'], {type: 'text/plain'}), 101 'image/png': image}); 102 103 await navigator.clipboard.write([item]); 104 }, 'navigator.clipboard.write([text + png] succeeds'); 105 106 promise_test(async t => { 107 await getPermissions(); 108 const item = new ClipboardItem({'image/png': 'not an image'}); 109 await promise_rejects_js(t, TypeError, navigator.clipboard.write([item])); 110 }, 'navigator.clipboard.write(image/png DOMString) fails'); 111 112 promise_test(async () => { 113 await getPermissions(); 114 const result = await navigator.clipboard.read(); 115 assert_true(result instanceof Object); 116 assert_true(result[0] instanceof ClipboardItem); 117 }, 'navigator.clipboard.read() succeeds'); 118 119 promise_test(async () => { 120 await getPermissions(); 121 const result = await navigator.clipboard.readText(); 122 assert_equals(typeof result, 'string'); 123 }, 'navigator.clipboard.readText() succeeds'); 124 125 promise_test(async () => { 126 await getPermissions(); 127 const promise_blob = Promise.resolve(new Blob(['hello'], {type: 'text/plain'})); 128 const item = new ClipboardItem({'text/plain': promise_blob}); 129 130 await navigator.clipboard.write([item]); 131 }, 'navigator.clipboard.write(Promise<Blob>) succeeds'); 132 133 promise_test(async () => { 134 await getPermissions(); 135 const promise_text_blob = Promise.resolve(new Blob(['hello'], {type: 'text/plain'})); 136 const promise_html_blob = Promise.resolve(new Blob(["<p style='color: red; font-style: oblique;'>Test</p>"], {type: 'text/html'})); 137 const item = new ClipboardItem({'text/plain': promise_text_blob, 'text/html': promise_html_blob}); 138 139 await navigator.clipboard.write([item]); 140 }, 'navigator.clipboard.write(Promise<Blob>s) succeeds'); 141 142 </script>