/* static */ already_AddRefed<File> File::Constructor(const GlobalObject& aGlobal, const Sequence<BlobPart>& aData, const nsAString& aName, const FilePropertyBag& aBag, ErrorResult& aRv) { // Normalizing the filename nsString name(aName); name.ReplaceChar('/', ':'); RefPtr<MultipartBlobImpl> impl = new MultipartBlobImpl(name); nsAutoString type(aBag.mType); MakeValidBlobType(type); impl->InitializeBlob(aData, type, aBag.mEndings == EndingTypes::Native, aRv); if (aRv.Failed()) { return nullptr; } MOZ_ASSERT(impl->IsFile()); if (aBag.mLastModified.WasPassed()) { impl->SetLastModified(aBag.mLastModified.Value()); } RefPtr<File> file = new File(aGlobal.GetAsSupports(), impl); return file.forget(); }
/* static */ already_AddRefed<Blob> Blob::Constructor(const GlobalObject& aGlobal, const Optional<Sequence<BlobPart>>& aData, const BlobPropertyBag& aBag, ErrorResult& aRv) { RefPtr<MultipartBlobImpl> impl = new MultipartBlobImpl(); if (aData.WasPassed()) { nsAutoString type(aBag.mType); MakeValidBlobType(type); impl->InitializeBlob(aGlobal.Context(), aData.Value(), type, aBag.mEndings == EndingTypes::Native, aRv); } else { impl->InitializeBlob(aRv); } if (NS_WARN_IF(aRv.Failed())) { return nullptr; } MOZ_ASSERT(!impl->IsFile()); RefPtr<Blob> blob = Blob::Create(aGlobal.GetAsSupports(), impl); return blob.forget(); }