<!doctype html>
<meta charset="utf-8">
<title>Async Clipboard web custom format write using Blob without web prefix 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 = '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 with web prefix, but Blob type without web prefix');

</script>
