new nsPluginByteRangeStreamListener(mPluginStreamListenerPeer);
new nsPluginByteRangeStreamListener(pWeakRefPluginStreamListenerPeer);
nsPluginStreamInfo::RequestRead(nsByteRange* rangeList){      nsCAutoString rangeString;  PRInt32 numRequests;  MakeByteRangeString(rangeList, rangeString, &numRequests);    if(numRequests == 0)    return NS_ERROR_FAILURE;  nsresult rv = NS_OK;  nsCOMPtr<nsIURI> url;  rv = NS_NewURI(getter_AddRefs(url), nsDependentCString(mURL));  nsCOMPtr<nsIChannel> channel;  rv = NS_NewChannel(getter_AddRefs(channel), url, nsnull, nsnull, nsnull);  if (NS_FAILED(rv))     return rv;  nsCOMPtr<nsIHttpChannel> httpChannel(do_QueryInterface(channel));  if(!httpChannel)    return NS_ERROR_FAILURE;  httpChannel->SetRequestHeader(NS_LITERAL_CSTRING("Range"), rangeString);    mPluginStreamListenerPeer->mAbort = PR_TRUE; // instruct old stream listener to cancel                                               // the request on the next ODA.   nsCOMPtr<nsIStreamListener> converter;    if (numRequests == 1) {      converter = mPluginStreamListenerPeer;    // set current stream offset equal to the first offset in the range list    // it will work for single byte range request    // for multy range we'll reset it in ODA     SetStreamOffset(rangeList->offset);  } else {    nsPluginByteRangeStreamListener *brrListener =       new nsPluginByteRangeStreamListener(mPluginStreamListenerPeer);    if (brrListener)      converter = brrListener;    else      return NS_ERROR_OUT_OF_MEMORY;  }  mPluginStreamListenerPeer->mPendingRequests += numRequests;   nsCOMPtr<nsISupportsPRUint32> container = do_CreateInstance(NS_SUPPORTS_PRUINT32_CONTRACTID, &rv);   if (NS_FAILED(rv)) return rv;   rv = container->SetData(MAGIC_REQUEST_CONTEXT);   if (NS_FAILED(rv)) return rv;   return channel->AsyncOpen(converter, container);}