Bug 1812348 [wpt PR 38171] - wake lock: Move tests in web_tests/wake-lock to either...
[gecko.git] / dom / streams / TransformerCallbackHelpers.h
blob03b6fa79e24df013e6d9fe5acf6fa26267a0c2b6
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_TRANSFORMERCALLBACKHELPERS_H_
8 #define DOM_STREAMS_TRANSFORMERCALLBACKHELPERS_H_
10 #include "mozilla/HoldDropJSObjects.h"
11 #include "mozilla/dom/TransformerBinding.h"
12 #include "nsCycleCollectionParticipant.h"
14 namespace mozilla::dom {
16 class Promise;
18 class TransformerAlgorithmsBase : public nsISupports {
19 public:
20 NS_DECL_CYCLE_COLLECTING_ISUPPORTS
21 NS_DECL_CYCLE_COLLECTION_CLASS(TransformerAlgorithmsBase)
23 MOZ_CAN_RUN_SCRIPT virtual already_AddRefed<Promise> TransformCallback(
24 JSContext* aCx, JS::Handle<JS::Value> aChunk,
25 TransformStreamDefaultController& aController, ErrorResult& aRv) = 0;
27 MOZ_CAN_RUN_SCRIPT virtual already_AddRefed<Promise> FlushCallback(
28 JSContext* aCx, TransformStreamDefaultController& aController,
29 ErrorResult& aRv) = 0;
31 protected:
32 virtual ~TransformerAlgorithmsBase() = default;
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)
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();
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();
58 mozilla::HoldJSObjects(this);
61 MOZ_CAN_RUN_SCRIPT already_AddRefed<Promise> TransformCallback(
62 JSContext* aCx, JS::Handle<JS::Value> aChunk,
63 TransformStreamDefaultController& aController, ErrorResult& aRv) override;
65 MOZ_CAN_RUN_SCRIPT already_AddRefed<Promise> FlushCallback(
66 JSContext* aCx, TransformStreamDefaultController& aController,
67 ErrorResult& aRv) override;
69 protected:
70 ~TransformerAlgorithms() { mozilla::DropJSObjects(this); }
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;
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;
86 MOZ_CAN_RUN_SCRIPT already_AddRefed<Promise> FlushCallback(
87 JSContext*, TransformStreamDefaultController& aController,
88 ErrorResult& aRv) final;
90 MOZ_CAN_RUN_SCRIPT virtual void TransformCallbackImpl(
91 JS::Handle<JS::Value> aChunk,
92 TransformStreamDefaultController& aController, ErrorResult& aRv) = 0;
94 MOZ_CAN_RUN_SCRIPT virtual void FlushCallbackImpl(
95 TransformStreamDefaultController& aController, ErrorResult& aRv) = 0;
98 } // namespace mozilla::dom
100 #endif // DOM_STREAMS_TRANSFORMERCALLBACKHELPERS_H_