WritableStreamDefaultWriter.h (3810B)
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/. */ 6 7 #ifndef mozilla_dom_WritableStreamDefaultWriter_h 8 #define mozilla_dom_WritableStreamDefaultWriter_h 9 10 #include "js/TypeDecls.h" 11 #include "js/Value.h" 12 #include "mozilla/Attributes.h" 13 #include "mozilla/ErrorResult.h" 14 #include "mozilla/dom/BindingDeclarations.h" 15 #include "mozilla/dom/QueuingStrategyBinding.h" 16 #include "nsCycleCollectionParticipant.h" 17 #include "nsWrapperCache.h" 18 19 namespace mozilla::dom { 20 21 class Promise; 22 class WritableStream; 23 24 class WritableStreamDefaultWriter final : public nsISupports, 25 public nsWrapperCache { 26 public: 27 NS_DECL_CYCLE_COLLECTING_ISUPPORTS 28 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(WritableStreamDefaultWriter) 29 30 protected: 31 ~WritableStreamDefaultWriter(); 32 33 public: 34 explicit WritableStreamDefaultWriter(nsIGlobalObject* aGlobal); 35 36 // Slot Getter/Setters: 37 public: 38 WritableStream* GetStream() const { return mStream; } 39 void SetStream(WritableStream* aStream) { mStream = aStream; } 40 41 Promise* ReadyPromise() const { return mReadyPromise; } 42 void SetReadyPromise(Promise* aPromise); 43 44 Promise* ClosedPromise() const { return mClosedPromise; } 45 void SetClosedPromise(Promise* aPromise); 46 47 public: 48 nsIGlobalObject* GetParentObject() const { return mGlobal; } 49 50 JSObject* WrapObject(JSContext* aCx, 51 JS::Handle<JSObject*> aGivenProto) override; 52 53 // IDL Methods 54 static already_AddRefed<WritableStreamDefaultWriter> Constructor( 55 const GlobalObject& aGlobal, WritableStream& aStream, ErrorResult& aRv); 56 57 already_AddRefed<Promise> Closed(); 58 already_AddRefed<Promise> Ready(); 59 60 Nullable<double> GetDesiredSize(ErrorResult& aRv); 61 62 MOZ_CAN_RUN_SCRIPT already_AddRefed<Promise> Abort( 63 JSContext* aCx, JS::Handle<JS::Value> aReason, ErrorResult& aRv); 64 65 MOZ_CAN_RUN_SCRIPT already_AddRefed<Promise> Close(JSContext* aCx, 66 ErrorResult& aRv); 67 68 void ReleaseLock(JSContext* aCx); 69 70 MOZ_CAN_RUN_SCRIPT already_AddRefed<Promise> Write( 71 JSContext* aCx, JS::Handle<JS::Value> aChunk, ErrorResult& aRv); 72 73 // Internal Slots: 74 private: 75 nsCOMPtr<nsIGlobalObject> mGlobal; 76 RefPtr<WritableStream> mStream; 77 RefPtr<Promise> mReadyPromise; 78 RefPtr<Promise> mClosedPromise; 79 }; 80 81 namespace streams_abstract { 82 83 void SetUpWritableStreamDefaultWriter(WritableStreamDefaultWriter* aWriter, 84 WritableStream* aStream, 85 ErrorResult& aRv); 86 87 void WritableStreamDefaultWriterEnsureClosedPromiseRejected( 88 WritableStreamDefaultWriter* aWriter, JS::Handle<JS::Value> aError); 89 90 void WritableStreamDefaultWriterEnsureReadyPromiseRejected( 91 WritableStreamDefaultWriter* aWriter, JS::Handle<JS::Value> aError); 92 93 Nullable<double> WritableStreamDefaultWriterGetDesiredSize( 94 WritableStreamDefaultWriter* aWriter); 95 96 void WritableStreamDefaultWriterRelease(JSContext* aCx, 97 WritableStreamDefaultWriter* aWriter); 98 99 MOZ_CAN_RUN_SCRIPT already_AddRefed<Promise> WritableStreamDefaultWriterWrite( 100 JSContext* aCx, WritableStreamDefaultWriter* aWriter, 101 JS::Handle<JS::Value> aChunk, ErrorResult& aRv); 102 103 MOZ_CAN_RUN_SCRIPT already_AddRefed<Promise> 104 WritableStreamDefaultWriterCloseWithErrorPropagation( 105 JSContext* aCx, WritableStreamDefaultWriter* aWriter, ErrorResult& aRv); 106 107 } // namespace streams_abstract 108 109 } // namespace mozilla::dom 110 111 #endif // mozilla_dom_WritableStreamDefaultWriter_h