nsCOMPtr<nsIInterfaceRequestor> callbacks = do_QueryInterface(mObserver);
nsIncrementalDownload::ProcessTimeout(){  NS_ASSERTION(!mChannel, "how can we have a channel?");  // Handle existing error conditions  if (NS_FAILED(mStatus)) {    CallOnStopRequest();    return NS_OK;  }  // Fetch next chunk    nsCOMPtr<nsIInterfaceRequestor> callbacks = do_QueryInterface(mObserver);  nsCOMPtr<nsIChannel> channel;  nsresult rv = NS_NewChannel(getter_AddRefs(channel), mFinalURI, nsnull,                              nsnull, callbacks, mLoadFlags);  if (NS_FAILED(rv))    return rv;  nsCOMPtr<nsIHttpChannel> http = do_QueryInterface(channel, &rv);  if (NS_FAILED(rv))    return rv;  NS_ASSERTION(mCurrentSize != nsInt64(-1),      "we should know the current file size by now");  nsCAutoString range;  MakeRangeSpec(mCurrentSize, mTotalSize, mChunkSize, mInterval == 0, range);  rv = http->SetRequestHeader(NS_LITERAL_CSTRING("Range"), range, PR_FALSE);  if (NS_FAILED(rv))    return rv;  rv = channel->AsyncOpen(this, nsnull);  if (NS_FAILED(rv))    return rv;  // Wait to assign mChannel when we know we are going to succeed.  This is  // important because we don't want to introduce a reference cycle between  // mChannel and this until we know for a fact that AsyncOpen has succeeded,  // thus ensuring that our stream listener methods will be invoked.  mChannel = channel;  return NS_OK;}