/third_party/blink/web_tests/external/wpt/clipboard-apis/async-custom-formats-write-read.tentative.https.html

https://github.com/chromium/chromium · HTML · 214 lines · 187 code · 27 blank · 0 comment · 0 complexity · 2019e9ca9c0d6e0115b569f4acb097c0 MD5 · raw file

  1. <!doctype html>
  2. <meta charset="utf-8">
  3. <title>Async Clipboard custom write -> Async Clipboard custom read test</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. promise_test(async t => {
  14. await test_driver.set_permission({name: 'clipboard-read'}, 'granted');
  15. await test_driver.set_permission({name: 'clipboard-write'}, 'granted');
  16. const format1 = 'web application/x-custom-format-clipboard-test-format-1';
  17. const format2 = 'web application/x-custom-format-clipboard-test-format-2';
  18. const blobInput1 = new Blob(['input data 1'], {type: format1});
  19. const blobInput2 = new Blob(['input data 2'], {type: format2});
  20. const clipboardItemInput = new ClipboardItem(
  21. {[format1]: blobInput1, [format2]: blobInput2});
  22. await waitForUserActivation();
  23. await navigator.clipboard.write([clipboardItemInput]);
  24. // Items should be readable on a custom format clipboard after custom format
  25. // write.
  26. await waitForUserActivation();
  27. const clipboardItems = await navigator.clipboard.read();
  28. assert_equals(clipboardItems.length, 1);
  29. const clipboardItem = clipboardItems[0];
  30. assert_true(clipboardItem instanceof ClipboardItem);
  31. // This test can't verify clipboardItem.types, because its size and values
  32. // are both platform-dependent.
  33. const blobOutput1 = await clipboardItem.getType(format1);
  34. assert_equals(blobOutput1.type, format1);
  35. const data1 = await (new Response(blobOutput1)).text();
  36. assert_equals(data1, 'input data 1');
  37. const blobOutput2 = await clipboardItem.getType(format2);
  38. assert_equals(blobOutput2.type, format2);
  39. const data2 = await (new Response(blobOutput2)).text();
  40. assert_equals(data2, 'input data 2');
  41. }, 'Verify write and read clipboard given 2 platform-neutral custom format inputs');
  42. promise_test(async t => {
  43. await test_driver.set_permission({name: 'clipboard-read'}, 'granted');
  44. await test_driver.set_permission({name: 'clipboard-write'}, 'granted');
  45. const customFormatArray = [];
  46. const customFormatMap = {};
  47. for (let i = 0; i <= 100; i++) {
  48. customFormatArray.push("web text/CustomFormat" + i);
  49. const blobInput = new Blob(['input data'], {type: customFormatArray[i]});
  50. customFormatMap[customFormatArray[i]] = blobInput;
  51. }
  52. const clipboardItemInput = new ClipboardItem(customFormatMap);
  53. await waitForUserActivation();
  54. await promise_rejects_dom(t, 'NotAllowedError',
  55. navigator.clipboard.write([clipboardItemInput]));
  56. }, 'navigator.clipboard.write() fails for more than 100 custom formats');
  57. promise_test(async t => {
  58. await test_driver.set_permission({name: 'clipboard-read'}, 'granted');
  59. await test_driver.set_permission({name: 'clipboard-write'}, 'granted');
  60. const format1 = 'application/x-custom-format-clipboard-test-format-1';
  61. const format2 = 'application/x-custom-format-clipboard-test-format-2';
  62. const blobInput1 = new Blob(['input data 1'], {type: format1});
  63. const blobInput2 = new Blob(['input data 2'], {type: format2});
  64. const clipboardItemInput = new ClipboardItem(
  65. {[format1]: blobInput1, [format2]: blobInput2});
  66. await waitForUserActivation();
  67. await promise_rejects_dom(t, 'NotAllowedError',
  68. navigator.clipboard.write([clipboardItemInput]));
  69. }, 'navigator.clipboard.write() fails for custom formats without web prefix');
  70. promise_test(async t => {
  71. await test_driver.set_permission({name: 'clipboard-read'}, 'granted');
  72. await test_driver.set_permission({name: 'clipboard-write'}, 'granted');
  73. const format1 = 'web ';
  74. const format2 = 'web a';
  75. const blobInput1 = new Blob(['input data 1'], {type: format1});
  76. const blobInput2 = new Blob(['input data 2'], {type: format2});
  77. const clipboardItemInput = new ClipboardItem(
  78. {[format1]: blobInput1, [format2]: blobInput2});
  79. await waitForUserActivation();
  80. await promise_rejects_dom(t, 'NotAllowedError',
  81. navigator.clipboard.write([clipboardItemInput]));
  82. }, 'navigator.clipboard.write() fails for custom formats with web prefix, but invalid MIME types');
  83. promise_test(async t => {
  84. await test_driver.set_permission({name: 'clipboard-read'}, 'granted');
  85. await test_driver.set_permission({name: 'clipboard-write'}, 'granted');
  86. const format1 = 'web text/plain';
  87. const format2 = 'text/plain';
  88. const blobInput1 = new Blob(['input data 1'], {type: format2});
  89. const clipboardItemInput = new ClipboardItem(
  90. {[format1]: blobInput1});
  91. await waitForUserActivation();
  92. await navigator.clipboard.write([clipboardItemInput]);
  93. await waitForUserActivation();
  94. const clipboardItems = await navigator.clipboard.read();
  95. assert_equals(clipboardItems.length, 1);
  96. const clipboardItem = clipboardItems[0];
  97. assert_true(clipboardItem instanceof ClipboardItem);
  98. // This test can't verify clipboardItem.types, because its size and values
  99. // are both platform-dependent.
  100. const blobOutput1 = await clipboardItem.getType(format1);
  101. assert_equals(blobOutput1.type, format1);
  102. const data1 = await (new Response(blobOutput1)).text();
  103. assert_equals(data1, 'input data 1');
  104. }, 'navigator.clipboard.write() for custom format with web prefix, but Blob type without web prefix');
  105. promise_test(async t => {
  106. await test_driver.set_permission({name: 'clipboard-read'}, 'granted');
  107. await test_driver.set_permission({name: 'clipboard-write'}, 'granted');
  108. const format1 = 'web text/plain';
  109. const format2 = 'text/custom';
  110. const blobInput1 = new Blob(['input data 1'], {type: format2});
  111. const clipboardItemInput = new ClipboardItem(
  112. {[format1]: blobInput1});
  113. await waitForUserActivation();
  114. await promise_rejects_dom(t, 'NotAllowedError',
  115. navigator.clipboard.write([clipboardItemInput]));
  116. }, 'navigator.clipboard.write() fails for custom format with web prefix, but different Blob type');
  117. promise_test(async t => {
  118. await test_driver.set_permission({name: 'clipboard-read'}, 'granted');
  119. await test_driver.set_permission({name: 'clipboard-write'}, 'granted');
  120. const format1 = 'web Text/plain';
  121. const format2 = 'text/plain';
  122. const blobInput1 = new Blob(['input data 1'], {type: format2});
  123. const clipboardItemInput = new ClipboardItem(
  124. {[format1]: blobInput1});
  125. await waitForUserActivation();
  126. await promise_rejects_dom(t, 'NotAllowedError',
  127. navigator.clipboard.write([clipboardItemInput]));
  128. }, 'navigator.clipboard.write() fails for custom format with different case than the Blob type');
  129. promise_test(async t => {
  130. await test_driver.set_permission({name: 'clipboard-read'}, 'granted');
  131. await test_driver.set_permission({name: 'clipboard-write'}, 'granted');
  132. const format1 = 'web text/plain';
  133. const format2 = 'Text/plain';
  134. const blobInput1 = new Blob(['input data 1'], {type: format1});
  135. const clipboardItemInput = new ClipboardItem(
  136. {[format2]: blobInput1});
  137. await waitForUserActivation();
  138. await promise_rejects_dom(t, 'NotAllowedError',
  139. navigator.clipboard.write([clipboardItemInput]));
  140. }, 'navigator.clipboard.write() fails for invalid mime type that is different than the Blob type');
  141. promise_test(async t => {
  142. await test_driver.set_permission({name: 'clipboard-read'}, 'granted');
  143. await test_driver.set_permission({name: 'clipboard-write'}, 'granted');
  144. const format1 = 'web Text/plain';
  145. const format2 = 'web text/plain';
  146. const blobInput1 = new Blob(['input data 1'], {type: format2});
  147. const clipboardItemInput = new ClipboardItem(
  148. {[format1]: blobInput1});
  149. await waitForUserActivation();
  150. await promise_rejects_dom(t, 'NotAllowedError',
  151. navigator.clipboard.write([clipboardItemInput]));
  152. }, 'navigator.clipboard.write() fails for invalid mime type with web prefix and the Blob type');
  153. promise_test(async t => {
  154. await test_driver.set_permission({name: 'clipboard-read'}, 'granted');
  155. await test_driver.set_permission({name: 'clipboard-write'}, 'granted');
  156. const format1 = 'web text/plain';
  157. const format2 = 'web text/plain';
  158. const blobInput1 = new Blob(['input data 1'], {type: format2});
  159. const clipboardItemInput = new ClipboardItem(
  160. {[format1]: blobInput1});
  161. await waitForUserActivation();
  162. await navigator.clipboard.write([clipboardItemInput]);
  163. await waitForUserActivation();
  164. const clipboardItems = await navigator.clipboard.read();
  165. assert_equals(clipboardItems.length, 1);
  166. const clipboardItem = clipboardItems[0];
  167. assert_true(clipboardItem instanceof ClipboardItem);
  168. // This test can't verify clipboardItem.types, because its size and values
  169. // are both platform-dependent.
  170. const blobOutput1 = await clipboardItem.getType(format1);
  171. assert_equals(blobOutput1.type, format1);
  172. const data1 = await (new Response(blobOutput1)).text();
  173. assert_equals(data1, 'input data 1');
  174. }, 'navigator.clipboard.write() for custom format and Blob type with web prefix');
  175. promise_test(async t => {
  176. await test_driver.set_permission({name: 'clipboard-read'}, 'granted');
  177. await test_driver.set_permission({name: 'clipboard-write'}, 'granted');
  178. const format1 = 'Text/plain';
  179. const format2 = 'text/plain';
  180. const blobInput1 = new Blob(['input data 1'], {type: format2});
  181. const clipboardItemInput = new ClipboardItem(
  182. {[format1]: blobInput1});
  183. await waitForUserActivation();
  184. await promise_rejects_dom(t, 'NotAllowedError',
  185. navigator.clipboard.write([clipboardItemInput]));
  186. }, 'navigator.clipboard.write() fails for custom format and Blob type with different case');
  187. </script>