Bug 1159378 - Part 1: Enable nsIStreamLoader to optionally notify an nsIRequestObserver; r=mcmanus

--HG--
extra : rebase_source : f41590a92512a441b4a70f898c2172c5559718de
This commit is contained in:
Ehsan Akhgari 2015-05-04 10:17:47 -04:00
parent 8464296492
commit 624cf2cad3
5 changed files with 26 additions and 9 deletions

View File

@ -49,16 +49,20 @@ interface nsIStreamLoaderObserver : nsISupports
*
* XXX define behaviour for sizes >4 GB
*/
[scriptable, uuid(8ea7e890-8211-11d9-8bde-f66bad1e3f3a)]
[scriptable, uuid(323bcff1-7513-4e1f-a541-1c9213c2ed1b)]
interface nsIStreamLoader : nsIStreamListener
{
/**
* Initialize this stream loader, and start loading the data.
*
* @param aObserver
* @param aStreamObserver
* An observer that will be notified when the data is complete.
* @param aRequestObserver
* An optional observer that will be notified when the request
* has started or stopped.
*/
void init(in nsIStreamLoaderObserver aObserver);
void init(in nsIStreamLoaderObserver aStreamObserver,
[optional] in nsIRequestObserver aRequestObserver);
/**
* Gets the number of bytes read so far.

View File

@ -860,13 +860,14 @@ NS_NewDownloader(nsIStreamListener **result,
inline nsresult
NS_NewStreamLoader(nsIStreamLoader **result,
nsIStreamLoaderObserver *observer)
nsIStreamLoaderObserver *observer,
nsIRequestObserver *requestObserver = nullptr)
{
nsresult rv;
nsCOMPtr<nsIStreamLoader> loader =
do_CreateInstance(NS_STREAMLOADER_CONTRACTID, &rv);
if (NS_SUCCEEDED(rv)) {
rv = loader->Init(observer);
rv = loader->Init(observer, requestObserver);
if (NS_SUCCEEDED(rv)) {
*result = nullptr;
loader.swap(*result);

View File

@ -439,7 +439,7 @@ nsPACMan::StartLoading()
return;
}
if (NS_SUCCEEDED(mLoader->Init(this))) {
if (NS_SUCCEEDED(mLoader->Init(this, nullptr))) {
// Always hit the origin server when loading PAC.
nsCOMPtr<nsIIOService> ios = do_GetIOService();
if (ios) {

View File

@ -21,10 +21,12 @@ nsStreamLoader::~nsStreamLoader()
}
NS_IMETHODIMP
nsStreamLoader::Init(nsIStreamLoaderObserver* observer)
nsStreamLoader::Init(nsIStreamLoaderObserver* aStreamObserver,
nsIRequestObserver* aRequestObserver)
{
NS_ENSURE_ARG_POINTER(observer);
mObserver = observer;
NS_ENSURE_ARG_POINTER(aStreamObserver);
mObserver = aStreamObserver;
mRequestObserver = aRequestObserver;
return NS_OK;
}
@ -80,6 +82,9 @@ nsStreamLoader::OnStartRequest(nsIRequest* request, nsISupports *ctxt)
}
}
mContext = ctxt;
if (mRequestObserver) {
mRequestObserver->OnStartRequest(request, ctxt);
}
return NS_OK;
}
@ -108,6 +113,12 @@ nsStreamLoader::OnStopRequest(nsIRequest* request, nsISupports *ctxt,
mObserver = 0;
mContext = 0;
}
if (mRequestObserver) {
mRequestObserver->OnStopRequest(request, ctxt, aStatus);
mRequestObserver = nullptr;
}
return NS_OK;
}

View File

@ -42,6 +42,7 @@ protected:
nsCOMPtr<nsIStreamLoaderObserver> mObserver;
nsCOMPtr<nsISupports> mContext; // the observer's context
nsCOMPtr<nsIRequest> mRequest;
nsCOMPtr<nsIRequestObserver> mRequestObserver;
// Buffer to accumulate incoming data. We preallocate if contentSize is
// available.