fixes bug 115129 "stream loader optimizations" r=gagan, sr=brendan,dveditz

git-svn-id: svn://10.0.0.236/trunk@110490 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
darin%netscape.com
2001-12-14 22:54:56 +00:00
parent 6b7d4a26c3
commit 8c89b9d527
4 changed files with 37 additions and 24 deletions

View File

@@ -699,7 +699,10 @@ nsJARChannel::GetInputStream(nsIInputStream* *aInputStream)
}
#endif
NS_ENSURE_TRUE(mJAR, NS_ERROR_NULL_POINTER);
return mJAR->GetInputStream(mJAREntry, aInputStream);
nsresult rv = mJAR->GetInputStream(mJAREntry, aInputStream);
if (NS_SUCCEEDED(rv))
(*aInputStream)->Available((PRUint32 *) &mContentLength);
return rv;
}
NS_IMETHODIMP

View File

@@ -117,10 +117,18 @@ nsStreamLoader::GetRequest(nsIRequest **aRequest)
return NS_OK;
}
NS_IMETHODIMP
nsStreamLoader::OnStartRequest(nsIRequest* request, nsISupports *ctxt)
{
nsCOMPtr<nsIChannel> chan( do_QueryInterface(request) );
if (chan) {
PRInt32 contentLength = -1;
chan->GetContentLength(&contentLength);
if (contentLength >= 0) {
// preallocate buffer
mData.SetCapacity(contentLength + 1);
}
}
return NS_OK;
}
@@ -141,30 +149,27 @@ nsStreamLoader::OnStopRequest(nsIRequest* request, nsISupports *ctxt,
return NS_OK;
}
#define BUF_SIZE 1024
NS_METHOD
nsStreamLoader::WriteSegmentFun(nsIInputStream *inStr,
void *closure,
const char *fromSegment,
PRUint32 toOffset,
PRUint32 count,
PRUint32 *writeCount)
{
nsStreamLoader *self = (nsStreamLoader *) closure;
self->mData.Append(fromSegment, count);
*writeCount = count;
return NS_OK;
}
NS_IMETHODIMP
nsStreamLoader::OnDataAvailable(nsIRequest* request, nsISupports *ctxt,
nsIInputStream *inStr,
PRUint32 sourceOffset, PRUint32 count)
{
nsresult rv = NS_OK;
char buffer[BUF_SIZE];
PRUint32 len, lenRead;
rv = inStr->Available(&len);
if (NS_FAILED(rv)) return rv;
while (len > 0) {
lenRead = PR_MIN(len, BUF_SIZE);
rv = inStr->Read(buffer, lenRead, &lenRead);
if (NS_FAILED(rv) || lenRead == 0) {
return rv;
}
mData.Append(buffer, lenRead);
len -= lenRead;
}
return rv;
PRUint32 countRead;
return inStr->ReadSegments(WriteSegmentFun, this, count, &countRead);
}

View File

@@ -59,11 +59,13 @@ public:
Create(nsISupports *aOuter, REFNSIID aIID, void **aResult);
protected:
static NS_METHOD WriteSegmentFun(nsIInputStream *, void *, const char *,
PRUint32, PRUint32, PRUint32 *);
nsCOMPtr<nsIStreamLoaderObserver> mObserver;
nsCOMPtr<nsISupports> mContext; // the observer's context
nsCString mData;
nsCOMPtr<nsIRequest> mRequest;
/// nsCOMPtr<nsILoadGroup> mLoadGroup;
};
#endif // nsStreamLoader_h__

View File

@@ -699,7 +699,10 @@ nsJARChannel::GetInputStream(nsIInputStream* *aInputStream)
}
#endif
NS_ENSURE_TRUE(mJAR, NS_ERROR_NULL_POINTER);
return mJAR->GetInputStream(mJAREntry, aInputStream);
nsresult rv = mJAR->GetInputStream(mJAREntry, aInputStream);
if (NS_SUCCEEDED(rv))
(*aInputStream)->Available((PRUint32 *) &mContentLength);
return rv;
}
NS_IMETHODIMP