зеркало из https://github.com/mozilla/gecko-dev.git
landing mEventQ portion of patch from bug 237958 "cleanup the way nsHttpChannel gets the current event queue" r=biesi sr=bzbarsky
This commit is contained in:
Родитель
0bf389e3b6
Коммит
80ff5a1004
|
@ -235,14 +235,7 @@ nsHttpChannel::Init(nsIURI *uri,
|
||||||
nsresult
|
nsresult
|
||||||
nsHttpChannel::AsyncCall(nsAsyncCallback funcPtr)
|
nsHttpChannel::AsyncCall(nsAsyncCallback funcPtr)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIEventQueueService> eqs;
|
nsresult rv;
|
||||||
nsCOMPtr<nsIEventQueue> eventQ;
|
|
||||||
|
|
||||||
gHttpHandler->GetEventQueueService(getter_AddRefs(eqs));
|
|
||||||
if (eqs)
|
|
||||||
eqs->ResolveEventQueue(NS_CURRENT_EVENTQ, getter_AddRefs(eventQ));
|
|
||||||
if (!eventQ)
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
|
|
||||||
nsAsyncCallEvent *event = new nsAsyncCallEvent;
|
nsAsyncCallEvent *event = new nsAsyncCallEvent;
|
||||||
if (!event)
|
if (!event)
|
||||||
|
@ -256,7 +249,7 @@ nsHttpChannel::AsyncCall(nsAsyncCallback funcPtr)
|
||||||
nsHttpChannel::AsyncCall_EventHandlerFunc,
|
nsHttpChannel::AsyncCall_EventHandlerFunc,
|
||||||
nsHttpChannel::AsyncCall_EventCleanupFunc);
|
nsHttpChannel::AsyncCall_EventCleanupFunc);
|
||||||
|
|
||||||
nsresult rv = eventQ->PostEvent(event);
|
rv = mEventQ->PostEvent(event);
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
PL_DestroyEvent(event);
|
PL_DestroyEvent(event);
|
||||||
NS_RELEASE_THIS();
|
NS_RELEASE_THIS();
|
||||||
|
@ -374,8 +367,7 @@ nsHttpChannel::AsyncAbort(nsresult status)
|
||||||
|
|
||||||
// create a proxy for the listener..
|
// create a proxy for the listener..
|
||||||
nsCOMPtr<nsIRequestObserver> observer;
|
nsCOMPtr<nsIRequestObserver> observer;
|
||||||
NS_NewRequestObserverProxy(getter_AddRefs(observer),
|
NS_NewRequestObserverProxy(getter_AddRefs(observer), mListener, mEventQ);
|
||||||
mListener, NS_CURRENT_EVENTQ);
|
|
||||||
if (observer) {
|
if (observer) {
|
||||||
observer->OnStartRequest(this, mListenerContext);
|
observer->OnStartRequest(this, mListenerContext);
|
||||||
observer->OnStopRequest(this, mListenerContext, mStatus);
|
observer->OnStopRequest(this, mListenerContext, mStatus);
|
||||||
|
@ -565,14 +557,6 @@ nsHttpChannel::SetupTransaction()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mEventQ) {
|
|
||||||
// grab a reference to the calling thread's event queue.
|
|
||||||
nsCOMPtr<nsIEventQueueService> eqs;
|
|
||||||
gHttpHandler->GetEventQueueService(getter_AddRefs(eqs));
|
|
||||||
if (eqs)
|
|
||||||
eqs->ResolveEventQueue(NS_CURRENT_EVENTQ, getter_AddRefs(mEventQ));
|
|
||||||
}
|
|
||||||
|
|
||||||
// create the transaction object
|
// create the transaction object
|
||||||
mTransaction = new nsHttpTransaction();
|
mTransaction = new nsHttpTransaction();
|
||||||
if (!mTransaction)
|
if (!mTransaction)
|
||||||
|
@ -2988,8 +2972,18 @@ nsHttpChannel::AsyncOpen(nsIStreamListener *listener, nsISupports *context)
|
||||||
NS_ENSURE_ARG_POINTER(listener);
|
NS_ENSURE_ARG_POINTER(listener);
|
||||||
NS_ENSURE_TRUE(!mIsPending, NS_ERROR_IN_PROGRESS);
|
NS_ENSURE_TRUE(!mIsPending, NS_ERROR_IN_PROGRESS);
|
||||||
|
|
||||||
|
nsresult rv;
|
||||||
|
|
||||||
|
// we want to grab a reference to the calling thread's event queue at
|
||||||
|
// this point. we will proxy all events back to the current thread via
|
||||||
|
// this event queue.
|
||||||
|
if (!mEventQ) {
|
||||||
|
rv = gHttpHandler->GetCurrentEventQ(getter_AddRefs(mEventQ));
|
||||||
|
if (NS_FAILED(rv)) return rv;
|
||||||
|
}
|
||||||
|
|
||||||
PRInt32 port;
|
PRInt32 port;
|
||||||
nsresult rv = mURI->GetPort(&port);
|
rv = mURI->GetPort(&port);
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
|
|
|
@ -430,16 +430,14 @@ nsHttpHandler::GetCacheSession(nsCacheStoragePolicy storagePolicy,
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsHttpHandler::GetEventQueueService(nsIEventQueueService **result)
|
nsHttpHandler::GetCurrentEventQ(nsIEventQueue **result)
|
||||||
{
|
{
|
||||||
if (!mEventQueueService) {
|
if (!mEventQueueService) {
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
mEventQueueService = do_GetService(kEventQueueServiceCID, &rv);
|
mEventQueueService = do_GetService(kEventQueueServiceCID, &rv);
|
||||||
if (NS_FAILED(rv)) return rv;
|
if (NS_FAILED(rv)) return rv;
|
||||||
}
|
}
|
||||||
*result = mEventQueueService;
|
return mEventQueueService->ResolveEventQueue(NS_CURRENT_EVENTQ, result);
|
||||||
NS_ADDREF(*result);
|
|
||||||
return NS_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
|
|
@ -165,7 +165,7 @@ public:
|
||||||
// The HTTP handler caches pointers to specific XPCOM services, and
|
// The HTTP handler caches pointers to specific XPCOM services, and
|
||||||
// provides the following helper routines for accessing those services:
|
// provides the following helper routines for accessing those services:
|
||||||
//
|
//
|
||||||
nsresult GetEventQueueService(nsIEventQueueService **);
|
nsresult GetCurrentEventQ(nsIEventQueue **);
|
||||||
nsresult GetStreamConverterService(nsIStreamConverterService **);
|
nsresult GetStreamConverterService(nsIStreamConverterService **);
|
||||||
nsresult GetMimeService(nsIMIMEService **);
|
nsresult GetMimeService(nsIMIMEService **);
|
||||||
nsresult GetIOService(nsIIOService** service);
|
nsresult GetIOService(nsIIOService** service);
|
||||||
|
|
|
@ -913,9 +913,7 @@ nsHttpTransaction::DeleteSelfOnConsumerThread()
|
||||||
NS_ASSERTION(!mDestroying, "deleting self again");
|
NS_ASSERTION(!mDestroying, "deleting self again");
|
||||||
mDestroying = PR_TRUE;
|
mDestroying = PR_TRUE;
|
||||||
|
|
||||||
gHttpHandler->GetEventQueueService(getter_AddRefs(eqs));
|
gHttpHandler->GetCurrentEventQ(getter_AddRefs(currentEventQ));
|
||||||
if (eqs)
|
|
||||||
eqs->ResolveEventQueue(NS_CURRENT_EVENTQ, getter_AddRefs(currentEventQ));
|
|
||||||
|
|
||||||
if (currentEventQ == mConsumerEventQ)
|
if (currentEventQ == mConsumerEventQ)
|
||||||
delete this;
|
delete this;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче