Index: Source/modules/mediastream/RTCSessionDescriptionRequestImpl.cpp |
diff --git a/Source/modules/mediastream/RTCSessionDescriptionRequestImpl.cpp b/Source/modules/mediastream/RTCSessionDescriptionRequestImpl.cpp |
index 5e9301e2f5d0e46f3a9ee3e82d57b002da2b061e..f7a808ed3706d0185c128e042aa8139f93dcebdf 100644 |
--- a/Source/modules/mediastream/RTCSessionDescriptionRequestImpl.cpp |
+++ b/Source/modules/mediastream/RTCSessionDescriptionRequestImpl.cpp |
@@ -41,27 +41,32 @@ |
namespace WebCore { |
-PassRefPtr<RTCSessionDescriptionRequestImpl> RTCSessionDescriptionRequestImpl::create(ExecutionContext* context, PassOwnPtr<RTCSessionDescriptionCallback> successCallback, PassOwnPtr<RTCErrorCallback> errorCallback) |
+PassRefPtr<RTCSessionDescriptionRequestImpl> RTCSessionDescriptionRequestImpl::create(ExecutionContext* context, RTCPeerConnection* requester, PassOwnPtr<RTCSessionDescriptionCallback> successCallback, PassOwnPtr<RTCErrorCallback> errorCallback) |
{ |
- RefPtr<RTCSessionDescriptionRequestImpl> request = adoptRef(new RTCSessionDescriptionRequestImpl(context, successCallback, errorCallback)); |
+ RefPtr<RTCSessionDescriptionRequestImpl> request = adoptRef(new RTCSessionDescriptionRequestImpl(context, requester, successCallback, errorCallback)); |
request->suspendIfNeeded(); |
return request.release(); |
} |
-RTCSessionDescriptionRequestImpl::RTCSessionDescriptionRequestImpl(ExecutionContext* context, PassOwnPtr<RTCSessionDescriptionCallback> successCallback, PassOwnPtr<RTCErrorCallback> errorCallback) |
+RTCSessionDescriptionRequestImpl::RTCSessionDescriptionRequestImpl(ExecutionContext* context, RTCPeerConnection* requester, PassOwnPtr<RTCSessionDescriptionCallback> successCallback, PassOwnPtr<RTCErrorCallback> errorCallback) |
: ActiveDOMObject(context) |
, m_successCallback(successCallback) |
, m_errorCallback(errorCallback) |
+ , m_requester(requester) |
{ |
+ ASSERT(m_requester); |
} |
RTCSessionDescriptionRequestImpl::~RTCSessionDescriptionRequestImpl() |
{ |
+ if (m_requester) |
+ m_requester->requestCompletedCheckIfCallbackShouldFire(); |
} |
void RTCSessionDescriptionRequestImpl::requestSucceeded(const blink::WebRTCSessionDescription& webSessionDescription) |
{ |
- if (m_successCallback) { |
+ bool shouldFireCallback = m_requester ? m_requester->requestCompletedCheckIfCallbackShouldFire() : true; |
+ if (shouldFireCallback && m_successCallback) { |
RefPtrWillBeRawPtr<RTCSessionDescription> sessionDescription = RTCSessionDescription::create(webSessionDescription); |
m_successCallback->handleEvent(sessionDescription.get()); |
} |
@@ -71,7 +76,8 @@ void RTCSessionDescriptionRequestImpl::requestSucceeded(const blink::WebRTCSessi |
void RTCSessionDescriptionRequestImpl::requestFailed(const String& error) |
{ |
- if (m_errorCallback) |
+ bool shouldFireCallback = m_requester ? m_requester->requestCompletedCheckIfCallbackShouldFire() : true; |
+ if (shouldFireCallback && m_errorCallback) |
m_errorCallback->handleEvent(error); |
clear(); |
@@ -79,6 +85,8 @@ void RTCSessionDescriptionRequestImpl::requestFailed(const String& error) |
void RTCSessionDescriptionRequestImpl::stop() |
{ |
+ if (m_requester) |
+ m_requester->requestCompletedCheckIfCallbackShouldFire(); |
clear(); |
} |
@@ -86,6 +94,7 @@ void RTCSessionDescriptionRequestImpl::clear() |
{ |
m_successCallback.clear(); |
m_errorCallback.clear(); |
+ m_requester = 0; |
} |
} // namespace WebCore |