| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 #include "content/renderer/media/peer_connection_tracker.h" | 4 #include "content/renderer/media/peer_connection_tracker.h" |
| 5 | 5 |
| 6 #include <stddef.h> | 6 #include <stddef.h> |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 340 static void OnCompleteImpl(scoped_ptr<base::ListValue> list, int lid) { | 340 static void OnCompleteImpl(scoped_ptr<base::ListValue> list, int lid) { |
| 341 DCHECK(!list->empty()); | 341 DCHECK(!list->empty()); |
| 342 RenderThreadImpl::current()->Send( | 342 RenderThreadImpl::current()->Send( |
| 343 new PeerConnectionTrackerHost_AddStats(lid, *list.get())); | 343 new PeerConnectionTrackerHost_AddStats(lid, *list.get())); |
| 344 } | 344 } |
| 345 | 345 |
| 346 const int lid_; | 346 const int lid_; |
| 347 const scoped_refptr<base::SingleThreadTaskRunner> main_thread_; | 347 const scoped_refptr<base::SingleThreadTaskRunner> main_thread_; |
| 348 }; | 348 }; |
| 349 | 349 |
| 350 PeerConnectionTracker::PeerConnectionTracker() : next_lid_(1) { | 350 PeerConnectionTracker::PeerConnectionTracker() : next_local_id_(1) { |
| 351 } | 351 } |
| 352 | 352 |
| 353 PeerConnectionTracker::~PeerConnectionTracker() { | 353 PeerConnectionTracker::~PeerConnectionTracker() { |
| 354 } | 354 } |
| 355 | 355 |
| 356 bool PeerConnectionTracker::OnControlMessageReceived( | 356 bool PeerConnectionTracker::OnControlMessageReceived( |
| 357 const IPC::Message& message) { | 357 const IPC::Message& message) { |
| 358 bool handled = true; | 358 bool handled = true; |
| 359 IPC_BEGIN_MESSAGE_MAP(PeerConnectionTracker, message) | 359 IPC_BEGIN_MESSAGE_MAP(PeerConnectionTracker, message) |
| 360 IPC_MESSAGE_HANDLER(PeerConnectionTracker_GetAllStats, OnGetAllStats) | 360 IPC_MESSAGE_HANDLER(PeerConnectionTracker_GetAllStats, OnGetAllStats) |
| (...skipping 27 matching lines...) Expand all Loading... |
| 388 it->first->CloseClientPeerConnection(); | 388 it->first->CloseClientPeerConnection(); |
| 389 } | 389 } |
| 390 } | 390 } |
| 391 | 391 |
| 392 void PeerConnectionTracker::RegisterPeerConnection( | 392 void PeerConnectionTracker::RegisterPeerConnection( |
| 393 RTCPeerConnectionHandler* pc_handler, | 393 RTCPeerConnectionHandler* pc_handler, |
| 394 const webrtc::PeerConnectionInterface::RTCConfiguration& config, | 394 const webrtc::PeerConnectionInterface::RTCConfiguration& config, |
| 395 const RTCMediaConstraints& constraints, | 395 const RTCMediaConstraints& constraints, |
| 396 const blink::WebFrame* frame) { | 396 const blink::WebFrame* frame) { |
| 397 DCHECK(main_thread_.CalledOnValidThread()); | 397 DCHECK(main_thread_.CalledOnValidThread()); |
| 398 DCHECK_EQ(GetLocalIDForHandler(pc_handler), -1); |
| 398 DVLOG(1) << "PeerConnectionTracker::RegisterPeerConnection()"; | 399 DVLOG(1) << "PeerConnectionTracker::RegisterPeerConnection()"; |
| 399 PeerConnectionInfo info; | 400 PeerConnectionInfo info; |
| 400 | 401 |
| 401 info.lid = GetNextLocalID(); | 402 info.lid = GetNextLocalID(); |
| 402 info.rtc_configuration = | 403 info.rtc_configuration = |
| 403 "{ servers: " + SerializeServers(config.servers) + ", " + | 404 "{ servers: " + SerializeServers(config.servers) + ", " + |
| 404 "iceTransportType: " + SerializeIceTransportType(config.type) + ", " + | 405 "iceTransportType: " + SerializeIceTransportType(config.type) + ", " + |
| 405 "bundlePolicy: " + SerializeBundlePolicy(config.bundle_policy) + ", " + | 406 "bundlePolicy: " + SerializeBundlePolicy(config.bundle_policy) + ", " + |
| 406 "rtcpMuxPolicy: " + SerializeRtcpMuxPolicy(config.rtcp_mux_policy) + " }"; | 407 "rtcpMuxPolicy: " + SerializeRtcpMuxPolicy(config.rtcp_mux_policy) + " }"; |
| 407 | 408 |
| 408 info.constraints = SerializeMediaConstraints(constraints); | 409 info.constraints = SerializeMediaConstraints(constraints); |
| 409 info.url = frame->document().url().string().utf8(); | 410 info.url = frame->document().url().string().utf8(); |
| 410 RenderThreadImpl::current()->Send( | 411 RenderThreadImpl::current()->Send( |
| 411 new PeerConnectionTrackerHost_AddPeerConnection(info)); | 412 new PeerConnectionTrackerHost_AddPeerConnection(info)); |
| 412 | 413 |
| 413 DCHECK(peer_connection_id_map_.find(pc_handler) == | 414 peer_connection_id_map_.insert(std::make_pair(pc_handler, info.lid)); |
| 414 peer_connection_id_map_.end()); | |
| 415 peer_connection_id_map_[pc_handler] = info.lid; | |
| 416 } | 415 } |
| 417 | 416 |
| 418 void PeerConnectionTracker::UnregisterPeerConnection( | 417 void PeerConnectionTracker::UnregisterPeerConnection( |
| 419 RTCPeerConnectionHandler* pc_handler) { | 418 RTCPeerConnectionHandler* pc_handler) { |
| 420 DCHECK(main_thread_.CalledOnValidThread()); | 419 DCHECK(main_thread_.CalledOnValidThread()); |
| 421 DVLOG(1) << "PeerConnectionTracker::UnregisterPeerConnection()"; | 420 DVLOG(1) << "PeerConnectionTracker::UnregisterPeerConnection()"; |
| 422 | 421 |
| 423 std::map<RTCPeerConnectionHandler*, int>::iterator it = | 422 std::map<RTCPeerConnectionHandler*, int>::iterator it = |
| 424 peer_connection_id_map_.find(pc_handler); | 423 peer_connection_id_map_.find(pc_handler); |
| 425 | 424 |
| 426 if (it == peer_connection_id_map_.end()) { | 425 if (it == peer_connection_id_map_.end()) { |
| 427 // The PeerConnection might not have been registered if its initilization | 426 // The PeerConnection might not have been registered if its initilization |
| 428 // failed. | 427 // failed. |
| 429 return; | 428 return; |
| 430 } | 429 } |
| 431 | 430 |
| 432 RenderThreadImpl::current()->Send( | 431 RenderThreadImpl::current()->Send( |
| 433 new PeerConnectionTrackerHost_RemovePeerConnection(it->second)); | 432 new PeerConnectionTrackerHost_RemovePeerConnection(it->second)); |
| 434 | 433 |
| 435 peer_connection_id_map_.erase(it); | 434 peer_connection_id_map_.erase(it); |
| 436 } | 435 } |
| 437 | 436 |
| 438 void PeerConnectionTracker::TrackCreateOffer( | 437 void PeerConnectionTracker::TrackCreateOffer( |
| 439 RTCPeerConnectionHandler* pc_handler, | 438 RTCPeerConnectionHandler* pc_handler, |
| 440 const RTCMediaConstraints& constraints) { | 439 const RTCMediaConstraints& constraints) { |
| 441 DCHECK(main_thread_.CalledOnValidThread()); | 440 DCHECK(main_thread_.CalledOnValidThread()); |
| 441 int id = GetLocalIDForHandler(pc_handler); |
| 442 if (id == -1) |
| 443 return; |
| 442 SendPeerConnectionUpdate( | 444 SendPeerConnectionUpdate( |
| 443 pc_handler, "createOffer", | 445 id, "createOffer", |
| 444 "constraints: {" + SerializeMediaConstraints(constraints) + "}"); | 446 "constraints: {" + SerializeMediaConstraints(constraints) + "}"); |
| 445 } | 447 } |
| 446 | 448 |
| 447 void PeerConnectionTracker::TrackCreateAnswer( | 449 void PeerConnectionTracker::TrackCreateAnswer( |
| 448 RTCPeerConnectionHandler* pc_handler, | 450 RTCPeerConnectionHandler* pc_handler, |
| 449 const RTCMediaConstraints& constraints) { | 451 const RTCMediaConstraints& constraints) { |
| 450 DCHECK(main_thread_.CalledOnValidThread()); | 452 DCHECK(main_thread_.CalledOnValidThread()); |
| 453 int id = GetLocalIDForHandler(pc_handler); |
| 454 if (id == -1) |
| 455 return; |
| 451 SendPeerConnectionUpdate( | 456 SendPeerConnectionUpdate( |
| 452 pc_handler, "createAnswer", | 457 id, "createAnswer", |
| 453 "constraints: {" + SerializeMediaConstraints(constraints) + "}"); | 458 "constraints: {" + SerializeMediaConstraints(constraints) + "}"); |
| 454 } | 459 } |
| 455 | 460 |
| 456 void PeerConnectionTracker::TrackSetSessionDescription( | 461 void PeerConnectionTracker::TrackSetSessionDescription( |
| 457 RTCPeerConnectionHandler* pc_handler, | 462 RTCPeerConnectionHandler* pc_handler, |
| 458 const std::string& sdp, const std::string& type, Source source) { | 463 const std::string& sdp, const std::string& type, Source source) { |
| 459 DCHECK(main_thread_.CalledOnValidThread()); | 464 DCHECK(main_thread_.CalledOnValidThread()); |
| 465 int id = GetLocalIDForHandler(pc_handler); |
| 466 if (id == -1) |
| 467 return; |
| 460 string value = "type: " + type + ", sdp: " + sdp; | 468 string value = "type: " + type + ", sdp: " + sdp; |
| 461 SendPeerConnectionUpdate( | 469 SendPeerConnectionUpdate( |
| 462 pc_handler, | 470 id, |
| 463 source == SOURCE_LOCAL ? "setLocalDescription" : "setRemoteDescription", | 471 source == SOURCE_LOCAL ? "setLocalDescription" : "setRemoteDescription", |
| 464 value); | 472 value); |
| 465 } | 473 } |
| 466 | 474 |
| 467 void PeerConnectionTracker::TrackUpdateIce( | 475 void PeerConnectionTracker::TrackUpdateIce( |
| 468 RTCPeerConnectionHandler* pc_handler, | 476 RTCPeerConnectionHandler* pc_handler, |
| 469 const webrtc::PeerConnectionInterface::RTCConfiguration& config, | 477 const webrtc::PeerConnectionInterface::RTCConfiguration& config, |
| 470 const RTCMediaConstraints& options) { | 478 const RTCMediaConstraints& options) { |
| 471 DCHECK(main_thread_.CalledOnValidThread()); | 479 DCHECK(main_thread_.CalledOnValidThread()); |
| 480 int id = GetLocalIDForHandler(pc_handler); |
| 481 if (id == -1) |
| 482 return; |
| 472 string servers_string = "servers: " + SerializeServers(config.servers); | 483 string servers_string = "servers: " + SerializeServers(config.servers); |
| 473 | 484 |
| 474 string transport_type = | 485 string transport_type = |
| 475 "iceTransportType: " + SerializeIceTransportType(config.type); | 486 "iceTransportType: " + SerializeIceTransportType(config.type); |
| 476 | 487 |
| 477 string bundle_policy = | 488 string bundle_policy = |
| 478 "bundlePolicy: " + SerializeBundlePolicy(config.bundle_policy); | 489 "bundlePolicy: " + SerializeBundlePolicy(config.bundle_policy); |
| 479 | 490 |
| 480 string rtcp_mux_policy = | 491 string rtcp_mux_policy = |
| 481 "rtcpMuxPolicy: " + SerializeRtcpMuxPolicy(config.rtcp_mux_policy); | 492 "rtcpMuxPolicy: " + SerializeRtcpMuxPolicy(config.rtcp_mux_policy); |
| 482 | 493 |
| 483 string constraints = | 494 string constraints = |
| 484 "constraints: {" + SerializeMediaConstraints(options) + "}"; | 495 "constraints: {" + SerializeMediaConstraints(options) + "}"; |
| 485 | 496 |
| 486 SendPeerConnectionUpdate( | 497 SendPeerConnectionUpdate( |
| 487 pc_handler, | 498 id, |
| 488 "updateIce", | 499 "updateIce", |
| 489 servers_string + ", " + transport_type + ", " + | 500 servers_string + ", " + transport_type + ", " + |
| 490 bundle_policy + ", " + rtcp_mux_policy + ", " + | 501 bundle_policy + ", " + rtcp_mux_policy + ", " + |
| 491 constraints); | 502 constraints); |
| 492 } | 503 } |
| 493 | 504 |
| 494 void PeerConnectionTracker::TrackAddIceCandidate( | 505 void PeerConnectionTracker::TrackAddIceCandidate( |
| 495 RTCPeerConnectionHandler* pc_handler, | 506 RTCPeerConnectionHandler* pc_handler, |
| 496 const blink::WebRTCICECandidate& candidate, | 507 const blink::WebRTCICECandidate& candidate, |
| 497 Source source, | 508 Source source, |
| 498 bool succeeded) { | 509 bool succeeded) { |
| 499 DCHECK(main_thread_.CalledOnValidThread()); | 510 DCHECK(main_thread_.CalledOnValidThread()); |
| 511 int id = GetLocalIDForHandler(pc_handler); |
| 512 if (id == -1) |
| 513 return; |
| 500 string value = | 514 string value = |
| 501 "sdpMid: " + | 515 "sdpMid: " + |
| 502 base::UTF16ToUTF8(base::StringPiece16(candidate.sdpMid())) + ", " + | 516 base::UTF16ToUTF8(base::StringPiece16(candidate.sdpMid())) + ", " + |
| 503 "sdpMLineIndex: " + base::UintToString(candidate.sdpMLineIndex()) + | 517 "sdpMLineIndex: " + base::UintToString(candidate.sdpMLineIndex()) + |
| 504 ", " + "candidate: " + | 518 ", " + "candidate: " + |
| 505 base::UTF16ToUTF8(base::StringPiece16(candidate.candidate())); | 519 base::UTF16ToUTF8(base::StringPiece16(candidate.candidate())); |
| 506 | 520 |
| 507 // OnIceCandidate always succeeds as it's a callback from the browser. | 521 // OnIceCandidate always succeeds as it's a callback from the browser. |
| 508 DCHECK(source != SOURCE_LOCAL || succeeded); | 522 DCHECK(source != SOURCE_LOCAL || succeeded); |
| 509 | 523 |
| 510 string event = | 524 const char* event = |
| 511 (source == SOURCE_LOCAL) ? "onIceCandidate" | 525 (source == SOURCE_LOCAL) ? "onIceCandidate" |
| 512 : (succeeded ? "addIceCandidate" | 526 : (succeeded ? "addIceCandidate" |
| 513 : "addIceCandidateFailed"); | 527 : "addIceCandidateFailed"); |
| 514 | 528 |
| 515 SendPeerConnectionUpdate(pc_handler, event, value); | 529 SendPeerConnectionUpdate(id, event, value); |
| 516 } | 530 } |
| 517 | 531 |
| 518 void PeerConnectionTracker::TrackAddStream( | 532 void PeerConnectionTracker::TrackAddStream( |
| 519 RTCPeerConnectionHandler* pc_handler, | 533 RTCPeerConnectionHandler* pc_handler, |
| 520 const blink::WebMediaStream& stream, | 534 const blink::WebMediaStream& stream, |
| 521 Source source) { | 535 Source source) { |
| 522 DCHECK(main_thread_.CalledOnValidThread()); | 536 DCHECK(main_thread_.CalledOnValidThread()); |
| 537 int id = GetLocalIDForHandler(pc_handler); |
| 538 if (id == -1) |
| 539 return; |
| 523 SendPeerConnectionUpdate( | 540 SendPeerConnectionUpdate( |
| 524 pc_handler, source == SOURCE_LOCAL ? "addStream" : "onAddStream", | 541 id, source == SOURCE_LOCAL ? "addStream" : "onAddStream", |
| 525 SerializeMediaDescriptor(stream)); | 542 SerializeMediaDescriptor(stream)); |
| 526 } | 543 } |
| 527 | 544 |
| 528 void PeerConnectionTracker::TrackRemoveStream( | 545 void PeerConnectionTracker::TrackRemoveStream( |
| 529 RTCPeerConnectionHandler* pc_handler, | 546 RTCPeerConnectionHandler* pc_handler, |
| 530 const blink::WebMediaStream& stream, | 547 const blink::WebMediaStream& stream, |
| 531 Source source){ | 548 Source source){ |
| 532 DCHECK(main_thread_.CalledOnValidThread()); | 549 DCHECK(main_thread_.CalledOnValidThread()); |
| 550 int id = GetLocalIDForHandler(pc_handler); |
| 551 if (id == -1) |
| 552 return; |
| 533 SendPeerConnectionUpdate( | 553 SendPeerConnectionUpdate( |
| 534 pc_handler, source == SOURCE_LOCAL ? "removeStream" : "onRemoveStream", | 554 id, source == SOURCE_LOCAL ? "removeStream" : "onRemoveStream", |
| 535 SerializeMediaDescriptor(stream)); | 555 SerializeMediaDescriptor(stream)); |
| 536 } | 556 } |
| 537 | 557 |
| 538 void PeerConnectionTracker::TrackCreateDataChannel( | 558 void PeerConnectionTracker::TrackCreateDataChannel( |
| 539 RTCPeerConnectionHandler* pc_handler, | 559 RTCPeerConnectionHandler* pc_handler, |
| 540 const webrtc::DataChannelInterface* data_channel, | 560 const webrtc::DataChannelInterface* data_channel, |
| 541 Source source) { | 561 Source source) { |
| 542 DCHECK(main_thread_.CalledOnValidThread()); | 562 DCHECK(main_thread_.CalledOnValidThread()); |
| 563 int id = GetLocalIDForHandler(pc_handler); |
| 564 if (id == -1) |
| 565 return; |
| 543 string value = "label: " + data_channel->label() + | 566 string value = "label: " + data_channel->label() + |
| 544 ", reliable: " + (data_channel->reliable() ? "true" : "false"); | 567 ", reliable: " + (data_channel->reliable() ? "true" : "false"); |
| 545 SendPeerConnectionUpdate( | 568 SendPeerConnectionUpdate( |
| 546 pc_handler, | 569 id, |
| 547 source == SOURCE_LOCAL ? "createLocalDataChannel" : "onRemoteDataChannel", | 570 source == SOURCE_LOCAL ? "createLocalDataChannel" : "onRemoteDataChannel", |
| 548 value); | 571 value); |
| 549 } | 572 } |
| 550 | 573 |
| 551 void PeerConnectionTracker::TrackStop(RTCPeerConnectionHandler* pc_handler) { | 574 void PeerConnectionTracker::TrackStop(RTCPeerConnectionHandler* pc_handler) { |
| 552 DCHECK(main_thread_.CalledOnValidThread()); | 575 DCHECK(main_thread_.CalledOnValidThread()); |
| 553 SendPeerConnectionUpdate(pc_handler, "stop", std::string()); | 576 int id = GetLocalIDForHandler(pc_handler); |
| 577 if (id == -1) |
| 578 return; |
| 579 SendPeerConnectionUpdate(id, "stop", std::string()); |
| 554 } | 580 } |
| 555 | 581 |
| 556 void PeerConnectionTracker::TrackSignalingStateChange( | 582 void PeerConnectionTracker::TrackSignalingStateChange( |
| 557 RTCPeerConnectionHandler* pc_handler, | 583 RTCPeerConnectionHandler* pc_handler, |
| 558 WebRTCPeerConnectionHandlerClient::SignalingState state) { | 584 WebRTCPeerConnectionHandlerClient::SignalingState state) { |
| 559 DCHECK(main_thread_.CalledOnValidThread()); | 585 DCHECK(main_thread_.CalledOnValidThread()); |
| 586 int id = GetLocalIDForHandler(pc_handler); |
| 587 if (id == -1) |
| 588 return; |
| 560 SendPeerConnectionUpdate( | 589 SendPeerConnectionUpdate( |
| 561 pc_handler, "signalingStateChange", GetSignalingStateString(state)); | 590 id, "signalingStateChange", GetSignalingStateString(state)); |
| 562 } | 591 } |
| 563 | 592 |
| 564 void PeerConnectionTracker::TrackIceConnectionStateChange( | 593 void PeerConnectionTracker::TrackIceConnectionStateChange( |
| 565 RTCPeerConnectionHandler* pc_handler, | 594 RTCPeerConnectionHandler* pc_handler, |
| 566 WebRTCPeerConnectionHandlerClient::ICEConnectionState state) { | 595 WebRTCPeerConnectionHandlerClient::ICEConnectionState state) { |
| 567 DCHECK(main_thread_.CalledOnValidThread()); | 596 DCHECK(main_thread_.CalledOnValidThread()); |
| 597 int id = GetLocalIDForHandler(pc_handler); |
| 598 if (id == -1) |
| 599 return; |
| 568 SendPeerConnectionUpdate( | 600 SendPeerConnectionUpdate( |
| 569 pc_handler, "iceConnectionStateChange", | 601 id, "iceConnectionStateChange", |
| 570 GetIceConnectionStateString(state)); | 602 GetIceConnectionStateString(state)); |
| 571 } | 603 } |
| 572 | 604 |
| 573 void PeerConnectionTracker::TrackIceGatheringStateChange( | 605 void PeerConnectionTracker::TrackIceGatheringStateChange( |
| 574 RTCPeerConnectionHandler* pc_handler, | 606 RTCPeerConnectionHandler* pc_handler, |
| 575 WebRTCPeerConnectionHandlerClient::ICEGatheringState state) { | 607 WebRTCPeerConnectionHandlerClient::ICEGatheringState state) { |
| 576 DCHECK(main_thread_.CalledOnValidThread()); | 608 DCHECK(main_thread_.CalledOnValidThread()); |
| 609 int id = GetLocalIDForHandler(pc_handler); |
| 610 if (id == -1) |
| 611 return; |
| 577 SendPeerConnectionUpdate( | 612 SendPeerConnectionUpdate( |
| 578 pc_handler, "iceGatheringStateChange", | 613 id, "iceGatheringStateChange", |
| 579 GetIceGatheringStateString(state)); | 614 GetIceGatheringStateString(state)); |
| 580 } | 615 } |
| 581 | 616 |
| 582 void PeerConnectionTracker::TrackSessionDescriptionCallback( | 617 void PeerConnectionTracker::TrackSessionDescriptionCallback( |
| 583 RTCPeerConnectionHandler* pc_handler, Action action, | 618 RTCPeerConnectionHandler* pc_handler, Action action, |
| 584 const string& callback_type, const string& value) { | 619 const string& callback_type, const string& value) { |
| 585 DCHECK(main_thread_.CalledOnValidThread()); | 620 DCHECK(main_thread_.CalledOnValidThread()); |
| 621 int id = GetLocalIDForHandler(pc_handler); |
| 622 if (id == -1) |
| 623 return; |
| 586 string update_type; | 624 string update_type; |
| 587 switch (action) { | 625 switch (action) { |
| 588 case ACTION_SET_LOCAL_DESCRIPTION: | 626 case ACTION_SET_LOCAL_DESCRIPTION: |
| 589 update_type = "setLocalDescription"; | 627 update_type = "setLocalDescription"; |
| 590 break; | 628 break; |
| 591 case ACTION_SET_REMOTE_DESCRIPTION: | 629 case ACTION_SET_REMOTE_DESCRIPTION: |
| 592 update_type = "setRemoteDescription"; | 630 update_type = "setRemoteDescription"; |
| 593 break; | 631 break; |
| 594 case ACTION_CREATE_OFFER: | 632 case ACTION_CREATE_OFFER: |
| 595 update_type = "createOffer"; | 633 update_type = "createOffer"; |
| 596 break; | 634 break; |
| 597 case ACTION_CREATE_ANSWER: | 635 case ACTION_CREATE_ANSWER: |
| 598 update_type = "createAnswer"; | 636 update_type = "createAnswer"; |
| 599 break; | 637 break; |
| 600 default: | 638 default: |
| 601 NOTREACHED(); | 639 NOTREACHED(); |
| 602 break; | 640 break; |
| 603 } | 641 } |
| 604 update_type += callback_type; | 642 update_type += callback_type; |
| 605 | 643 |
| 606 SendPeerConnectionUpdate(pc_handler, update_type, value); | 644 SendPeerConnectionUpdate(id, update_type.c_str(), value); |
| 607 } | 645 } |
| 608 | 646 |
| 609 void PeerConnectionTracker::TrackOnRenegotiationNeeded( | 647 void PeerConnectionTracker::TrackOnRenegotiationNeeded( |
| 610 RTCPeerConnectionHandler* pc_handler) { | 648 RTCPeerConnectionHandler* pc_handler) { |
| 611 DCHECK(main_thread_.CalledOnValidThread()); | 649 DCHECK(main_thread_.CalledOnValidThread()); |
| 612 SendPeerConnectionUpdate(pc_handler, "onRenegotiationNeeded", std::string()); | 650 int id = GetLocalIDForHandler(pc_handler); |
| 651 if (id == -1) |
| 652 return; |
| 653 SendPeerConnectionUpdate(id, "onRenegotiationNeeded", std::string()); |
| 613 } | 654 } |
| 614 | 655 |
| 615 void PeerConnectionTracker::TrackCreateDTMFSender( | 656 void PeerConnectionTracker::TrackCreateDTMFSender( |
| 616 RTCPeerConnectionHandler* pc_handler, | 657 RTCPeerConnectionHandler* pc_handler, |
| 617 const blink::WebMediaStreamTrack& track) { | 658 const blink::WebMediaStreamTrack& track) { |
| 618 DCHECK(main_thread_.CalledOnValidThread()); | 659 DCHECK(main_thread_.CalledOnValidThread()); |
| 619 SendPeerConnectionUpdate(pc_handler, "createDTMFSender", | 660 int id = GetLocalIDForHandler(pc_handler); |
| 661 if (id == -1) |
| 662 return; |
| 663 SendPeerConnectionUpdate(id, "createDTMFSender", |
| 620 base::UTF16ToUTF8(base::StringPiece16(track.id()))); | 664 base::UTF16ToUTF8(base::StringPiece16(track.id()))); |
| 621 } | 665 } |
| 622 | 666 |
| 623 void PeerConnectionTracker::TrackGetUserMedia( | 667 void PeerConnectionTracker::TrackGetUserMedia( |
| 624 const blink::WebUserMediaRequest& user_media_request) { | 668 const blink::WebUserMediaRequest& user_media_request) { |
| 625 DCHECK(main_thread_.CalledOnValidThread()); | 669 DCHECK(main_thread_.CalledOnValidThread()); |
| 626 RTCMediaConstraints audio_constraints( | 670 RTCMediaConstraints audio_constraints( |
| 627 GetNativeMediaConstraints(user_media_request.audioConstraints())); | 671 GetNativeMediaConstraints(user_media_request.audioConstraints())); |
| 628 RTCMediaConstraints video_constraints( | 672 RTCMediaConstraints video_constraints( |
| 629 GetNativeMediaConstraints(user_media_request.videoConstraints())); | 673 GetNativeMediaConstraints(user_media_request.videoConstraints())); |
| 630 | 674 |
| 631 RenderThreadImpl::current()->Send(new PeerConnectionTrackerHost_GetUserMedia( | 675 RenderThreadImpl::current()->Send(new PeerConnectionTrackerHost_GetUserMedia( |
| 632 user_media_request.securityOrigin().toString().utf8(), | 676 user_media_request.securityOrigin().toString().utf8(), |
| 633 user_media_request.audio(), | 677 user_media_request.audio(), |
| 634 user_media_request.video(), | 678 user_media_request.video(), |
| 635 SerializeMediaConstraints(audio_constraints), | 679 SerializeMediaConstraints(audio_constraints), |
| 636 SerializeMediaConstraints(video_constraints))); | 680 SerializeMediaConstraints(video_constraints))); |
| 637 } | 681 } |
| 638 | 682 |
| 639 int PeerConnectionTracker::GetNextLocalID() { | 683 int PeerConnectionTracker::GetNextLocalID() { |
| 640 DCHECK(main_thread_.CalledOnValidThread()); | 684 DCHECK(main_thread_.CalledOnValidThread()); |
| 641 return next_lid_++; | 685 if (next_local_id_< 0) |
| 686 next_local_id_ = 1; |
| 687 return next_local_id_++; |
| 688 } |
| 689 |
| 690 int PeerConnectionTracker::GetLocalIDForHandler( |
| 691 RTCPeerConnectionHandler* handler) const { |
| 692 DCHECK(main_thread_.CalledOnValidThread()); |
| 693 const auto found = peer_connection_id_map_.find(handler); |
| 694 if (found == peer_connection_id_map_.end()) |
| 695 return -1; |
| 696 DCHECK_NE(found->second, -1); |
| 697 return found->second; |
| 642 } | 698 } |
| 643 | 699 |
| 644 void PeerConnectionTracker::SendPeerConnectionUpdate( | 700 void PeerConnectionTracker::SendPeerConnectionUpdate( |
| 645 RTCPeerConnectionHandler* pc_handler, | 701 int local_id, |
| 646 const std::string& type, | 702 const char* callback_type, |
| 647 const std::string& value) { | 703 const std::string& value) { |
| 648 DCHECK(main_thread_.CalledOnValidThread()); | 704 DCHECK(main_thread_.CalledOnValidThread()); |
| 649 if (peer_connection_id_map_.find(pc_handler) == peer_connection_id_map_.end()) | |
| 650 return; | |
| 651 | |
| 652 RenderThreadImpl::current()->Send( | 705 RenderThreadImpl::current()->Send( |
| 653 new PeerConnectionTrackerHost_UpdatePeerConnection( | 706 new PeerConnectionTrackerHost_UpdatePeerConnection( |
| 654 peer_connection_id_map_[pc_handler], type, value)); | 707 local_id, std::string(callback_type), value)); |
| 655 } | 708 } |
| 656 | 709 |
| 657 } // namespace content | 710 } // namespace content |
| OLD | NEW |