Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
Compression Streams
https://bugs.webkit.org/show_bug.cgi?id=242665 Reviewed by Brent Fulgham. This patch implements the Compression Streams API. Currently we are passing all WPT test cases (except for an initialization one where we are throwing a typeError instead of a standard Error). This implementation uses the compression and decompression functions from the Zlib library. For compression I attempt to perform the compression in one shot by allocating enough memory up front per chunk. For decompression I am using a scaling allocation approach. We first allocate 1 page (16KB) of memory, then two, then 4 and so on... I added a hard limit of 1GB per allocation to make sure I don't blow away all the device's memory. For every chunk, I take all these allocations and merge them into one array. * LayoutTests/imported/w3c/web-platform-tests/compression/META.yml: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-bad-chunks.tentative.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-bad-chunks.tentative.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-bad-chunks.tentative.any.js: Added. (get value): (const.chunk.of.badChunks.promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/compression/compression-bad-chunks.tentative.any.serviceworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-bad-chunks.tentative.any.serviceworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-bad-chunks.tentative.any.sharedworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-bad-chunks.tentative.any.sharedworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-bad-chunks.tentative.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-bad-chunks.tentative.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-including-empty-chunk.tentative.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.js: Added. (async compressChunkList): (const.chunkList.of.chunkLists.promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.serviceworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.serviceworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.sharedworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.sharedworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-including-empty-chunk.tentative.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-multiple-chunks.tentative.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-multiple-chunks.tentative.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-multiple-chunks.tentative.any.js: Added. (makeExpectedChunk): (async compressMultipleChunks): (numberOfChunks.promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/compression/compression-multiple-chunks.tentative.any.serviceworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-multiple-chunks.tentative.any.serviceworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-multiple-chunks.tentative.any.sharedworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-multiple-chunks.tentative.any.sharedworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-multiple-chunks.tentative.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-multiple-chunks.tentative.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-output-length.tentative.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-output-length.tentative.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-output-length.tentative.any.js: Added. (async compressArrayBuffer): * LayoutTests/imported/w3c/web-platform-tests/compression/compression-output-length.tentative.any.serviceworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-output-length.tentative.any.serviceworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-output-length.tentative.any.sharedworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-output-length.tentative.any.sharedworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-output-length.tentative.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-output-length.tentative.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-stream.tentative.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-stream.tentative.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-stream.tentative.any.js: Added. (async compressArrayBuffer): (test): * LayoutTests/imported/w3c/web-platform-tests/compression/compression-stream.tentative.any.serviceworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-stream.tentative.any.serviceworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-stream.tentative.any.sharedworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-stream.tentative.any.sharedworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-stream.tentative.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-stream.tentative.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-with-detach.tentative.window-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-with-detach.tentative.window.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/compression-with-detach.tentative.window.js: Added. (createLargeRandomInput): (decompress): (promise_test.async const): * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-bad-chunks.tentative.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-bad-chunks.tentative.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-bad-chunks.tentative.any.js: Added. (get value): (return.new.Uint8Array): (value.new.Uint8Array): (const.chunk.of.badChunks.promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-bad-chunks.tentative.any.serviceworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-bad-chunks.tentative.any.serviceworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-bad-chunks.tentative.any.sharedworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-bad-chunks.tentative.any.sharedworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-bad-chunks.tentative.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-bad-chunks.tentative.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-buffersource.tentative.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-buffersource.tentative.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-buffersource.tentative.any.js: Added. (value.new.Int8Array.new.Uint8Array): (value.new.Uint8Array): (value.new.Uint8ClampedArray): (value.new.Int16Array): (value.new.Uint16Array): (value.new.Int32Array): (value.new.Uint32Array): (value.new.Float32Array): (value.new.Float64Array): (const.chunk.of.bufferSourceChunksForDeflate.promise_test.async t): (const.chunk.of.bufferSourceChunksForGzip.promise_test.async t): (const.chunk.of.bufferSourceChunksForDeflateRaw.promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-buffersource.tentative.any.serviceworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-buffersource.tentative.any.serviceworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-buffersource.tentative.any.sharedworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-buffersource.tentative.any.sharedworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-buffersource.tentative.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-buffersource.tentative.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-constructor-error.tentative.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-constructor-error.tentative.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-constructor-error.tentative.any.js: Added. (test.t.new.DecompressionStream.toString): * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-constructor-error.tentative.any.serviceworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-constructor-error.tentative.any.serviceworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-constructor-error.tentative.any.sharedworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-constructor-error.tentative.any.sharedworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-constructor-error.tentative.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-constructor-error.tentative.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-correct-input.tentative.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-correct-input.tentative.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-correct-input.tentative.any.js: Added. (promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-correct-input.tentative.any.serviceworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-correct-input.tentative.any.serviceworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-correct-input.tentative.any.sharedworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-correct-input.tentative.any.sharedworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-correct-input.tentative.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-correct-input.tentative.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-corrupt-input.tentative.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-corrupt-input.tentative.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-corrupt-input.tentative.any.js: Added. (async tryDecompress): (corruptInput): (of.expectations.promise_test.async const): (of.expectations.promise_test): (of.expectations.of.fields.of.cases.promise_test.async const): (of.expectations.of.fields.of.cases.promise_test): * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-corrupt-input.tentative.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-corrupt-input.tentative.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-empty-input.tentative.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-empty-input.tentative.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-empty-input.tentative.any.js: Added. (promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-empty-input.tentative.any.serviceworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-empty-input.tentative.any.serviceworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-empty-input.tentative.any.sharedworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-empty-input.tentative.any.sharedworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-empty-input.tentative.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-empty-input.tentative.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-split-chunk.tentative.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-split-chunk.tentative.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-split-chunk.tentative.any.js: Added. (async decompressArrayBuffer): (chunkSize.promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-split-chunk.tentative.any.serviceworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-split-chunk.tentative.any.serviceworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-split-chunk.tentative.any.sharedworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-split-chunk.tentative.any.sharedworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-split-chunk.tentative.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-split-chunk.tentative.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-uint8array-output.tentative.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-uint8array-output.tentative.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-uint8array-output.tentative.any.js: Added. (promise_test.async t): * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-uint8array-output.tentative.any.serviceworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-uint8array-output.tentative.any.serviceworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-uint8array-output.tentative.any.sharedworker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-uint8array-output.tentative.any.sharedworker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-uint8array-output.tentative.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-uint8array-output.tentative.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-with-detach.tentative.window-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-with-detach.tentative.window.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/decompression-with-detach.tentative.window.js: Added. (async createLargeCompressedInput): (promise_test.async const): * LayoutTests/imported/w3c/web-platform-tests/compression/idlharness-shadowrealm.window-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/idlharness-shadowrealm.window.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/idlharness-shadowrealm.window.js: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/idlharness.https.any-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/idlharness.https.any.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/idlharness.https.any.js: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/idlharness.https.any.worker-expected.txt: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/idlharness.https.any.worker.html: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/resources/concatenate-stream.js: Added. (async concatenateStream): * LayoutTests/imported/w3c/web-platform-tests/compression/resources/w3c-import.log: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/third_party/pako/LICENSE: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/third_party/pako/README: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/third_party/pako/pako_inflate.min.js: Added. (l): (return.r): (i.assign): (i.shrinkBuf): (a.arraySet): (a.flattenChunks): (r.arraySet): (r.flattenChunks): (i.setTyped): (1): (d): (i.string2buf): (i.buf2binstring): (i.binstring2buf): (i.buf2string): (i.utf8border): (2): (t.exports): (3): (4): (s): (5): (6): (7): (L): (r): (o): (f): (H): (j): (i.inflateInit): (i.inflate): (i.inflateEnd): (i.inflateGetHeader): (i.inflateSetDictionary): (8): (9): (10): (11): (o.prototype.push): (o.prototype.onData): (o.prototype.onEnd): (i.inflateRaw): (string_appeared_here): * LayoutTests/imported/w3c/web-platform-tests/compression/third_party/pako/w3c-import.log: Added. * LayoutTests/imported/w3c/web-platform-tests/compression/w3c-import.log: Added. * Source/WebCore/Modules/compression/CompressionStream.js: (initializeCompressionStream): * Source/WebCore/Modules/compression/CompressionStreamEncoder.cpp: (WebCore::CompressionStreamEncoder::encode): (WebCore::CompressionStreamEncoder::flush): (WebCore::CompressionStreamEncoder::initialize): (WebCore::CompressionStreamEncoder::compress): * Source/WebCore/Modules/compression/CompressionStreamEncoder.h: (WebCore::CompressionStreamEncoder::~CompressionStreamEncoder): (WebCore::CompressionStreamEncoder::CompressionStreamEncoder): * Source/WebCore/Modules/compression/DecompressionStream.js: (initializeDecompressionStream): * Source/WebCore/Modules/compression/DecompressionStreamDecoder.cpp: (WebCore::DecompressionStreamDecoder::decode): (WebCore::DecompressionStreamDecoder::flush): (WebCore::DecompressionStreamDecoder::initialize): (WebCore::DecompressionStreamDecoder::decompress): * Source/WebCore/Modules/compression/DecompressionStreamDecoder.h: (WebCore::DecompressionStreamDecoder::~DecompressionStreamDecoder): (WebCore::DecompressionStreamDecoder::DecompressionStreamDecoder): * Source/WebCore/Modules/compression/Formats.h: Canonical link: https://commits.webkit.org/253093@main
- Loading branch information