Bug 1769952 - Fix running raptor on a Win10-64 VM r=sparky
[gecko.git] / dom / streams / TransformStream.h
blob10784ac2c0bee420331c44d15e0c16c243e7e63c
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:set ts=2 sw=2 sts=2 et cindent: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef DOM_STREAMS_TRANSFORMSTREAM_H_
8 #define DOM_STREAMS_TRANSFORMSTREAM_H_
10 #include "TransformStreamDefaultController.h"
11 #include "mozilla/dom/BindingDeclarations.h"
12 #include "mozilla/dom/QueuingStrategyBinding.h"
14 #include "mozilla/dom/TransformerBinding.h"
15 #include "nsCycleCollectionParticipant.h"
16 #include "nsWrapperCache.h"
18 namespace mozilla::dom {
20 class WritableStream;
21 class ReadableStream;
23 class TransformStream final : public nsISupports, public nsWrapperCache {
24 public:
25 NS_DECL_CYCLE_COLLECTING_ISUPPORTS
26 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TransformStream)
28 // Internal slot accessors
29 bool Backpressure() const { return mBackpressure; }
30 void SetBackpressure(bool aBackpressure) { mBackpressure = aBackpressure; }
31 Promise* BackpressureChangePromise() { return mBackpressureChangePromise; }
32 void SetBackpressureChangePromise(Promise* aPromise) {
33 mBackpressureChangePromise = aPromise;
35 MOZ_KNOWN_LIVE TransformStreamDefaultController* Controller() {
36 return mController;
38 void SetController(TransformStreamDefaultController& aController) {
39 MOZ_ASSERT(!mController);
40 mController = &aController;
42 MOZ_KNOWN_LIVE ReadableStream* Readable() { return mReadable; }
43 MOZ_KNOWN_LIVE WritableStream* Writable() { return mWritable; }
45 protected:
46 ~TransformStream();
47 explicit TransformStream(nsIGlobalObject* aGlobal);
49 MOZ_CAN_RUN_SCRIPT void Initialize(
50 JSContext* aCx, Promise* aStartPromise, double aWritableHighWaterMark,
51 QueuingStrategySize* aWritableSizeAlgorithm,
52 double aReadableHighWaterMark,
53 QueuingStrategySize* aReadableSizeAlgorithm, ErrorResult& aRv);
55 public:
56 nsIGlobalObject* GetParentObject() const { return mGlobal; }
57 JSObject* WrapObject(JSContext* aCx,
58 JS::Handle<JSObject*> aGivenProto) override;
60 // WebIDL methods
61 // TODO: Mark as MOZ_CAN_RUN_SCRIPT when IDL constructors can be (bug 1749042)
62 MOZ_CAN_RUN_SCRIPT_BOUNDARY static already_AddRefed<TransformStream>
63 Constructor(const GlobalObject& aGlobal,
64 const Optional<JS::Handle<JSObject*>>& aTransformer,
65 const QueuingStrategy& aWritableStrategy,
66 const QueuingStrategy& aReadableStrategy, ErrorResult& aRv);
68 already_AddRefed<ReadableStream> GetReadable();
69 already_AddRefed<WritableStream> GetWritable();
71 private:
72 nsCOMPtr<nsIGlobalObject> mGlobal;
74 // Internal slots
75 // MOZ_KNOWN_LIVE for slots that will never be reassigned
76 bool mBackpressure = false;
77 RefPtr<Promise> mBackpressureChangePromise;
78 MOZ_KNOWN_LIVE RefPtr<TransformStreamDefaultController> mController;
79 MOZ_KNOWN_LIVE RefPtr<ReadableStream> mReadable;
80 MOZ_KNOWN_LIVE RefPtr<WritableStream> mWritable;
83 MOZ_CAN_RUN_SCRIPT void TransformStreamErrorWritableAndUnblockWrite(
84 JSContext* aCx, TransformStream* aStream, JS::Handle<JS::Value> aError,
85 ErrorResult& aRv);
87 MOZ_CAN_RUN_SCRIPT void TransformStreamError(JSContext* aCx,
88 TransformStream* aStream,
89 JS::Handle<JS::Value> aError,
90 ErrorResult& aRv);
92 void TransformStreamSetBackpressure(TransformStream* aStream,
93 bool aBackpressure, ErrorResult& aRv);
95 } // namespace mozilla::dom
97 #endif // DOM_STREAMS_TRANSFORMSTREAM_H_