diff --git a/Libraries/LibWeb/CMakeLists.txt b/Libraries/LibWeb/CMakeLists.txt index 07988c602d0..3d853c53aa8 100644 --- a/Libraries/LibWeb/CMakeLists.txt +++ b/Libraries/LibWeb/CMakeLists.txt @@ -664,6 +664,7 @@ set(SOURCES Streams/AbstractOperations.cpp Streams/ByteLengthQueuingStrategy.cpp Streams/CountQueuingStrategy.cpp + Streams/GenericTransformStream.cpp Streams/ReadableByteStreamController.cpp Streams/ReadableStream.cpp Streams/ReadableStreamBYOBReader.cpp diff --git a/Libraries/LibWeb/Streams/GenericTransformStream.cpp b/Libraries/LibWeb/Streams/GenericTransformStream.cpp new file mode 100644 index 00000000000..ed720eba3f0 --- /dev/null +++ b/Libraries/LibWeb/Streams/GenericTransformStream.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2024, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include + +namespace Web::Streams { + +GenericTransformStreamMixin::GenericTransformStreamMixin(GC::Ref transform) + : m_transform(transform) +{ +} + +GenericTransformStreamMixin::~GenericTransformStreamMixin() = default; + +void GenericTransformStreamMixin::visit_edges(GC::Cell::Visitor& visitor) +{ + visitor.visit(m_transform); +} + +// https://streams.spec.whatwg.org/#dom-generictransformstream-readable +GC::Ref GenericTransformStreamMixin::readable() +{ + // The readable getter steps are to return this's transform.[[readable]]. + return m_transform->readable(); +} + +// https://streams.spec.whatwg.org/#dom-generictransformstream-writable +GC::Ref GenericTransformStreamMixin::writable() +{ + // The writable getter steps are to return this's transform.[[writable]]. + return m_transform->writable(); +} + +} diff --git a/Libraries/LibWeb/Streams/GenericTransformStream.h b/Libraries/LibWeb/Streams/GenericTransformStream.h new file mode 100644 index 00000000000..cb7ae5f1d6d --- /dev/null +++ b/Libraries/LibWeb/Streams/GenericTransformStream.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2024, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include + +namespace Web::Streams { + +class GenericTransformStreamMixin { +public: + virtual ~GenericTransformStreamMixin(); + + GC::Ref readable(); + GC::Ref writable(); + +protected: + explicit GenericTransformStreamMixin(GC::Ref); + void visit_edges(GC::Cell::Visitor&); + + // https://streams.spec.whatwg.org/#generictransformstream-transform + GC::Ref m_transform; +}; + +} diff --git a/Libraries/LibWeb/Streams/GenericTransformStream.idl b/Libraries/LibWeb/Streams/GenericTransformStream.idl new file mode 100644 index 00000000000..2bbec637bc1 --- /dev/null +++ b/Libraries/LibWeb/Streams/GenericTransformStream.idl @@ -0,0 +1,7 @@ +#import +#import + +interface mixin GenericTransformStream { + readonly attribute ReadableStream readable; + readonly attribute WritableStream writable; +};