зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1486949 - Part 3: Refactor TransformerAlgorithms to allow subclassing r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D153974
This commit is contained in:
Родитель
f8a781d3fd
Коммит
9f255d1c04
|
@ -107,7 +107,7 @@ TransformStreamDefaultControllerPerformTransform(
|
|||
JS::Handle<JS::Value> aChunk, ErrorResult& aRv) {
|
||||
// Step 1: Let transformPromise be the result of performing
|
||||
// controller.[[transformAlgorithm]], passing chunk.
|
||||
RefPtr<TransformerAlgorithms> algorithms = aController->Algorithms();
|
||||
RefPtr<TransformerAlgorithmsBase> algorithms = aController->Algorithms();
|
||||
RefPtr<Promise> transformPromise =
|
||||
algorithms->TransformCallback(aCx, aChunk, *aController, aRv);
|
||||
if (aRv.Failed()) {
|
||||
|
@ -280,7 +280,7 @@ class TransformStreamUnderlyingSinkAlgorithms final
|
|||
|
||||
// Step 3: Let flushPromise be the result of performing
|
||||
// controller.[[flushAlgorithm]].
|
||||
RefPtr<TransformerAlgorithms> algorithms = controller->Algorithms();
|
||||
RefPtr<TransformerAlgorithmsBase> algorithms = controller->Algorithms();
|
||||
RefPtr<Promise> flushPromise =
|
||||
algorithms->FlushCallback(aCx, *controller, aRv);
|
||||
if (aRv.Failed()) {
|
||||
|
|
|
@ -33,12 +33,12 @@ void TransformStreamDefaultController::SetStream(TransformStream& aStream) {
|
|||
mStream = &aStream;
|
||||
}
|
||||
|
||||
TransformerAlgorithms* TransformStreamDefaultController::Algorithms() {
|
||||
TransformerAlgorithmsBase* TransformStreamDefaultController::Algorithms() {
|
||||
return mTransformerAlgorithms;
|
||||
}
|
||||
|
||||
void TransformStreamDefaultController::SetAlgorithms(
|
||||
TransformerAlgorithms* aTransformerAlgorithms) {
|
||||
TransformerAlgorithmsBase* aTransformerAlgorithms) {
|
||||
mTransformerAlgorithms = aTransformerAlgorithms;
|
||||
}
|
||||
|
||||
|
@ -196,7 +196,7 @@ void TransformStreamDefaultController::Terminate(JSContext* aCx,
|
|||
void SetUpTransformStreamDefaultController(
|
||||
JSContext* aCx, TransformStream& aStream,
|
||||
TransformStreamDefaultController& aController,
|
||||
TransformerAlgorithms& aTransformerAlgorithms) {
|
||||
TransformerAlgorithmsBase& aTransformerAlgorithms) {
|
||||
// Step 1. Assert: stream implements TransformStream.
|
||||
// Step 2. Assert: stream.[[controller]] is undefined.
|
||||
MOZ_ASSERT(!aStream.Controller());
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
namespace mozilla::dom {
|
||||
|
||||
class TransformStream;
|
||||
class TransformerAlgorithms;
|
||||
class TransformerAlgorithmsBase;
|
||||
|
||||
class TransformStreamDefaultController final : public nsISupports,
|
||||
public nsWrapperCache {
|
||||
|
@ -29,8 +29,8 @@ class TransformStreamDefaultController final : public nsISupports,
|
|||
|
||||
MOZ_KNOWN_LIVE TransformStream* Stream();
|
||||
void SetStream(TransformStream& aStream);
|
||||
TransformerAlgorithms* Algorithms();
|
||||
void SetAlgorithms(TransformerAlgorithms* aTransformerAlgorithms);
|
||||
TransformerAlgorithmsBase* Algorithms();
|
||||
void SetAlgorithms(TransformerAlgorithmsBase* aTransformerAlgorithms);
|
||||
|
||||
explicit TransformStreamDefaultController(nsIGlobalObject* aGlobal);
|
||||
|
||||
|
@ -55,7 +55,7 @@ class TransformStreamDefaultController final : public nsISupports,
|
|||
|
||||
// Internal slots
|
||||
RefPtr<TransformStream> mStream;
|
||||
RefPtr<TransformerAlgorithms> mTransformerAlgorithms;
|
||||
RefPtr<TransformerAlgorithmsBase> mTransformerAlgorithms;
|
||||
};
|
||||
|
||||
void SetUpTransformStreamDefaultControllerFromTransformer(
|
||||
|
|
|
@ -11,12 +11,20 @@
|
|||
|
||||
using namespace mozilla::dom;
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WITH_JS_MEMBERS(TransformerAlgorithms,
|
||||
(mGlobal, mTransformCallback,
|
||||
mFlushCallback),
|
||||
(mTransformer))
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(TransformerAlgorithms, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(TransformerAlgorithms, Release)
|
||||
NS_IMPL_CYCLE_COLLECTION(TransformerAlgorithmsBase)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(TransformerAlgorithmsBase)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(TransformerAlgorithmsBase)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TransformerAlgorithmsBase)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED_WITH_JS_MEMBERS(
|
||||
TransformerAlgorithms, TransformerAlgorithmsBase,
|
||||
(mGlobal, mTransformCallback, mFlushCallback), (mTransformer))
|
||||
NS_IMPL_ADDREF_INHERITED(TransformerAlgorithms, TransformerAlgorithmsBase)
|
||||
NS_IMPL_RELEASE_INHERITED(TransformerAlgorithms, TransformerAlgorithmsBase)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TransformerAlgorithms)
|
||||
NS_INTERFACE_MAP_END_INHERITING(TransformerAlgorithmsBase)
|
||||
|
||||
// https://streams.spec.whatwg.org/#set-up-transform-stream-default-controller-from-transformer
|
||||
already_AddRefed<Promise> TransformerAlgorithms::TransformCallback(
|
||||
|
|
|
@ -15,11 +15,29 @@ namespace mozilla::dom {
|
|||
|
||||
class Promise;
|
||||
|
||||
// https://streams.spec.whatwg.org/#set-up-transform-stream-default-controller-from-transformer
|
||||
class TransformerAlgorithms final {
|
||||
class TransformerAlgorithmsBase : public nsISupports {
|
||||
public:
|
||||
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(TransformerAlgorithms)
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(TransformerAlgorithms)
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS(TransformerAlgorithmsBase)
|
||||
|
||||
MOZ_CAN_RUN_SCRIPT virtual already_AddRefed<Promise> TransformCallback(
|
||||
JSContext* aCx, JS::Handle<JS::Value> aChunk,
|
||||
TransformStreamDefaultController& aController, ErrorResult& aRv) = 0;
|
||||
|
||||
MOZ_CAN_RUN_SCRIPT virtual already_AddRefed<Promise> FlushCallback(
|
||||
JSContext* aCx, TransformStreamDefaultController& aController,
|
||||
ErrorResult& aRv) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~TransformerAlgorithmsBase() = default;
|
||||
};
|
||||
|
||||
// https://streams.spec.whatwg.org/#set-up-transform-stream-default-controller-from-transformer
|
||||
class TransformerAlgorithms final : public TransformerAlgorithmsBase {
|
||||
public:
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(
|
||||
TransformerAlgorithms, TransformerAlgorithmsBase)
|
||||
|
||||
TransformerAlgorithms(nsIGlobalObject* aGlobal,
|
||||
JS::Handle<JSObject*> aTransformer,
|
||||
|
@ -42,11 +60,11 @@ class TransformerAlgorithms final {
|
|||
|
||||
MOZ_CAN_RUN_SCRIPT already_AddRefed<Promise> TransformCallback(
|
||||
JSContext* aCx, JS::Handle<JS::Value> aChunk,
|
||||
TransformStreamDefaultController& aController, ErrorResult& aRv);
|
||||
TransformStreamDefaultController& aController, ErrorResult& aRv) override;
|
||||
|
||||
MOZ_CAN_RUN_SCRIPT already_AddRefed<Promise> FlushCallback(
|
||||
JSContext* aCx, TransformStreamDefaultController& aController,
|
||||
ErrorResult& aRv);
|
||||
ErrorResult& aRv) override;
|
||||
|
||||
protected:
|
||||
~TransformerAlgorithms() { mozilla::DropJSObjects(this); }
|
||||
|
|
|
@ -14,8 +14,6 @@ NS_IMPL_CYCLE_COLLECTING_RELEASE(UnderlyingSinkAlgorithmsBase)
|
|||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(UnderlyingSinkAlgorithmsBase)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(UnderlyingSinkAlgorithmsBase)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED_WITH_JS_MEMBERS(
|
||||
UnderlyingSinkAlgorithms, UnderlyingSinkAlgorithmsBase,
|
||||
|
|
|
@ -26,7 +26,7 @@ class WritableStreamDefaultController;
|
|||
class UnderlyingSinkAlgorithmsBase : public nsISupports {
|
||||
public:
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(UnderlyingSinkAlgorithmsBase)
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS(UnderlyingSinkAlgorithmsBase)
|
||||
|
||||
MOZ_CAN_RUN_SCRIPT virtual void StartCallback(
|
||||
JSContext* aCx, WritableStreamDefaultController& aController,
|
||||
|
|
|
@ -17,8 +17,6 @@ NS_IMPL_CYCLE_COLLECTING_RELEASE(UnderlyingSourceAlgorithmsBase)
|
|||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(UnderlyingSourceAlgorithmsBase)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||
NS_INTERFACE_MAP_END
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(UnderlyingSourceAlgorithmsBase)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED_WITH_JS_MEMBERS(
|
||||
UnderlyingSourceAlgorithms, UnderlyingSourceAlgorithmsBase,
|
||||
|
|
|
@ -30,7 +30,7 @@ class ReadableStreamController;
|
|||
class UnderlyingSourceAlgorithmsBase : public nsISupports {
|
||||
public:
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(UnderlyingSourceAlgorithmsBase)
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS(UnderlyingSourceAlgorithmsBase)
|
||||
|
||||
MOZ_CAN_RUN_SCRIPT virtual void StartCallback(
|
||||
JSContext* aCx, ReadableStreamController& aController,
|
||||
|
|
Загрузка…
Ссылка в новой задаче