<!doctype html>
<meta charset="utf-8">
<title>Async Clipboard web custom format read/write test.</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 tryGrantReadPermission();
  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 navigator.clipboard.write([clipboardItemInput]);
  await waitForUserActivation();
  const clipboardItems = await navigator.clipboard.read();
  assert_equals(clipboardItems.length, 1);
  const clipboardItem = clipboardItems[0];
  assert_true(clipboardItem instanceof ClipboardItem);
  // This test can't verify clipboardItem.types, because its size and values
  // are both platform-dependent.

  const blobOutput1 = await clipboardItem.getType(format1);
  assert_equals(blobOutput1.type, format1);
  const data1 = await (new Response(blobOutput1)).text();
  assert_equals(data1, 'input data 1');
}, 'navigator.clipboard.write() for custom format and Blob type with web prefix');

</script>
