nsresult WriteHelper::DoAsyncRun(nsISupports* aStream) { MOZ_ASSERT(aStream, "Passed a null stream!"); uint32_t flags = FileStreamWrapper::NOTIFY_PROGRESS; nsCOMPtr<nsIOutputStream> ostream = new FileOutputStreamWrapper(aStream, this, mLocation, mLength, flags); FileService* service = FileService::Get(); MOZ_ASSERT(service, "This should never be null"); nsIEventTarget* target = service->ThreadPoolTarget(); nsCOMPtr<nsIAsyncStreamCopier> copier; nsresult rv = NS_NewAsyncStreamCopier(getter_AddRefs(copier), mStream, ostream, target, true, false, STREAM_COPY_BLOCK_SIZE); NS_ENSURE_SUCCESS(rv, rv); rv = copier->AsyncCopy(this, nullptr); NS_ENSURE_SUCCESS(rv, rv); mRequest = do_QueryInterface(copier); return NS_OK; }
nsresult FileHandleBase::Finish() { MOZ_ASSERT(NS_IsMainThread(), "Wrong thread!"); nsRefPtr<FinishHelper> helper(new FinishHelper(this)); FileService* service = FileService::Get(); MOZ_ASSERT(service, "This should never be null"); nsIEventTarget* target = service->ThreadPoolTarget(); nsresult rv = target->Dispatch(helper, NS_DISPATCH_NORMAL); NS_ENSURE_SUCCESS(rv, rv); return NS_OK; }