@@ -304,6 +304,35 @@ it('should use getAsFileSystemHandle when available', async () => {
304
304
expect ( file . path ) . toBe ( `./${ name } ` ) ;
305
305
} ) ;
306
306
307
+ it ( 'should not use getAsFileSystemHandle when not in a secure context' , async ( ) => {
308
+ const f1Name = 'test.nosec.json' ;
309
+ const f1 = createFile ( f1Name , { ping : false } , {
310
+ type : 'application/json'
311
+ } ) ;
312
+ const [ _ , h ] = createFileSystemFileHandle ( 'test.sec.json' , { ping : true } , {
313
+ type : 'application/json'
314
+ } ) ;
315
+ const evt = dragEvtFromItems ( [
316
+ dataTransferItemWithFsHandle ( f1 , h )
317
+ ] ) ;
318
+
319
+ window . isSecureContext = false ;
320
+
321
+ const files = await fromEvent ( evt ) ;
322
+ expect ( files ) . toHaveLength ( 1 ) ;
323
+ expect ( files . every ( file => file instanceof File ) ) . toBe ( true ) ;
324
+
325
+ const [ file ] = files as FileWithPath [ ] ;
326
+
327
+ expect ( file . name ) . toBe ( f1 . name ) ;
328
+ expect ( file . type ) . toBe ( f1 . type ) ;
329
+ expect ( file . size ) . toBe ( f1 . size ) ;
330
+ expect ( file . lastModified ) . toBe ( f1 . lastModified ) ;
331
+ expect ( file . path ) . toBe ( `./${ f1Name } ` ) ;
332
+
333
+ window . isSecureContext = true ;
334
+ } ) ;
335
+
307
336
function dragEvtFromItems ( items : DataTransferItem | DataTransferItem [ ] , type : string = 'drop' ) : DragEvent {
308
337
return {
309
338
type,
@@ -466,8 +495,7 @@ function createFile<T>(name: string, data: T, options?: FilePropertyBag) {
466
495
}
467
496
468
497
function createFileSystemFileHandle < T > ( name : string , data : T , options ?: FilePropertyBag ) : [ File , FileSystemFileHandle ] {
469
- const json = JSON . stringify ( data ) ;
470
- const file = new File ( [ json ] , name , options ) ;
498
+ const file = createFile ( name , data , options ) ;
471
499
return [ file , {
472
500
getFile ( ) {
473
501
return Promise . resolve ( file ) ;
0 commit comments