tor-browser

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

async-navigator-clipboard-basics.https.html (5406B)


      1 <!doctype html>
      2 <meta charset="utf-8">
      3 <title>Async Clipboard input type 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 
     13 // Permissions are required in order to invoke navigator.clipboard functions in
     14 // an automated test.
     15 async function getPermissions() {
     16  await tryGrantReadPermission();
     17  await tryGrantWritePermission();
     18  await waitForUserActivation();
     19 }
     20 
     21 test(() => {
     22  assert_not_equals(navigator.clipboard, undefined);
     23  assert_true(navigator.clipboard instanceof Clipboard);
     24  assert_equals(navigator.clipboard, navigator.clipboard);
     25 }, 'navigator.clipboard exists');
     26 
     27 promise_test(async () => {
     28  await getPermissions();
     29  const blob = new Blob(['hello'], {type: 'text/plain'});
     30  const item = new ClipboardItem({'text/plain': blob});
     31 
     32  await navigator.clipboard.write([item]);
     33 }, 'navigator.clipboard.write([text/plain ClipboardItem]) succeeds');
     34 
     35 promise_test(async t => {
     36  await getPermissions();
     37  const blob1 = new Blob(['hello'], {type: 'text/plain'});
     38  const blob2 = new Blob(['world'], {type: 'text/plain'});
     39 
     40  const item1 = new ClipboardItem({'text/plain': blob1});
     41  const item2 = new ClipboardItem({'text/plain': blob2});
     42 
     43  await promise_rejects_dom(t, "NotAllowedError",
     44      navigator.clipboard.write([item1, item2]));
     45 }, 'navigator.clipboard.write([>1 ClipboardItems]) fails (not implemented)');
     46 
     47 promise_test(async t => {
     48  await getPermissions();
     49  await promise_rejects_js(t, TypeError, navigator.clipboard.write());
     50 }, 'navigator.clipboard.write() fails (expect [ClipboardItem])');
     51 
     52 promise_test(async t => {
     53  await getPermissions();
     54  await promise_rejects_js(t, TypeError, navigator.clipboard.write(null));
     55 }, 'navigator.clipboard.write(null) fails (expect [ClipboardItem])');
     56 
     57 promise_test(async t => {
     58  await getPermissions();
     59  await promise_rejects_js(t, TypeError,
     60                           navigator.clipboard.write('Bad string'));
     61 }, 'navigator.clipboard.write(DOMString) fails (expect [ClipboardItem])');
     62 
     63 promise_test(async t => {
     64  await getPermissions();
     65  const blob = new Blob(['hello'], {type: 'text/plain'});
     66  await promise_rejects_js(t, TypeError, navigator.clipboard.write(blob));
     67 }, 'navigator.clipboard.write(Blob) fails (expect [ClipboardItem])');
     68 
     69 promise_test(async () => {
     70  await getPermissions();
     71  await navigator.clipboard.writeText('New clipboard text');
     72 }, 'navigator.clipboard.writeText(DOMString) succeeds');
     73 
     74 promise_test(async t => {
     75  await getPermissions();
     76  await promise_rejects_js(t, TypeError,
     77                           navigator.clipboard.writeText());
     78 }, 'navigator.clipboard.writeText() fails (expect DOMString)');
     79 
     80 promise_test(async () => {
     81  await getPermissions();
     82  const item = new ClipboardItem({'text/plain': 'test'});
     83  await navigator.clipboard.write([item]);
     84 }, 'navigator.clipboard.write({string : DOMString}) succeeds');
     85 
     86 promise_test(async () => {
     87  await getPermissions();
     88  const fetched = await fetch('/clipboard-apis/resources/greenbox.png');
     89  const image = await fetched.blob();
     90  const item = new ClipboardItem({'image/png': image});
     91 
     92  await navigator.clipboard.write([item]);
     93 }, 'navigator.clipboard.write({string : image/png Blob}) succeeds');
     94 
     95 promise_test(async() => {
     96  await getPermissions();
     97  const fetched = await fetch('/clipboard-apis/resources/greenbox.png');
     98  const image = await fetched.blob();
     99  const item = new ClipboardItem({
    100    'text/plain': new Blob(['first'], {type: 'text/plain'}),
    101    'image/png': image});
    102 
    103  await navigator.clipboard.write([item]);
    104 }, 'navigator.clipboard.write([text + png] succeeds');
    105 
    106 promise_test(async t => {
    107  await getPermissions();
    108  const item = new ClipboardItem({'image/png': 'not an image'});
    109  await promise_rejects_js(t, TypeError, navigator.clipboard.write([item]));
    110 }, 'navigator.clipboard.write(image/png DOMString) fails');
    111 
    112 promise_test(async () => {
    113  await getPermissions();
    114  const result = await navigator.clipboard.read();
    115  assert_true(result instanceof Object);
    116  assert_true(result[0] instanceof ClipboardItem);
    117 }, 'navigator.clipboard.read() succeeds');
    118 
    119 promise_test(async () => {
    120  await getPermissions();
    121  const result = await navigator.clipboard.readText();
    122  assert_equals(typeof result, 'string');
    123 }, 'navigator.clipboard.readText() succeeds');
    124 
    125 promise_test(async () => {
    126  await getPermissions();
    127  const promise_blob = Promise.resolve(new Blob(['hello'], {type: 'text/plain'}));
    128  const item = new ClipboardItem({'text/plain': promise_blob});
    129 
    130  await navigator.clipboard.write([item]);
    131 }, 'navigator.clipboard.write(Promise<Blob>) succeeds');
    132 
    133 promise_test(async () => {
    134  await getPermissions();
    135  const promise_text_blob = Promise.resolve(new Blob(['hello'], {type: 'text/plain'}));
    136  const promise_html_blob = Promise.resolve(new Blob(["<p style='color: red; font-style: oblique;'>Test</p>"], {type: 'text/html'}));
    137  const item = new ClipboardItem({'text/plain': promise_text_blob, 'text/html': promise_html_blob});
    138 
    139  await navigator.clipboard.write([item]);
    140 }, 'navigator.clipboard.write(Promise<Blob>s) succeeds');
    141 
    142 </script>