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 mozilla_dom_WritableStreamDefaultWriter_h
8 #define mozilla_dom_WritableStreamDefaultWriter_h
10 #include "js/TypeDecls.h"
12 #include "mozilla/Attributes.h"
13 #include "mozilla/ErrorResult.h"
14 #include "mozilla/dom/BindingDeclarations.h"
15 #include "mozilla/dom/QueuingStrategyBinding.h"
17 #include "nsCycleCollectionParticipant.h"
18 #include "nsWrapperCache.h"
20 namespace mozilla::dom
{
25 class WritableStreamDefaultWriter final
: public nsISupports
,
26 public nsWrapperCache
{
28 NS_DECL_CYCLE_COLLECTING_ISUPPORTS
29 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(WritableStreamDefaultWriter
)
32 ~WritableStreamDefaultWriter();
35 explicit WritableStreamDefaultWriter(nsIGlobalObject
* aGlobal
);
37 // Slot Getter/Setters:
39 WritableStream
* GetStream() const { return mStream
; }
40 void SetStream(WritableStream
* aStream
) { mStream
= aStream
; }
42 Promise
* ReadyPromise() const { return mReadyPromise
; }
43 void SetReadyPromise(Promise
* aPromise
);
45 Promise
* ClosedPromise() const { return mClosedPromise
; }
46 void SetClosedPromise(Promise
* aPromise
);
49 nsIGlobalObject
* GetParentObject() const { return mGlobal
; }
51 JSObject
* WrapObject(JSContext
* aCx
,
52 JS::Handle
<JSObject
*> aGivenProto
) override
;
55 static already_AddRefed
<WritableStreamDefaultWriter
> Constructor(
56 const GlobalObject
& aGlobal
, WritableStream
& aStream
, ErrorResult
& aRv
);
58 already_AddRefed
<Promise
> Closed();
59 already_AddRefed
<Promise
> Ready();
61 Nullable
<double> GetDesiredSize(ErrorResult
& aRv
);
63 MOZ_CAN_RUN_SCRIPT already_AddRefed
<Promise
> Abort(
64 JSContext
* aCx
, JS::Handle
<JS::Value
> aReason
, ErrorResult
& aRv
);
66 MOZ_CAN_RUN_SCRIPT already_AddRefed
<Promise
> Close(JSContext
* aCx
,
69 void ReleaseLock(JSContext
* aCx
);
71 MOZ_CAN_RUN_SCRIPT already_AddRefed
<Promise
> Write(
72 JSContext
* aCx
, JS::Handle
<JS::Value
> aChunk
, ErrorResult
& aRv
);
76 nsCOMPtr
<nsIGlobalObject
> mGlobal
;
77 RefPtr
<WritableStream
> mStream
;
78 RefPtr
<Promise
> mReadyPromise
;
79 RefPtr
<Promise
> mClosedPromise
;
82 namespace streams_abstract
{
84 void SetUpWritableStreamDefaultWriter(WritableStreamDefaultWriter
* aWriter
,
85 WritableStream
* aStream
,
88 void WritableStreamDefaultWriterEnsureClosedPromiseRejected(
89 WritableStreamDefaultWriter
* aWriter
, JS::Handle
<JS::Value
> aError
);
91 void WritableStreamDefaultWriterEnsureReadyPromiseRejected(
92 WritableStreamDefaultWriter
* aWriter
, JS::Handle
<JS::Value
> aError
);
94 Nullable
<double> WritableStreamDefaultWriterGetDesiredSize(
95 WritableStreamDefaultWriter
* aWriter
);
97 void WritableStreamDefaultWriterRelease(JSContext
* aCx
,
98 WritableStreamDefaultWriter
* aWriter
);
100 MOZ_CAN_RUN_SCRIPT already_AddRefed
<Promise
> WritableStreamDefaultWriterWrite(
101 JSContext
* aCx
, WritableStreamDefaultWriter
* aWriter
,
102 JS::Handle
<JS::Value
> aChunk
, ErrorResult
& aRv
);
104 MOZ_CAN_RUN_SCRIPT already_AddRefed
<Promise
>
105 WritableStreamDefaultWriterCloseWithErrorPropagation(
106 JSContext
* aCx
, WritableStreamDefaultWriter
* aWriter
, ErrorResult
& aRv
);
108 } // namespace streams_abstract
110 } // namespace mozilla::dom
112 #endif // mozilla_dom_WritableStreamDefaultWriter_h