tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

async-custom-formats-write-fail.tentative.https.html (5002B)


      1 <!doctype html>
      2 <meta charset="utf-8">
      3 <title>Async Clipboard web custom format write 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 'use strict';
     13 
     14 promise_test(async t => {
     15  await tryGrantWritePermission();
     16 
     17  const customFormatArray = [];
     18  const customFormatMap = {};
     19  for (let i = 0; i <= 100; i++) {
     20    customFormatArray.push("web text/CustomFormat" + i);
     21    const blobInput = new Blob(['input data'], {type: customFormatArray[i]});
     22    customFormatMap[customFormatArray[i]] = blobInput;
     23  }
     24  const clipboardItemInput = new ClipboardItem(customFormatMap);
     25  await waitForUserActivation();
     26  await promise_rejects_dom(t, 'NotAllowedError',
     27      navigator.clipboard.write([clipboardItemInput]));
     28 }, 'navigator.clipboard.write() fails for more than 100 custom formats');
     29 
     30 promise_test(async t => {
     31  await tryGrantWritePermission();
     32 
     33  const format1 = 'application/x-custom-format-clipboard-test-format-1';
     34  const format2 = 'application/x-custom-format-clipboard-test-format-2';
     35  const blobInput1 = new Blob(['input data 1'], {type: format1});
     36  const blobInput2 = new Blob(['input data 2'], {type: format2});
     37  const clipboardItemInput = new ClipboardItem(
     38      {[format1]: blobInput1, [format2]: blobInput2});
     39  await waitForUserActivation();
     40  await promise_rejects_dom(t, 'NotAllowedError',
     41      navigator.clipboard.write([clipboardItemInput]));
     42 }, 'navigator.clipboard.write() fails for custom formats without web prefix');
     43 
     44 promise_test(async t => {
     45  await tryGrantWritePermission();
     46 
     47  const format1 = 'web ';
     48  const format2 = 'web a';
     49  const blobInput1 = new Blob(['input data 1'], {type: format1});
     50  const blobInput2 = new Blob(['input data 2'], {type: format2});
     51  const clipboardItemInput = new ClipboardItem(
     52      {[format1]: blobInput1, [format2]: blobInput2});
     53  await waitForUserActivation();
     54  await promise_rejects_dom(t, 'NotAllowedError',
     55      navigator.clipboard.write([clipboardItemInput]));
     56 }, 'navigator.clipboard.write() fails for custom formats with web prefix, but invalid MIME types');
     57 
     58 promise_test(async t => {
     59  await tryGrantWritePermission();
     60 
     61  const format1 = 'web text/plain';
     62  const format2 = 'text/custom';
     63  const blobInput1 = new Blob(['input data 1'], {type: format2});
     64  const clipboardItemInput = new ClipboardItem(
     65      {[format1]: blobInput1});
     66  await waitForUserActivation();
     67  await promise_rejects_dom(t, 'NotAllowedError',
     68      navigator.clipboard.write([clipboardItemInput]));
     69 }, 'navigator.clipboard.write() fails for custom format with web prefix, but different Blob type');
     70 
     71 promise_test(async t => {
     72  await tryGrantWritePermission();
     73 
     74  const format1 = 'web Text/plain';
     75  const format2 = 'text/plain';
     76  const blobInput1 = new Blob(['input data 1'], {type: format2});
     77  const clipboardItemInput = new ClipboardItem(
     78      {[format1]: blobInput1});
     79      await waitForUserActivation();
     80  await promise_rejects_dom(t, 'NotAllowedError',
     81      navigator.clipboard.write([clipboardItemInput]));
     82 }, 'navigator.clipboard.write() fails for custom format with different case than the Blob type');
     83 
     84 promise_test(async t => {
     85  await tryGrantWritePermission();
     86 
     87  const format1 = 'web text/plain';
     88  const format2 = 'Text/plain';
     89  const blobInput1 = new Blob(['input data 1'], {type: format1});
     90  const clipboardItemInput = new ClipboardItem(
     91      {[format2]: blobInput1});
     92  await waitForUserActivation();
     93  await promise_rejects_dom(t, 'NotAllowedError',
     94      navigator.clipboard.write([clipboardItemInput]));
     95 }, 'navigator.clipboard.write() fails for invalid mime type that is different than the Blob type');
     96 
     97 promise_test(async t => {
     98  await tryGrantWritePermission();
     99 
    100  const format1 = 'web Text/plain';
    101  const format2 = 'web text/plain';
    102  const blobInput1 = new Blob(['input data 1'], {type: format2});
    103  const clipboardItemInput = new ClipboardItem(
    104      {[format1]: blobInput1});
    105      await waitForUserActivation();
    106  await promise_rejects_dom(t, 'NotAllowedError',
    107      navigator.clipboard.write([clipboardItemInput]));
    108 }, 'navigator.clipboard.write() fails for invalid mime type with web prefix and the Blob type');
    109 
    110 promise_test(async t => {
    111  await tryGrantWritePermission();
    112 
    113  const format1 = 'Text/plain';
    114  const format2 = 'text/plain';
    115  const blobInput1 = new Blob(['input data 1'], {type: format2});
    116  const clipboardItemInput = new ClipboardItem(
    117      {[format1]: blobInput1});
    118  await waitForUserActivation();
    119  await promise_rejects_dom(t, 'NotAllowedError',
    120      navigator.clipboard.write([clipboardItemInput]));
    121 }, 'navigator.clipboard.write() fails for custom format and Blob type with different case');
    122 
    123 </script>