| OLD | NEW | 
|     1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |     1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|     2 // Use of this source code is governed by a BSD-style license that can be |     2 // Use of this source code is governed by a BSD-style license that can be | 
|     3 // found in the LICENSE file. |     3 // found in the LICENSE file. | 
|     4  |     4  | 
|     5 #include "content/renderer/media/rtc_peer_connection_handler.h" |     5 #include "content/renderer/media/rtc_peer_connection_handler.h" | 
|     6  |     6  | 
|     7 #include <string> |     7 #include <string> | 
|     8 #include <utility> |     8 #include <utility> | 
|     9 #include <vector> |     9 #include <vector> | 
|    10  |    10  | 
| (...skipping 778 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   789  |   789  | 
|   790  private: |   790  private: | 
|   791   const base::WeakPtr<RTCPeerConnectionHandler> handler_; |   791   const base::WeakPtr<RTCPeerConnectionHandler> handler_; | 
|   792   const scoped_refptr<base::SingleThreadTaskRunner> main_thread_; |   792   const scoped_refptr<base::SingleThreadTaskRunner> main_thread_; | 
|   793 }; |   793 }; | 
|   794  |   794  | 
|   795 RTCPeerConnectionHandler::RTCPeerConnectionHandler( |   795 RTCPeerConnectionHandler::RTCPeerConnectionHandler( | 
|   796     blink::WebRTCPeerConnectionHandlerClient* client, |   796     blink::WebRTCPeerConnectionHandlerClient* client, | 
|   797     PeerConnectionDependencyFactory* dependency_factory) |   797     PeerConnectionDependencyFactory* dependency_factory) | 
|   798     : client_(client), |   798     : client_(client), | 
 |   799       is_closed_(false), | 
|   799       dependency_factory_(dependency_factory), |   800       dependency_factory_(dependency_factory), | 
|   800       weak_factory_(this) { |   801       weak_factory_(this) { | 
 |   802   CHECK(client_), | 
|   801   g_peer_connection_handlers.Get().insert(this); |   803   g_peer_connection_handlers.Get().insert(this); | 
|   802 } |   804 } | 
|   803  |   805  | 
|   804 RTCPeerConnectionHandler::~RTCPeerConnectionHandler() { |   806 RTCPeerConnectionHandler::~RTCPeerConnectionHandler() { | 
|   805   DCHECK(thread_checker_.CalledOnValidThread()); |   807   DCHECK(thread_checker_.CalledOnValidThread()); | 
|   806  |   808  | 
|   807   stop(); |   809   stop(); | 
|   808  |   810  | 
|   809   g_peer_connection_handlers.Get().erase(this); |   811   g_peer_connection_handlers.Get().erase(this); | 
|   810   if (peer_connection_tracker_) |   812   if (peer_connection_tracker_) | 
|   811     peer_connection_tracker_->UnregisterPeerConnection(this); |   813     peer_connection_tracker_->UnregisterPeerConnection(this); | 
|   812   STLDeleteValues(&remote_streams_); |   814   STLDeleteValues(&remote_streams_); | 
|   813  |   815  | 
|   814   UMA_HISTOGRAM_COUNTS_10000( |   816   UMA_HISTOGRAM_COUNTS_10000( | 
|   815       "WebRTC.NumDataChannelsPerPeerConnection", num_data_channels_created_); |   817       "WebRTC.NumDataChannelsPerPeerConnection", num_data_channels_created_); | 
|   816 } |   818 } | 
|   817  |   819  | 
|   818 // static |   820 // static | 
|   819 void RTCPeerConnectionHandler::DestructAllHandlers() { |   821 void RTCPeerConnectionHandler::DestructAllHandlers() { | 
 |   822   // Copy g_peer_connection_handlers since releasePeerConnectionHandler will | 
 |   823   // remove an item. | 
|   820   std::set<RTCPeerConnectionHandler*> handlers( |   824   std::set<RTCPeerConnectionHandler*> handlers( | 
|   821       g_peer_connection_handlers.Get().begin(), |   825       g_peer_connection_handlers.Get().begin(), | 
|   822       g_peer_connection_handlers.Get().end()); |   826       g_peer_connection_handlers.Get().end()); | 
|   823   for (auto handler : handlers) { |   827   for (auto* handler : handlers) | 
|   824     if (handler->client_) |   828     handler->client_->releasePeerConnectionHandler(); | 
|   825       handler->client_->releasePeerConnectionHandler(); |  | 
|   826   } |  | 
|   827 } |   829 } | 
|   828  |   830  | 
|   829 // static |   831 // static | 
|   830 void RTCPeerConnectionHandler::ConvertOfferOptionsToConstraints( |   832 void RTCPeerConnectionHandler::ConvertOfferOptionsToConstraints( | 
|   831     const blink::WebRTCOfferOptions& options, |   833     const blink::WebRTCOfferOptions& options, | 
|   832     RTCMediaConstraints* output) { |   834     RTCMediaConstraints* output) { | 
|   833   output->AddMandatory( |   835   output->AddMandatory( | 
|   834       webrtc::MediaConstraintsInterface::kOfferToReceiveAudio, |   836       webrtc::MediaConstraintsInterface::kOfferToReceiveAudio, | 
|   835       options.offerToReceiveAudio() > 0 ? "true" : "false", |   837       options.offerToReceiveAudio() > 0 ? "true" : "false", | 
|   836       true); |   838       true); | 
| (...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1302     const std::string& track_id, |  1304     const std::string& track_id, | 
|  1303     blink::WebMediaStreamSource::Type track_type) { |  1305     blink::WebMediaStreamSource::Type track_type) { | 
|  1304   DCHECK(thread_checker_.CalledOnValidThread()); |  1306   DCHECK(thread_checker_.CalledOnValidThread()); | 
|  1305   signaling_thread()->PostTask(FROM_HERE, |  1307   signaling_thread()->PostTask(FROM_HERE, | 
|  1306       base::Bind(&GetStatsOnSignalingThread, native_peer_connection_, level, |  1308       base::Bind(&GetStatsOnSignalingThread, native_peer_connection_, level, | 
|  1307                  make_scoped_refptr(observer), track_id, track_type)); |  1309                  make_scoped_refptr(observer), track_id, track_type)); | 
|  1308 } |  1310 } | 
|  1309  |  1311  | 
|  1310 void RTCPeerConnectionHandler::CloseClientPeerConnection() { |  1312 void RTCPeerConnectionHandler::CloseClientPeerConnection() { | 
|  1311   DCHECK(thread_checker_.CalledOnValidThread()); |  1313   DCHECK(thread_checker_.CalledOnValidThread()); | 
|  1312   if (client_) |  1314   if (!is_closed_) | 
|  1313     client_->closePeerConnection(); |  1315     client_->closePeerConnection(); | 
|  1314 } |  1316 } | 
|  1315  |  1317  | 
|  1316 blink::WebRTCDataChannelHandler* RTCPeerConnectionHandler::createDataChannel( |  1318 blink::WebRTCDataChannelHandler* RTCPeerConnectionHandler::createDataChannel( | 
|  1317     const blink::WebString& label, const blink::WebRTCDataChannelInit& init) { |  1319     const blink::WebString& label, const blink::WebRTCDataChannelInit& init) { | 
|  1318   DCHECK(thread_checker_.CalledOnValidThread()); |  1320   DCHECK(thread_checker_.CalledOnValidThread()); | 
|  1319   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::createDataChannel"); |  1321   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::createDataChannel"); | 
|  1320   DVLOG(1) << "createDataChannel label " |  1322   DVLOG(1) << "createDataChannel label " | 
|  1321            << base::UTF16ToUTF8(base::StringPiece16(label)); |  1323            << base::UTF16ToUTF8(base::StringPiece16(label)); | 
|  1322  |  1324  | 
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1373   if (peer_connection_tracker_) |  1375   if (peer_connection_tracker_) | 
|  1374     peer_connection_tracker_->TrackCreateDTMFSender(this, track); |  1376     peer_connection_tracker_->TrackCreateDTMFSender(this, track); | 
|  1375  |  1377  | 
|  1376   return new RtcDtmfSenderHandler(sender); |  1378   return new RtcDtmfSenderHandler(sender); | 
|  1377 } |  1379 } | 
|  1378  |  1380  | 
|  1379 void RTCPeerConnectionHandler::stop() { |  1381 void RTCPeerConnectionHandler::stop() { | 
|  1380   DCHECK(thread_checker_.CalledOnValidThread()); |  1382   DCHECK(thread_checker_.CalledOnValidThread()); | 
|  1381   DVLOG(1) << "RTCPeerConnectionHandler::stop"; |  1383   DVLOG(1) << "RTCPeerConnectionHandler::stop"; | 
|  1382  |  1384  | 
|  1383   if (!client_ || !native_peer_connection_.get()) |  1385   if (is_closed_ || !native_peer_connection_.get()) | 
|  1384     return;  // Already stopped. |  1386     return;  // Already stopped. | 
|  1385  |  1387  | 
|  1386   if (peer_connection_tracker_) |  1388   if (peer_connection_tracker_) | 
|  1387     peer_connection_tracker_->TrackStop(this); |  1389     peer_connection_tracker_->TrackStop(this); | 
|  1388  |  1390  | 
|  1389   native_peer_connection_->Close(); |  1391   native_peer_connection_->Close(); | 
|  1390  |  1392  | 
|  1391   // The client_ pointer is not considered valid after this point and no further |  1393   // This object may no longer forward call backs to blink. | 
|  1392   // callbacks must be made. |  1394   is_closed_ = true; | 
|  1393   client_ = nullptr; |  | 
|  1394 } |  1395 } | 
|  1395  |  1396  | 
|  1396 void RTCPeerConnectionHandler::OnSignalingChange( |  1397 void RTCPeerConnectionHandler::OnSignalingChange( | 
|  1397     webrtc::PeerConnectionInterface::SignalingState new_state) { |  1398     webrtc::PeerConnectionInterface::SignalingState new_state) { | 
|  1398   DCHECK(thread_checker_.CalledOnValidThread()); |  1399   DCHECK(thread_checker_.CalledOnValidThread()); | 
|  1399   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnSignalingChange"); |  1400   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnSignalingChange"); | 
|  1400  |  1401  | 
|  1401   blink::WebRTCPeerConnectionHandlerClient::SignalingState state = |  1402   blink::WebRTCPeerConnectionHandlerClient::SignalingState state = | 
|  1402       GetWebKitSignalingState(new_state); |  1403       GetWebKitSignalingState(new_state); | 
|  1403   if (peer_connection_tracker_) |  1404   if (peer_connection_tracker_) | 
|  1404     peer_connection_tracker_->TrackSignalingStateChange(this, state); |  1405     peer_connection_tracker_->TrackSignalingStateChange(this, state); | 
|  1405   if (client_) |  1406   if (!is_closed_) | 
|  1406     client_->didChangeSignalingState(state); |  1407     client_->didChangeSignalingState(state); | 
|  1407 } |  1408 } | 
|  1408  |  1409  | 
|  1409 // Called any time the IceConnectionState changes |  1410 // Called any time the IceConnectionState changes | 
|  1410 void RTCPeerConnectionHandler::OnIceConnectionChange( |  1411 void RTCPeerConnectionHandler::OnIceConnectionChange( | 
|  1411     webrtc::PeerConnectionInterface::IceConnectionState new_state) { |  1412     webrtc::PeerConnectionInterface::IceConnectionState new_state) { | 
|  1412   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnIceConnectionChange"); |  1413   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnIceConnectionChange"); | 
|  1413   DCHECK(thread_checker_.CalledOnValidThread()); |  1414   DCHECK(thread_checker_.CalledOnValidThread()); | 
|  1414   ReportICEState(new_state); |  1415   ReportICEState(new_state); | 
|  1415   if (new_state == webrtc::PeerConnectionInterface::kIceConnectionChecking) { |  1416   if (new_state == webrtc::PeerConnectionInterface::kIceConnectionChecking) { | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
|  1431         "WebRTC.PeerConnection.TimeToConnect", |  1432         "WebRTC.PeerConnection.TimeToConnect", | 
|  1432         base::TimeTicks::Now() - ice_connection_checking_start_); |  1433         base::TimeTicks::Now() - ice_connection_checking_start_); | 
|  1433     } |  1434     } | 
|  1434   } |  1435   } | 
|  1435  |  1436  | 
|  1436   track_metrics_.IceConnectionChange(new_state); |  1437   track_metrics_.IceConnectionChange(new_state); | 
|  1437   blink::WebRTCPeerConnectionHandlerClient::ICEConnectionState state = |  1438   blink::WebRTCPeerConnectionHandlerClient::ICEConnectionState state = | 
|  1438       GetWebKitIceConnectionState(new_state); |  1439       GetWebKitIceConnectionState(new_state); | 
|  1439   if (peer_connection_tracker_) |  1440   if (peer_connection_tracker_) | 
|  1440     peer_connection_tracker_->TrackIceConnectionStateChange(this, state); |  1441     peer_connection_tracker_->TrackIceConnectionStateChange(this, state); | 
|  1441   if(client_) |  1442   if (!is_closed_) | 
|  1442     client_->didChangeICEConnectionState(state); |  1443     client_->didChangeICEConnectionState(state); | 
|  1443 } |  1444 } | 
|  1444  |  1445  | 
|  1445 // Called any time the IceGatheringState changes |  1446 // Called any time the IceGatheringState changes | 
|  1446 void RTCPeerConnectionHandler::OnIceGatheringChange( |  1447 void RTCPeerConnectionHandler::OnIceGatheringChange( | 
|  1447     webrtc::PeerConnectionInterface::IceGatheringState new_state) { |  1448     webrtc::PeerConnectionInterface::IceGatheringState new_state) { | 
|  1448   DCHECK(thread_checker_.CalledOnValidThread()); |  1449   DCHECK(thread_checker_.CalledOnValidThread()); | 
|  1449   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnIceGatheringChange"); |  1450   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnIceGatheringChange"); | 
|  1450  |  1451  | 
|  1451   if (new_state == webrtc::PeerConnectionInterface::kIceGatheringComplete) { |  1452   if (new_state == webrtc::PeerConnectionInterface::kIceGatheringComplete) { | 
|  1452     // If ICE gathering is completed, generate a NULL ICE candidate, |  1453     // If ICE gathering is completed, generate a NULL ICE candidate, | 
|  1453     // to signal end of candidates. |  1454     // to signal end of candidates. | 
|  1454     if (client_) { |  1455     if (!is_closed_) { | 
|  1455       blink::WebRTCICECandidate null_candidate; |  1456       blink::WebRTCICECandidate null_candidate; | 
|  1456       client_->didGenerateICECandidate(null_candidate); |  1457       client_->didGenerateICECandidate(null_candidate); | 
|  1457     } |  1458     } | 
|  1458  |  1459  | 
|  1459     UMA_HISTOGRAM_COUNTS_100("WebRTC.PeerConnection.IPv4LocalCandidates", |  1460     UMA_HISTOGRAM_COUNTS_100("WebRTC.PeerConnection.IPv4LocalCandidates", | 
|  1460                              num_local_candidates_ipv4_); |  1461                              num_local_candidates_ipv4_); | 
|  1461  |  1462  | 
|  1462     UMA_HISTOGRAM_COUNTS_100("WebRTC.PeerConnection.IPv6LocalCandidates", |  1463     UMA_HISTOGRAM_COUNTS_100("WebRTC.PeerConnection.IPv6LocalCandidates", | 
|  1463                              num_local_candidates_ipv6_); |  1464                              num_local_candidates_ipv6_); | 
|  1464   } else if (new_state == |  1465   } else if (new_state == | 
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1501  |  1502  | 
|  1502   if (peer_connection_tracker_) { |  1503   if (peer_connection_tracker_) { | 
|  1503     peer_connection_tracker_->TrackAddStream( |  1504     peer_connection_tracker_->TrackAddStream( | 
|  1504         this, s->webkit_stream(), PeerConnectionTracker::SOURCE_REMOTE); |  1505         this, s->webkit_stream(), PeerConnectionTracker::SOURCE_REMOTE); | 
|  1505   } |  1506   } | 
|  1506  |  1507  | 
|  1507   PerSessionWebRTCAPIMetrics::GetInstance()->IncrementStreamCounter(); |  1508   PerSessionWebRTCAPIMetrics::GetInstance()->IncrementStreamCounter(); | 
|  1508  |  1509  | 
|  1509   track_metrics_.AddStream(MediaStreamTrackMetrics::RECEIVED_STREAM, |  1510   track_metrics_.AddStream(MediaStreamTrackMetrics::RECEIVED_STREAM, | 
|  1510                            s->webrtc_stream().get()); |  1511                            s->webrtc_stream().get()); | 
|  1511   if (client_) |  1512   if (!is_closed_) | 
|  1512     client_->didAddRemoteStream(s->webkit_stream()); |  1513     client_->didAddRemoteStream(s->webkit_stream()); | 
|  1513 } |  1514 } | 
|  1514  |  1515  | 
|  1515 void RTCPeerConnectionHandler::OnRemoveStream( |  1516 void RTCPeerConnectionHandler::OnRemoveStream( | 
|  1516     const scoped_refptr<webrtc::MediaStreamInterface>& stream) { |  1517     const scoped_refptr<webrtc::MediaStreamInterface>& stream) { | 
|  1517   DCHECK(thread_checker_.CalledOnValidThread()); |  1518   DCHECK(thread_checker_.CalledOnValidThread()); | 
|  1518   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnRemoveStreamImpl"); |  1519   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnRemoveStreamImpl"); | 
|  1519   RemoteStreamMap::iterator it = remote_streams_.find(stream.get()); |  1520   RemoteStreamMap::iterator it = remote_streams_.find(stream.get()); | 
|  1520   if (it == remote_streams_.end()) { |  1521   if (it == remote_streams_.end()) { | 
|  1521     NOTREACHED() << "Stream not found"; |  1522     NOTREACHED() << "Stream not found"; | 
|  1522     return; |  1523     return; | 
|  1523   } |  1524   } | 
|  1524  |  1525  | 
|  1525   track_metrics_.RemoveStream(MediaStreamTrackMetrics::RECEIVED_STREAM, |  1526   track_metrics_.RemoveStream(MediaStreamTrackMetrics::RECEIVED_STREAM, | 
|  1526                               stream.get()); |  1527                               stream.get()); | 
|  1527   PerSessionWebRTCAPIMetrics::GetInstance()->DecrementStreamCounter(); |  1528   PerSessionWebRTCAPIMetrics::GetInstance()->DecrementStreamCounter(); | 
|  1528  |  1529  | 
|  1529   scoped_ptr<RemoteMediaStreamImpl> remote_stream(it->second); |  1530   scoped_ptr<RemoteMediaStreamImpl> remote_stream(it->second); | 
|  1530   const blink::WebMediaStream& webkit_stream = remote_stream->webkit_stream(); |  1531   const blink::WebMediaStream& webkit_stream = remote_stream->webkit_stream(); | 
|  1531   DCHECK(!webkit_stream.isNull()); |  1532   DCHECK(!webkit_stream.isNull()); | 
|  1532   remote_streams_.erase(it); |  1533   remote_streams_.erase(it); | 
|  1533  |  1534  | 
|  1534   if (peer_connection_tracker_) { |  1535   if (peer_connection_tracker_) { | 
|  1535     peer_connection_tracker_->TrackRemoveStream( |  1536     peer_connection_tracker_->TrackRemoveStream( | 
|  1536         this, webkit_stream, PeerConnectionTracker::SOURCE_REMOTE); |  1537         this, webkit_stream, PeerConnectionTracker::SOURCE_REMOTE); | 
|  1537   } |  1538   } | 
|  1538  |  1539  | 
|  1539   if (client_) |  1540   if (!is_closed_) | 
|  1540     client_->didRemoveRemoteStream(webkit_stream); |  1541     client_->didRemoveRemoteStream(webkit_stream); | 
|  1541 } |  1542 } | 
|  1542  |  1543  | 
|  1543 void RTCPeerConnectionHandler::OnDataChannel( |  1544 void RTCPeerConnectionHandler::OnDataChannel( | 
|  1544     scoped_ptr<RtcDataChannelHandler> handler) { |  1545     scoped_ptr<RtcDataChannelHandler> handler) { | 
|  1545   DCHECK(thread_checker_.CalledOnValidThread()); |  1546   DCHECK(thread_checker_.CalledOnValidThread()); | 
|  1546   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnDataChannelImpl"); |  1547   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnDataChannelImpl"); | 
|  1547  |  1548  | 
|  1548   if (peer_connection_tracker_) { |  1549   if (peer_connection_tracker_) { | 
|  1549     peer_connection_tracker_->TrackCreateDataChannel( |  1550     peer_connection_tracker_->TrackCreateDataChannel( | 
|  1550         this, handler->channel().get(), PeerConnectionTracker::SOURCE_REMOTE); |  1551         this, handler->channel().get(), PeerConnectionTracker::SOURCE_REMOTE); | 
|  1551   } |  1552   } | 
|  1552  |  1553  | 
|  1553   if (client_) |  1554   if (!is_closed_) | 
|  1554     client_->didAddRemoteDataChannel(handler.release()); |  1555     client_->didAddRemoteDataChannel(handler.release()); | 
|  1555 } |  1556 } | 
|  1556  |  1557  | 
|  1557 void RTCPeerConnectionHandler::OnIceCandidate( |  1558 void RTCPeerConnectionHandler::OnIceCandidate( | 
|  1558     const std::string& sdp, const std::string& sdp_mid, int sdp_mline_index, |  1559     const std::string& sdp, const std::string& sdp_mid, int sdp_mline_index, | 
|  1559     int component, int address_family) { |  1560     int component, int address_family) { | 
|  1560   DCHECK(thread_checker_.CalledOnValidThread()); |  1561   DCHECK(thread_checker_.CalledOnValidThread()); | 
|  1561   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnIceCandidateImpl"); |  1562   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnIceCandidateImpl"); | 
|  1562   blink::WebRTCICECandidate web_candidate; |  1563   blink::WebRTCICECandidate web_candidate; | 
|  1563   web_candidate.initialize(base::UTF8ToUTF16(sdp), |  1564   web_candidate.initialize(base::UTF8ToUTF16(sdp), | 
|  1564                            base::UTF8ToUTF16(sdp_mid), |  1565                            base::UTF8ToUTF16(sdp_mid), | 
|  1565                            sdp_mline_index); |  1566                            sdp_mline_index); | 
|  1566   if (peer_connection_tracker_) { |  1567   if (peer_connection_tracker_) { | 
|  1567     peer_connection_tracker_->TrackAddIceCandidate( |  1568     peer_connection_tracker_->TrackAddIceCandidate( | 
|  1568         this, web_candidate, PeerConnectionTracker::SOURCE_LOCAL, true); |  1569         this, web_candidate, PeerConnectionTracker::SOURCE_LOCAL, true); | 
|  1569   } |  1570   } | 
|  1570  |  1571  | 
|  1571   // Only the first m line's first component is tracked to avoid |  1572   // Only the first m line's first component is tracked to avoid | 
|  1572   // miscounting when doing BUNDLE or rtcp mux. |  1573   // miscounting when doing BUNDLE or rtcp mux. | 
|  1573   if (sdp_mline_index == 0 && component == 1) { |  1574   if (sdp_mline_index == 0 && component == 1) { | 
|  1574     if (address_family == AF_INET) { |  1575     if (address_family == AF_INET) { | 
|  1575       ++num_local_candidates_ipv4_; |  1576       ++num_local_candidates_ipv4_; | 
|  1576     } else if (address_family == AF_INET6) { |  1577     } else if (address_family == AF_INET6) { | 
|  1577       ++num_local_candidates_ipv6_; |  1578       ++num_local_candidates_ipv6_; | 
|  1578     } else { |  1579     } else { | 
|  1579       NOTREACHED(); |  1580       NOTREACHED(); | 
|  1580     } |  1581     } | 
|  1581   } |  1582   } | 
|  1582   if (client_) |  1583   if (!is_closed_) | 
|  1583     client_->didGenerateICECandidate(web_candidate); |  1584     client_->didGenerateICECandidate(web_candidate); | 
|  1584 } |  1585 } | 
|  1585  |  1586  | 
|  1586 webrtc::SessionDescriptionInterface* |  1587 webrtc::SessionDescriptionInterface* | 
|  1587 RTCPeerConnectionHandler::CreateNativeSessionDescription( |  1588 RTCPeerConnectionHandler::CreateNativeSessionDescription( | 
|  1588     const std::string& sdp, const std::string& type, |  1589     const std::string& sdp, const std::string& type, | 
|  1589     webrtc::SdpParseError* error) { |  1590     webrtc::SdpParseError* error) { | 
|  1590   webrtc::SessionDescriptionInterface* native_desc = |  1591   webrtc::SessionDescriptionInterface* native_desc = | 
|  1591       dependency_factory_->CreateSessionDescription(type, sdp, error); |  1592       dependency_factory_->CreateSessionDescription(type, sdp, error); | 
|  1592  |  1593  | 
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1663 } |  1664 } | 
|  1664  |  1665  | 
|  1665 void RTCPeerConnectionHandler::ResetUMAStats() { |  1666 void RTCPeerConnectionHandler::ResetUMAStats() { | 
|  1666   DCHECK(thread_checker_.CalledOnValidThread()); |  1667   DCHECK(thread_checker_.CalledOnValidThread()); | 
|  1667   num_local_candidates_ipv6_ = 0; |  1668   num_local_candidates_ipv6_ = 0; | 
|  1668   num_local_candidates_ipv4_ = 0; |  1669   num_local_candidates_ipv4_ = 0; | 
|  1669   ice_connection_checking_start_ = base::TimeTicks(); |  1670   ice_connection_checking_start_ = base::TimeTicks(); | 
|  1670   memset(ice_state_seen_, 0, sizeof(ice_state_seen_)); |  1671   memset(ice_state_seen_, 0, sizeof(ice_state_seen_)); | 
|  1671 } |  1672 } | 
|  1672 }  // namespace content |  1673 }  // namespace content | 
| OLD | NEW |