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

Side by Side Diff: content/renderer/media/rtc_peer_connection_handler.cc

Issue 2584893002: Use explicit WebString <-> string16 conversion methods in media files (Closed)
Patch Set: . Created 4 years 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
OLDNEW
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.h> 7 #include <string.h>
8 8
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 return WebRTCPeerConnectionHandlerClient::SignalingStateClosed; 131 return WebRTCPeerConnectionHandlerClient::SignalingStateClosed;
132 default: 132 default:
133 NOTREACHED(); 133 NOTREACHED();
134 return WebRTCPeerConnectionHandlerClient::SignalingStateClosed; 134 return WebRTCPeerConnectionHandlerClient::SignalingStateClosed;
135 } 135 }
136 } 136 }
137 137
138 blink::WebRTCSessionDescription CreateWebKitSessionDescription( 138 blink::WebRTCSessionDescription CreateWebKitSessionDescription(
139 const std::string& sdp, const std::string& type) { 139 const std::string& sdp, const std::string& type) {
140 blink::WebRTCSessionDescription description; 140 blink::WebRTCSessionDescription description;
141 description.initialize(base::UTF8ToUTF16(type), base::UTF8ToUTF16(sdp)); 141 description.initialize(blink::WebString::fromUTF8(type),
142 blink::WebString::fromUTF8(sdp));
142 return description; 143 return description;
143 } 144 }
144 145
145 blink::WebRTCSessionDescription 146 blink::WebRTCSessionDescription
146 CreateWebKitSessionDescription( 147 CreateWebKitSessionDescription(
147 const webrtc::SessionDescriptionInterface* native_desc) { 148 const webrtc::SessionDescriptionInterface* native_desc) {
148 if (!native_desc) { 149 if (!native_desc) {
149 LOG(ERROR) << "Native session description is null."; 150 LOG(ERROR) << "Native session description is null.";
150 return blink::WebRTCSessionDescription(); 151 return blink::WebRTCSessionDescription();
151 } 152 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 // |blink_config| replace the corresponding fields in |webrtc_config|, but 194 // |blink_config| replace the corresponding fields in |webrtc_config|, but
194 // fields that only exist in |webrtc_config| are left alone. 195 // fields that only exist in |webrtc_config| are left alone.
195 void GetNativeRtcConfiguration( 196 void GetNativeRtcConfiguration(
196 const blink::WebRTCConfiguration& blink_config, 197 const blink::WebRTCConfiguration& blink_config,
197 webrtc::PeerConnectionInterface::RTCConfiguration* webrtc_config) { 198 webrtc::PeerConnectionInterface::RTCConfiguration* webrtc_config) {
198 DCHECK(webrtc_config); 199 DCHECK(webrtc_config);
199 200
200 webrtc_config->servers.clear(); 201 webrtc_config->servers.clear();
201 for (const blink::WebRTCIceServer& blink_server : blink_config.iceServers) { 202 for (const blink::WebRTCIceServer& blink_server : blink_config.iceServers) {
202 webrtc::PeerConnectionInterface::IceServer server; 203 webrtc::PeerConnectionInterface::IceServer server;
203 server.username = 204 server.username = blink_server.username.utf8();
204 base::UTF16ToUTF8(base::StringPiece16(blink_server.username)); 205 server.password = blink_server.credential.utf8();
205 server.password =
206 base::UTF16ToUTF8(base::StringPiece16(blink_server.credential));
207 server.uri = blink_server.url.string().utf8(); 206 server.uri = blink_server.url.string().utf8();
208 webrtc_config->servers.push_back(server); 207 webrtc_config->servers.push_back(server);
209 } 208 }
210 209
211 switch (blink_config.iceTransportPolicy) { 210 switch (blink_config.iceTransportPolicy) {
212 case blink::WebRTCIceTransportPolicy::kNone: 211 case blink::WebRTCIceTransportPolicy::kNone:
213 webrtc_config->type = webrtc::PeerConnectionInterface::kNone; 212 webrtc_config->type = webrtc::PeerConnectionInterface::kNone;
214 break; 213 break;
215 case blink::WebRTCIceTransportPolicy::kRelay: 214 case blink::WebRTCIceTransportPolicy::kRelay:
216 webrtc_config->type = webrtc::PeerConnectionInterface::kRelay; 215 webrtc_config->type = webrtc::PeerConnectionInterface::kRelay;
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 delete desc; 381 delete desc;
383 } 382 }
384 void OnFailure(const std::string& error) override { 383 void OnFailure(const std::string& error) override {
385 if (!main_thread_->BelongsToCurrentThread()) { 384 if (!main_thread_->BelongsToCurrentThread()) {
386 main_thread_->PostTask(FROM_HERE, 385 main_thread_->PostTask(FROM_HERE,
387 base::Bind(&CreateSessionDescriptionRequest::OnFailure, this, error)); 386 base::Bind(&CreateSessionDescriptionRequest::OnFailure, this, error));
388 return; 387 return;
389 } 388 }
390 389
391 tracker_.TrackOnFailure(error); 390 tracker_.TrackOnFailure(error);
392 webkit_request_.requestFailed(base::UTF8ToUTF16(error)); 391 webkit_request_.requestFailed(blink::WebString::fromUTF8(error));
393 webkit_request_.reset(); 392 webkit_request_.reset();
394 } 393 }
395 394
396 protected: 395 protected:
397 ~CreateSessionDescriptionRequest() override { 396 ~CreateSessionDescriptionRequest() override {
398 // This object is reference counted and its callback methods |OnSuccess| and 397 // This object is reference counted and its callback methods |OnSuccess| and
399 // |OnFailure| will be invoked on libjingle's signaling thread and posted to 398 // |OnFailure| will be invoked on libjingle's signaling thread and posted to
400 // the main thread. Since the main thread may complete before the signaling 399 // the main thread. Since the main thread may complete before the signaling
401 // thread has deferenced this object there is no guarantee that this object 400 // thread has deferenced this object there is no guarantee that this object
402 // is destructed on the main thread. 401 // is destructed on the main thread.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 webkit_request_.requestSucceeded(); 434 webkit_request_.requestSucceeded();
436 webkit_request_.reset(); 435 webkit_request_.reset();
437 } 436 }
438 void OnFailure(const std::string& error) override { 437 void OnFailure(const std::string& error) override {
439 if (!main_thread_->BelongsToCurrentThread()) { 438 if (!main_thread_->BelongsToCurrentThread()) {
440 main_thread_->PostTask(FROM_HERE, 439 main_thread_->PostTask(FROM_HERE,
441 base::Bind(&SetSessionDescriptionRequest::OnFailure, this, error)); 440 base::Bind(&SetSessionDescriptionRequest::OnFailure, this, error));
442 return; 441 return;
443 } 442 }
444 tracker_.TrackOnFailure(error); 443 tracker_.TrackOnFailure(error);
445 webkit_request_.requestFailed(base::UTF8ToUTF16(error)); 444 webkit_request_.requestFailed(blink::WebString::fromUTF8(error));
446 webkit_request_.reset(); 445 webkit_request_.reset();
447 } 446 }
448 447
449 protected: 448 protected:
450 ~SetSessionDescriptionRequest() override { 449 ~SetSessionDescriptionRequest() override {
451 // This object is reference counted and its callback methods |OnSuccess| and 450 // This object is reference counted and its callback methods |OnSuccess| and
452 // |OnFailure| will be invoked on libjingle's signaling thread and posted to 451 // |OnFailure| will be invoked on libjingle's signaling thread and posted to
453 // the main thread. Since the main thread may complete before the signaling 452 // the main thread. Since the main thread may complete before the signaling
454 // thread has deferenced this object there is no guarantee that this object 453 // thread has deferenced this object there is no guarantee that this object
455 // is destructed on the main thread. 454 // is destructed on the main thread.
(...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after
1236 DCHECK(native_desc); 1235 DCHECK(native_desc);
1237 return native_desc->type() == "offer" || native_desc->type() == "answer"; 1236 return native_desc->type() == "offer" || native_desc->type() == "answer";
1238 } 1237 }
1239 1238
1240 void RTCPeerConnectionHandler::setLocalDescription( 1239 void RTCPeerConnectionHandler::setLocalDescription(
1241 const blink::WebRTCVoidRequest& request, 1240 const blink::WebRTCVoidRequest& request,
1242 const blink::WebRTCSessionDescription& description) { 1241 const blink::WebRTCSessionDescription& description) {
1243 DCHECK(thread_checker_.CalledOnValidThread()); 1242 DCHECK(thread_checker_.CalledOnValidThread());
1244 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::setLocalDescription"); 1243 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::setLocalDescription");
1245 1244
1246 std::string sdp = base::UTF16ToUTF8(base::StringPiece16(description.sdp())); 1245 std::string sdp = description.sdp().utf8();
1247 std::string type = 1246 std::string type = description.type().utf8();
1248 base::UTF16ToUTF8(base::StringPiece16(description.type()));
1249 1247
1250 webrtc::SdpParseError error; 1248 webrtc::SdpParseError error;
1251 // Since CreateNativeSessionDescription uses the dependency factory, we need 1249 // Since CreateNativeSessionDescription uses the dependency factory, we need
1252 // to make this call on the current thread to be safe. 1250 // to make this call on the current thread to be safe.
1253 webrtc::SessionDescriptionInterface* native_desc = 1251 webrtc::SessionDescriptionInterface* native_desc =
1254 CreateNativeSessionDescription(sdp, type, &error); 1252 CreateNativeSessionDescription(sdp, type, &error);
1255 if (!native_desc) { 1253 if (!native_desc) {
1256 std::string reason_str = "Failed to parse SessionDescription. "; 1254 std::string reason_str = "Failed to parse SessionDescription. ";
1257 reason_str.append(error.line); 1255 reason_str.append(error.line);
1258 reason_str.append(" "); 1256 reason_str.append(" ");
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1290 native_peer_connection_, base::RetainedRef(set_request), 1288 native_peer_connection_, base::RetainedRef(set_request),
1291 base::Unretained(native_desc)), 1289 base::Unretained(native_desc)),
1292 "SetLocalDescription")); 1290 "SetLocalDescription"));
1293 } 1291 }
1294 1292
1295 void RTCPeerConnectionHandler::setRemoteDescription( 1293 void RTCPeerConnectionHandler::setRemoteDescription(
1296 const blink::WebRTCVoidRequest& request, 1294 const blink::WebRTCVoidRequest& request,
1297 const blink::WebRTCSessionDescription& description) { 1295 const blink::WebRTCSessionDescription& description) {
1298 DCHECK(thread_checker_.CalledOnValidThread()); 1296 DCHECK(thread_checker_.CalledOnValidThread());
1299 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::setRemoteDescription"); 1297 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::setRemoteDescription");
1300 std::string sdp = base::UTF16ToUTF8(base::StringPiece16(description.sdp())); 1298 std::string sdp = description.sdp().utf8();
1301 std::string type = 1299 std::string type = description.type().utf8();
1302 base::UTF16ToUTF8(base::StringPiece16(description.type()));
1303 1300
1304 webrtc::SdpParseError error; 1301 webrtc::SdpParseError error;
1305 // Since CreateNativeSessionDescription uses the dependency factory, we need 1302 // Since CreateNativeSessionDescription uses the dependency factory, we need
1306 // to make this call on the current thread to be safe. 1303 // to make this call on the current thread to be safe.
1307 webrtc::SessionDescriptionInterface* native_desc = 1304 webrtc::SessionDescriptionInterface* native_desc =
1308 CreateNativeSessionDescription(sdp, type, &error); 1305 CreateNativeSessionDescription(sdp, type, &error);
1309 if (!native_desc) { 1306 if (!native_desc) {
1310 std::string reason_str = "Failed to parse SessionDescription. "; 1307 std::string reason_str = "Failed to parse SessionDescription. ";
1311 reason_str.append(error.line); 1308 reason_str.append(error.line);
1312 reason_str.append(" "); 1309 reason_str.append(" ");
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1420 weak_factory_.GetWeakPtr(), request, result)); 1417 weak_factory_.GetWeakPtr(), request, result));
1421 // On failure callback will be triggered. 1418 // On failure callback will be triggered.
1422 return true; 1419 return true;
1423 } 1420 }
1424 1421
1425 bool RTCPeerConnectionHandler::addICECandidate( 1422 bool RTCPeerConnectionHandler::addICECandidate(
1426 const blink::WebRTCICECandidate& candidate) { 1423 const blink::WebRTCICECandidate& candidate) {
1427 DCHECK(thread_checker_.CalledOnValidThread()); 1424 DCHECK(thread_checker_.CalledOnValidThread());
1428 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::addICECandidate"); 1425 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::addICECandidate");
1429 std::unique_ptr<webrtc::IceCandidateInterface> native_candidate( 1426 std::unique_ptr<webrtc::IceCandidateInterface> native_candidate(
1430 dependency_factory_->CreateIceCandidate( 1427 dependency_factory_->CreateIceCandidate(candidate.sdpMid().utf8(),
1431 base::UTF16ToUTF8(base::StringPiece16(candidate.sdpMid())), 1428 candidate.sdpMLineIndex(),
1432 candidate.sdpMLineIndex(), 1429 candidate.candidate().utf8()));
1433 base::UTF16ToUTF8(base::StringPiece16(candidate.candidate()))));
1434 bool return_value = false; 1430 bool return_value = false;
1435 1431
1436 if (native_candidate) { 1432 if (native_candidate) {
1437 return_value = 1433 return_value =
1438 native_peer_connection_->AddIceCandidate(native_candidate.get()); 1434 native_peer_connection_->AddIceCandidate(native_candidate.get());
1439 LOG_IF(ERROR, !return_value) << "Error processing ICE candidate."; 1435 LOG_IF(ERROR, !return_value) << "Error processing ICE candidate.";
1440 } else { 1436 } else {
1441 LOG(ERROR) << "Could not create native ICE candidate."; 1437 LOG(ERROR) << "Could not create native ICE candidate.";
1442 } 1438 }
1443 1439
1444 if (peer_connection_tracker_) { 1440 if (peer_connection_tracker_) {
1445 peer_connection_tracker_->TrackAddIceCandidate( 1441 peer_connection_tracker_->TrackAddIceCandidate(
1446 this, candidate, PeerConnectionTracker::SOURCE_REMOTE, return_value); 1442 this, candidate, PeerConnectionTracker::SOURCE_REMOTE, return_value);
1447 } 1443 }
1448 return return_value; 1444 return return_value;
1449 } 1445 }
1450 1446
1451 void RTCPeerConnectionHandler::OnaddICECandidateResult( 1447 void RTCPeerConnectionHandler::OnaddICECandidateResult(
1452 const blink::WebRTCVoidRequest& webkit_request, bool result) { 1448 const blink::WebRTCVoidRequest& webkit_request, bool result) {
1453 DCHECK(thread_checker_.CalledOnValidThread()); 1449 DCHECK(thread_checker_.CalledOnValidThread());
1454 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnaddICECandidateResult"); 1450 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnaddICECandidateResult");
1455 if (!result) { 1451 if (!result) {
1456 // We don't have the actual error code from the libjingle, so for now 1452 // We don't have the actual error code from the libjingle, so for now
1457 // using a generic error string. 1453 // using a generic error string.
1458 return webkit_request.requestFailed( 1454 return webkit_request.requestFailed(
1459 base::UTF8ToUTF16("Error processing ICE candidate")); 1455 blink::WebString::fromUTF8("Error processing ICE candidate"));
1460 } 1456 }
1461 1457
1462 return webkit_request.requestSucceeded(); 1458 return webkit_request.requestSucceeded();
1463 } 1459 }
1464 1460
1465 bool RTCPeerConnectionHandler::addStream( 1461 bool RTCPeerConnectionHandler::addStream(
1466 const blink::WebMediaStream& stream, 1462 const blink::WebMediaStream& stream,
1467 const blink::WebMediaConstraints& options) { 1463 const blink::WebMediaConstraints& options) {
1468 DCHECK(thread_checker_.CalledOnValidThread()); 1464 DCHECK(thread_checker_.CalledOnValidThread());
1469 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::addStream"); 1465 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::addStream");
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1601 1597
1602 void RTCPeerConnectionHandler::StopEventLog() { 1598 void RTCPeerConnectionHandler::StopEventLog() {
1603 DCHECK(thread_checker_.CalledOnValidThread()); 1599 DCHECK(thread_checker_.CalledOnValidThread());
1604 native_peer_connection_->StopRtcEventLog(); 1600 native_peer_connection_->StopRtcEventLog();
1605 } 1601 }
1606 1602
1607 blink::WebRTCDataChannelHandler* RTCPeerConnectionHandler::createDataChannel( 1603 blink::WebRTCDataChannelHandler* RTCPeerConnectionHandler::createDataChannel(
1608 const blink::WebString& label, const blink::WebRTCDataChannelInit& init) { 1604 const blink::WebString& label, const blink::WebRTCDataChannelInit& init) {
1609 DCHECK(thread_checker_.CalledOnValidThread()); 1605 DCHECK(thread_checker_.CalledOnValidThread());
1610 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::createDataChannel"); 1606 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::createDataChannel");
1611 DVLOG(1) << "createDataChannel label " 1607 DVLOG(1) << "createDataChannel label " << label.utf8();
1612 << base::UTF16ToUTF8(base::StringPiece16(label));
1613 1608
1614 webrtc::DataChannelInit config; 1609 webrtc::DataChannelInit config;
1615 // TODO(jiayl): remove the deprecated reliable field once Libjingle is updated 1610 // TODO(jiayl): remove the deprecated reliable field once Libjingle is updated
1616 // to handle that. 1611 // to handle that.
1617 config.reliable = false; 1612 config.reliable = false;
1618 config.id = init.id; 1613 config.id = init.id;
1619 config.ordered = init.ordered; 1614 config.ordered = init.ordered;
1620 config.negotiated = init.negotiated; 1615 config.negotiated = init.negotiated;
1621 config.maxRetransmits = init.maxRetransmits; 1616 config.maxRetransmits = init.maxRetransmits;
1622 config.maxRetransmitTime = init.maxRetransmitTime; 1617 config.maxRetransmitTime = init.maxRetransmitTime;
1623 config.protocol = base::UTF16ToUTF8(base::StringPiece16(init.protocol)); 1618 config.protocol = init.protocol.utf8();
1624 1619
1625 rtc::scoped_refptr<webrtc::DataChannelInterface> webrtc_channel( 1620 rtc::scoped_refptr<webrtc::DataChannelInterface> webrtc_channel(
1626 native_peer_connection_->CreateDataChannel( 1621 native_peer_connection_->CreateDataChannel(label.utf8(), &config));
1627 base::UTF16ToUTF8(base::StringPiece16(label)), &config));
1628 if (!webrtc_channel) { 1622 if (!webrtc_channel) {
1629 DLOG(ERROR) << "Could not create native data channel."; 1623 DLOG(ERROR) << "Could not create native data channel.";
1630 return NULL; 1624 return NULL;
1631 } 1625 }
1632 if (peer_connection_tracker_) { 1626 if (peer_connection_tracker_) {
1633 peer_connection_tracker_->TrackCreateDataChannel( 1627 peer_connection_tracker_->TrackCreateDataChannel(
1634 this, webrtc_channel.get(), PeerConnectionTracker::SOURCE_LOCAL); 1628 this, webrtc_channel.get(), PeerConnectionTracker::SOURCE_LOCAL);
1635 } 1629 }
1636 1630
1637 ++num_data_channels_created_; 1631 ++num_data_channels_created_;
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
1846 if (!is_closed_) 1840 if (!is_closed_)
1847 client_->didAddRemoteDataChannel(handler.release()); 1841 client_->didAddRemoteDataChannel(handler.release());
1848 } 1842 }
1849 1843
1850 void RTCPeerConnectionHandler::OnIceCandidate( 1844 void RTCPeerConnectionHandler::OnIceCandidate(
1851 const std::string& sdp, const std::string& sdp_mid, int sdp_mline_index, 1845 const std::string& sdp, const std::string& sdp_mid, int sdp_mline_index,
1852 int component, int address_family) { 1846 int component, int address_family) {
1853 DCHECK(thread_checker_.CalledOnValidThread()); 1847 DCHECK(thread_checker_.CalledOnValidThread());
1854 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnIceCandidateImpl"); 1848 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnIceCandidateImpl");
1855 blink::WebRTCICECandidate web_candidate; 1849 blink::WebRTCICECandidate web_candidate;
1856 web_candidate.initialize(base::UTF8ToUTF16(sdp), 1850 web_candidate.initialize(blink::WebString::fromUTF8(sdp),
1857 base::UTF8ToUTF16(sdp_mid), 1851 blink::WebString::fromUTF8(sdp_mid),
1858 sdp_mline_index); 1852 sdp_mline_index);
1859 if (peer_connection_tracker_) { 1853 if (peer_connection_tracker_) {
1860 peer_connection_tracker_->TrackAddIceCandidate( 1854 peer_connection_tracker_->TrackAddIceCandidate(
1861 this, web_candidate, PeerConnectionTracker::SOURCE_LOCAL, true); 1855 this, web_candidate, PeerConnectionTracker::SOURCE_LOCAL, true);
1862 } 1856 }
1863 1857
1864 // Only the first m line's first component is tracked to avoid 1858 // Only the first m line's first component is tracked to avoid
1865 // miscounting when doing BUNDLE or rtcp mux. 1859 // miscounting when doing BUNDLE or rtcp mux.
1866 if (sdp_mline_index == 0 && component == 1) { 1860 if (sdp_mline_index == 0 && component == 1) {
1867 if (address_family == AF_INET) { 1861 if (address_family == AF_INET) {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1957 } 1951 }
1958 1952
1959 void RTCPeerConnectionHandler::ResetUMAStats() { 1953 void RTCPeerConnectionHandler::ResetUMAStats() {
1960 DCHECK(thread_checker_.CalledOnValidThread()); 1954 DCHECK(thread_checker_.CalledOnValidThread());
1961 num_local_candidates_ipv6_ = 0; 1955 num_local_candidates_ipv6_ = 0;
1962 num_local_candidates_ipv4_ = 0; 1956 num_local_candidates_ipv4_ = 0;
1963 ice_connection_checking_start_ = base::TimeTicks(); 1957 ice_connection_checking_start_ = base::TimeTicks();
1964 memset(ice_state_seen_, 0, sizeof(ice_state_seen_)); 1958 memset(ice_state_seen_, 0, sizeof(ice_state_seen_));
1965 } 1959 }
1966 } // namespace content 1960 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698