<!doctype html>
<meta charset="utf-8">
<title>Async Clipboard custom write -> Async Clipboard custom read 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 application/x-custom-format-clipboard-test-format-1';
  const format2 = 'web 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 navigator.clipboard.write([clipboardItemInput]);

  // Items should be readable on a custom format clipboard after custom format
  // write.
  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');

  const blobOutput2 = await clipboardItem.getType(format2);
  assert_equals(blobOutput2.type, format2);
  const data2 = await (new Response(blobOutput2)).text();
  assert_equals(data2, 'input data 2');
}, 'Verify write and read clipboard given 2 platform-neutral custom format inputs');

</script>
