tor-browser

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

showPicker-errors.https.window.js (5740B)


      1 // META: script=resources/test-helpers.js
      2 
      3 promise_test(async t => {
      4  await promise_rejects_dom(t, 'SecurityError', self.showOpenFilePicker());
      5 }, 'showOpenFilePicker: Showing a picker requires user activation.');
      6 
      7 promise_test(async t => {
      8  await promise_rejects_dom(t, 'SecurityError', self.showSaveFilePicker());
      9 }, 'showSaveFilePicker: Showing a picker requires user activation.');
     10 
     11 promise_test(async t => {
     12  await promise_rejects_dom(t, 'SecurityError', self.showDirectoryPicker());
     13 }, 'showDirectoryPicker: Showing a picker requires user activation.');
     14 
     15 // TODO(mek): Add tests for cross-origin iframes, opaque origins, etc.
     16 
     17 define_file_picker_error_tests('showOpenFilePicker');
     18 define_file_picker_error_tests('showSaveFilePicker');
     19 
     20 function define_file_picker_error_tests(showPickerMethod) {
     21  promise_test(async t => {
     22    await promise_rejects_js(
     23        t, TypeError,
     24        self[showPickerMethod]({excludeAcceptAllOption: true, types: []}));
     25  }, showPickerMethod + ': File picker requires at least one accepted type.');
     26 
     27  promise_test(async t => {
     28    await promise_rejects_js(
     29        t, TypeError,
     30        self[showPickerMethod]({types: [{accept: {'': ['.foo']}}]}));
     31    await promise_rejects_js(
     32        t, TypeError,
     33        self[showPickerMethod]({types: [{accept: {'  ': ['.foo']}}]}));
     34  }, showPickerMethod + ': MIME type can\'t be an empty string.');
     35 
     36  promise_test(async t => {
     37    await promise_rejects_js(
     38        t, TypeError,
     39        self[showPickerMethod]({types: [{accept: {'image': ['.foo']}}]}));
     40  }, showPickerMethod + ': MIME type must have subtype.');
     41 
     42  promise_test(async t => {
     43    await promise_rejects_js(
     44        t, TypeError,
     45        self[showPickerMethod]({types: [{accept: {'  /plain': ['.foo']}}]}));
     46  }, showPickerMethod + ': MIME type can\'t have empty type.');
     47 
     48  promise_test(async t => {
     49    await promise_rejects_js(
     50        t, TypeError,
     51        self[showPickerMethod]({types: [{accept: {'image/  ': ['.foo']}}]}));
     52  }, showPickerMethod + ': MIME type can\'t have empty subtype.');
     53 
     54  promise_test(async t => {
     55    await promise_rejects_js(
     56        t, TypeError,
     57        self[showPickerMethod](
     58            {types: [{accept: {'text/plain;charset=utf8': ['.txt']}}]}));
     59  }, showPickerMethod + ': MIME type can\'t have parameters.');
     60 
     61  promise_test(async t => {
     62    await promise_rejects_js(t, TypeError, self[showPickerMethod]({
     63                               types: [{accept: {'text>foo/plain': ['.txt']}}]
     64                             }));
     65  }, showPickerMethod + ': MIME type can\'t have invalid characters in type.');
     66 
     67  promise_test(async t => {
     68    await promise_rejects_js(
     69        t, TypeError,
     70        self[showPickerMethod]({types: [{accept: {'text / plain': ['.txt']}}]}));
     71  }, showPickerMethod + ': MIME type can\'t have whitespace in the middle.');
     72 
     73  promise_test(
     74      async t => {
     75        await promise_rejects_js(
     76            t, TypeError,
     77            self[showPickerMethod](
     78                {types: [{accept: {'text/plain>foo': ['.txt']}}]}));
     79      },
     80      showPickerMethod +
     81          ': MIME type can\'t have invalid characters in subtype.');
     82 
     83  promise_test(async t => {
     84    await promise_rejects_js(t, TypeError, self[showPickerMethod]({
     85      startIn: 'secrets',
     86    }));
     87  }, showPickerMethod + ': unknown well-known starting directory.');
     88 
     89  promise_test(async t => {
     90    await promise_rejects_js(t, TypeError, self[showPickerMethod]({
     91                               startIn: '',
     92                             }));
     93  }, showPickerMethod + ': starting directory can\t be empty.');
     94 
     95  promise_test(async t => {
     96    await promise_rejects_js(t, TypeError, self[showPickerMethod]({
     97                               startIn: null,
     98                             }));
     99  }, showPickerMethod + ': starting directory can\t be null.');
    100 
    101  promise_test(async t => {
    102    await promise_rejects_js(t, TypeError, self[showPickerMethod]({
    103      id: "inv*l:d\\ chara<ters",
    104    }));
    105  }, showPickerMethod + ': starting directory ID contains invalid characters.');
    106 
    107  promise_test(async t => {
    108    await promise_rejects_js(t, TypeError, self[showPickerMethod]({
    109      id: "id-length-cannot-exceed-32-characters",
    110    }));
    111  }, showPickerMethod + ': starting directory ID cannot exceed 32 characters.');
    112 
    113  const invalid_extensions = {
    114    '.extensiontoolong': 'extension length more than 16.',
    115    '.txt.': 'extenstion ends with "."',
    116    'txt': 'extenstion does not start with "."',
    117    '.$txt' : 'illegal character "$"',
    118    '.t<xt': 'illegal character "<"',
    119    '.t/xt': 'illegal character "\"',
    120    '.\txt': 'illegal character "/"',
    121    '.txt\\': 'illegal characters "\\"',
    122    '.txt?': 'illegal character "?"',
    123    '.txt*': 'illegal character "*"',
    124    '.{txt': 'illegal character "{"',
    125    '.}txt': 'illegal character "}"',
    126    ' .txt': 'illegal whitespace at front of extension',
    127    '. txt': 'illegal whitespace in extension',
    128    '.txt ': 'illegal whitespace at end of extension',
    129    '.\u202etxt\u202e' : 'illegal RTL character',
    130    '.t\u00E6xt': 'non-ASCII character "æ"',
    131    '.קום': 'non-ASCII character "קום"',
    132    '.txt🙂': 'non-ASCII character "🙂"',
    133    '.{txt}': 'illegal characters "{" and "}"',
    134  }
    135 
    136  for (const [extension, description] of Object.entries(invalid_extensions)) {
    137    define_file_picker_extension_error_test(showPickerMethod, extension, description)
    138  }
    139 }
    140 
    141 function define_file_picker_extension_error_test(showPickerMethod, extension, description) {
    142  promise_test(async t => {
    143    await promise_rejects_js(
    144      t, TypeError,
    145      self[showPickerMethod](
    146        { types: [{ accept: { 'text/plain': ['.txt', extension] } }] }));
    147  }, showPickerMethod + ': invalid extension "' + extension + '". ' + description + ".");
    148 }