mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 07:15:46 +00:00
Bug 783426: Patch 1 - Async DOMRequest Firing
This commit is contained in:
parent
545f5803dd
commit
bc347bb5c8
@ -12,6 +12,7 @@
|
|||||||
#include "nsEventDispatcher.h"
|
#include "nsEventDispatcher.h"
|
||||||
#include "nsDOMEvent.h"
|
#include "nsDOMEvent.h"
|
||||||
#include "nsContentUtils.h"
|
#include "nsContentUtils.h"
|
||||||
|
#include "nsThreadUtils.h"
|
||||||
|
|
||||||
using mozilla::dom::DOMRequest;
|
using mozilla::dom::DOMRequest;
|
||||||
using mozilla::dom::DOMRequestService;
|
using mozilla::dom::DOMRequestService;
|
||||||
@ -222,3 +223,79 @@ DOMRequestService::FireError(nsIDOMDOMRequest* aRequest,
|
|||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class FireSuccessAsyncTask : public nsRunnable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FireSuccessAsyncTask(nsIDOMDOMRequest* aRequest,
|
||||||
|
const jsval& aResult) :
|
||||||
|
mReq(aRequest),
|
||||||
|
mResult(aResult)
|
||||||
|
{
|
||||||
|
JSContext* cx = mReq->GetJSContextForEventHandlers();
|
||||||
|
JS_AddValueRoot(jsc, &mResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult
|
||||||
|
Run()
|
||||||
|
{
|
||||||
|
static_cast<DOMRequest*>(mReq)->FireSuccess(mResult);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
~FireSuccessAsyncTask()
|
||||||
|
{
|
||||||
|
JSContext* cx = mReq->GetJSContextForEventHandlers();
|
||||||
|
JS_RemoveValueRoot(jsc, &mResult);
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
nsIDOMDOMRequest* mReq;
|
||||||
|
jsval mResult;
|
||||||
|
};
|
||||||
|
|
||||||
|
class FireErrorAsyncTask : public nsRunnable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FireErrorAsyncTask(nsIDOMDOMRequest* aRequest,
|
||||||
|
const nsAString& aError) :
|
||||||
|
mReq(aRequest),
|
||||||
|
mError(aError)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult
|
||||||
|
Run()
|
||||||
|
{
|
||||||
|
static_cast<DOMRequest*>(mReq)->FireError(mError);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
nsIDOMDOMRequest* mReq;
|
||||||
|
nsString mError;
|
||||||
|
};
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
DOMRequestService::FireSuccessAsync(nsIDOMDOMRequest* aRequest,
|
||||||
|
const jsval& aResult)
|
||||||
|
{
|
||||||
|
NS_ENSURE_STATE(aRequest);
|
||||||
|
nsCOMPtr<nsIRunnable> asyncTask = new FireSuccessAsyncTask(aRequest, aResult);
|
||||||
|
if (NS_FAILED(NS_DispatchToMainThread(asyncTask))) {
|
||||||
|
NS_WARNING("Failed to dispatch to main thread!");
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
DOMRequestService::FireErrorAsync(nsIDOMDOMRequest* aRequest,
|
||||||
|
const nsAString& aError)
|
||||||
|
{
|
||||||
|
NS_ENSURE_STATE(aRequest);
|
||||||
|
nsCOMPtr<nsIRunnable> asyncTask = new FireErrorAsyncTask(aRequest, aError);
|
||||||
|
if (NS_FAILED(NS_DispatchToMainThread(asyncTask))) {
|
||||||
|
NS_WARNING("Failed to dispatch to main thread!");
|
||||||
|
return NS_ERROR_FAILURE;
|
||||||
|
}
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
@ -21,11 +21,13 @@ interface nsIDOMDOMRequest : nsIDOMEventTarget
|
|||||||
attribute nsIDOMEventListener onerror;
|
attribute nsIDOMEventListener onerror;
|
||||||
};
|
};
|
||||||
|
|
||||||
[scriptable, builtinclass, uuid(eebcdf29-f8fa-4c36-bbc7-2146b1cbaf7b)]
|
[scriptable, builtinclass, uuid(10996de9-e6f6-4058-97bd-45f1fe065eb5)]
|
||||||
interface nsIDOMRequestService : nsISupports
|
interface nsIDOMRequestService : nsISupports
|
||||||
{
|
{
|
||||||
nsIDOMDOMRequest createRequest(in nsIDOMWindow window);
|
nsIDOMDOMRequest createRequest(in nsIDOMWindow window);
|
||||||
|
|
||||||
void fireSuccess(in nsIDOMDOMRequest request, in jsval result);
|
void fireSuccess(in nsIDOMDOMRequest request, in jsval result);
|
||||||
void fireError(in nsIDOMDOMRequest request, in DOMString error);
|
void fireError(in nsIDOMDOMRequest request, in DOMString error);
|
||||||
|
void fireSuccessAsync(in nsIDOMDOMRequest request, in jsval result);
|
||||||
|
void fireErrorAsync(in nsIDOMDOMRequest request, in DOMString error);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user