tor-browser

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

TransformerCallbackHelpers.h (3864B)


      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_TRANSFORMERCALLBACKHELPERS_H_
      8 #define DOM_STREAMS_TRANSFORMERCALLBACKHELPERS_H_
      9 
     10 #include "mozilla/HoldDropJSObjects.h"
     11 #include "mozilla/dom/TransformerBinding.h"
     12 #include "nsCycleCollectionParticipant.h"
     13 
     14 namespace mozilla::dom {
     15 
     16 class Promise;
     17 
     18 class TransformerAlgorithmsBase : public nsISupports {
     19 public:
     20  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     21  NS_DECL_CYCLE_COLLECTION_CLASS(TransformerAlgorithmsBase)
     22 
     23  MOZ_CAN_RUN_SCRIPT virtual already_AddRefed<Promise> TransformCallback(
     24      JSContext* aCx, JS::Handle<JS::Value> aChunk,
     25      TransformStreamDefaultController& aController, ErrorResult& aRv) = 0;
     26 
     27  MOZ_CAN_RUN_SCRIPT virtual already_AddRefed<Promise> FlushCallback(
     28      JSContext* aCx, TransformStreamDefaultController& aController,
     29      ErrorResult& aRv) = 0;
     30 
     31 protected:
     32  virtual ~TransformerAlgorithmsBase() = default;
     33 };
     34 
     35 // https://streams.spec.whatwg.org/#set-up-transform-stream-default-controller-from-transformer
     36 class TransformerAlgorithms final : public TransformerAlgorithmsBase {
     37 public:
     38  NS_DECL_ISUPPORTS_INHERITED
     39  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(
     40      TransformerAlgorithms, TransformerAlgorithmsBase)
     41 
     42  TransformerAlgorithms(nsIGlobalObject* aGlobal,
     43                        JS::Handle<JSObject*> aTransformer,
     44                        Transformer& aTransformerDict)
     45      : mGlobal(aGlobal), mTransformer(aTransformer) {
     46    // Step 4. (Step 2 is implicitly done through the initialization of
     47    // mTransformCallback to null)
     48    if (aTransformerDict.mTransform.WasPassed()) {
     49      mTransformCallback = aTransformerDict.mTransform.Value();
     50    }
     51 
     52    // Step 5. (Step 3 is implicitly done through the initialization of
     53    // mTransformCallback to null)
     54    if (aTransformerDict.mFlush.WasPassed()) {
     55      mFlushCallback = aTransformerDict.mFlush.Value();
     56    }
     57 
     58    mozilla::HoldJSObjects(this);
     59  };
     60 
     61  MOZ_CAN_RUN_SCRIPT already_AddRefed<Promise> TransformCallback(
     62      JSContext* aCx, JS::Handle<JS::Value> aChunk,
     63      TransformStreamDefaultController& aController, ErrorResult& aRv) override;
     64 
     65  MOZ_CAN_RUN_SCRIPT already_AddRefed<Promise> FlushCallback(
     66      JSContext* aCx, TransformStreamDefaultController& aController,
     67      ErrorResult& aRv) override;
     68 
     69 protected:
     70  ~TransformerAlgorithms() { mozilla::DropJSObjects(this); }
     71 
     72 private:
     73  // Virtually const, but are cycle collected
     74  nsCOMPtr<nsIGlobalObject> mGlobal;
     75  JS::Heap<JSObject*> mTransformer;
     76  MOZ_KNOWN_LIVE RefPtr<TransformerTransformCallback> mTransformCallback;
     77  MOZ_KNOWN_LIVE RefPtr<TransformerFlushCallback> mFlushCallback;
     78 };
     79 
     80 // https://streams.spec.whatwg.org/#transformstream-set-up
     81 class TransformerAlgorithmsWrapper : public TransformerAlgorithmsBase {
     82  MOZ_CAN_RUN_SCRIPT already_AddRefed<Promise> TransformCallback(
     83      JSContext*, JS::Handle<JS::Value> aChunk,
     84      TransformStreamDefaultController& aController, ErrorResult& aRv) final;
     85 
     86  MOZ_CAN_RUN_SCRIPT already_AddRefed<Promise> FlushCallback(
     87      JSContext*, TransformStreamDefaultController& aController,
     88      ErrorResult& aRv) final;
     89 
     90  MOZ_CAN_RUN_SCRIPT virtual void TransformCallbackImpl(
     91      JS::Handle<JS::Value> aChunk,
     92      TransformStreamDefaultController& aController, ErrorResult& aRv) = 0;
     93 
     94  MOZ_CAN_RUN_SCRIPT virtual void FlushCallbackImpl(
     95      TransformStreamDefaultController& aController, ErrorResult& aRv) {
     96    // flushAlgorithm is optional, do nothing by default
     97  }
     98 };
     99 
    100 }  // namespace mozilla::dom
    101 
    102 #endif  // DOM_STREAMS_TRANSFORMERCALLBACKHELPERS_H_