replaced by .editorconfig # ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D287843
92 lines
3.5 KiB
C++
92 lines
3.5 KiB
C++
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef DOM_COMPRESSION_BASEALGORITHMS_H_
|
|
#define DOM_COMPRESSION_BASEALGORITHMS_H_
|
|
|
|
#include "js/TypeDecls.h"
|
|
#include "mozilla/dom/TransformerCallbackHelpers.h"
|
|
|
|
namespace mozilla::dom::compression {
|
|
|
|
// A top-level, library-agnostic flush enum that should be converted
|
|
// into the native flush values for a given (de)compression library
|
|
// with a function defined below.
|
|
enum class Flush : bool { No, Yes };
|
|
|
|
class CompressionStreamAlgorithms : public TransformerAlgorithmsWrapper {
|
|
public:
|
|
// Step 3 of
|
|
// https://wicg.github.io/compression/#dom-decompressionstream-decompressionstream
|
|
// Let transformAlgorithm be an algorithm which takes a chunk argument and
|
|
// runs the compress and enqueue a chunk algorithm with this and chunk.
|
|
MOZ_CAN_RUN_SCRIPT
|
|
void TransformCallbackImpl(JS::Handle<JS::Value> aChunk,
|
|
TransformStreamDefaultController& aController,
|
|
ErrorResult& aRv) override;
|
|
|
|
// Step 4 of
|
|
// https://compression.spec.whatwg.org/#dom-decompressionstream-decompressionstream
|
|
// Let flushAlgorithm be an algorithm which takes no argument and runs the
|
|
// compress flush and enqueue algorithm with this.
|
|
MOZ_CAN_RUN_SCRIPT void FlushCallbackImpl(
|
|
TransformStreamDefaultController& aController, ErrorResult& aRv) override;
|
|
|
|
protected:
|
|
static const uint16_t kBufferSize = 16384;
|
|
|
|
~CompressionStreamAlgorithms() = default;
|
|
|
|
virtual void Compress(JSContext* aCx, Span<const uint8_t> aInput,
|
|
JS::MutableHandleVector<JSObject*> aOutput,
|
|
Flush aFlush, ErrorResult& aRv) = 0;
|
|
|
|
private:
|
|
MOZ_CAN_RUN_SCRIPT void CompressAndEnqueue(
|
|
JSContext* aCx, Span<const uint8_t> aInput, Flush aFlush,
|
|
TransformStreamDefaultController& aController, ErrorResult& aRv);
|
|
};
|
|
|
|
class DecompressionStreamAlgorithms : public TransformerAlgorithmsWrapper {
|
|
public:
|
|
// Step 3 of
|
|
// https://wicg.github.io/compression/#dom-decompressionstream-decompressionstream
|
|
// Let transformAlgorithm be an algorithm which takes a chunk argument and
|
|
// runs the compress and enqueue a chunk algorithm with this and chunk.
|
|
MOZ_CAN_RUN_SCRIPT
|
|
void TransformCallbackImpl(JS::Handle<JS::Value> aChunk,
|
|
TransformStreamDefaultController& aController,
|
|
ErrorResult& aRv) override;
|
|
|
|
// Step 4 of
|
|
// https://compression.spec.whatwg.org/#dom-decompressionstream-decompressionstream
|
|
// Let flushAlgorithm be an algorithm which takes no argument and runs the
|
|
// compress flush and enqueue algorithm with this.
|
|
MOZ_CAN_RUN_SCRIPT void FlushCallbackImpl(
|
|
TransformStreamDefaultController& aController, ErrorResult& aRv) override;
|
|
|
|
protected:
|
|
static const uint16_t kBufferSize = 16384;
|
|
|
|
~DecompressionStreamAlgorithms() = default;
|
|
|
|
/**
|
|
* @return true if the input is fully consumed, else false
|
|
*/
|
|
virtual bool Decompress(JSContext* aCx, Span<const uint8_t> aInput,
|
|
JS::MutableHandleVector<JSObject*> aOutput,
|
|
Flush aFlush, ErrorResult& aRv) = 0;
|
|
|
|
bool mObservedStreamEnd = false;
|
|
|
|
private:
|
|
MOZ_CAN_RUN_SCRIPT void DecompressAndEnqueue(
|
|
JSContext* aCx, Span<const uint8_t> aInput, Flush aFlush,
|
|
TransformStreamDefaultController& aController, ErrorResult& aRv);
|
|
};
|
|
|
|
} // namespace mozilla::dom::compression
|
|
|
|
#endif // DOM_COMPRESSION_BASEALGORITHMS_H_
|