nsresult ReadHelper::DoAsyncRun(nsISupports* aStream) { NS_ASSERTION(aStream, "Passed a null stream!"); uint32_t flags = FileStreamWrapper::NOTIFY_PROGRESS; nsCOMPtr<nsIInputStream> istream = new FileInputStreamWrapper(aStream, this, mLocation, mSize, flags); FileService* service = FileService::Get(); NS_ASSERTION(service, "This should never be null"); nsIEventTarget* target = service->StreamTransportTarget(); nsCOMPtr<nsIAsyncStreamCopier> copier; nsresult rv = NS_NewAsyncStreamCopier(getter_AddRefs(copier), istream, mStream, target, false, true, 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 LockedFile::Finish() { NS_ASSERTION(NS_IsMainThread(), "Wrong thread!"); nsRefPtr<FinishHelper> helper(new FinishHelper(this)); FileService* service = FileService::Get(); NS_ASSERTION(service, "This should never be null"); nsIEventTarget* target = service->StreamTransportTarget(); nsresult rv = target->Dispatch(helper, NS_DISPATCH_NORMAL); NS_ENSURE_SUCCESS(rv, rv); return NS_OK; }
nsresult AsyncHelper::AsyncWork(nsIRequestObserver* aObserver, nsISupports* aCtxt) { nsresult rv; if (aObserver) { // build proxy for observer events rv = NS_NewRequestObserverProxy(getter_AddRefs(mObserver), aObserver, aCtxt); NS_ENSURE_SUCCESS(rv, rv); } FileService* service = FileService::GetOrCreate(); NS_ENSURE_TRUE(service, NS_ERROR_FAILURE); nsIEventTarget* target = service->StreamTransportTarget(); rv = target->Dispatch(this, NS_DISPATCH_NORMAL); NS_ENSURE_SUCCESS(rv, rv); return NS_OK; }