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