| Index: content/renderer/media/rtc_peer_connection_handler.cc
|
| diff --git a/content/renderer/media/rtc_peer_connection_handler.cc b/content/renderer/media/rtc_peer_connection_handler.cc
|
| index a75f2731a2d5dc90f69f50e5f46411c0ec67dcd6..844e250113fe187285b26de5eeddfe1670e00b24 100644
|
| --- a/content/renderer/media/rtc_peer_connection_handler.cc
|
| +++ b/content/renderer/media/rtc_peer_connection_handler.cc
|
| @@ -171,33 +171,36 @@ static void GetNativeRtcConfiguration(
|
|
|
| class SessionDescriptionRequestTracker {
|
| public:
|
| - SessionDescriptionRequestTracker(RTCPeerConnectionHandler* handler,
|
| - PeerConnectionTracker::Action action)
|
| - : handler_(handler), action_(action) {}
|
| + SessionDescriptionRequestTracker(
|
| + const base::WeakPtr<RTCPeerConnectionHandler>& handler,
|
| + const base::WeakPtr<PeerConnectionTracker>& tracker,
|
| + PeerConnectionTracker::Action action)
|
| + : handler_(handler), tracker_(tracker), action_(action) {}
|
|
|
| void TrackOnSuccess(const webrtc::SessionDescriptionInterface* desc) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| - std::string value;
|
| - if (desc) {
|
| - desc->ToString(&value);
|
| - value = "type: " + desc->type() + ", sdp: " + value;
|
| - }
|
| - if (handler_->peer_connection_tracker()) {
|
| - handler_->peer_connection_tracker()->TrackSessionDescriptionCallback(
|
| - handler_, action_, "OnSuccess", value);
|
| + if (tracker_ && handler_) {
|
| + std::string value;
|
| + if (desc) {
|
| + desc->ToString(&value);
|
| + value = "type: " + desc->type() + ", sdp: " + value;
|
| + }
|
| + tracker_->TrackSessionDescriptionCallback(
|
| + handler_.get(), action_, "OnSuccess", value);
|
| }
|
| }
|
|
|
| void TrackOnFailure(const std::string& error) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| - if (handler_->peer_connection_tracker()) {
|
| - handler_->peer_connection_tracker()->TrackSessionDescriptionCallback(
|
| - handler_, action_, "OnFailure", error);
|
| + if (handler_ && tracker_) {
|
| + tracker_->TrackSessionDescriptionCallback(
|
| + handler_.get(), action_, "OnFailure", error);
|
| }
|
| }
|
|
|
| private:
|
| - RTCPeerConnectionHandler* handler_;
|
| + const base::WeakPtr<RTCPeerConnectionHandler> handler_;
|
| + const base::WeakPtr<PeerConnectionTracker> tracker_;
|
| PeerConnectionTracker::Action action_;
|
| base::ThreadChecker thread_checker_;
|
| };
|
| @@ -210,11 +213,12 @@ class CreateSessionDescriptionRequest
|
| explicit CreateSessionDescriptionRequest(
|
| const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
|
| const blink::WebRTCSessionDescriptionRequest& request,
|
| - RTCPeerConnectionHandler* handler,
|
| + const base::WeakPtr<RTCPeerConnectionHandler>& handler,
|
| + const base::WeakPtr<PeerConnectionTracker>& tracker,
|
| PeerConnectionTracker::Action action)
|
| : main_thread_(main_thread),
|
| webkit_request_(request),
|
| - tracker_(handler, action) {
|
| + tracker_(handler, tracker, action) {
|
| }
|
|
|
| void OnSuccess(webrtc::SessionDescriptionInterface* desc) override {
|
| @@ -255,11 +259,12 @@ class SetSessionDescriptionRequest
|
| explicit SetSessionDescriptionRequest(
|
| const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
|
| const blink::WebRTCVoidRequest& request,
|
| - RTCPeerConnectionHandler* handler,
|
| + const base::WeakPtr<RTCPeerConnectionHandler>& handler,
|
| + const base::WeakPtr<PeerConnectionTracker>& tracker,
|
| PeerConnectionTracker::Action action)
|
| : main_thread_(main_thread),
|
| webkit_request_(request),
|
| - tracker_(handler, action) {
|
| + tracker_(handler, tracker, action) {
|
| }
|
|
|
| void OnSuccess() override {
|
| @@ -618,7 +623,6 @@ RTCPeerConnectionHandler::RTCPeerConnectionHandler(
|
| dependency_factory_(dependency_factory),
|
| frame_(NULL),
|
| signaling_thread_(signaling_thread),
|
| - peer_connection_tracker_(NULL),
|
| num_data_channels_created_(0),
|
| num_local_candidates_ipv4_(0),
|
| num_local_candidates_ipv6_(0),
|
| @@ -688,7 +692,7 @@ bool RTCPeerConnectionHandler::initialize(
|
| DCHECK(frame_);
|
|
|
| peer_connection_tracker_ =
|
| - RenderThreadImpl::current()->peer_connection_tracker();
|
| + RenderThreadImpl::current()->peer_connection_tracker()->AsWeakPtr();
|
|
|
| webrtc::PeerConnectionInterface::RTCConfiguration config;
|
| GetNativeRtcConfiguration(server_configuration, &config);
|
| @@ -717,7 +721,7 @@ bool RTCPeerConnectionHandler::initialize(
|
| bool RTCPeerConnectionHandler::InitializeForTest(
|
| const blink::WebRTCConfiguration& server_configuration,
|
| const blink::WebMediaConstraints& options,
|
| - PeerConnectionTracker* peer_connection_tracker) {
|
| + const base::WeakPtr<PeerConnectionTracker>& peer_connection_tracker) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| webrtc::PeerConnectionInterface::RTCConfiguration config;
|
| GetNativeRtcConfiguration(server_configuration, &config);
|
| @@ -742,7 +746,8 @@ void RTCPeerConnectionHandler::createOffer(
|
|
|
| scoped_refptr<CreateSessionDescriptionRequest> description_request(
|
| new rtc::RefCountedObject<CreateSessionDescriptionRequest>(
|
| - base::ThreadTaskRunnerHandle::Get(), request, this,
|
| + base::ThreadTaskRunnerHandle::Get(), request,
|
| + weak_factory_.GetWeakPtr(), peer_connection_tracker_,
|
| PeerConnectionTracker::ACTION_CREATE_OFFER));
|
|
|
| RTCMediaConstraints constraints(options);
|
| @@ -760,7 +765,8 @@ void RTCPeerConnectionHandler::createOffer(
|
|
|
| scoped_refptr<CreateSessionDescriptionRequest> description_request(
|
| new rtc::RefCountedObject<CreateSessionDescriptionRequest>(
|
| - base::ThreadTaskRunnerHandle::Get(), request, this,
|
| + base::ThreadTaskRunnerHandle::Get(), request,
|
| + weak_factory_.GetWeakPtr(), peer_connection_tracker_,
|
| PeerConnectionTracker::ACTION_CREATE_OFFER));
|
|
|
| RTCMediaConstraints constraints;
|
| @@ -778,7 +784,8 @@ void RTCPeerConnectionHandler::createAnswer(
|
| TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::createAnswer");
|
| scoped_refptr<CreateSessionDescriptionRequest> description_request(
|
| new rtc::RefCountedObject<CreateSessionDescriptionRequest>(
|
| - base::ThreadTaskRunnerHandle::Get(), request, this,
|
| + base::ThreadTaskRunnerHandle::Get(), request,
|
| + weak_factory_.GetWeakPtr(), peer_connection_tracker_,
|
| PeerConnectionTracker::ACTION_CREATE_ANSWER));
|
| RTCMediaConstraints constraints(options);
|
| native_peer_connection_->CreateAnswer(description_request.get(),
|
| @@ -819,7 +826,8 @@ void RTCPeerConnectionHandler::setLocalDescription(
|
|
|
| scoped_refptr<SetSessionDescriptionRequest> set_request(
|
| new rtc::RefCountedObject<SetSessionDescriptionRequest>(
|
| - base::ThreadTaskRunnerHandle::Get(), request, this,
|
| + base::ThreadTaskRunnerHandle::Get(), request,
|
| + weak_factory_.GetWeakPtr(), peer_connection_tracker_,
|
| PeerConnectionTracker::ACTION_SET_LOCAL_DESCRIPTION));
|
|
|
| // TODO(tommi): Run this on the signaling thread.
|
| @@ -856,7 +864,8 @@ void RTCPeerConnectionHandler::setRemoteDescription(
|
|
|
| scoped_refptr<SetSessionDescriptionRequest> set_request(
|
| new rtc::RefCountedObject<SetSessionDescriptionRequest>(
|
| - base::ThreadTaskRunnerHandle::Get(), request, this,
|
| + base::ThreadTaskRunnerHandle::Get(), request,
|
| + weak_factory_.GetWeakPtr(), peer_connection_tracker_,
|
| PeerConnectionTracker::ACTION_SET_REMOTE_DESCRIPTION));
|
| // TODO(tommi): Run this on the signaling thread.
|
| native_peer_connection_->SetRemoteDescription(set_request.get(), native_desc);
|
| @@ -1219,11 +1228,6 @@ void RTCPeerConnectionHandler::OnRenegotiationNeeded() {
|
| client_->negotiationNeeded();
|
| }
|
|
|
| -PeerConnectionTracker* RTCPeerConnectionHandler::peer_connection_tracker() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - return peer_connection_tracker_;
|
| -}
|
| -
|
| void RTCPeerConnectionHandler::OnAddStream(
|
| scoped_ptr<RemoteMediaStreamImpl> stream) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|