| 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
|
|
|