/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "EmptyBody.h" #include "mozilla/ipc/PBackgroundSharedTypes.h" #include "nsStringStream.h" namespace mozilla::dom { NS_IMPL_ADDREF_INHERITED(EmptyBody, FetchBody) NS_IMPL_RELEASE_INHERITED(EmptyBody, FetchBody) NS_IMPL_CYCLE_COLLECTION_CLASS(EmptyBody) NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(EmptyBody, FetchBody) AbortFollower::Unlink(static_cast(tmp)); NS_IMPL_CYCLE_COLLECTION_UNLINK(mOwner) NS_IMPL_CYCLE_COLLECTION_UNLINK(mAbortSignalImpl) NS_IMPL_CYCLE_COLLECTION_UNLINK(mFetchStreamReader) NS_IMPL_CYCLE_COLLECTION_UNLINK_END NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(EmptyBody, FetchBody) AbortFollower::Traverse(static_cast(tmp), cb); NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mOwner) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mAbortSignalImpl) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mFetchStreamReader) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(EmptyBody, FetchBody) NS_IMPL_CYCLE_COLLECTION_TRACE_END NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(EmptyBody) NS_INTERFACE_MAP_END_INHERITING(FetchBody) EmptyBody::EmptyBody(nsIGlobalObject* aGlobal, mozilla::ipc::PrincipalInfo* aPrincipalInfo, AbortSignalImpl* aAbortSignalImpl, const nsACString& aMimeType, already_AddRefed aBodyStream) : FetchBody(aGlobal), mAbortSignalImpl(aAbortSignalImpl), mMimeType(aMimeType), mBodyStream(std::move(aBodyStream)) { if (aPrincipalInfo) { mPrincipalInfo = MakeUnique(*aPrincipalInfo); } } EmptyBody::~EmptyBody() = default; /* static */ already_AddRefed EmptyBody::Create( nsIGlobalObject* aGlobal, mozilla::ipc::PrincipalInfo* aPrincipalInfo, AbortSignalImpl* aAbortSignalImpl, const nsACString& aMimeType, ErrorResult& aRv) { nsCOMPtr bodyStream; aRv = NS_NewCStringInputStream(getter_AddRefs(bodyStream), ""_ns); if (NS_WARN_IF(aRv.Failed())) { return nullptr; } RefPtr emptyBody = new EmptyBody(aGlobal, aPrincipalInfo, aAbortSignalImpl, aMimeType, bodyStream.forget()); return emptyBody.forget(); } void EmptyBody::GetBody(nsIInputStream** aStream, int64_t* aBodyLength) { MOZ_ASSERT(aStream); if (aBodyLength) { *aBodyLength = 0; } nsCOMPtr bodyStream = mBodyStream; bodyStream.forget(aStream); } } // namespace mozilla::dom