Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1196)

Side by Side Diff: Source/modules/mediastream/RTCSessionDescriptionRequestImpl.cpp

Issue 329093002: Allow PeerConnection to be garbage collected after close(). (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Use ref counting for pending activity for a async operations. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 23 matching lines...) Expand all
34 34
35 #include "modules/mediastream/RTCErrorCallback.h" 35 #include "modules/mediastream/RTCErrorCallback.h"
36 #include "modules/mediastream/RTCPeerConnection.h" 36 #include "modules/mediastream/RTCPeerConnection.h"
37 #include "modules/mediastream/RTCSessionDescription.h" 37 #include "modules/mediastream/RTCSessionDescription.h"
38 #include "modules/mediastream/RTCSessionDescriptionCallback.h" 38 #include "modules/mediastream/RTCSessionDescriptionCallback.h"
39 #include "public/platform/WebRTCSessionDescription.h" 39 #include "public/platform/WebRTCSessionDescription.h"
40 #include "wtf/RefPtr.h" 40 #include "wtf/RefPtr.h"
41 41
42 namespace WebCore { 42 namespace WebCore {
43 43
44 PassRefPtr<RTCSessionDescriptionRequestImpl> RTCSessionDescriptionRequestImpl::c reate(ExecutionContext* context, PassOwnPtr<RTCSessionDescriptionCallback> succe ssCallback, PassOwnPtr<RTCErrorCallback> errorCallback) 44 PassRefPtr<RTCSessionDescriptionRequestImpl> RTCSessionDescriptionRequestImpl::c reate(ExecutionContext* context, RTCPeerConnection* requester, PassOwnPtr<RTCSes sionDescriptionCallback> successCallback, PassOwnPtr<RTCErrorCallback> errorCall back)
45 { 45 {
46 RefPtr<RTCSessionDescriptionRequestImpl> request = adoptRef(new RTCSessionDe scriptionRequestImpl(context, successCallback, errorCallback)); 46 RefPtr<RTCSessionDescriptionRequestImpl> request = adoptRef(new RTCSessionDe scriptionRequestImpl(context, requester, successCallback, errorCallback));
47 request->suspendIfNeeded(); 47 request->suspendIfNeeded();
48 return request.release(); 48 return request.release();
49 } 49 }
50 50
51 RTCSessionDescriptionRequestImpl::RTCSessionDescriptionRequestImpl(ExecutionCont ext* context, PassOwnPtr<RTCSessionDescriptionCallback> successCallback, PassOwn Ptr<RTCErrorCallback> errorCallback) 51 RTCSessionDescriptionRequestImpl::RTCSessionDescriptionRequestImpl(ExecutionCont ext* context, RTCPeerConnection* requester, PassOwnPtr<RTCSessionDescriptionCall back> successCallback, PassOwnPtr<RTCErrorCallback> errorCallback)
52 : ActiveDOMObject(context) 52 : ActiveDOMObject(context)
53 , m_successCallback(successCallback) 53 , m_successCallback(successCallback)
54 , m_errorCallback(errorCallback) 54 , m_errorCallback(errorCallback)
55 , m_requester(requester)
55 { 56 {
57 ASSERT(m_requester);
56 } 58 }
57 59
58 RTCSessionDescriptionRequestImpl::~RTCSessionDescriptionRequestImpl() 60 RTCSessionDescriptionRequestImpl::~RTCSessionDescriptionRequestImpl()
59 { 61 {
62 if (m_requester)
63 m_requester->requestCompletedCheckIfCallbackShouldFire();
60 } 64 }
61 65
62 void RTCSessionDescriptionRequestImpl::requestSucceeded(const blink::WebRTCSessi onDescription& webSessionDescription) 66 void RTCSessionDescriptionRequestImpl::requestSucceeded(const blink::WebRTCSessi onDescription& webSessionDescription)
63 { 67 {
64 if (m_successCallback) { 68 bool shouldFireCallback = m_requester ? m_requester->requestCompletedCheckIf CallbackShouldFire() : true;
69 if (shouldFireCallback && m_successCallback) {
65 RefPtrWillBeRawPtr<RTCSessionDescription> sessionDescription = RTCSessio nDescription::create(webSessionDescription); 70 RefPtrWillBeRawPtr<RTCSessionDescription> sessionDescription = RTCSessio nDescription::create(webSessionDescription);
66 m_successCallback->handleEvent(sessionDescription.get()); 71 m_successCallback->handleEvent(sessionDescription.get());
67 } 72 }
68 73
69 clear(); 74 clear();
70 } 75 }
71 76
72 void RTCSessionDescriptionRequestImpl::requestFailed(const String& error) 77 void RTCSessionDescriptionRequestImpl::requestFailed(const String& error)
73 { 78 {
74 if (m_errorCallback) 79 bool shouldFireCallback = m_requester ? m_requester->requestCompletedCheckIf CallbackShouldFire() : true;
80 if (shouldFireCallback && m_errorCallback)
75 m_errorCallback->handleEvent(error); 81 m_errorCallback->handleEvent(error);
76 82
77 clear(); 83 clear();
78 } 84 }
79 85
80 void RTCSessionDescriptionRequestImpl::stop() 86 void RTCSessionDescriptionRequestImpl::stop()
81 { 87 {
88 if (m_requester)
89 m_requester->requestCompletedCheckIfCallbackShouldFire();
82 clear(); 90 clear();
83 } 91 }
84 92
85 void RTCSessionDescriptionRequestImpl::clear() 93 void RTCSessionDescriptionRequestImpl::clear()
86 { 94 {
87 m_successCallback.clear(); 95 m_successCallback.clear();
88 m_errorCallback.clear(); 96 m_errorCallback.clear();
97 m_requester = 0;
89 } 98 }
90 99
91 } // namespace WebCore 100 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698