Index: Source/modules/mediastream/RTCVoidRequestImpl.cpp |
diff --git a/Source/modules/mediastream/RTCVoidRequestImpl.cpp b/Source/modules/mediastream/RTCVoidRequestImpl.cpp |
index f8422d76e3740a6b608caeef9e56a31afb1c61b7..bde034cfd0cc02bddac7ad66d61272ac6d9def54 100644 |
--- a/Source/modules/mediastream/RTCVoidRequestImpl.cpp |
+++ b/Source/modules/mediastream/RTCVoidRequestImpl.cpp |
@@ -38,27 +38,32 @@ |
namespace WebCore { |
-PassRefPtr<RTCVoidRequestImpl> RTCVoidRequestImpl::create(ExecutionContext* context, PassOwnPtr<VoidCallback> successCallback, PassOwnPtr<RTCErrorCallback> errorCallback) |
+PassRefPtr<RTCVoidRequestImpl> RTCVoidRequestImpl::create(ExecutionContext* context, RTCPeerConnection* requester, PassOwnPtr<VoidCallback> successCallback, PassOwnPtr<RTCErrorCallback> errorCallback) |
{ |
- RefPtr<RTCVoidRequestImpl> request = adoptRef(new RTCVoidRequestImpl(context, successCallback, errorCallback)); |
+ RefPtr<RTCVoidRequestImpl> request = adoptRef(new RTCVoidRequestImpl(context, requester, successCallback, errorCallback)); |
request->suspendIfNeeded(); |
return request.release(); |
} |
-RTCVoidRequestImpl::RTCVoidRequestImpl(ExecutionContext* context, PassOwnPtr<VoidCallback> successCallback, PassOwnPtr<RTCErrorCallback> errorCallback) |
+RTCVoidRequestImpl::RTCVoidRequestImpl(ExecutionContext* context, RTCPeerConnection* requester, PassOwnPtr<VoidCallback> successCallback, PassOwnPtr<RTCErrorCallback> errorCallback) |
: ActiveDOMObject(context) |
, m_successCallback(successCallback) |
, m_errorCallback(errorCallback) |
+ , m_requester(requester) |
{ |
+ ASSERT(m_requester); |
} |
RTCVoidRequestImpl::~RTCVoidRequestImpl() |
{ |
+ if (m_requester) |
+ m_requester->requestCompletedCheckIfCallbackShouldFire(); |
} |
void RTCVoidRequestImpl::requestSucceeded() |
{ |
- if (m_successCallback) |
+ bool shouldFireCallback = m_requester ? m_requester->requestCompletedCheckIfCallbackShouldFire() : true; |
+ if (shouldFireCallback && m_successCallback) |
m_successCallback->handleEvent(); |
clear(); |
@@ -66,7 +71,8 @@ void RTCVoidRequestImpl::requestSucceeded() |
void RTCVoidRequestImpl::requestFailed(const String& error) |
{ |
- if (m_errorCallback.get()) |
+ bool shouldFireCallback = m_requester ? m_requester->requestCompletedCheckIfCallbackShouldFire() : true; |
+ if (shouldFireCallback && m_errorCallback.get()) |
m_errorCallback->handleEvent(error); |
clear(); |
@@ -74,6 +80,8 @@ void RTCVoidRequestImpl::requestFailed(const String& error) |
void RTCVoidRequestImpl::stop() |
{ |
+ if (m_requester) |
+ m_requester->requestCompletedCheckIfCallbackShouldFire(); |
clear(); |
} |
@@ -81,6 +89,7 @@ void RTCVoidRequestImpl::clear() |
{ |
m_successCallback.clear(); |
m_errorCallback.clear(); |
+ m_requester = 0; |
} |
} // namespace WebCore |