tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TransformStream.h (4420B)


      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 DOM_STREAMS_TRANSFORMSTREAM_H_
      8 #define DOM_STREAMS_TRANSFORMSTREAM_H_
      9 
     10 #include "TransformStreamDefaultController.h"
     11 #include "mozilla/dom/BindingDeclarations.h"
     12 #include "mozilla/dom/QueuingStrategyBinding.h"
     13 #include "mozilla/dom/TransformerBinding.h"
     14 #include "nsCycleCollectionParticipant.h"
     15 #include "nsWrapperCache.h"
     16 
     17 namespace mozilla::dom {
     18 
     19 class WritableStream;
     20 class ReadableStream;
     21 class UniqueMessagePortId;
     22 class MessagePort;
     23 class TransformerAlgorithmsWrapper;
     24 
     25 class TransformStream final : public nsISupports, public nsWrapperCache {
     26 public:
     27  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     28  NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TransformStream)
     29 
     30  // https://streams.spec.whatwg.org/#transformstream-set-up
     31  // Intended to be used by interfaces using GenericTransformStream mixin.
     32  MOZ_CAN_RUN_SCRIPT static already_AddRefed<TransformStream> CreateGeneric(
     33      const GlobalObject& aGlobal, TransformerAlgorithmsWrapper& aAlgorithms,
     34      ErrorResult& aRv);
     35 
     36  // Internal slot accessors
     37  bool Backpressure() const { return mBackpressure; }
     38  Promise* BackpressureChangePromise() { return mBackpressureChangePromise; }
     39  void SetBackpressure(bool aBackpressure);
     40  MOZ_KNOWN_LIVE TransformStreamDefaultController* Controller() {
     41    return mController;
     42  }
     43  void SetController(TransformStreamDefaultController& aController) {
     44    MOZ_ASSERT(!mController);
     45    mController = &aController;
     46  }
     47 
     48  // [Transferable]
     49  // https://html.spec.whatwg.org/multipage/structured-data.html#transfer-steps
     50  MOZ_CAN_RUN_SCRIPT bool Transfer(JSContext* aCx,
     51                                   UniqueMessagePortId& aPortId1,
     52                                   UniqueMessagePortId& aPortId2);
     53  // https://html.spec.whatwg.org/multipage/structured-data.html#transfer-receiving-steps
     54  static MOZ_CAN_RUN_SCRIPT bool ReceiveTransfer(
     55      JSContext* aCx, nsIGlobalObject* aGlobal, MessagePort& aPort1,
     56      MessagePort& aPort2, JS::MutableHandle<JSObject*> aReturnObject);
     57 
     58 protected:
     59  TransformStream(nsIGlobalObject* aGlobal, ReadableStream* aReadable,
     60                  WritableStream* aWritable);
     61  explicit TransformStream(nsIGlobalObject* aGlobal);
     62 
     63  ~TransformStream();
     64 
     65  MOZ_CAN_RUN_SCRIPT void Initialize(
     66      JSContext* aCx, Promise* aStartPromise, double aWritableHighWaterMark,
     67      QueuingStrategySize* aWritableSizeAlgorithm,
     68      double aReadableHighWaterMark,
     69      QueuingStrategySize* aReadableSizeAlgorithm, ErrorResult& aRv);
     70 
     71 public:
     72  nsIGlobalObject* GetParentObject() const { return mGlobal; }
     73  JSObject* WrapObject(JSContext* aCx,
     74                       JS::Handle<JSObject*> aGivenProto) override;
     75 
     76  // WebIDL methods
     77  // TODO: Mark as MOZ_CAN_RUN_SCRIPT when IDL constructors can be (bug 1749042)
     78  MOZ_CAN_RUN_SCRIPT_BOUNDARY static already_AddRefed<TransformStream>
     79  Constructor(const GlobalObject& aGlobal,
     80              const Optional<JS::Handle<JSObject*>>& aTransformer,
     81              const QueuingStrategy& aWritableStrategy,
     82              const QueuingStrategy& aReadableStrategy, ErrorResult& aRv);
     83 
     84  ReadableStream* Readable() const { return mReadable; }
     85  WritableStream* Writable() const { return mWritable; }
     86 
     87 private:
     88  nsCOMPtr<nsIGlobalObject> mGlobal;
     89 
     90  // Internal slots
     91  // MOZ_KNOWN_LIVE for slots that will never be reassigned
     92  bool mBackpressure = false;
     93  RefPtr<Promise> mBackpressureChangePromise;
     94  RefPtr<TransformStreamDefaultController> mController;
     95  RefPtr<ReadableStream> mReadable;
     96  RefPtr<WritableStream> mWritable;
     97 };
     98 
     99 namespace streams_abstract {
    100 
    101 MOZ_CAN_RUN_SCRIPT void TransformStreamErrorWritableAndUnblockWrite(
    102    JSContext* aCx, TransformStream* aStream, JS::Handle<JS::Value> aError,
    103    ErrorResult& aRv);
    104 
    105 MOZ_CAN_RUN_SCRIPT void TransformStreamError(JSContext* aCx,
    106                                             TransformStream* aStream,
    107                                             JS::Handle<JS::Value> aError,
    108                                             ErrorResult& aRv);
    109 
    110 }  // namespace streams_abstract
    111 
    112 }  // namespace mozilla::dom
    113 
    114 #endif  // DOM_STREAMS_TRANSFORMSTREAM_H_