// AUTO-GENERATED FILE. DO NOT EDIT. // Generated by 'make generate-sink' at 2022-11-13T22:44:00.279Z // #pragma once #include "root.h" #include "JSDOMWrapper.h" #include "wtf/NeverDestroyed.h" #include "Sink.h" extern "C" bool JSSink_isSink(JSC::JSGlobalObject*, JSC::EncodedJSValue); namespace WebCore { using namespace JSC; JSC_DECLARE_HOST_FUNCTION(functionStartDirectStream); class JSArrayBufferSinkConstructor final : public JSC::InternalFunction { public: using Base = JSC::InternalFunction; static JSArrayBufferSinkConstructor* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSC::JSObject* prototype); static constexpr SinkID Sink = SinkID::ArrayBufferSink; static constexpr unsigned StructureFlags = Base::StructureFlags; static constexpr bool needsDestruction = false; DECLARE_EXPORT_INFO; template static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) { if constexpr (mode == JSC::SubspaceAccess::Concurrently) return nullptr; return WebCore::subspaceForImpl( vm, [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkConstructor.get(); }, [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkConstructor = WTFMove(space); }, [](auto& spaces) { return spaces.m_subspaceForJSSinkConstructor.get(); }, [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkConstructor = WTFMove(space); }); } static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) { return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::InternalFunctionType, StructureFlags), info()); } void initializeProperties(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); // Must be defined for each specialization class. static JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES construct(JSC::JSGlobalObject*, JSC::CallFrame*); private: JSArrayBufferSinkConstructor(JSC::VM& vm, JSC::Structure* structure, JSC::NativeFunction nativeFunction) : Base(vm, structure, nativeFunction, nativeFunction) { } void finishCreation(JSC::VM&, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); }; class JSArrayBufferSink final : public JSC::JSDestructibleObject { public: using Base = JSC::JSDestructibleObject; static JSArrayBufferSink* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); static constexpr SinkID Sink = SinkID::ArrayBufferSink; DECLARE_EXPORT_INFO; template static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) { if constexpr (mode == JSC::SubspaceAccess::Concurrently) return nullptr; return WebCore::subspaceForImpl( vm, [](auto& spaces) { return spaces.m_clientSubspaceForJSSink.get(); }, [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSink = WTFMove(space); }, [](auto& spaces) { return spaces.m_subspaceForJSSink.get(); }, [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSink = WTFMove(space); }); } static void destroy(JSC::JSCell*); static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) { return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); } static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); ~JSArrayBufferSink(); void* wrapped() const { return m_sinkPtr; } void detach() { m_sinkPtr = nullptr; } static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); void* m_sinkPtr; JSArrayBufferSink(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) : Base(vm, structure) { m_sinkPtr = sinkPtr; } void finishCreation(JSC::VM&); }; class JSReadableArrayBufferSinkController final : public JSC::JSDestructibleObject { public: using Base = JSC::JSDestructibleObject; static JSReadableArrayBufferSinkController* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); static constexpr SinkID Sink = SinkID::ArrayBufferSink; DECLARE_EXPORT_INFO; template static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) { if constexpr (mode == JSC::SubspaceAccess::Concurrently) return nullptr; return WebCore::subspaceForImpl( vm, [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkController.get(); }, [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkController = WTFMove(space); }, [](auto& spaces) { return spaces.m_subspaceForJSSinkController.get(); }, [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkController = WTFMove(space); }); } static void destroy(JSC::JSCell*); static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) { return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); } static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); ~JSReadableArrayBufferSinkController(); void* wrapped() const { return m_sinkPtr; } void detach(); void start(JSC::JSGlobalObject *globalObject, JSC::JSValue readableStream, JSC::JSFunction *onPull, JSC::JSFunction *onClose); DECLARE_VISIT_CHILDREN; static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); bool hasPendingActivity() { return m_hasPendingActivity; } void* m_sinkPtr; bool m_hasPendingActivity; mutable WriteBarrier m_onPull; mutable WriteBarrier m_onClose; mutable JSC::Weak m_weakReadableStream; JSC::Weak m_weakThis; JSReadableArrayBufferSinkController(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) : Base(vm, structure) { m_sinkPtr = sinkPtr; m_hasPendingActivity = true; m_weakThis = JSC::Weak(this, getOwner()); } void finishCreation(JSC::VM&); class Owner final : public JSC::WeakHandleOwner { public: bool isReachableFromOpaqueRoots(JSC::Handle handle, void* context, JSC::AbstractSlotVisitor&, const char**) final { auto* controller = JSC::jsCast(handle.slot()->asCell()); return controller->hasPendingActivity(); } void finalize(JSC::Handle, void* context) final {} }; static JSC::WeakHandleOwner* getOwner() { static NeverDestroyed m_owner; return &m_owner.get(); } }; JSC_DECLARE_CUSTOM_GETTER(functionArrayBufferSink__getter); class JSFileSinkConstructor final : public JSC::InternalFunction { public: using Base = JSC::InternalFunction; static JSFileSinkConstructor* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSC::JSObject* prototype); static constexpr SinkID Sink = SinkID::FileSink; static constexpr unsigned StructureFlags = Base::StructureFlags; static constexpr bool needsDestruction = false; DECLARE_EXPORT_INFO; template static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) { if constexpr (mode == JSC::SubspaceAccess::Concurrently) return nullptr; return WebCore::subspaceForImpl( vm, [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkConstructor.get(); }, [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkConstructor = WTFMove(space); }, [](auto& spaces) { return spaces.m_subspaceForJSSinkConstructor.get(); }, [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkConstructor = WTFMove(space); }); } static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) { return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::InternalFunctionType, StructureFlags), info()); } void initializeProperties(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); // Must be defined for each specialization class. static JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES construct(JSC::JSGlobalObject*, JSC::CallFrame*); private: JSFileSinkConstructor(JSC::VM& vm, JSC::Structure* structure, JSC::NativeFunction nativeFunction) : Base(vm, structure, nativeFunction, nativeFunction) { } void finishCreation(JSC::VM&, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); }; class JSFileSink final : public JSC::JSDestructibleObject { public: using Base = JSC::JSDestructibleObject; static JSFileSink* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); static constexpr SinkID Sink = SinkID::FileSink; DECLARE_EXPORT_INFO; template static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) { if constexpr (mode == JSC::SubspaceAccess::Concurrently) return nullptr; return WebCore::subspaceForImpl( vm, [](auto& spaces) { return spaces.m_clientSubspaceForJSSink.get(); }, [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSink = WTFMove(space); }, [](auto& spaces) { return spaces.m_subspaceForJSSink.get(); }, [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSink = WTFMove(space); }); } static void destroy(JSC::JSCell*); static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) { return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); } static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); ~JSFileSink(); void* wrapped() const { return m_sinkPtr; } void detach() { m_sinkPtr = nullptr; } static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); void* m_sinkPtr; JSFileSink(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) : Base(vm, structure) { m_sinkPtr = sinkPtr; } void finishCreation(JSC::VM&); }; class JSReadableFileSinkController final : public JSC::JSDestructibleObject { public: using Base = JSC::JSDestructibleObject; static JSReadableFileSinkController* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); static constexpr SinkID Sink = SinkID::FileSink; DECLARE_EXPORT_INFO; template static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) { if constexpr (mode == JSC::SubspaceAccess::Concurrently) return nullptr; return WebCore::subspaceForImpl( vm, [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkController.get(); }, [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkController = WTFMove(space); }, [](auto& spaces) { return spaces.m_subspaceForJSSinkController.get(); }, [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkController = WTFMove(space); }); } static void destroy(JSC::JSCell*); static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) { return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); } static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); ~JSReadableFileSinkController(); void* wrapped() const { return m_sinkPtr; } void detach(); void start(JSC::JSGlobalObject *globalObject, JSC::JSValue readableStream, JSC::JSFunction *onPull, JSC::JSFunction *onClose); DECLARE_VISIT_CHILDREN; static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); bool hasPendingActivity() { return m_hasPendingActivity; } void* m_sinkPtr; bool m_hasPendingActivity; mutable WriteBarrier m_onPull; mutable WriteBarrier m_onClose; mutable JSC::Weak m_weakReadableStream; JSC::Weak m_weakThis; JSReadableFileSinkController(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) : Base(vm, structure) { m_sinkPtr = sinkPtr; m_hasPendingActivity = true; m_weakThis = JSC::Weak(this, getOwner()); } void finishCreation(JSC::VM&); class Owner final : public JSC::WeakHandleOwner { public: bool isReachableFromOpaqueRoots(JSC::Handle handle, void* context, JSC::AbstractSlotVisitor&, const char**) final { auto* controller = JSC::jsCast(handle.slot()->asCell()); return controller->hasPendingActivity(); } void finalize(JSC::Handle, void* context) final {} }; static JSC::WeakHandleOwner* getOwner() { static NeverDestroyed m_owner; return &m_owner.get(); } }; JSC_DECLARE_CUSTOM_GETTER(functionFileSink__getter); class JSHTTPResponseSinkConstructor final : public JSC::InternalFunction { public: using Base = JSC::InternalFunction; static JSHTTPResponseSinkConstructor* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSC::JSObject* prototype); static constexpr SinkID Sink = SinkID::HTTPResponseSink; static constexpr unsigned StructureFlags = Base::StructureFlags; static constexpr bool needsDestruction = false; DECLARE_EXPORT_INFO; template static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) { if constexpr (mode == JSC::SubspaceAccess::Concurrently) return nullptr; return WebCore::subspaceForImpl( vm, [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkConstructor.get(); }, [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkConstructor = WTFMove(space); }, [](auto& spaces) { return spaces.m_subspaceForJSSinkConstructor.get(); }, [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkConstructor = WTFMove(space); }); } static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) { return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::InternalFunctionType, StructureFlags), info()); } void initializeProperties(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); // Must be defined for each specialization class. static JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES construct(JSC::JSGlobalObject*, JSC::CallFrame*); private: JSHTTPResponseSinkConstructor(JSC::VM& vm, JSC::Structure* structure, JSC::NativeFunction nativeFunction) : Base(vm, structure, nativeFunction, nativeFunction) { } void finishCreation(JSC::VM&, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); }; class JSHTTPResponseSink final : public JSC::JSDestructibleObject { public: using Base = JSC::JSDestructibleObject; static JSHTTPResponseSink* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); static constexpr SinkID Sink = SinkID::HTTPResponseSink; DECLARE_EXPORT_INFO; template static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) { if constexpr (mode == JSC::SubspaceAccess::Concurrently) return nullptr; return WebCore::subspaceForImpl( vm, [](auto& spaces) { return spaces.m_clientSubspaceForJSSink.get(); }, [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSink = WTFMove(space); }, [](auto& spaces) { return spaces.m_subspaceForJSSink.get(); }, [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSink = WTFMove(space); }); } static void destroy(JSC::JSCell*); static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) { return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); } static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); ~JSHTTPResponseSink(); void* wrapped() const { return m_sinkPtr; } void detach() { m_sinkPtr = nullptr; } static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); void* m_sinkPtr; JSHTTPResponseSink(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) : Base(vm, structure) { m_sinkPtr = sinkPtr; } void finishCreation(JSC::VM&); }; class JSReadableHTTPResponseSinkController final : public JSC::JSDestructibleObject { public: using Base = JSC::JSDestructibleObject; static JSReadableHTTPResponseSinkController* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); static constexpr SinkID Sink = SinkID::HTTPResponseSink; DECLARE_EXPORT_INFO; template static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) { if constexpr (mode == JSC::SubspaceAccess::Concurrently) return nullptr; return WebCore::subspaceForImpl( vm, [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkController.get(); }, [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkController = WTFMove(space); }, [](auto& spaces) { return spaces.m_subspaceForJSSinkController.get(); }, [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkController = WTFMove(space); }); } static void destroy(JSC::JSCell*); static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) { return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); } static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); ~JSReadableHTTPResponseSinkController(); void* wrapped() const { return m_sinkPtr; } void detach(); void start(JSC::JSGlobalObject *globalObject, JSC::JSValue readableStream, JSC::JSFunction *onPull, JSC::JSFunction *onClose); DECLARE_VISIT_CHILDREN; static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); bool hasPendingActivity() { return m_hasPendingActivity; } void* m_sinkPtr; bool m_hasPendingActivity; mutable WriteBarrier m_onPull; mutable WriteBarrier m_onClose; mutable JSC::Weak m_weakReadableStream; JSC::Weak m_weakThis; JSReadableHTTPResponseSinkController(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) : Base(vm, structure) { m_sinkPtr = sinkPtr; m_hasPendingActivity = true; m_weakThis = JSC::Weak(this, getOwner()); } void finishCreation(JSC::VM&); class Owner final : public JSC::WeakHandleOwner { public: bool isReachableFromOpaqueRoots(JSC::Handle handle, void* context, JSC::AbstractSlotVisitor&, const char**) final { auto* controller = JSC::jsCast(handle.slot()->asCell()); return controller->hasPendingActivity(); } void finalize(JSC::Handle, void* context) final {} }; static JSC::WeakHandleOwner* getOwner() { static NeverDestroyed m_owner; return &m_owner.get(); } }; JSC_DECLARE_CUSTOM_GETTER(functionHTTPResponseSink__getter); class JSHTTPSResponseSinkConstructor final : public JSC::InternalFunction { public: using Base = JSC::InternalFunction; static JSHTTPSResponseSinkConstructor* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSC::JSObject* prototype); static constexpr SinkID Sink = SinkID::HTTPSResponseSink; static constexpr unsigned StructureFlags = Base::StructureFlags; static constexpr bool needsDestruction = false; DECLARE_EXPORT_INFO; template static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) { if constexpr (mode == JSC::SubspaceAccess::Concurrently) return nullptr; return WebCore::subspaceForImpl( vm, [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkConstructor.get(); }, [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkConstructor = WTFMove(space); }, [](auto& spaces) { return spaces.m_subspaceForJSSinkConstructor.get(); }, [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkConstructor = WTFMove(space); }); } static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) { return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::InternalFunctionType, StructureFlags), info()); } void initializeProperties(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); // Must be defined for each specialization class. static JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES construct(JSC::JSGlobalObject*, JSC::CallFrame*); private: JSHTTPSResponseSinkConstructor(JSC::VM& vm, JSC::Structure* structure, JSC::NativeFunction nativeFunction) : Base(vm, structure, nativeFunction, nativeFunction) { } void finishCreation(JSC::VM&, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); }; class JSHTTPSResponseSink final : public JSC::JSDestructibleObject { public: using Base = JSC::JSDestructibleObject; static JSHTTPSResponseSink* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); static constexpr SinkID Sink = SinkID::HTTPSResponseSink; DECLARE_EXPORT_INFO; template static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) { if constexpr (mode == JSC::SubspaceAccess::Concurrently) return nullptr; return WebCore::subspaceForImpl( vm, [](auto& spaces) { return spaces.m_clientSubspaceForJSSink.get(); }, [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSink = WTFMove(space); }, [](auto& spaces) { return spaces.m_subspaceForJSSink.get(); }, [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSink = WTFMove(space); }); } static void destroy(JSC::JSCell*); static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) { return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); } static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); ~JSHTTPSResponseSink(); void* wrapped() const { return m_sinkPtr; } void detach() { m_sinkPtr = nullptr; } static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); void* m_sinkPtr; JSHTTPSResponseSink(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) : Base(vm, structure) { m_sinkPtr = sinkPtr; } void finishCreation(JSC::VM&); }; class JSReadableHTTPSResponseSinkController final : public JSC::JSDestructibleObject { public: using Base = JSC::JSDestructibleObject; static JSReadableHTTPSResponseSinkController* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); static constexpr SinkID Sink = SinkID::HTTPSResponseSink; DECLARE_EXPORT_INFO; template static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) { if constexpr (mode == JSC::SubspaceAccess::Concurrently) return nullptr; return WebCore::subspaceForImpl( vm, [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkController.get(); }, [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkController = WTFMove(space); }, [](auto& spaces) { return spaces.m_subspaceForJSSinkController.get(); }, [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkController = WTFMove(space); }); } static void destroy(JSC::JSCell*); static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) { return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); } static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); ~JSReadableHTTPSResponseSinkController(); void* wrapped() const { return m_sinkPtr; } void detach(); void start(JSC::JSGlobalObject *globalObject, JSC::JSValue readableStream, JSC::JSFunction *onPull, JSC::JSFunction *onClose); DECLARE_VISIT_CHILDREN; static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); bool hasPendingActivity() { return m_hasPendingActivity; } void* m_sinkPtr; bool m_hasPendingActivity; mutable WriteBarrier m_onPull; mutable WriteBarrier m_onClose; mutable JSC::Weak m_weakReadableStream; JSC::Weak m_weakThis; JSReadableHTTPSResponseSinkController(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) : Base(vm, structure) { m_sinkPtr = sinkPtr; m_hasPendingActivity = true; m_weakThis = JSC::Weak(this, getOwner()); } void finishCreation(JSC::VM&); class Owner final : public JSC::WeakHandleOwner { public: bool isReachableFromOpaqueRoots(JSC::Handle handle, void* context, JSC::AbstractSlotVisitor&, const char**) final { auto* controller = JSC::jsCast(handle.slot()->asCell()); return controller->hasPendingActivity(); } void finalize(JSC::Handle, void* context) final {} }; static JSC::WeakHandleOwner* getOwner() { static NeverDestroyed m_owner; return &m_owner.get(); } }; JSC_DECLARE_CUSTOM_GETTER(functionHTTPSResponseSink__getter); JSObject* createJSSinkPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, WebCore::SinkID sinkID); JSObject* createJSSinkControllerPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, WebCore::SinkID sinkID); Structure* createJSSinkControllerStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, WebCore::SinkID sinkID); } // namespace WebCore