summaryrefslogtreecommitdiffstats
path: root/dom/streams/TransformStream.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/streams/TransformStream.h')
-rw-r--r--dom/streams/TransformStream.h115
1 files changed, 115 insertions, 0 deletions
diff --git a/dom/streams/TransformStream.h b/dom/streams/TransformStream.h
new file mode 100644
index 0000000000..ed9ec6f812
--- /dev/null
+++ b/dom/streams/TransformStream.h
@@ -0,0 +1,115 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim:set ts=2 sw=2 sts=2 et cindent: */
+/* 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_STREAMS_TRANSFORMSTREAM_H_
+#define DOM_STREAMS_TRANSFORMSTREAM_H_
+
+#include "TransformStreamDefaultController.h"
+#include "mozilla/dom/BindingDeclarations.h"
+#include "mozilla/dom/QueuingStrategyBinding.h"
+
+#include "mozilla/dom/TransformerBinding.h"
+#include "nsCycleCollectionParticipant.h"
+#include "nsWrapperCache.h"
+
+namespace mozilla::dom {
+
+class WritableStream;
+class ReadableStream;
+class UniqueMessagePortId;
+class MessagePort;
+class TransformerAlgorithmsWrapper;
+
+class TransformStream final : public nsISupports, public nsWrapperCache {
+ public:
+ NS_DECL_CYCLE_COLLECTING_ISUPPORTS
+ NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TransformStream)
+
+ // https://streams.spec.whatwg.org/#transformstream-set-up
+ // Intended to be used by interfaces using GenericTransformStream mixin.
+ MOZ_CAN_RUN_SCRIPT static already_AddRefed<TransformStream> CreateGeneric(
+ const GlobalObject& aGlobal, TransformerAlgorithmsWrapper& aAlgorithms,
+ ErrorResult& aRv);
+
+ // Internal slot accessors
+ bool Backpressure() const { return mBackpressure; }
+ Promise* BackpressureChangePromise() { return mBackpressureChangePromise; }
+ void SetBackpressure(bool aBackpressure);
+ MOZ_KNOWN_LIVE TransformStreamDefaultController* Controller() {
+ return mController;
+ }
+ void SetController(TransformStreamDefaultController& aController) {
+ MOZ_ASSERT(!mController);
+ mController = &aController;
+ }
+
+ // [Transferable]
+ // https://html.spec.whatwg.org/multipage/structured-data.html#transfer-steps
+ MOZ_CAN_RUN_SCRIPT bool Transfer(JSContext* aCx,
+ UniqueMessagePortId& aPortId1,
+ UniqueMessagePortId& aPortId2);
+ // https://html.spec.whatwg.org/multipage/structured-data.html#transfer-receiving-steps
+ static MOZ_CAN_RUN_SCRIPT bool ReceiveTransfer(
+ JSContext* aCx, nsIGlobalObject* aGlobal, MessagePort& aPort1,
+ MessagePort& aPort2, JS::MutableHandle<JSObject*> aReturnObject);
+
+ protected:
+ TransformStream(nsIGlobalObject* aGlobal, ReadableStream* aReadable,
+ WritableStream* aWritable);
+ explicit TransformStream(nsIGlobalObject* aGlobal);
+
+ ~TransformStream();
+
+ MOZ_CAN_RUN_SCRIPT void Initialize(
+ JSContext* aCx, Promise* aStartPromise, double aWritableHighWaterMark,
+ QueuingStrategySize* aWritableSizeAlgorithm,
+ double aReadableHighWaterMark,
+ QueuingStrategySize* aReadableSizeAlgorithm, ErrorResult& aRv);
+
+ public:
+ nsIGlobalObject* GetParentObject() const { return mGlobal; }
+ JSObject* WrapObject(JSContext* aCx,
+ JS::Handle<JSObject*> aGivenProto) override;
+
+ // WebIDL methods
+ // TODO: Mark as MOZ_CAN_RUN_SCRIPT when IDL constructors can be (bug 1749042)
+ MOZ_CAN_RUN_SCRIPT_BOUNDARY static already_AddRefed<TransformStream>
+ Constructor(const GlobalObject& aGlobal,
+ const Optional<JS::Handle<JSObject*>>& aTransformer,
+ const QueuingStrategy& aWritableStrategy,
+ const QueuingStrategy& aReadableStrategy, ErrorResult& aRv);
+
+ ReadableStream* Readable() const { return mReadable; }
+ WritableStream* Writable() const { return mWritable; }
+
+ private:
+ nsCOMPtr<nsIGlobalObject> mGlobal;
+
+ // Internal slots
+ // MOZ_KNOWN_LIVE for slots that will never be reassigned
+ bool mBackpressure = false;
+ RefPtr<Promise> mBackpressureChangePromise;
+ RefPtr<TransformStreamDefaultController> mController;
+ RefPtr<ReadableStream> mReadable;
+ RefPtr<WritableStream> mWritable;
+};
+
+namespace streams_abstract {
+
+MOZ_CAN_RUN_SCRIPT void TransformStreamErrorWritableAndUnblockWrite(
+ JSContext* aCx, TransformStream* aStream, JS::Handle<JS::Value> aError,
+ ErrorResult& aRv);
+
+MOZ_CAN_RUN_SCRIPT void TransformStreamError(JSContext* aCx,
+ TransformStream* aStream,
+ JS::Handle<JS::Value> aError,
+ ErrorResult& aRv);
+
+} // namespace streams_abstract
+
+} // namespace mozilla::dom
+
+#endif // DOM_STREAMS_TRANSFORMSTREAM_H_