mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 02:09:05 +02:00 
			
		
		
		
	Automatic update from web-platform-tests Enable shadowrealm testing for compression api -- wpt-commits: c82521cfa587505746a853a24d22589633825b10 wpt-pr: 41954
		
			
				
	
	
		
			85 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// META: global=window,worker,shadowrealm
 | 
						|
 | 
						|
'use strict';
 | 
						|
 | 
						|
const badChunks = [
 | 
						|
  {
 | 
						|
    name: 'undefined',
 | 
						|
    value: undefined
 | 
						|
  },
 | 
						|
  {
 | 
						|
    name: 'null',
 | 
						|
    value: null
 | 
						|
  },
 | 
						|
  {
 | 
						|
    name: 'numeric',
 | 
						|
    value: 3.14
 | 
						|
  },
 | 
						|
  {
 | 
						|
    name: 'object, not BufferSource',
 | 
						|
    value: {}
 | 
						|
  },
 | 
						|
  {
 | 
						|
    name: 'array',
 | 
						|
    value: [65]
 | 
						|
  },
 | 
						|
  {
 | 
						|
    name: 'SharedArrayBuffer',
 | 
						|
    // Use a getter to postpone construction so that all tests don't fail where
 | 
						|
    // SharedArrayBuffer is not yet implemented.
 | 
						|
    get value() {
 | 
						|
      // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()`
 | 
						|
      return new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer;
 | 
						|
    }
 | 
						|
  },
 | 
						|
  {
 | 
						|
    name: 'shared Uint8Array',
 | 
						|
    get value() {
 | 
						|
      // See https://github.com/whatwg/html/issues/5380 for why not `new SharedArrayBuffer()`
 | 
						|
      return new Uint8Array(new WebAssembly.Memory({ shared:true, initial:1, maximum:1 }).buffer)
 | 
						|
    }
 | 
						|
  },
 | 
						|
  {
 | 
						|
    name: 'invalid deflate bytes',
 | 
						|
    value: new Uint8Array([0, 156, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 48, 173, 6, 36])
 | 
						|
  },
 | 
						|
  {
 | 
						|
    name: 'invalid gzip bytes',
 | 
						|
    value: new Uint8Array([0, 139, 8, 0, 0, 0, 0, 0, 0, 3, 75, 173, 40, 72, 77, 46, 73, 77, 81, 200, 47, 45, 41, 40, 45, 1, 0, 176, 1, 57, 179, 15, 0, 0, 0])
 | 
						|
  },
 | 
						|
];
 | 
						|
 | 
						|
// Test Case Design
 | 
						|
// We need to wait until after we close the writable stream to check if the decoded stream is valid.
 | 
						|
// We can end up in a state where all reads/writes are valid, but upon closing the writable stream an error is detected.
 | 
						|
// (Example: A zlib encoded chunk w/o the checksum).
 | 
						|
 | 
						|
async function decompress(chunk, format, t)
 | 
						|
{
 | 
						|
    const ds = new DecompressionStream(format);
 | 
						|
    const reader = ds.readable.getReader();
 | 
						|
    const writer = ds.writable.getWriter();
 | 
						|
 | 
						|
    writer.write(chunk.value).then(() => {}, () => {});
 | 
						|
    reader.read().then(() => {}, () => {});
 | 
						|
 | 
						|
    await promise_rejects_js(t, TypeError, writer.close(), 'writer.close() should reject');
 | 
						|
    await promise_rejects_js(t, TypeError, writer.closed, 'write.closed should reject');
 | 
						|
 | 
						|
    await promise_rejects_js(t, TypeError, reader.read(), 'reader.read() should reject');
 | 
						|
    await promise_rejects_js(t, TypeError, reader.closed, 'read.closed should reject');
 | 
						|
}
 | 
						|
 | 
						|
for (const chunk of badChunks) {
 | 
						|
  promise_test(async t => {
 | 
						|
    await decompress(chunk, 'gzip', t);
 | 
						|
  }, `chunk of type ${chunk.name} should error the stream for gzip`);
 | 
						|
 | 
						|
  promise_test(async t => {
 | 
						|
    await decompress(chunk, 'deflate', t);
 | 
						|
  }, `chunk of type ${chunk.name} should error the stream for deflate`);
 | 
						|
 | 
						|
  promise_test(async t => {
 | 
						|
    await decompress(chunk, 'deflate-raw', t);
 | 
						|
  }, `chunk of type ${chunk.name} should error the stream for deflate-raw`);
 | 
						|
}
 |