nsresult DOMFileImpl::Slice(int64_t aStart, int64_t aEnd, const nsAString& aContentType, uint8_t aArgc, nsIDOMBlob **aBlob) { *aBlob = nullptr; // Truncate aStart and aEnd so that we stay within this file. uint64_t thisLength; nsresult rv = GetSize(&thisLength); NS_ENSURE_SUCCESS(rv, rv); if (aArgc < 2) { aEnd = (int64_t)thisLength; } ParseSize((int64_t)thisLength, aStart, aEnd); // Create the new file nsCOMPtr<nsIDOMBlob> blob = CreateSlice((uint64_t)aStart, (uint64_t)(aEnd - aStart), aContentType); blob.forget(aBlob); return *aBlob ? NS_OK : NS_ERROR_UNEXPECTED; }
nsresult DOMFileImpl::Slice(int64_t aStart, int64_t aEnd, const nsAString& aContentType, uint8_t aArgc, DOMFileImpl** aBlobImpl) { *aBlobImpl = nullptr; // Truncate aStart and aEnd so that we stay within this file. uint64_t thisLength; nsresult rv = GetSize(&thisLength); NS_ENSURE_SUCCESS(rv, rv); if (aArgc < 2) { aEnd = (int64_t)thisLength; } ParseSize((int64_t)thisLength, aStart, aEnd); nsRefPtr<DOMFileImpl> impl = CreateSlice((uint64_t)aStart, (uint64_t)(aEnd - aStart), aContentType); if (!impl) { return NS_ERROR_UNEXPECTED; } impl.forget(aBlobImpl); return NS_OK; }
already_AddRefed<BlobImpl> BlobImpl::Slice(const Optional<int64_t>& aStart, const Optional<int64_t>& aEnd, const nsAString& aContentType, ErrorResult& aRv) { // Truncate aStart and aEnd so that we stay within this file. uint64_t thisLength = GetSize(aRv); if (NS_WARN_IF(aRv.Failed())) { return nullptr; } int64_t start = aStart.WasPassed() ? aStart.Value() : 0; int64_t end = aEnd.WasPassed() ? aEnd.Value() : (int64_t)thisLength; ParseSize((int64_t)thisLength, start, end); return CreateSlice((uint64_t)start, (uint64_t)(end - start), aContentType, aRv); }