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

Side by Side Diff: webrtc/pc/mediasession_unittest.cc

Issue 2685783014: Replace NULL with nullptr in all C++ files. (Closed)
Patch Set: Fixing android. Created 3 years, 10 months 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 /* 1 /*
2 * Copyright 2004 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2004 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 current_video_pwd)))); 293 current_video_pwd))));
294 EXPECT_TRUE(current_desc->AddTransportInfo( 294 EXPECT_TRUE(current_desc->AddTransportInfo(
295 TransportInfo("data", 295 TransportInfo("data",
296 TransportDescription(current_data_ufrag, 296 TransportDescription(current_data_ufrag,
297 current_data_pwd)))); 297 current_data_pwd))));
298 } 298 }
299 if (offer) { 299 if (offer) {
300 desc.reset(f1_.CreateOffer(options, current_desc.get())); 300 desc.reset(f1_.CreateOffer(options, current_desc.get()));
301 } else { 301 } else {
302 std::unique_ptr<SessionDescription> offer; 302 std::unique_ptr<SessionDescription> offer;
303 offer.reset(f1_.CreateOffer(options, NULL)); 303 offer.reset(f1_.CreateOffer(options, nullptr));
304 desc.reset(f1_.CreateAnswer(offer.get(), options, current_desc.get())); 304 desc.reset(f1_.CreateAnswer(offer.get(), options, current_desc.get()));
305 } 305 }
306 ASSERT_TRUE(desc.get() != NULL); 306 ASSERT_TRUE(desc.get() != nullptr);
307 const TransportInfo* ti_audio = desc->GetTransportInfoByName("audio"); 307 const TransportInfo* ti_audio = desc->GetTransportInfoByName("audio");
308 if (options.has_audio()) { 308 if (options.has_audio()) {
309 EXPECT_TRUE(ti_audio != NULL); 309 EXPECT_TRUE(ti_audio != nullptr);
310 if (has_current_desc) { 310 if (has_current_desc) {
311 EXPECT_EQ(current_audio_ufrag, ti_audio->description.ice_ufrag); 311 EXPECT_EQ(current_audio_ufrag, ti_audio->description.ice_ufrag);
312 EXPECT_EQ(current_audio_pwd, ti_audio->description.ice_pwd); 312 EXPECT_EQ(current_audio_pwd, ti_audio->description.ice_pwd);
313 } else { 313 } else {
314 EXPECT_EQ(static_cast<size_t>(cricket::ICE_UFRAG_LENGTH), 314 EXPECT_EQ(static_cast<size_t>(cricket::ICE_UFRAG_LENGTH),
315 ti_audio->description.ice_ufrag.size()); 315 ti_audio->description.ice_ufrag.size());
316 EXPECT_EQ(static_cast<size_t>(cricket::ICE_PWD_LENGTH), 316 EXPECT_EQ(static_cast<size_t>(cricket::ICE_PWD_LENGTH),
317 ti_audio->description.ice_pwd.size()); 317 ti_audio->description.ice_pwd.size());
318 } 318 }
319 EXPECT_EQ(options.enable_ice_renomination, GetIceRenomination(ti_audio)); 319 EXPECT_EQ(options.enable_ice_renomination, GetIceRenomination(ti_audio));
320 320
321 } else { 321 } else {
322 EXPECT_TRUE(ti_audio == NULL); 322 EXPECT_TRUE(ti_audio == nullptr);
323 } 323 }
324 const TransportInfo* ti_video = desc->GetTransportInfoByName("video"); 324 const TransportInfo* ti_video = desc->GetTransportInfoByName("video");
325 if (options.has_video()) { 325 if (options.has_video()) {
326 EXPECT_TRUE(ti_video != NULL); 326 EXPECT_TRUE(ti_video != nullptr);
327 if (options.bundle_enabled) { 327 if (options.bundle_enabled) {
328 EXPECT_EQ(ti_audio->description.ice_ufrag, 328 EXPECT_EQ(ti_audio->description.ice_ufrag,
329 ti_video->description.ice_ufrag); 329 ti_video->description.ice_ufrag);
330 EXPECT_EQ(ti_audio->description.ice_pwd, 330 EXPECT_EQ(ti_audio->description.ice_pwd,
331 ti_video->description.ice_pwd); 331 ti_video->description.ice_pwd);
332 } else { 332 } else {
333 if (has_current_desc) { 333 if (has_current_desc) {
334 EXPECT_EQ(current_video_ufrag, ti_video->description.ice_ufrag); 334 EXPECT_EQ(current_video_ufrag, ti_video->description.ice_ufrag);
335 EXPECT_EQ(current_video_pwd, ti_video->description.ice_pwd); 335 EXPECT_EQ(current_video_pwd, ti_video->description.ice_pwd);
336 } else { 336 } else {
337 EXPECT_EQ(static_cast<size_t>(cricket::ICE_UFRAG_LENGTH), 337 EXPECT_EQ(static_cast<size_t>(cricket::ICE_UFRAG_LENGTH),
338 ti_video->description.ice_ufrag.size()); 338 ti_video->description.ice_ufrag.size());
339 EXPECT_EQ(static_cast<size_t>(cricket::ICE_PWD_LENGTH), 339 EXPECT_EQ(static_cast<size_t>(cricket::ICE_PWD_LENGTH),
340 ti_video->description.ice_pwd.size()); 340 ti_video->description.ice_pwd.size());
341 } 341 }
342 } 342 }
343 EXPECT_EQ(options.enable_ice_renomination, GetIceRenomination(ti_video)); 343 EXPECT_EQ(options.enable_ice_renomination, GetIceRenomination(ti_video));
344 } else { 344 } else {
345 EXPECT_TRUE(ti_video == NULL); 345 EXPECT_TRUE(ti_video == nullptr);
346 } 346 }
347 const TransportInfo* ti_data = desc->GetTransportInfoByName("data"); 347 const TransportInfo* ti_data = desc->GetTransportInfoByName("data");
348 if (options.has_data()) { 348 if (options.has_data()) {
349 EXPECT_TRUE(ti_data != NULL); 349 EXPECT_TRUE(ti_data != nullptr);
350 if (options.bundle_enabled) { 350 if (options.bundle_enabled) {
351 EXPECT_EQ(ti_audio->description.ice_ufrag, 351 EXPECT_EQ(ti_audio->description.ice_ufrag,
352 ti_data->description.ice_ufrag); 352 ti_data->description.ice_ufrag);
353 EXPECT_EQ(ti_audio->description.ice_pwd, 353 EXPECT_EQ(ti_audio->description.ice_pwd,
354 ti_data->description.ice_pwd); 354 ti_data->description.ice_pwd);
355 } else { 355 } else {
356 if (has_current_desc) { 356 if (has_current_desc) {
357 EXPECT_EQ(current_data_ufrag, ti_data->description.ice_ufrag); 357 EXPECT_EQ(current_data_ufrag, ti_data->description.ice_ufrag);
358 EXPECT_EQ(current_data_pwd, ti_data->description.ice_pwd); 358 EXPECT_EQ(current_data_pwd, ti_data->description.ice_pwd);
359 } else { 359 } else {
360 EXPECT_EQ(static_cast<size_t>(cricket::ICE_UFRAG_LENGTH), 360 EXPECT_EQ(static_cast<size_t>(cricket::ICE_UFRAG_LENGTH),
361 ti_data->description.ice_ufrag.size()); 361 ti_data->description.ice_ufrag.size());
362 EXPECT_EQ(static_cast<size_t>(cricket::ICE_PWD_LENGTH), 362 EXPECT_EQ(static_cast<size_t>(cricket::ICE_PWD_LENGTH),
363 ti_data->description.ice_pwd.size()); 363 ti_data->description.ice_pwd.size());
364 } 364 }
365 } 365 }
366 EXPECT_EQ(options.enable_ice_renomination, GetIceRenomination(ti_data)); 366 EXPECT_EQ(options.enable_ice_renomination, GetIceRenomination(ti_data));
367 367
368 } else { 368 } else {
369 EXPECT_TRUE(ti_video == NULL); 369 EXPECT_TRUE(ti_video == nullptr);
370 } 370 }
371 } 371 }
372 372
373 void TestCryptoWithBundle(bool offer) { 373 void TestCryptoWithBundle(bool offer) {
374 f1_.set_secure(SEC_ENABLED); 374 f1_.set_secure(SEC_ENABLED);
375 MediaSessionOptions options; 375 MediaSessionOptions options;
376 options.recv_audio = true; 376 options.recv_audio = true;
377 options.recv_video = true; 377 options.recv_video = true;
378 options.data_channel_type = cricket::DCT_RTP; 378 options.data_channel_type = cricket::DCT_RTP;
379 std::unique_ptr<SessionDescription> ref_desc; 379 std::unique_ptr<SessionDescription> ref_desc;
380 std::unique_ptr<SessionDescription> desc; 380 std::unique_ptr<SessionDescription> desc;
381 if (offer) { 381 if (offer) {
382 options.bundle_enabled = false; 382 options.bundle_enabled = false;
383 ref_desc.reset(f1_.CreateOffer(options, NULL)); 383 ref_desc.reset(f1_.CreateOffer(options, nullptr));
384 options.bundle_enabled = true; 384 options.bundle_enabled = true;
385 desc.reset(f1_.CreateOffer(options, ref_desc.get())); 385 desc.reset(f1_.CreateOffer(options, ref_desc.get()));
386 } else { 386 } else {
387 options.bundle_enabled = true; 387 options.bundle_enabled = true;
388 ref_desc.reset(f1_.CreateOffer(options, NULL)); 388 ref_desc.reset(f1_.CreateOffer(options, nullptr));
389 desc.reset(f1_.CreateAnswer(ref_desc.get(), options, NULL)); 389 desc.reset(f1_.CreateAnswer(ref_desc.get(), options, nullptr));
390 } 390 }
391 ASSERT_TRUE(desc.get() != NULL); 391 ASSERT_TRUE(desc.get() != nullptr);
392 const cricket::MediaContentDescription* audio_media_desc = 392 const cricket::MediaContentDescription* audio_media_desc =
393 static_cast<const cricket::MediaContentDescription*>( 393 static_cast<const cricket::MediaContentDescription*>(
394 desc.get()->GetContentDescriptionByName("audio")); 394 desc.get()->GetContentDescriptionByName("audio"));
395 ASSERT_TRUE(audio_media_desc != NULL); 395 ASSERT_TRUE(audio_media_desc != nullptr);
396 const cricket::MediaContentDescription* video_media_desc = 396 const cricket::MediaContentDescription* video_media_desc =
397 static_cast<const cricket::MediaContentDescription*>( 397 static_cast<const cricket::MediaContentDescription*>(
398 desc.get()->GetContentDescriptionByName("video")); 398 desc.get()->GetContentDescriptionByName("video"));
399 ASSERT_TRUE(video_media_desc != NULL); 399 ASSERT_TRUE(video_media_desc != nullptr);
400 EXPECT_TRUE(CompareCryptoParams(audio_media_desc->cryptos(), 400 EXPECT_TRUE(CompareCryptoParams(audio_media_desc->cryptos(),
401 video_media_desc->cryptos())); 401 video_media_desc->cryptos()));
402 EXPECT_EQ(1u, audio_media_desc->cryptos().size()); 402 EXPECT_EQ(1u, audio_media_desc->cryptos().size());
403 EXPECT_EQ(std::string(CS_AES_CM_128_HMAC_SHA1_80), 403 EXPECT_EQ(std::string(CS_AES_CM_128_HMAC_SHA1_80),
404 audio_media_desc->cryptos()[0].cipher_suite); 404 audio_media_desc->cryptos()[0].cipher_suite);
405 405
406 // Verify the selected crypto is one from the reference audio 406 // Verify the selected crypto is one from the reference audio
407 // media content. 407 // media content.
408 const cricket::MediaContentDescription* ref_audio_media_desc = 408 const cricket::MediaContentDescription* ref_audio_media_desc =
409 static_cast<const cricket::MediaContentDescription*>( 409 static_cast<const cricket::MediaContentDescription*>(
(...skipping 10 matching lines...) Expand all
420 } 420 }
421 421
422 // This test that the audio and video media direction is set to 422 // This test that the audio and video media direction is set to
423 // |expected_direction_in_answer| in an answer if the offer direction is set 423 // |expected_direction_in_answer| in an answer if the offer direction is set
424 // to |direction_in_offer|. 424 // to |direction_in_offer|.
425 void TestMediaDirectionInAnswer( 425 void TestMediaDirectionInAnswer(
426 cricket::MediaContentDirection direction_in_offer, 426 cricket::MediaContentDirection direction_in_offer,
427 cricket::MediaContentDirection expected_direction_in_answer) { 427 cricket::MediaContentDirection expected_direction_in_answer) {
428 MediaSessionOptions opts; 428 MediaSessionOptions opts;
429 opts.recv_video = true; 429 opts.recv_video = true;
430 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 430 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
431 ASSERT_TRUE(offer.get() != NULL); 431 ASSERT_TRUE(offer.get() != nullptr);
432 ContentInfo* ac_offer = offer->GetContentByName("audio"); 432 ContentInfo* ac_offer = offer->GetContentByName("audio");
433 ASSERT_TRUE(ac_offer != NULL); 433 ASSERT_TRUE(ac_offer != nullptr);
434 AudioContentDescription* acd_offer = 434 AudioContentDescription* acd_offer =
435 static_cast<AudioContentDescription*>(ac_offer->description); 435 static_cast<AudioContentDescription*>(ac_offer->description);
436 acd_offer->set_direction(direction_in_offer); 436 acd_offer->set_direction(direction_in_offer);
437 ContentInfo* vc_offer = offer->GetContentByName("video"); 437 ContentInfo* vc_offer = offer->GetContentByName("video");
438 ASSERT_TRUE(vc_offer != NULL); 438 ASSERT_TRUE(vc_offer != nullptr);
439 VideoContentDescription* vcd_offer = 439 VideoContentDescription* vcd_offer =
440 static_cast<VideoContentDescription*>(vc_offer->description); 440 static_cast<VideoContentDescription*>(vc_offer->description);
441 vcd_offer->set_direction(direction_in_offer); 441 vcd_offer->set_direction(direction_in_offer);
442 442
443 std::unique_ptr<SessionDescription> answer( 443 std::unique_ptr<SessionDescription> answer(
444 f2_.CreateAnswer(offer.get(), opts, NULL)); 444 f2_.CreateAnswer(offer.get(), opts, nullptr));
445 const AudioContentDescription* acd_answer = 445 const AudioContentDescription* acd_answer =
446 GetFirstAudioContentDescription(answer.get()); 446 GetFirstAudioContentDescription(answer.get());
447 EXPECT_EQ(expected_direction_in_answer, acd_answer->direction()); 447 EXPECT_EQ(expected_direction_in_answer, acd_answer->direction());
448 const VideoContentDescription* vcd_answer = 448 const VideoContentDescription* vcd_answer =
449 GetFirstVideoContentDescription(answer.get()); 449 GetFirstVideoContentDescription(answer.get());
450 EXPECT_EQ(expected_direction_in_answer, vcd_answer->direction()); 450 EXPECT_EQ(expected_direction_in_answer, vcd_answer->direction());
451 } 451 }
452 452
453 bool VerifyNoCNCodecs(const cricket::ContentInfo* content) { 453 bool VerifyNoCNCodecs(const cricket::ContentInfo* content) {
454 const cricket::ContentDescription* description = content->description; 454 const cricket::ContentDescription* description = content->description;
455 RTC_CHECK(description != NULL); 455 RTC_CHECK(description != nullptr);
456 const cricket::AudioContentDescription* audio_content_desc = 456 const cricket::AudioContentDescription* audio_content_desc =
457 static_cast<const cricket::AudioContentDescription*>(description); 457 static_cast<const cricket::AudioContentDescription*>(description);
458 RTC_CHECK(audio_content_desc != NULL); 458 RTC_CHECK(audio_content_desc != nullptr);
459 for (size_t i = 0; i < audio_content_desc->codecs().size(); ++i) { 459 for (size_t i = 0; i < audio_content_desc->codecs().size(); ++i) {
460 if (audio_content_desc->codecs()[i].name == "CN") 460 if (audio_content_desc->codecs()[i].name == "CN")
461 return false; 461 return false;
462 } 462 }
463 return true; 463 return true;
464 } 464 }
465 465
466 void TestVideoGcmCipher(bool gcm_offer, bool gcm_answer) { 466 void TestVideoGcmCipher(bool gcm_offer, bool gcm_answer) {
467 MediaSessionOptions offer_opts; 467 MediaSessionOptions offer_opts;
468 offer_opts.recv_video = true; 468 offer_opts.recv_video = true;
469 offer_opts.crypto_options.enable_gcm_crypto_suites = gcm_offer; 469 offer_opts.crypto_options.enable_gcm_crypto_suites = gcm_offer;
470 MediaSessionOptions answer_opts; 470 MediaSessionOptions answer_opts;
471 answer_opts.recv_video = true; 471 answer_opts.recv_video = true;
472 answer_opts.crypto_options.enable_gcm_crypto_suites = gcm_answer; 472 answer_opts.crypto_options.enable_gcm_crypto_suites = gcm_answer;
473 f1_.set_secure(SEC_ENABLED); 473 f1_.set_secure(SEC_ENABLED);
474 f2_.set_secure(SEC_ENABLED); 474 f2_.set_secure(SEC_ENABLED);
475 std::unique_ptr<SessionDescription> offer( 475 std::unique_ptr<SessionDescription> offer(
476 f1_.CreateOffer(offer_opts, NULL)); 476 f1_.CreateOffer(offer_opts, nullptr));
477 ASSERT_TRUE(offer.get() != NULL); 477 ASSERT_TRUE(offer.get() != nullptr);
478 std::unique_ptr<SessionDescription> answer( 478 std::unique_ptr<SessionDescription> answer(
479 f2_.CreateAnswer(offer.get(), answer_opts, NULL)); 479 f2_.CreateAnswer(offer.get(), answer_opts, nullptr));
480 const ContentInfo* ac = answer->GetContentByName("audio"); 480 const ContentInfo* ac = answer->GetContentByName("audio");
481 const ContentInfo* vc = answer->GetContentByName("video"); 481 const ContentInfo* vc = answer->GetContentByName("video");
482 ASSERT_TRUE(ac != NULL); 482 ASSERT_TRUE(ac != nullptr);
483 ASSERT_TRUE(vc != NULL); 483 ASSERT_TRUE(vc != nullptr);
484 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type); 484 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type);
485 EXPECT_EQ(std::string(NS_JINGLE_RTP), vc->type); 485 EXPECT_EQ(std::string(NS_JINGLE_RTP), vc->type);
486 const AudioContentDescription* acd = 486 const AudioContentDescription* acd =
487 static_cast<const AudioContentDescription*>(ac->description); 487 static_cast<const AudioContentDescription*>(ac->description);
488 const VideoContentDescription* vcd = 488 const VideoContentDescription* vcd =
489 static_cast<const VideoContentDescription*>(vc->description); 489 static_cast<const VideoContentDescription*>(vc->description);
490 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type()); 490 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
491 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs()); 491 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs());
492 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // negotiated auto bw 492 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // negotiated auto bw
493 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc 493 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc
(...skipping 19 matching lines...) Expand all
513 MediaSessionDescriptionFactory f1_; 513 MediaSessionDescriptionFactory f1_;
514 MediaSessionDescriptionFactory f2_; 514 MediaSessionDescriptionFactory f2_;
515 TransportDescriptionFactory tdf1_; 515 TransportDescriptionFactory tdf1_;
516 TransportDescriptionFactory tdf2_; 516 TransportDescriptionFactory tdf2_;
517 }; 517 };
518 518
519 // Create a typical audio offer, and ensure it matches what we expect. 519 // Create a typical audio offer, and ensure it matches what we expect.
520 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateAudioOffer) { 520 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateAudioOffer) {
521 f1_.set_secure(SEC_ENABLED); 521 f1_.set_secure(SEC_ENABLED);
522 std::unique_ptr<SessionDescription> offer( 522 std::unique_ptr<SessionDescription> offer(
523 f1_.CreateOffer(MediaSessionOptions(), NULL)); 523 f1_.CreateOffer(MediaSessionOptions(), nullptr));
524 ASSERT_TRUE(offer.get() != NULL); 524 ASSERT_TRUE(offer.get() != nullptr);
525 const ContentInfo* ac = offer->GetContentByName("audio"); 525 const ContentInfo* ac = offer->GetContentByName("audio");
526 const ContentInfo* vc = offer->GetContentByName("video"); 526 const ContentInfo* vc = offer->GetContentByName("video");
527 ASSERT_TRUE(ac != NULL); 527 ASSERT_TRUE(ac != nullptr);
528 ASSERT_TRUE(vc == NULL); 528 ASSERT_TRUE(vc == nullptr);
529 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type); 529 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type);
530 const AudioContentDescription* acd = 530 const AudioContentDescription* acd =
531 static_cast<const AudioContentDescription*>(ac->description); 531 static_cast<const AudioContentDescription*>(ac->description);
532 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type()); 532 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
533 EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs()); 533 EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs());
534 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc 534 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc
535 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // default bandwidth (auto) 535 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // default bandwidth (auto)
536 EXPECT_TRUE(acd->rtcp_mux()); // rtcp-mux defaults on 536 EXPECT_TRUE(acd->rtcp_mux()); // rtcp-mux defaults on
537 ASSERT_CRYPTO(acd, 2U, CS_AES_CM_128_HMAC_SHA1_32); 537 ASSERT_CRYPTO(acd, 2U, CS_AES_CM_128_HMAC_SHA1_32);
538 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), acd->protocol()); 538 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), acd->protocol());
539 } 539 }
540 540
541 // Create a typical video offer, and ensure it matches what we expect. 541 // Create a typical video offer, and ensure it matches what we expect.
542 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateVideoOffer) { 542 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateVideoOffer) {
543 MediaSessionOptions opts; 543 MediaSessionOptions opts;
544 opts.recv_video = true; 544 opts.recv_video = true;
545 f1_.set_secure(SEC_ENABLED); 545 f1_.set_secure(SEC_ENABLED);
546 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 546 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
547 ASSERT_TRUE(offer.get() != NULL); 547 ASSERT_TRUE(offer.get() != nullptr);
548 const ContentInfo* ac = offer->GetContentByName("audio"); 548 const ContentInfo* ac = offer->GetContentByName("audio");
549 const ContentInfo* vc = offer->GetContentByName("video"); 549 const ContentInfo* vc = offer->GetContentByName("video");
550 ASSERT_TRUE(ac != NULL); 550 ASSERT_TRUE(ac != nullptr);
551 ASSERT_TRUE(vc != NULL); 551 ASSERT_TRUE(vc != nullptr);
552 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type); 552 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type);
553 EXPECT_EQ(std::string(NS_JINGLE_RTP), vc->type); 553 EXPECT_EQ(std::string(NS_JINGLE_RTP), vc->type);
554 const AudioContentDescription* acd = 554 const AudioContentDescription* acd =
555 static_cast<const AudioContentDescription*>(ac->description); 555 static_cast<const AudioContentDescription*>(ac->description);
556 const VideoContentDescription* vcd = 556 const VideoContentDescription* vcd =
557 static_cast<const VideoContentDescription*>(vc->description); 557 static_cast<const VideoContentDescription*>(vc->description);
558 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type()); 558 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
559 EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs()); 559 EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs());
560 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc 560 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc
561 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // default bandwidth (auto) 561 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // default bandwidth (auto)
(...skipping 17 matching lines...) Expand all
579 const AudioCodec& offered_audio_codec = f2_.audio_sendrecv_codecs()[0]; 579 const AudioCodec& offered_audio_codec = f2_.audio_sendrecv_codecs()[0];
580 const DataCodec& offered_data_codec = f2_.data_codecs()[0]; 580 const DataCodec& offered_data_codec = f2_.data_codecs()[0];
581 ASSERT_EQ(offered_video_codec.id, offered_audio_codec.id); 581 ASSERT_EQ(offered_video_codec.id, offered_audio_codec.id);
582 ASSERT_EQ(offered_video_codec.id, offered_data_codec.id); 582 ASSERT_EQ(offered_video_codec.id, offered_data_codec.id);
583 583
584 MediaSessionOptions opts; 584 MediaSessionOptions opts;
585 opts.recv_audio = true; 585 opts.recv_audio = true;
586 opts.recv_video = true; 586 opts.recv_video = true;
587 opts.data_channel_type = cricket::DCT_RTP; 587 opts.data_channel_type = cricket::DCT_RTP;
588 opts.bundle_enabled = true; 588 opts.bundle_enabled = true;
589 std::unique_ptr<SessionDescription> offer(f2_.CreateOffer(opts, NULL)); 589 std::unique_ptr<SessionDescription> offer(f2_.CreateOffer(opts, nullptr));
590 const VideoContentDescription* vcd = 590 const VideoContentDescription* vcd =
591 GetFirstVideoContentDescription(offer.get()); 591 GetFirstVideoContentDescription(offer.get());
592 const AudioContentDescription* acd = 592 const AudioContentDescription* acd =
593 GetFirstAudioContentDescription(offer.get()); 593 GetFirstAudioContentDescription(offer.get());
594 const DataContentDescription* dcd = 594 const DataContentDescription* dcd =
595 GetFirstDataContentDescription(offer.get()); 595 GetFirstDataContentDescription(offer.get());
596 ASSERT_TRUE(NULL != vcd); 596 ASSERT_TRUE(nullptr != vcd);
597 ASSERT_TRUE(NULL != acd); 597 ASSERT_TRUE(nullptr != acd);
598 ASSERT_TRUE(NULL != dcd); 598 ASSERT_TRUE(nullptr != dcd);
599 EXPECT_NE(vcd->codecs()[0].id, acd->codecs()[0].id); 599 EXPECT_NE(vcd->codecs()[0].id, acd->codecs()[0].id);
600 EXPECT_NE(vcd->codecs()[0].id, dcd->codecs()[0].id); 600 EXPECT_NE(vcd->codecs()[0].id, dcd->codecs()[0].id);
601 EXPECT_NE(acd->codecs()[0].id, dcd->codecs()[0].id); 601 EXPECT_NE(acd->codecs()[0].id, dcd->codecs()[0].id);
602 EXPECT_EQ(vcd->codecs()[0].name, offered_video_codec.name); 602 EXPECT_EQ(vcd->codecs()[0].name, offered_video_codec.name);
603 EXPECT_EQ(acd->codecs()[0].name, offered_audio_codec.name); 603 EXPECT_EQ(acd->codecs()[0].name, offered_audio_codec.name);
604 EXPECT_EQ(dcd->codecs()[0].name, offered_data_codec.name); 604 EXPECT_EQ(dcd->codecs()[0].name, offered_data_codec.name);
605 } 605 }
606 606
607 // Test creating an updated offer with with bundle, audio, video and data 607 // Test creating an updated offer with with bundle, audio, video and data
608 // after an audio only session has been negotiated. 608 // after an audio only session has been negotiated.
609 TEST_F(MediaSessionDescriptionFactoryTest, 609 TEST_F(MediaSessionDescriptionFactoryTest,
610 TestCreateUpdatedVideoOfferWithBundle) { 610 TestCreateUpdatedVideoOfferWithBundle) {
611 f1_.set_secure(SEC_ENABLED); 611 f1_.set_secure(SEC_ENABLED);
612 f2_.set_secure(SEC_ENABLED); 612 f2_.set_secure(SEC_ENABLED);
613 MediaSessionOptions opts; 613 MediaSessionOptions opts;
614 opts.recv_audio = true; 614 opts.recv_audio = true;
615 opts.recv_video = false; 615 opts.recv_video = false;
616 opts.data_channel_type = cricket::DCT_NONE; 616 opts.data_channel_type = cricket::DCT_NONE;
617 opts.bundle_enabled = true; 617 opts.bundle_enabled = true;
618 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 618 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
619 std::unique_ptr<SessionDescription> answer( 619 std::unique_ptr<SessionDescription> answer(
620 f2_.CreateAnswer(offer.get(), opts, NULL)); 620 f2_.CreateAnswer(offer.get(), opts, nullptr));
621 621
622 MediaSessionOptions updated_opts; 622 MediaSessionOptions updated_opts;
623 updated_opts.recv_audio = true; 623 updated_opts.recv_audio = true;
624 updated_opts.recv_video = true; 624 updated_opts.recv_video = true;
625 updated_opts.data_channel_type = cricket::DCT_RTP; 625 updated_opts.data_channel_type = cricket::DCT_RTP;
626 updated_opts.bundle_enabled = true; 626 updated_opts.bundle_enabled = true;
627 std::unique_ptr<SessionDescription> updated_offer( 627 std::unique_ptr<SessionDescription> updated_offer(
628 f1_.CreateOffer(updated_opts, answer.get())); 628 f1_.CreateOffer(updated_opts, answer.get()));
629 629
630 const AudioContentDescription* acd = 630 const AudioContentDescription* acd =
631 GetFirstAudioContentDescription(updated_offer.get()); 631 GetFirstAudioContentDescription(updated_offer.get());
632 const VideoContentDescription* vcd = 632 const VideoContentDescription* vcd =
633 GetFirstVideoContentDescription(updated_offer.get()); 633 GetFirstVideoContentDescription(updated_offer.get());
634 const DataContentDescription* dcd = 634 const DataContentDescription* dcd =
635 GetFirstDataContentDescription(updated_offer.get()); 635 GetFirstDataContentDescription(updated_offer.get());
636 EXPECT_TRUE(NULL != vcd); 636 EXPECT_TRUE(nullptr != vcd);
637 EXPECT_TRUE(NULL != acd); 637 EXPECT_TRUE(nullptr != acd);
638 EXPECT_TRUE(NULL != dcd); 638 EXPECT_TRUE(nullptr != dcd);
639 639
640 ASSERT_CRYPTO(acd, 1U, CS_AES_CM_128_HMAC_SHA1_80); 640 ASSERT_CRYPTO(acd, 1U, CS_AES_CM_128_HMAC_SHA1_80);
641 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), acd->protocol()); 641 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), acd->protocol());
642 ASSERT_CRYPTO(vcd, 1U, CS_AES_CM_128_HMAC_SHA1_80); 642 ASSERT_CRYPTO(vcd, 1U, CS_AES_CM_128_HMAC_SHA1_80);
643 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), vcd->protocol()); 643 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), vcd->protocol());
644 ASSERT_CRYPTO(dcd, 1U, CS_AES_CM_128_HMAC_SHA1_80); 644 ASSERT_CRYPTO(dcd, 1U, CS_AES_CM_128_HMAC_SHA1_80);
645 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), dcd->protocol()); 645 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), dcd->protocol());
646 } 646 }
647 647
648 // Create a RTP data offer, and ensure it matches what we expect. 648 // Create a RTP data offer, and ensure it matches what we expect.
649 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateRtpDataOffer) { 649 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateRtpDataOffer) {
650 MediaSessionOptions opts; 650 MediaSessionOptions opts;
651 opts.data_channel_type = cricket::DCT_RTP; 651 opts.data_channel_type = cricket::DCT_RTP;
652 f1_.set_secure(SEC_ENABLED); 652 f1_.set_secure(SEC_ENABLED);
653 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 653 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
654 ASSERT_TRUE(offer.get() != NULL); 654 ASSERT_TRUE(offer.get() != nullptr);
655 const ContentInfo* ac = offer->GetContentByName("audio"); 655 const ContentInfo* ac = offer->GetContentByName("audio");
656 const ContentInfo* dc = offer->GetContentByName("data"); 656 const ContentInfo* dc = offer->GetContentByName("data");
657 ASSERT_TRUE(ac != NULL); 657 ASSERT_TRUE(ac != nullptr);
658 ASSERT_TRUE(dc != NULL); 658 ASSERT_TRUE(dc != nullptr);
659 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type); 659 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type);
660 EXPECT_EQ(std::string(NS_JINGLE_RTP), dc->type); 660 EXPECT_EQ(std::string(NS_JINGLE_RTP), dc->type);
661 const AudioContentDescription* acd = 661 const AudioContentDescription* acd =
662 static_cast<const AudioContentDescription*>(ac->description); 662 static_cast<const AudioContentDescription*>(ac->description);
663 const DataContentDescription* dcd = 663 const DataContentDescription* dcd =
664 static_cast<const DataContentDescription*>(dc->description); 664 static_cast<const DataContentDescription*>(dc->description);
665 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type()); 665 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
666 EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs()); 666 EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs());
667 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc 667 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc
668 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // default bandwidth (auto) 668 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // default bandwidth (auto)
(...skipping 10 matching lines...) Expand all
679 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), dcd->protocol()); 679 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), dcd->protocol());
680 } 680 }
681 681
682 // Create an SCTP data offer with bundle without error. 682 // Create an SCTP data offer with bundle without error.
683 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateSctpDataOffer) { 683 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateSctpDataOffer) {
684 MediaSessionOptions opts; 684 MediaSessionOptions opts;
685 opts.recv_audio = false; 685 opts.recv_audio = false;
686 opts.bundle_enabled = true; 686 opts.bundle_enabled = true;
687 opts.data_channel_type = cricket::DCT_SCTP; 687 opts.data_channel_type = cricket::DCT_SCTP;
688 f1_.set_secure(SEC_ENABLED); 688 f1_.set_secure(SEC_ENABLED);
689 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 689 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
690 EXPECT_TRUE(offer.get() != NULL); 690 EXPECT_TRUE(offer.get() != nullptr);
691 EXPECT_TRUE(offer->GetContentByName("data") != NULL); 691 EXPECT_TRUE(offer->GetContentByName("data") != nullptr);
692 } 692 }
693 693
694 // Test creating an sctp data channel from an already generated offer. 694 // Test creating an sctp data channel from an already generated offer.
695 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateImplicitSctpDataOffer) { 695 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateImplicitSctpDataOffer) {
696 MediaSessionOptions opts; 696 MediaSessionOptions opts;
697 opts.recv_audio = false; 697 opts.recv_audio = false;
698 opts.bundle_enabled = true; 698 opts.bundle_enabled = true;
699 opts.data_channel_type = cricket::DCT_SCTP; 699 opts.data_channel_type = cricket::DCT_SCTP;
700 f1_.set_secure(SEC_ENABLED); 700 f1_.set_secure(SEC_ENABLED);
701 std::unique_ptr<SessionDescription> offer1(f1_.CreateOffer(opts, NULL)); 701 std::unique_ptr<SessionDescription> offer1(f1_.CreateOffer(opts, nullptr));
702 ASSERT_TRUE(offer1.get() != NULL); 702 ASSERT_TRUE(offer1.get() != nullptr);
703 const ContentInfo* data = offer1->GetContentByName("data"); 703 const ContentInfo* data = offer1->GetContentByName("data");
704 ASSERT_TRUE(data != NULL); 704 ASSERT_TRUE(data != nullptr);
705 const MediaContentDescription* mdesc = 705 const MediaContentDescription* mdesc =
706 static_cast<const MediaContentDescription*>(data->description); 706 static_cast<const MediaContentDescription*>(data->description);
707 ASSERT_EQ(cricket::kMediaProtocolSctp, mdesc->protocol()); 707 ASSERT_EQ(cricket::kMediaProtocolSctp, mdesc->protocol());
708 708
709 // Now set data_channel_type to 'none' (default) and make sure that the 709 // Now set data_channel_type to 'none' (default) and make sure that the
710 // datachannel type that gets generated from the previous offer, is of the 710 // datachannel type that gets generated from the previous offer, is of the
711 // same type. 711 // same type.
712 opts.data_channel_type = cricket::DCT_NONE; 712 opts.data_channel_type = cricket::DCT_NONE;
713 std::unique_ptr<SessionDescription> offer2( 713 std::unique_ptr<SessionDescription> offer2(
714 f1_.CreateOffer(opts, offer1.get())); 714 f1_.CreateOffer(opts, offer1.get()));
715 data = offer2->GetContentByName("data"); 715 data = offer2->GetContentByName("data");
716 ASSERT_TRUE(data != NULL); 716 ASSERT_TRUE(data != nullptr);
717 mdesc = static_cast<const MediaContentDescription*>(data->description); 717 mdesc = static_cast<const MediaContentDescription*>(data->description);
718 EXPECT_EQ(cricket::kMediaProtocolSctp, mdesc->protocol()); 718 EXPECT_EQ(cricket::kMediaProtocolSctp, mdesc->protocol());
719 } 719 }
720 720
721 // Create an audio, video offer without legacy StreamParams. 721 // Create an audio, video offer without legacy StreamParams.
722 TEST_F(MediaSessionDescriptionFactoryTest, 722 TEST_F(MediaSessionDescriptionFactoryTest,
723 TestCreateOfferWithoutLegacyStreams) { 723 TestCreateOfferWithoutLegacyStreams) {
724 MediaSessionOptions opts; 724 MediaSessionOptions opts;
725 opts.recv_video = true; 725 opts.recv_video = true;
726 f1_.set_add_legacy_streams(false); 726 f1_.set_add_legacy_streams(false);
727 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 727 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
728 ASSERT_TRUE(offer.get() != NULL); 728 ASSERT_TRUE(offer.get() != nullptr);
729 const ContentInfo* ac = offer->GetContentByName("audio"); 729 const ContentInfo* ac = offer->GetContentByName("audio");
730 const ContentInfo* vc = offer->GetContentByName("video"); 730 const ContentInfo* vc = offer->GetContentByName("video");
731 ASSERT_TRUE(ac != NULL); 731 ASSERT_TRUE(ac != nullptr);
732 ASSERT_TRUE(vc != NULL); 732 ASSERT_TRUE(vc != nullptr);
733 const AudioContentDescription* acd = 733 const AudioContentDescription* acd =
734 static_cast<const AudioContentDescription*>(ac->description); 734 static_cast<const AudioContentDescription*>(ac->description);
735 const VideoContentDescription* vcd = 735 const VideoContentDescription* vcd =
736 static_cast<const VideoContentDescription*>(vc->description); 736 static_cast<const VideoContentDescription*>(vc->description);
737 737
738 EXPECT_FALSE(vcd->has_ssrcs()); // No StreamParams. 738 EXPECT_FALSE(vcd->has_ssrcs()); // No StreamParams.
739 EXPECT_FALSE(acd->has_ssrcs()); // No StreamParams. 739 EXPECT_FALSE(acd->has_ssrcs()); // No StreamParams.
740 } 740 }
741 741
742 // Creates an audio+video sendonly offer. 742 // Creates an audio+video sendonly offer.
743 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateSendOnlyOffer) { 743 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateSendOnlyOffer) {
744 MediaSessionOptions options; 744 MediaSessionOptions options;
745 options.recv_audio = false; 745 options.recv_audio = false;
746 options.recv_video = false; 746 options.recv_video = false;
747 options.AddSendStream(MEDIA_TYPE_VIDEO, kVideoTrack1, kMediaStream1); 747 options.AddSendStream(MEDIA_TYPE_VIDEO, kVideoTrack1, kMediaStream1);
748 options.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack1, kMediaStream1); 748 options.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack1, kMediaStream1);
749 749
750 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(options, NULL)); 750 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(options, nullptr));
751 ASSERT_TRUE(offer.get() != NULL); 751 ASSERT_TRUE(offer.get() != nullptr);
752 EXPECT_EQ(2u, offer->contents().size()); 752 EXPECT_EQ(2u, offer->contents().size());
753 EXPECT_TRUE(IsMediaContentOfType(&offer->contents()[0], MEDIA_TYPE_AUDIO)); 753 EXPECT_TRUE(IsMediaContentOfType(&offer->contents()[0], MEDIA_TYPE_AUDIO));
754 EXPECT_TRUE(IsMediaContentOfType(&offer->contents()[1], MEDIA_TYPE_VIDEO)); 754 EXPECT_TRUE(IsMediaContentOfType(&offer->contents()[1], MEDIA_TYPE_VIDEO));
755 755
756 EXPECT_EQ(cricket::MD_SENDONLY, GetMediaDirection(&offer->contents()[0])); 756 EXPECT_EQ(cricket::MD_SENDONLY, GetMediaDirection(&offer->contents()[0]));
757 EXPECT_EQ(cricket::MD_SENDONLY, GetMediaDirection(&offer->contents()[1])); 757 EXPECT_EQ(cricket::MD_SENDONLY, GetMediaDirection(&offer->contents()[1]));
758 } 758 }
759 759
760 // Verifies that the order of the media contents in the current 760 // Verifies that the order of the media contents in the current
761 // SessionDescription is preserved in the new SessionDescription. 761 // SessionDescription is preserved in the new SessionDescription.
762 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateOfferContentOrder) { 762 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateOfferContentOrder) {
763 MediaSessionOptions opts; 763 MediaSessionOptions opts;
764 opts.recv_audio = false; 764 opts.recv_audio = false;
765 opts.recv_video = false; 765 opts.recv_video = false;
766 opts.data_channel_type = cricket::DCT_SCTP; 766 opts.data_channel_type = cricket::DCT_SCTP;
767 767
768 std::unique_ptr<SessionDescription> offer1(f1_.CreateOffer(opts, NULL)); 768 std::unique_ptr<SessionDescription> offer1(f1_.CreateOffer(opts, nullptr));
769 ASSERT_TRUE(offer1.get() != NULL); 769 ASSERT_TRUE(offer1.get() != nullptr);
770 EXPECT_EQ(1u, offer1->contents().size()); 770 EXPECT_EQ(1u, offer1->contents().size());
771 EXPECT_TRUE(IsMediaContentOfType(&offer1->contents()[0], MEDIA_TYPE_DATA)); 771 EXPECT_TRUE(IsMediaContentOfType(&offer1->contents()[0], MEDIA_TYPE_DATA));
772 772
773 opts.recv_video = true; 773 opts.recv_video = true;
774 std::unique_ptr<SessionDescription> offer2( 774 std::unique_ptr<SessionDescription> offer2(
775 f1_.CreateOffer(opts, offer1.get())); 775 f1_.CreateOffer(opts, offer1.get()));
776 ASSERT_TRUE(offer2.get() != NULL); 776 ASSERT_TRUE(offer2.get() != nullptr);
777 EXPECT_EQ(2u, offer2->contents().size()); 777 EXPECT_EQ(2u, offer2->contents().size());
778 EXPECT_TRUE(IsMediaContentOfType(&offer2->contents()[0], MEDIA_TYPE_DATA)); 778 EXPECT_TRUE(IsMediaContentOfType(&offer2->contents()[0], MEDIA_TYPE_DATA));
779 EXPECT_TRUE(IsMediaContentOfType(&offer2->contents()[1], MEDIA_TYPE_VIDEO)); 779 EXPECT_TRUE(IsMediaContentOfType(&offer2->contents()[1], MEDIA_TYPE_VIDEO));
780 780
781 opts.recv_audio = true; 781 opts.recv_audio = true;
782 std::unique_ptr<SessionDescription> offer3( 782 std::unique_ptr<SessionDescription> offer3(
783 f1_.CreateOffer(opts, offer2.get())); 783 f1_.CreateOffer(opts, offer2.get()));
784 ASSERT_TRUE(offer3.get() != NULL); 784 ASSERT_TRUE(offer3.get() != nullptr);
785 EXPECT_EQ(3u, offer3->contents().size()); 785 EXPECT_EQ(3u, offer3->contents().size());
786 EXPECT_TRUE(IsMediaContentOfType(&offer3->contents()[0], MEDIA_TYPE_DATA)); 786 EXPECT_TRUE(IsMediaContentOfType(&offer3->contents()[0], MEDIA_TYPE_DATA));
787 EXPECT_TRUE(IsMediaContentOfType(&offer3->contents()[1], MEDIA_TYPE_VIDEO)); 787 EXPECT_TRUE(IsMediaContentOfType(&offer3->contents()[1], MEDIA_TYPE_VIDEO));
788 EXPECT_TRUE(IsMediaContentOfType(&offer3->contents()[2], MEDIA_TYPE_AUDIO)); 788 EXPECT_TRUE(IsMediaContentOfType(&offer3->contents()[2], MEDIA_TYPE_AUDIO));
789 789
790 // Verifies the default order is audio-video-data, so that the previous checks 790 // Verifies the default order is audio-video-data, so that the previous checks
791 // didn't pass by accident. 791 // didn't pass by accident.
792 std::unique_ptr<SessionDescription> offer4(f1_.CreateOffer(opts, NULL)); 792 std::unique_ptr<SessionDescription> offer4(f1_.CreateOffer(opts, nullptr));
793 ASSERT_TRUE(offer4.get() != NULL); 793 ASSERT_TRUE(offer4.get() != nullptr);
794 EXPECT_EQ(3u, offer4->contents().size()); 794 EXPECT_EQ(3u, offer4->contents().size());
795 EXPECT_TRUE(IsMediaContentOfType(&offer4->contents()[0], MEDIA_TYPE_AUDIO)); 795 EXPECT_TRUE(IsMediaContentOfType(&offer4->contents()[0], MEDIA_TYPE_AUDIO));
796 EXPECT_TRUE(IsMediaContentOfType(&offer4->contents()[1], MEDIA_TYPE_VIDEO)); 796 EXPECT_TRUE(IsMediaContentOfType(&offer4->contents()[1], MEDIA_TYPE_VIDEO));
797 EXPECT_TRUE(IsMediaContentOfType(&offer4->contents()[2], MEDIA_TYPE_DATA)); 797 EXPECT_TRUE(IsMediaContentOfType(&offer4->contents()[2], MEDIA_TYPE_DATA));
798 } 798 }
799 799
800 // Create a typical audio answer, and ensure it matches what we expect. 800 // Create a typical audio answer, and ensure it matches what we expect.
801 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateAudioAnswer) { 801 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateAudioAnswer) {
802 f1_.set_secure(SEC_ENABLED); 802 f1_.set_secure(SEC_ENABLED);
803 f2_.set_secure(SEC_ENABLED); 803 f2_.set_secure(SEC_ENABLED);
804 std::unique_ptr<SessionDescription> offer( 804 std::unique_ptr<SessionDescription> offer(
805 f1_.CreateOffer(MediaSessionOptions(), NULL)); 805 f1_.CreateOffer(MediaSessionOptions(), nullptr));
806 ASSERT_TRUE(offer.get() != NULL); 806 ASSERT_TRUE(offer.get() != nullptr);
807 std::unique_ptr<SessionDescription> answer( 807 std::unique_ptr<SessionDescription> answer(
808 f2_.CreateAnswer(offer.get(), MediaSessionOptions(), NULL)); 808 f2_.CreateAnswer(offer.get(), MediaSessionOptions(), nullptr));
809 const ContentInfo* ac = answer->GetContentByName("audio"); 809 const ContentInfo* ac = answer->GetContentByName("audio");
810 const ContentInfo* vc = answer->GetContentByName("video"); 810 const ContentInfo* vc = answer->GetContentByName("video");
811 ASSERT_TRUE(ac != NULL); 811 ASSERT_TRUE(ac != nullptr);
812 ASSERT_TRUE(vc == NULL); 812 ASSERT_TRUE(vc == nullptr);
813 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type); 813 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type);
814 const AudioContentDescription* acd = 814 const AudioContentDescription* acd =
815 static_cast<const AudioContentDescription*>(ac->description); 815 static_cast<const AudioContentDescription*>(ac->description);
816 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type()); 816 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
817 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs()); 817 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs());
818 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc 818 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc
819 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // negotiated auto bw 819 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // negotiated auto bw
820 EXPECT_TRUE(acd->rtcp_mux()); // negotiated rtcp-mux 820 EXPECT_TRUE(acd->rtcp_mux()); // negotiated rtcp-mux
821 ASSERT_CRYPTO(acd, 1U, CS_AES_CM_128_HMAC_SHA1_32); 821 ASSERT_CRYPTO(acd, 1U, CS_AES_CM_128_HMAC_SHA1_32);
822 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), acd->protocol()); 822 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), acd->protocol());
823 } 823 }
824 824
825 // Create a typical audio answer with GCM ciphers enabled, and ensure it 825 // Create a typical audio answer with GCM ciphers enabled, and ensure it
826 // matches what we expect. 826 // matches what we expect.
827 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateAudioAnswerGcm) { 827 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateAudioAnswerGcm) {
828 f1_.set_secure(SEC_ENABLED); 828 f1_.set_secure(SEC_ENABLED);
829 f2_.set_secure(SEC_ENABLED); 829 f2_.set_secure(SEC_ENABLED);
830 MediaSessionOptions options; 830 MediaSessionOptions options;
831 options.crypto_options.enable_gcm_crypto_suites = true; 831 options.crypto_options.enable_gcm_crypto_suites = true;
832 std::unique_ptr<SessionDescription> offer( 832 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(options, nullptr));
833 f1_.CreateOffer(options, NULL)); 833 ASSERT_TRUE(offer.get() != nullptr);
834 ASSERT_TRUE(offer.get() != NULL);
835 std::unique_ptr<SessionDescription> answer( 834 std::unique_ptr<SessionDescription> answer(
836 f2_.CreateAnswer(offer.get(), options, NULL)); 835 f2_.CreateAnswer(offer.get(), options, nullptr));
837 const ContentInfo* ac = answer->GetContentByName("audio"); 836 const ContentInfo* ac = answer->GetContentByName("audio");
838 const ContentInfo* vc = answer->GetContentByName("video"); 837 const ContentInfo* vc = answer->GetContentByName("video");
839 ASSERT_TRUE(ac != NULL); 838 ASSERT_TRUE(ac != nullptr);
840 ASSERT_TRUE(vc == NULL); 839 ASSERT_TRUE(vc == nullptr);
841 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type); 840 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type);
842 const AudioContentDescription* acd = 841 const AudioContentDescription* acd =
843 static_cast<const AudioContentDescription*>(ac->description); 842 static_cast<const AudioContentDescription*>(ac->description);
844 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type()); 843 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
845 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs()); 844 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs());
846 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc 845 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc
847 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // negotiated auto bw 846 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // negotiated auto bw
848 EXPECT_TRUE(acd->rtcp_mux()); // negotiated rtcp-mux 847 EXPECT_TRUE(acd->rtcp_mux()); // negotiated rtcp-mux
849 ASSERT_CRYPTO(acd, 1U, CS_AEAD_AES_256_GCM); 848 ASSERT_CRYPTO(acd, 1U, CS_AEAD_AES_256_GCM);
850 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), acd->protocol()); 849 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), acd->protocol());
851 } 850 }
852 851
853 // Create a typical video answer, and ensure it matches what we expect. 852 // Create a typical video answer, and ensure it matches what we expect.
854 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateVideoAnswer) { 853 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateVideoAnswer) {
855 MediaSessionOptions opts; 854 MediaSessionOptions opts;
856 opts.recv_video = true; 855 opts.recv_video = true;
857 f1_.set_secure(SEC_ENABLED); 856 f1_.set_secure(SEC_ENABLED);
858 f2_.set_secure(SEC_ENABLED); 857 f2_.set_secure(SEC_ENABLED);
859 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 858 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
860 ASSERT_TRUE(offer.get() != NULL); 859 ASSERT_TRUE(offer.get() != nullptr);
861 std::unique_ptr<SessionDescription> answer( 860 std::unique_ptr<SessionDescription> answer(
862 f2_.CreateAnswer(offer.get(), opts, NULL)); 861 f2_.CreateAnswer(offer.get(), opts, nullptr));
863 const ContentInfo* ac = answer->GetContentByName("audio"); 862 const ContentInfo* ac = answer->GetContentByName("audio");
864 const ContentInfo* vc = answer->GetContentByName("video"); 863 const ContentInfo* vc = answer->GetContentByName("video");
865 ASSERT_TRUE(ac != NULL); 864 ASSERT_TRUE(ac != nullptr);
866 ASSERT_TRUE(vc != NULL); 865 ASSERT_TRUE(vc != nullptr);
867 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type); 866 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type);
868 EXPECT_EQ(std::string(NS_JINGLE_RTP), vc->type); 867 EXPECT_EQ(std::string(NS_JINGLE_RTP), vc->type);
869 const AudioContentDescription* acd = 868 const AudioContentDescription* acd =
870 static_cast<const AudioContentDescription*>(ac->description); 869 static_cast<const AudioContentDescription*>(ac->description);
871 const VideoContentDescription* vcd = 870 const VideoContentDescription* vcd =
872 static_cast<const VideoContentDescription*>(vc->description); 871 static_cast<const VideoContentDescription*>(vc->description);
873 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type()); 872 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
874 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs()); 873 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs());
875 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // negotiated auto bw 874 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // negotiated auto bw
876 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc 875 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc
(...skipping 23 matching lines...) Expand all
900 // and ensure it matches what we expect. 899 // and ensure it matches what we expect.
901 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateVideoAnswerGcmAnswer) { 900 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateVideoAnswerGcmAnswer) {
902 TestVideoGcmCipher(false, true); 901 TestVideoGcmCipher(false, true);
903 } 902 }
904 903
905 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateDataAnswer) { 904 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateDataAnswer) {
906 MediaSessionOptions opts; 905 MediaSessionOptions opts;
907 opts.data_channel_type = cricket::DCT_RTP; 906 opts.data_channel_type = cricket::DCT_RTP;
908 f1_.set_secure(SEC_ENABLED); 907 f1_.set_secure(SEC_ENABLED);
909 f2_.set_secure(SEC_ENABLED); 908 f2_.set_secure(SEC_ENABLED);
910 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 909 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
911 ASSERT_TRUE(offer.get() != NULL); 910 ASSERT_TRUE(offer.get() != nullptr);
912 std::unique_ptr<SessionDescription> answer( 911 std::unique_ptr<SessionDescription> answer(
913 f2_.CreateAnswer(offer.get(), opts, NULL)); 912 f2_.CreateAnswer(offer.get(), opts, nullptr));
914 const ContentInfo* ac = answer->GetContentByName("audio"); 913 const ContentInfo* ac = answer->GetContentByName("audio");
915 const ContentInfo* vc = answer->GetContentByName("data"); 914 const ContentInfo* vc = answer->GetContentByName("data");
916 ASSERT_TRUE(ac != NULL); 915 ASSERT_TRUE(ac != nullptr);
917 ASSERT_TRUE(vc != NULL); 916 ASSERT_TRUE(vc != nullptr);
918 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type); 917 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type);
919 EXPECT_EQ(std::string(NS_JINGLE_RTP), vc->type); 918 EXPECT_EQ(std::string(NS_JINGLE_RTP), vc->type);
920 const AudioContentDescription* acd = 919 const AudioContentDescription* acd =
921 static_cast<const AudioContentDescription*>(ac->description); 920 static_cast<const AudioContentDescription*>(ac->description);
922 const DataContentDescription* vcd = 921 const DataContentDescription* vcd =
923 static_cast<const DataContentDescription*>(vc->description); 922 static_cast<const DataContentDescription*>(vc->description);
924 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type()); 923 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
925 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs()); 924 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs());
926 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // negotiated auto bw 925 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // negotiated auto bw
927 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc 926 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc
928 EXPECT_TRUE(acd->rtcp_mux()); // negotiated rtcp-mux 927 EXPECT_TRUE(acd->rtcp_mux()); // negotiated rtcp-mux
929 ASSERT_CRYPTO(acd, 1U, CS_AES_CM_128_HMAC_SHA1_32); 928 ASSERT_CRYPTO(acd, 1U, CS_AES_CM_128_HMAC_SHA1_32);
930 EXPECT_EQ(MEDIA_TYPE_DATA, vcd->type()); 929 EXPECT_EQ(MEDIA_TYPE_DATA, vcd->type());
931 EXPECT_EQ(MAKE_VECTOR(kDataCodecsAnswer), vcd->codecs()); 930 EXPECT_EQ(MAKE_VECTOR(kDataCodecsAnswer), vcd->codecs());
932 EXPECT_NE(0U, vcd->first_ssrc()); // a random nonzero ssrc 931 EXPECT_NE(0U, vcd->first_ssrc()); // a random nonzero ssrc
933 EXPECT_TRUE(vcd->rtcp_mux()); // negotiated rtcp-mux 932 EXPECT_TRUE(vcd->rtcp_mux()); // negotiated rtcp-mux
934 ASSERT_CRYPTO(vcd, 1U, CS_AES_CM_128_HMAC_SHA1_80); 933 ASSERT_CRYPTO(vcd, 1U, CS_AES_CM_128_HMAC_SHA1_80);
935 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), vcd->protocol()); 934 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), vcd->protocol());
936 } 935 }
937 936
938 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateDataAnswerGcm) { 937 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateDataAnswerGcm) {
939 MediaSessionOptions opts; 938 MediaSessionOptions opts;
940 opts.data_channel_type = cricket::DCT_RTP; 939 opts.data_channel_type = cricket::DCT_RTP;
941 opts.crypto_options.enable_gcm_crypto_suites = true; 940 opts.crypto_options.enable_gcm_crypto_suites = true;
942 f1_.set_secure(SEC_ENABLED); 941 f1_.set_secure(SEC_ENABLED);
943 f2_.set_secure(SEC_ENABLED); 942 f2_.set_secure(SEC_ENABLED);
944 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 943 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
945 ASSERT_TRUE(offer.get() != NULL); 944 ASSERT_TRUE(offer.get() != nullptr);
946 std::unique_ptr<SessionDescription> answer( 945 std::unique_ptr<SessionDescription> answer(
947 f2_.CreateAnswer(offer.get(), opts, NULL)); 946 f2_.CreateAnswer(offer.get(), opts, nullptr));
948 const ContentInfo* ac = answer->GetContentByName("audio"); 947 const ContentInfo* ac = answer->GetContentByName("audio");
949 const ContentInfo* vc = answer->GetContentByName("data"); 948 const ContentInfo* vc = answer->GetContentByName("data");
950 ASSERT_TRUE(ac != NULL); 949 ASSERT_TRUE(ac != nullptr);
951 ASSERT_TRUE(vc != NULL); 950 ASSERT_TRUE(vc != nullptr);
952 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type); 951 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type);
953 EXPECT_EQ(std::string(NS_JINGLE_RTP), vc->type); 952 EXPECT_EQ(std::string(NS_JINGLE_RTP), vc->type);
954 const AudioContentDescription* acd = 953 const AudioContentDescription* acd =
955 static_cast<const AudioContentDescription*>(ac->description); 954 static_cast<const AudioContentDescription*>(ac->description);
956 const DataContentDescription* vcd = 955 const DataContentDescription* vcd =
957 static_cast<const DataContentDescription*>(vc->description); 956 static_cast<const DataContentDescription*>(vc->description);
958 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type()); 957 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
959 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs()); 958 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs());
960 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // negotiated auto bw 959 EXPECT_EQ(kAutoBandwidth, acd->bandwidth()); // negotiated auto bw
961 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc 960 EXPECT_NE(0U, acd->first_ssrc()); // a random nonzero ssrc
962 EXPECT_TRUE(acd->rtcp_mux()); // negotiated rtcp-mux 961 EXPECT_TRUE(acd->rtcp_mux()); // negotiated rtcp-mux
963 ASSERT_CRYPTO(acd, 1U, CS_AEAD_AES_256_GCM); 962 ASSERT_CRYPTO(acd, 1U, CS_AEAD_AES_256_GCM);
964 EXPECT_EQ(MEDIA_TYPE_DATA, vcd->type()); 963 EXPECT_EQ(MEDIA_TYPE_DATA, vcd->type());
965 EXPECT_EQ(MAKE_VECTOR(kDataCodecsAnswer), vcd->codecs()); 964 EXPECT_EQ(MAKE_VECTOR(kDataCodecsAnswer), vcd->codecs());
966 EXPECT_NE(0U, vcd->first_ssrc()); // a random nonzero ssrc 965 EXPECT_NE(0U, vcd->first_ssrc()); // a random nonzero ssrc
967 EXPECT_TRUE(vcd->rtcp_mux()); // negotiated rtcp-mux 966 EXPECT_TRUE(vcd->rtcp_mux()); // negotiated rtcp-mux
968 ASSERT_CRYPTO(vcd, 1U, CS_AEAD_AES_256_GCM); 967 ASSERT_CRYPTO(vcd, 1U, CS_AEAD_AES_256_GCM);
969 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), vcd->protocol()); 968 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), vcd->protocol());
970 } 969 }
971 970
972 // Verifies that the order of the media contents in the offer is preserved in 971 // Verifies that the order of the media contents in the offer is preserved in
973 // the answer. 972 // the answer.
974 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateAnswerContentOrder) { 973 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateAnswerContentOrder) {
975 MediaSessionOptions opts; 974 MediaSessionOptions opts;
976 975
977 // Creates a data only offer. 976 // Creates a data only offer.
978 opts.recv_audio = false; 977 opts.recv_audio = false;
979 opts.data_channel_type = cricket::DCT_SCTP; 978 opts.data_channel_type = cricket::DCT_SCTP;
980 std::unique_ptr<SessionDescription> offer1(f1_.CreateOffer(opts, NULL)); 979 std::unique_ptr<SessionDescription> offer1(f1_.CreateOffer(opts, nullptr));
981 ASSERT_TRUE(offer1.get() != NULL); 980 ASSERT_TRUE(offer1.get() != nullptr);
982 981
983 // Appends audio to the offer. 982 // Appends audio to the offer.
984 opts.recv_audio = true; 983 opts.recv_audio = true;
985 std::unique_ptr<SessionDescription> offer2( 984 std::unique_ptr<SessionDescription> offer2(
986 f1_.CreateOffer(opts, offer1.get())); 985 f1_.CreateOffer(opts, offer1.get()));
987 ASSERT_TRUE(offer2.get() != NULL); 986 ASSERT_TRUE(offer2.get() != nullptr);
988 987
989 // Appends video to the offer. 988 // Appends video to the offer.
990 opts.recv_video = true; 989 opts.recv_video = true;
991 std::unique_ptr<SessionDescription> offer3( 990 std::unique_ptr<SessionDescription> offer3(
992 f1_.CreateOffer(opts, offer2.get())); 991 f1_.CreateOffer(opts, offer2.get()));
993 ASSERT_TRUE(offer3.get() != NULL); 992 ASSERT_TRUE(offer3.get() != nullptr);
994 993
995 std::unique_ptr<SessionDescription> answer( 994 std::unique_ptr<SessionDescription> answer(
996 f2_.CreateAnswer(offer3.get(), opts, NULL)); 995 f2_.CreateAnswer(offer3.get(), opts, nullptr));
997 ASSERT_TRUE(answer.get() != NULL); 996 ASSERT_TRUE(answer.get() != nullptr);
998 EXPECT_EQ(3u, answer->contents().size()); 997 EXPECT_EQ(3u, answer->contents().size());
999 EXPECT_TRUE(IsMediaContentOfType(&answer->contents()[0], MEDIA_TYPE_DATA)); 998 EXPECT_TRUE(IsMediaContentOfType(&answer->contents()[0], MEDIA_TYPE_DATA));
1000 EXPECT_TRUE(IsMediaContentOfType(&answer->contents()[1], MEDIA_TYPE_AUDIO)); 999 EXPECT_TRUE(IsMediaContentOfType(&answer->contents()[1], MEDIA_TYPE_AUDIO));
1001 EXPECT_TRUE(IsMediaContentOfType(&answer->contents()[2], MEDIA_TYPE_VIDEO)); 1000 EXPECT_TRUE(IsMediaContentOfType(&answer->contents()[2], MEDIA_TYPE_VIDEO));
1002 } 1001 }
1003 1002
1004 // TODO(deadbeef): Extend these tests to ensure the correct direction with other 1003 // TODO(deadbeef): Extend these tests to ensure the correct direction with other
1005 // answerer settings. 1004 // answerer settings.
1006 1005
1007 // This test that the media direction is set to send/receive in an answer if 1006 // This test that the media direction is set to send/receive in an answer if
(...skipping 21 matching lines...) Expand all
1029 } 1028 }
1030 1029
1031 // Test that a data content with an unknown protocol is rejected in an answer. 1030 // Test that a data content with an unknown protocol is rejected in an answer.
1032 TEST_F(MediaSessionDescriptionFactoryTest, 1031 TEST_F(MediaSessionDescriptionFactoryTest,
1033 CreateDataAnswerToOfferWithUnknownProtocol) { 1032 CreateDataAnswerToOfferWithUnknownProtocol) {
1034 MediaSessionOptions opts; 1033 MediaSessionOptions opts;
1035 opts.data_channel_type = cricket::DCT_RTP; 1034 opts.data_channel_type = cricket::DCT_RTP;
1036 opts.recv_audio = false; 1035 opts.recv_audio = false;
1037 f1_.set_secure(SEC_ENABLED); 1036 f1_.set_secure(SEC_ENABLED);
1038 f2_.set_secure(SEC_ENABLED); 1037 f2_.set_secure(SEC_ENABLED);
1039 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1038 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1040 ContentInfo* dc_offer = offer->GetContentByName("data"); 1039 ContentInfo* dc_offer = offer->GetContentByName("data");
1041 ASSERT_TRUE(dc_offer != NULL); 1040 ASSERT_TRUE(dc_offer != nullptr);
1042 DataContentDescription* dcd_offer = 1041 DataContentDescription* dcd_offer =
1043 static_cast<DataContentDescription*>(dc_offer->description); 1042 static_cast<DataContentDescription*>(dc_offer->description);
1044 ASSERT_TRUE(dcd_offer != NULL); 1043 ASSERT_TRUE(dcd_offer != nullptr);
1045 std::string protocol = "a weird unknown protocol"; 1044 std::string protocol = "a weird unknown protocol";
1046 dcd_offer->set_protocol(protocol); 1045 dcd_offer->set_protocol(protocol);
1047 1046
1048 std::unique_ptr<SessionDescription> answer( 1047 std::unique_ptr<SessionDescription> answer(
1049 f2_.CreateAnswer(offer.get(), opts, NULL)); 1048 f2_.CreateAnswer(offer.get(), opts, nullptr));
1050 1049
1051 const ContentInfo* dc_answer = answer->GetContentByName("data"); 1050 const ContentInfo* dc_answer = answer->GetContentByName("data");
1052 ASSERT_TRUE(dc_answer != NULL); 1051 ASSERT_TRUE(dc_answer != nullptr);
1053 EXPECT_TRUE(dc_answer->rejected); 1052 EXPECT_TRUE(dc_answer->rejected);
1054 const DataContentDescription* dcd_answer = 1053 const DataContentDescription* dcd_answer =
1055 static_cast<const DataContentDescription*>(dc_answer->description); 1054 static_cast<const DataContentDescription*>(dc_answer->description);
1056 ASSERT_TRUE(dcd_answer != NULL); 1055 ASSERT_TRUE(dcd_answer != nullptr);
1057 EXPECT_EQ(protocol, dcd_answer->protocol()); 1056 EXPECT_EQ(protocol, dcd_answer->protocol());
1058 } 1057 }
1059 1058
1060 // Test that the media protocol is RTP/AVPF if DTLS and SDES are disabled. 1059 // Test that the media protocol is RTP/AVPF if DTLS and SDES are disabled.
1061 TEST_F(MediaSessionDescriptionFactoryTest, AudioOfferAnswerWithCryptoDisabled) { 1060 TEST_F(MediaSessionDescriptionFactoryTest, AudioOfferAnswerWithCryptoDisabled) {
1062 MediaSessionOptions opts; 1061 MediaSessionOptions opts;
1063 f1_.set_secure(SEC_DISABLED); 1062 f1_.set_secure(SEC_DISABLED);
1064 f2_.set_secure(SEC_DISABLED); 1063 f2_.set_secure(SEC_DISABLED);
1065 tdf1_.set_secure(SEC_DISABLED); 1064 tdf1_.set_secure(SEC_DISABLED);
1066 tdf2_.set_secure(SEC_DISABLED); 1065 tdf2_.set_secure(SEC_DISABLED);
1067 1066
1068 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1067 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1069 const AudioContentDescription* offer_acd = 1068 const AudioContentDescription* offer_acd =
1070 GetFirstAudioContentDescription(offer.get()); 1069 GetFirstAudioContentDescription(offer.get());
1071 ASSERT_TRUE(offer_acd != NULL); 1070 ASSERT_TRUE(offer_acd != nullptr);
1072 EXPECT_EQ(std::string(cricket::kMediaProtocolAvpf), offer_acd->protocol()); 1071 EXPECT_EQ(std::string(cricket::kMediaProtocolAvpf), offer_acd->protocol());
1073 1072
1074 std::unique_ptr<SessionDescription> answer( 1073 std::unique_ptr<SessionDescription> answer(
1075 f2_.CreateAnswer(offer.get(), opts, NULL)); 1074 f2_.CreateAnswer(offer.get(), opts, nullptr));
1076 1075
1077 const ContentInfo* ac_answer = answer->GetContentByName("audio"); 1076 const ContentInfo* ac_answer = answer->GetContentByName("audio");
1078 ASSERT_TRUE(ac_answer != NULL); 1077 ASSERT_TRUE(ac_answer != nullptr);
1079 EXPECT_FALSE(ac_answer->rejected); 1078 EXPECT_FALSE(ac_answer->rejected);
1080 1079
1081 const AudioContentDescription* answer_acd = 1080 const AudioContentDescription* answer_acd =
1082 GetFirstAudioContentDescription(answer.get()); 1081 GetFirstAudioContentDescription(answer.get());
1083 ASSERT_TRUE(answer_acd != NULL); 1082 ASSERT_TRUE(answer_acd != nullptr);
1084 EXPECT_EQ(std::string(cricket::kMediaProtocolAvpf), answer_acd->protocol()); 1083 EXPECT_EQ(std::string(cricket::kMediaProtocolAvpf), answer_acd->protocol());
1085 } 1084 }
1086 1085
1087 // Create a video offer and answer and ensure the RTP header extensions 1086 // Create a video offer and answer and ensure the RTP header extensions
1088 // matches what we expect. 1087 // matches what we expect.
1089 TEST_F(MediaSessionDescriptionFactoryTest, TestOfferAnswerWithRtpExtensions) { 1088 TEST_F(MediaSessionDescriptionFactoryTest, TestOfferAnswerWithRtpExtensions) {
1090 MediaSessionOptions opts; 1089 MediaSessionOptions opts;
1091 opts.recv_video = true; 1090 opts.recv_video = true;
1092 1091
1093 f1_.set_audio_rtp_header_extensions(MAKE_VECTOR(kAudioRtpExtension1)); 1092 f1_.set_audio_rtp_header_extensions(MAKE_VECTOR(kAudioRtpExtension1));
1094 f1_.set_video_rtp_header_extensions(MAKE_VECTOR(kVideoRtpExtension1)); 1093 f1_.set_video_rtp_header_extensions(MAKE_VECTOR(kVideoRtpExtension1));
1095 f2_.set_audio_rtp_header_extensions(MAKE_VECTOR(kAudioRtpExtension2)); 1094 f2_.set_audio_rtp_header_extensions(MAKE_VECTOR(kAudioRtpExtension2));
1096 f2_.set_video_rtp_header_extensions(MAKE_VECTOR(kVideoRtpExtension2)); 1095 f2_.set_video_rtp_header_extensions(MAKE_VECTOR(kVideoRtpExtension2));
1097 1096
1098 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1097 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1099 ASSERT_TRUE(offer.get() != NULL); 1098 ASSERT_TRUE(offer.get() != nullptr);
1100 std::unique_ptr<SessionDescription> answer( 1099 std::unique_ptr<SessionDescription> answer(
1101 f2_.CreateAnswer(offer.get(), opts, NULL)); 1100 f2_.CreateAnswer(offer.get(), opts, nullptr));
1102 1101
1103 EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtension1), 1102 EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtension1),
1104 GetFirstAudioContentDescription( 1103 GetFirstAudioContentDescription(
1105 offer.get())->rtp_header_extensions()); 1104 offer.get())->rtp_header_extensions());
1106 EXPECT_EQ(MAKE_VECTOR(kVideoRtpExtension1), 1105 EXPECT_EQ(MAKE_VECTOR(kVideoRtpExtension1),
1107 GetFirstVideoContentDescription( 1106 GetFirstVideoContentDescription(
1108 offer.get())->rtp_header_extensions()); 1107 offer.get())->rtp_header_extensions());
1109 EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtensionAnswer), 1108 EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtensionAnswer),
1110 GetFirstAudioContentDescription( 1109 GetFirstAudioContentDescription(
1111 answer.get())->rtp_header_extensions()); 1110 answer.get())->rtp_header_extensions());
1112 EXPECT_EQ(MAKE_VECTOR(kVideoRtpExtensionAnswer), 1111 EXPECT_EQ(MAKE_VECTOR(kVideoRtpExtensionAnswer),
1113 GetFirstVideoContentDescription( 1112 GetFirstVideoContentDescription(
1114 answer.get())->rtp_header_extensions()); 1113 answer.get())->rtp_header_extensions());
1115 } 1114 }
1116 1115
1117 // Create an audio, video, data answer without legacy StreamParams. 1116 // Create an audio, video, data answer without legacy StreamParams.
1118 TEST_F(MediaSessionDescriptionFactoryTest, 1117 TEST_F(MediaSessionDescriptionFactoryTest,
1119 TestCreateAnswerWithoutLegacyStreams) { 1118 TestCreateAnswerWithoutLegacyStreams) {
1120 MediaSessionOptions opts; 1119 MediaSessionOptions opts;
1121 opts.recv_video = true; 1120 opts.recv_video = true;
1122 opts.data_channel_type = cricket::DCT_RTP; 1121 opts.data_channel_type = cricket::DCT_RTP;
1123 f1_.set_add_legacy_streams(false); 1122 f1_.set_add_legacy_streams(false);
1124 f2_.set_add_legacy_streams(false); 1123 f2_.set_add_legacy_streams(false);
1125 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1124 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1126 ASSERT_TRUE(offer.get() != NULL); 1125 ASSERT_TRUE(offer.get() != nullptr);
1127 std::unique_ptr<SessionDescription> answer( 1126 std::unique_ptr<SessionDescription> answer(
1128 f2_.CreateAnswer(offer.get(), opts, NULL)); 1127 f2_.CreateAnswer(offer.get(), opts, nullptr));
1129 const ContentInfo* ac = answer->GetContentByName("audio"); 1128 const ContentInfo* ac = answer->GetContentByName("audio");
1130 const ContentInfo* vc = answer->GetContentByName("video"); 1129 const ContentInfo* vc = answer->GetContentByName("video");
1131 const ContentInfo* dc = answer->GetContentByName("data"); 1130 const ContentInfo* dc = answer->GetContentByName("data");
1132 ASSERT_TRUE(ac != NULL); 1131 ASSERT_TRUE(ac != nullptr);
1133 ASSERT_TRUE(vc != NULL); 1132 ASSERT_TRUE(vc != nullptr);
1134 const AudioContentDescription* acd = 1133 const AudioContentDescription* acd =
1135 static_cast<const AudioContentDescription*>(ac->description); 1134 static_cast<const AudioContentDescription*>(ac->description);
1136 const VideoContentDescription* vcd = 1135 const VideoContentDescription* vcd =
1137 static_cast<const VideoContentDescription*>(vc->description); 1136 static_cast<const VideoContentDescription*>(vc->description);
1138 const DataContentDescription* dcd = 1137 const DataContentDescription* dcd =
1139 static_cast<const DataContentDescription*>(dc->description); 1138 static_cast<const DataContentDescription*>(dc->description);
1140 1139
1141 EXPECT_FALSE(acd->has_ssrcs()); // No StreamParams. 1140 EXPECT_FALSE(acd->has_ssrcs()); // No StreamParams.
1142 EXPECT_FALSE(vcd->has_ssrcs()); // No StreamParams. 1141 EXPECT_FALSE(vcd->has_ssrcs()); // No StreamParams.
1143 EXPECT_FALSE(dcd->has_ssrcs()); // No StreamParams. 1142 EXPECT_FALSE(dcd->has_ssrcs()); // No StreamParams.
1144 } 1143 }
1145 1144
1146 TEST_F(MediaSessionDescriptionFactoryTest, TestPartial) { 1145 TEST_F(MediaSessionDescriptionFactoryTest, TestPartial) {
1147 MediaSessionOptions opts; 1146 MediaSessionOptions opts;
1148 opts.recv_video = true; 1147 opts.recv_video = true;
1149 opts.data_channel_type = cricket::DCT_RTP; 1148 opts.data_channel_type = cricket::DCT_RTP;
1150 f1_.set_secure(SEC_ENABLED); 1149 f1_.set_secure(SEC_ENABLED);
1151 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1150 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1152 ASSERT_TRUE(offer.get() != NULL); 1151 ASSERT_TRUE(offer.get() != nullptr);
1153 const ContentInfo* ac = offer->GetContentByName("audio"); 1152 const ContentInfo* ac = offer->GetContentByName("audio");
1154 const ContentInfo* vc = offer->GetContentByName("video"); 1153 const ContentInfo* vc = offer->GetContentByName("video");
1155 const ContentInfo* dc = offer->GetContentByName("data"); 1154 const ContentInfo* dc = offer->GetContentByName("data");
1156 AudioContentDescription* acd = const_cast<AudioContentDescription*>( 1155 AudioContentDescription* acd = const_cast<AudioContentDescription*>(
1157 static_cast<const AudioContentDescription*>(ac->description)); 1156 static_cast<const AudioContentDescription*>(ac->description));
1158 VideoContentDescription* vcd = const_cast<VideoContentDescription*>( 1157 VideoContentDescription* vcd = const_cast<VideoContentDescription*>(
1159 static_cast<const VideoContentDescription*>(vc->description)); 1158 static_cast<const VideoContentDescription*>(vc->description));
1160 DataContentDescription* dcd = const_cast<DataContentDescription*>( 1159 DataContentDescription* dcd = const_cast<DataContentDescription*>(
1161 static_cast<const DataContentDescription*>(dc->description)); 1160 static_cast<const DataContentDescription*>(dc->description));
1162 1161
(...skipping 24 matching lines...) Expand all
1187 offer_opts.recv_video = true; 1186 offer_opts.recv_video = true;
1188 answer_opts.data_channel_type = cricket::DCT_RTP; 1187 answer_opts.data_channel_type = cricket::DCT_RTP;
1189 offer_opts.data_channel_type = cricket::DCT_RTP; 1188 offer_opts.data_channel_type = cricket::DCT_RTP;
1190 1189
1191 std::unique_ptr<SessionDescription> offer; 1190 std::unique_ptr<SessionDescription> offer;
1192 std::unique_ptr<SessionDescription> answer; 1191 std::unique_ptr<SessionDescription> answer;
1193 1192
1194 offer_opts.rtcp_mux_enabled = true; 1193 offer_opts.rtcp_mux_enabled = true;
1195 answer_opts.rtcp_mux_enabled = true; 1194 answer_opts.rtcp_mux_enabled = true;
1196 1195
1197 offer.reset(f1_.CreateOffer(offer_opts, NULL)); 1196 offer.reset(f1_.CreateOffer(offer_opts, nullptr));
1198 answer.reset(f2_.CreateAnswer(offer.get(), answer_opts, NULL)); 1197 answer.reset(f2_.CreateAnswer(offer.get(), answer_opts, nullptr));
1199 ASSERT_TRUE(NULL != GetFirstAudioContentDescription(offer.get())); 1198 ASSERT_TRUE(nullptr != GetFirstAudioContentDescription(offer.get()));
1200 ASSERT_TRUE(NULL != GetFirstVideoContentDescription(offer.get())); 1199 ASSERT_TRUE(nullptr != GetFirstVideoContentDescription(offer.get()));
1201 ASSERT_TRUE(NULL != GetFirstDataContentDescription(offer.get())); 1200 ASSERT_TRUE(nullptr != GetFirstDataContentDescription(offer.get()));
1202 ASSERT_TRUE(NULL != GetFirstAudioContentDescription(answer.get())); 1201 ASSERT_TRUE(nullptr != GetFirstAudioContentDescription(answer.get()));
1203 ASSERT_TRUE(NULL != GetFirstVideoContentDescription(answer.get())); 1202 ASSERT_TRUE(nullptr != GetFirstVideoContentDescription(answer.get()));
1204 ASSERT_TRUE(NULL != GetFirstDataContentDescription(answer.get())); 1203 ASSERT_TRUE(nullptr != GetFirstDataContentDescription(answer.get()));
1205 EXPECT_TRUE(GetFirstAudioContentDescription(offer.get())->rtcp_mux()); 1204 EXPECT_TRUE(GetFirstAudioContentDescription(offer.get())->rtcp_mux());
1206 EXPECT_TRUE(GetFirstVideoContentDescription(offer.get())->rtcp_mux()); 1205 EXPECT_TRUE(GetFirstVideoContentDescription(offer.get())->rtcp_mux());
1207 EXPECT_TRUE(GetFirstDataContentDescription(offer.get())->rtcp_mux()); 1206 EXPECT_TRUE(GetFirstDataContentDescription(offer.get())->rtcp_mux());
1208 EXPECT_TRUE(GetFirstAudioContentDescription(answer.get())->rtcp_mux()); 1207 EXPECT_TRUE(GetFirstAudioContentDescription(answer.get())->rtcp_mux());
1209 EXPECT_TRUE(GetFirstVideoContentDescription(answer.get())->rtcp_mux()); 1208 EXPECT_TRUE(GetFirstVideoContentDescription(answer.get())->rtcp_mux());
1210 EXPECT_TRUE(GetFirstDataContentDescription(answer.get())->rtcp_mux()); 1209 EXPECT_TRUE(GetFirstDataContentDescription(answer.get())->rtcp_mux());
1211 1210
1212 offer_opts.rtcp_mux_enabled = true; 1211 offer_opts.rtcp_mux_enabled = true;
1213 answer_opts.rtcp_mux_enabled = false; 1212 answer_opts.rtcp_mux_enabled = false;
1214 1213
1215 offer.reset(f1_.CreateOffer(offer_opts, NULL)); 1214 offer.reset(f1_.CreateOffer(offer_opts, nullptr));
1216 answer.reset(f2_.CreateAnswer(offer.get(), answer_opts, NULL)); 1215 answer.reset(f2_.CreateAnswer(offer.get(), answer_opts, nullptr));
1217 ASSERT_TRUE(NULL != GetFirstAudioContentDescription(offer.get())); 1216 ASSERT_TRUE(nullptr != GetFirstAudioContentDescription(offer.get()));
1218 ASSERT_TRUE(NULL != GetFirstVideoContentDescription(offer.get())); 1217 ASSERT_TRUE(nullptr != GetFirstVideoContentDescription(offer.get()));
1219 ASSERT_TRUE(NULL != GetFirstDataContentDescription(offer.get())); 1218 ASSERT_TRUE(nullptr != GetFirstDataContentDescription(offer.get()));
1220 ASSERT_TRUE(NULL != GetFirstAudioContentDescription(answer.get())); 1219 ASSERT_TRUE(nullptr != GetFirstAudioContentDescription(answer.get()));
1221 ASSERT_TRUE(NULL != GetFirstVideoContentDescription(answer.get())); 1220 ASSERT_TRUE(nullptr != GetFirstVideoContentDescription(answer.get()));
1222 ASSERT_TRUE(NULL != GetFirstDataContentDescription(answer.get())); 1221 ASSERT_TRUE(nullptr != GetFirstDataContentDescription(answer.get()));
1223 EXPECT_TRUE(GetFirstAudioContentDescription(offer.get())->rtcp_mux()); 1222 EXPECT_TRUE(GetFirstAudioContentDescription(offer.get())->rtcp_mux());
1224 EXPECT_TRUE(GetFirstVideoContentDescription(offer.get())->rtcp_mux()); 1223 EXPECT_TRUE(GetFirstVideoContentDescription(offer.get())->rtcp_mux());
1225 EXPECT_TRUE(GetFirstDataContentDescription(offer.get())->rtcp_mux()); 1224 EXPECT_TRUE(GetFirstDataContentDescription(offer.get())->rtcp_mux());
1226 EXPECT_FALSE(GetFirstAudioContentDescription(answer.get())->rtcp_mux()); 1225 EXPECT_FALSE(GetFirstAudioContentDescription(answer.get())->rtcp_mux());
1227 EXPECT_FALSE(GetFirstVideoContentDescription(answer.get())->rtcp_mux()); 1226 EXPECT_FALSE(GetFirstVideoContentDescription(answer.get())->rtcp_mux());
1228 EXPECT_FALSE(GetFirstDataContentDescription(answer.get())->rtcp_mux()); 1227 EXPECT_FALSE(GetFirstDataContentDescription(answer.get())->rtcp_mux());
1229 1228
1230 offer_opts.rtcp_mux_enabled = false; 1229 offer_opts.rtcp_mux_enabled = false;
1231 answer_opts.rtcp_mux_enabled = true; 1230 answer_opts.rtcp_mux_enabled = true;
1232 1231
1233 offer.reset(f1_.CreateOffer(offer_opts, NULL)); 1232 offer.reset(f1_.CreateOffer(offer_opts, nullptr));
1234 answer.reset(f2_.CreateAnswer(offer.get(), answer_opts, NULL)); 1233 answer.reset(f2_.CreateAnswer(offer.get(), answer_opts, nullptr));
1235 ASSERT_TRUE(NULL != GetFirstAudioContentDescription(offer.get())); 1234 ASSERT_TRUE(nullptr != GetFirstAudioContentDescription(offer.get()));
1236 ASSERT_TRUE(NULL != GetFirstVideoContentDescription(offer.get())); 1235 ASSERT_TRUE(nullptr != GetFirstVideoContentDescription(offer.get()));
1237 ASSERT_TRUE(NULL != GetFirstDataContentDescription(offer.get())); 1236 ASSERT_TRUE(nullptr != GetFirstDataContentDescription(offer.get()));
1238 ASSERT_TRUE(NULL != GetFirstAudioContentDescription(answer.get())); 1237 ASSERT_TRUE(nullptr != GetFirstAudioContentDescription(answer.get()));
1239 ASSERT_TRUE(NULL != GetFirstVideoContentDescription(answer.get())); 1238 ASSERT_TRUE(nullptr != GetFirstVideoContentDescription(answer.get()));
1240 ASSERT_TRUE(NULL != GetFirstDataContentDescription(answer.get())); 1239 ASSERT_TRUE(nullptr != GetFirstDataContentDescription(answer.get()));
1241 EXPECT_FALSE(GetFirstAudioContentDescription(offer.get())->rtcp_mux()); 1240 EXPECT_FALSE(GetFirstAudioContentDescription(offer.get())->rtcp_mux());
1242 EXPECT_FALSE(GetFirstVideoContentDescription(offer.get())->rtcp_mux()); 1241 EXPECT_FALSE(GetFirstVideoContentDescription(offer.get())->rtcp_mux());
1243 EXPECT_FALSE(GetFirstDataContentDescription(offer.get())->rtcp_mux()); 1242 EXPECT_FALSE(GetFirstDataContentDescription(offer.get())->rtcp_mux());
1244 EXPECT_FALSE(GetFirstAudioContentDescription(answer.get())->rtcp_mux()); 1243 EXPECT_FALSE(GetFirstAudioContentDescription(answer.get())->rtcp_mux());
1245 EXPECT_FALSE(GetFirstVideoContentDescription(answer.get())->rtcp_mux()); 1244 EXPECT_FALSE(GetFirstVideoContentDescription(answer.get())->rtcp_mux());
1246 EXPECT_FALSE(GetFirstDataContentDescription(answer.get())->rtcp_mux()); 1245 EXPECT_FALSE(GetFirstDataContentDescription(answer.get())->rtcp_mux());
1247 1246
1248 offer_opts.rtcp_mux_enabled = false; 1247 offer_opts.rtcp_mux_enabled = false;
1249 answer_opts.rtcp_mux_enabled = false; 1248 answer_opts.rtcp_mux_enabled = false;
1250 1249
1251 offer.reset(f1_.CreateOffer(offer_opts, NULL)); 1250 offer.reset(f1_.CreateOffer(offer_opts, nullptr));
1252 answer.reset(f2_.CreateAnswer(offer.get(), answer_opts, NULL)); 1251 answer.reset(f2_.CreateAnswer(offer.get(), answer_opts, nullptr));
1253 ASSERT_TRUE(NULL != GetFirstAudioContentDescription(offer.get())); 1252 ASSERT_TRUE(nullptr != GetFirstAudioContentDescription(offer.get()));
1254 ASSERT_TRUE(NULL != GetFirstVideoContentDescription(offer.get())); 1253 ASSERT_TRUE(nullptr != GetFirstVideoContentDescription(offer.get()));
1255 ASSERT_TRUE(NULL != GetFirstDataContentDescription(offer.get())); 1254 ASSERT_TRUE(nullptr != GetFirstDataContentDescription(offer.get()));
1256 ASSERT_TRUE(NULL != GetFirstAudioContentDescription(answer.get())); 1255 ASSERT_TRUE(nullptr != GetFirstAudioContentDescription(answer.get()));
1257 ASSERT_TRUE(NULL != GetFirstVideoContentDescription(answer.get())); 1256 ASSERT_TRUE(nullptr != GetFirstVideoContentDescription(answer.get()));
1258 ASSERT_TRUE(NULL != GetFirstDataContentDescription(answer.get())); 1257 ASSERT_TRUE(nullptr != GetFirstDataContentDescription(answer.get()));
1259 EXPECT_FALSE(GetFirstAudioContentDescription(offer.get())->rtcp_mux()); 1258 EXPECT_FALSE(GetFirstAudioContentDescription(offer.get())->rtcp_mux());
1260 EXPECT_FALSE(GetFirstVideoContentDescription(offer.get())->rtcp_mux()); 1259 EXPECT_FALSE(GetFirstVideoContentDescription(offer.get())->rtcp_mux());
1261 EXPECT_FALSE(GetFirstDataContentDescription(offer.get())->rtcp_mux()); 1260 EXPECT_FALSE(GetFirstDataContentDescription(offer.get())->rtcp_mux());
1262 EXPECT_FALSE(GetFirstAudioContentDescription(answer.get())->rtcp_mux()); 1261 EXPECT_FALSE(GetFirstAudioContentDescription(answer.get())->rtcp_mux());
1263 EXPECT_FALSE(GetFirstVideoContentDescription(answer.get())->rtcp_mux()); 1262 EXPECT_FALSE(GetFirstVideoContentDescription(answer.get())->rtcp_mux());
1264 EXPECT_FALSE(GetFirstDataContentDescription(answer.get())->rtcp_mux()); 1263 EXPECT_FALSE(GetFirstDataContentDescription(answer.get())->rtcp_mux());
1265 } 1264 }
1266 1265
1267 // Create an audio-only answer to a video offer. 1266 // Create an audio-only answer to a video offer.
1268 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateAudioAnswerToVideo) { 1267 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateAudioAnswerToVideo) {
1269 MediaSessionOptions opts; 1268 MediaSessionOptions opts;
1270 opts.recv_video = true; 1269 opts.recv_video = true;
1271 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1270 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1272 ASSERT_TRUE(offer.get() != NULL); 1271 ASSERT_TRUE(offer.get() != nullptr);
1273 std::unique_ptr<SessionDescription> answer( 1272 std::unique_ptr<SessionDescription> answer(
1274 f2_.CreateAnswer(offer.get(), MediaSessionOptions(), NULL)); 1273 f2_.CreateAnswer(offer.get(), MediaSessionOptions(), nullptr));
1275 const ContentInfo* ac = answer->GetContentByName("audio"); 1274 const ContentInfo* ac = answer->GetContentByName("audio");
1276 const ContentInfo* vc = answer->GetContentByName("video"); 1275 const ContentInfo* vc = answer->GetContentByName("video");
1277 ASSERT_TRUE(ac != NULL); 1276 ASSERT_TRUE(ac != nullptr);
1278 ASSERT_TRUE(vc != NULL); 1277 ASSERT_TRUE(vc != nullptr);
1279 ASSERT_TRUE(vc->description != NULL); 1278 ASSERT_TRUE(vc->description != nullptr);
1280 EXPECT_TRUE(vc->rejected); 1279 EXPECT_TRUE(vc->rejected);
1281 } 1280 }
1282 1281
1283 // Create an audio-only answer to an offer with data. 1282 // Create an audio-only answer to an offer with data.
1284 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateNoDataAnswerToDataOffer) { 1283 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateNoDataAnswerToDataOffer) {
1285 MediaSessionOptions opts; 1284 MediaSessionOptions opts;
1286 opts.data_channel_type = cricket::DCT_RTP; 1285 opts.data_channel_type = cricket::DCT_RTP;
1287 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1286 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1288 ASSERT_TRUE(offer.get() != NULL); 1287 ASSERT_TRUE(offer.get() != nullptr);
1289 std::unique_ptr<SessionDescription> answer( 1288 std::unique_ptr<SessionDescription> answer(
1290 f2_.CreateAnswer(offer.get(), MediaSessionOptions(), NULL)); 1289 f2_.CreateAnswer(offer.get(), MediaSessionOptions(), nullptr));
1291 const ContentInfo* ac = answer->GetContentByName("audio"); 1290 const ContentInfo* ac = answer->GetContentByName("audio");
1292 const ContentInfo* dc = answer->GetContentByName("data"); 1291 const ContentInfo* dc = answer->GetContentByName("data");
1293 ASSERT_TRUE(ac != NULL); 1292 ASSERT_TRUE(ac != nullptr);
1294 ASSERT_TRUE(dc != NULL); 1293 ASSERT_TRUE(dc != nullptr);
1295 ASSERT_TRUE(dc->description != NULL); 1294 ASSERT_TRUE(dc->description != nullptr);
1296 EXPECT_TRUE(dc->rejected); 1295 EXPECT_TRUE(dc->rejected);
1297 } 1296 }
1298 1297
1299 // Create an answer that rejects the contents which are rejected in the offer. 1298 // Create an answer that rejects the contents which are rejected in the offer.
1300 TEST_F(MediaSessionDescriptionFactoryTest, 1299 TEST_F(MediaSessionDescriptionFactoryTest,
1301 CreateAnswerToOfferWithRejectedMedia) { 1300 CreateAnswerToOfferWithRejectedMedia) {
1302 MediaSessionOptions opts; 1301 MediaSessionOptions opts;
1303 opts.recv_video = true; 1302 opts.recv_video = true;
1304 opts.data_channel_type = cricket::DCT_RTP; 1303 opts.data_channel_type = cricket::DCT_RTP;
1305 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1304 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1306 ASSERT_TRUE(offer.get() != NULL); 1305 ASSERT_TRUE(offer.get() != nullptr);
1307 ContentInfo* ac = offer->GetContentByName("audio"); 1306 ContentInfo* ac = offer->GetContentByName("audio");
1308 ContentInfo* vc = offer->GetContentByName("video"); 1307 ContentInfo* vc = offer->GetContentByName("video");
1309 ContentInfo* dc = offer->GetContentByName("data"); 1308 ContentInfo* dc = offer->GetContentByName("data");
1310 ASSERT_TRUE(ac != NULL); 1309 ASSERT_TRUE(ac != nullptr);
1311 ASSERT_TRUE(vc != NULL); 1310 ASSERT_TRUE(vc != nullptr);
1312 ASSERT_TRUE(dc != NULL); 1311 ASSERT_TRUE(dc != nullptr);
1313 ac->rejected = true; 1312 ac->rejected = true;
1314 vc->rejected = true; 1313 vc->rejected = true;
1315 dc->rejected = true; 1314 dc->rejected = true;
1316 std::unique_ptr<SessionDescription> answer( 1315 std::unique_ptr<SessionDescription> answer(
1317 f2_.CreateAnswer(offer.get(), opts, NULL)); 1316 f2_.CreateAnswer(offer.get(), opts, nullptr));
1318 ac = answer->GetContentByName("audio"); 1317 ac = answer->GetContentByName("audio");
1319 vc = answer->GetContentByName("video"); 1318 vc = answer->GetContentByName("video");
1320 dc = answer->GetContentByName("data"); 1319 dc = answer->GetContentByName("data");
1321 ASSERT_TRUE(ac != NULL); 1320 ASSERT_TRUE(ac != nullptr);
1322 ASSERT_TRUE(vc != NULL); 1321 ASSERT_TRUE(vc != nullptr);
1323 ASSERT_TRUE(dc != NULL); 1322 ASSERT_TRUE(dc != nullptr);
1324 EXPECT_TRUE(ac->rejected); 1323 EXPECT_TRUE(ac->rejected);
1325 EXPECT_TRUE(vc->rejected); 1324 EXPECT_TRUE(vc->rejected);
1326 EXPECT_TRUE(dc->rejected); 1325 EXPECT_TRUE(dc->rejected);
1327 } 1326 }
1328 1327
1329 // Create an audio and video offer with: 1328 // Create an audio and video offer with:
1330 // - one video track 1329 // - one video track
1331 // - two audio tracks 1330 // - two audio tracks
1332 // - two data tracks 1331 // - two data tracks
1333 // and ensure it matches what we expect. Also updates the initial offer by 1332 // and ensure it matches what we expect. Also updates the initial offer by
1334 // adding a new video track and replaces one of the audio tracks. 1333 // adding a new video track and replaces one of the audio tracks.
1335 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateMultiStreamVideoOffer) { 1334 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateMultiStreamVideoOffer) {
1336 MediaSessionOptions opts; 1335 MediaSessionOptions opts;
1337 opts.AddSendStream(MEDIA_TYPE_VIDEO, kVideoTrack1, kMediaStream1); 1336 opts.AddSendStream(MEDIA_TYPE_VIDEO, kVideoTrack1, kMediaStream1);
1338 opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack1, kMediaStream1); 1337 opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack1, kMediaStream1);
1339 opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack2, kMediaStream1); 1338 opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack2, kMediaStream1);
1340 opts.data_channel_type = cricket::DCT_RTP; 1339 opts.data_channel_type = cricket::DCT_RTP;
1341 opts.AddSendStream(MEDIA_TYPE_DATA, kDataTrack1, kMediaStream1); 1340 opts.AddSendStream(MEDIA_TYPE_DATA, kDataTrack1, kMediaStream1);
1342 opts.AddSendStream(MEDIA_TYPE_DATA, kDataTrack2, kMediaStream1); 1341 opts.AddSendStream(MEDIA_TYPE_DATA, kDataTrack2, kMediaStream1);
1343 1342
1344 f1_.set_secure(SEC_ENABLED); 1343 f1_.set_secure(SEC_ENABLED);
1345 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1344 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1346 1345
1347 ASSERT_TRUE(offer.get() != NULL); 1346 ASSERT_TRUE(offer.get() != nullptr);
1348 const ContentInfo* ac = offer->GetContentByName("audio"); 1347 const ContentInfo* ac = offer->GetContentByName("audio");
1349 const ContentInfo* vc = offer->GetContentByName("video"); 1348 const ContentInfo* vc = offer->GetContentByName("video");
1350 const ContentInfo* dc = offer->GetContentByName("data"); 1349 const ContentInfo* dc = offer->GetContentByName("data");
1351 ASSERT_TRUE(ac != NULL); 1350 ASSERT_TRUE(ac != nullptr);
1352 ASSERT_TRUE(vc != NULL); 1351 ASSERT_TRUE(vc != nullptr);
1353 ASSERT_TRUE(dc != NULL); 1352 ASSERT_TRUE(dc != nullptr);
1354 const AudioContentDescription* acd = 1353 const AudioContentDescription* acd =
1355 static_cast<const AudioContentDescription*>(ac->description); 1354 static_cast<const AudioContentDescription*>(ac->description);
1356 const VideoContentDescription* vcd = 1355 const VideoContentDescription* vcd =
1357 static_cast<const VideoContentDescription*>(vc->description); 1356 static_cast<const VideoContentDescription*>(vc->description);
1358 const DataContentDescription* dcd = 1357 const DataContentDescription* dcd =
1359 static_cast<const DataContentDescription*>(dc->description); 1358 static_cast<const DataContentDescription*>(dc->description);
1360 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type()); 1359 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
1361 EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs()); 1360 EXPECT_EQ(f1_.audio_sendrecv_codecs(), acd->codecs());
1362 1361
1363 const StreamParamsVec& audio_streams = acd->streams(); 1362 const StreamParamsVec& audio_streams = acd->streams();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1408 // Update the offer. Add a new video track that is not synched to the 1407 // Update the offer. Add a new video track that is not synched to the
1409 // other tracks and replace audio track 2 with audio track 3. 1408 // other tracks and replace audio track 2 with audio track 3.
1410 opts.AddSendStream(MEDIA_TYPE_VIDEO, kVideoTrack2, kMediaStream2); 1409 opts.AddSendStream(MEDIA_TYPE_VIDEO, kVideoTrack2, kMediaStream2);
1411 opts.RemoveSendStream(MEDIA_TYPE_AUDIO, kAudioTrack2); 1410 opts.RemoveSendStream(MEDIA_TYPE_AUDIO, kAudioTrack2);
1412 opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack3, kMediaStream1); 1411 opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack3, kMediaStream1);
1413 opts.RemoveSendStream(MEDIA_TYPE_DATA, kDataTrack2); 1412 opts.RemoveSendStream(MEDIA_TYPE_DATA, kDataTrack2);
1414 opts.AddSendStream(MEDIA_TYPE_DATA, kDataTrack3, kMediaStream1); 1413 opts.AddSendStream(MEDIA_TYPE_DATA, kDataTrack3, kMediaStream1);
1415 std::unique_ptr<SessionDescription> updated_offer( 1414 std::unique_ptr<SessionDescription> updated_offer(
1416 f1_.CreateOffer(opts, offer.get())); 1415 f1_.CreateOffer(opts, offer.get()));
1417 1416
1418 ASSERT_TRUE(updated_offer.get() != NULL); 1417 ASSERT_TRUE(updated_offer.get() != nullptr);
1419 ac = updated_offer->GetContentByName("audio"); 1418 ac = updated_offer->GetContentByName("audio");
1420 vc = updated_offer->GetContentByName("video"); 1419 vc = updated_offer->GetContentByName("video");
1421 dc = updated_offer->GetContentByName("data"); 1420 dc = updated_offer->GetContentByName("data");
1422 ASSERT_TRUE(ac != NULL); 1421 ASSERT_TRUE(ac != nullptr);
1423 ASSERT_TRUE(vc != NULL); 1422 ASSERT_TRUE(vc != nullptr);
1424 ASSERT_TRUE(dc != NULL); 1423 ASSERT_TRUE(dc != nullptr);
1425 const AudioContentDescription* updated_acd = 1424 const AudioContentDescription* updated_acd =
1426 static_cast<const AudioContentDescription*>(ac->description); 1425 static_cast<const AudioContentDescription*>(ac->description);
1427 const VideoContentDescription* updated_vcd = 1426 const VideoContentDescription* updated_vcd =
1428 static_cast<const VideoContentDescription*>(vc->description); 1427 static_cast<const VideoContentDescription*>(vc->description);
1429 const DataContentDescription* updated_dcd = 1428 const DataContentDescription* updated_dcd =
1430 static_cast<const DataContentDescription*>(dc->description); 1429 static_cast<const DataContentDescription*>(dc->description);
1431 1430
1432 EXPECT_EQ(acd->type(), updated_acd->type()); 1431 EXPECT_EQ(acd->type(), updated_acd->type());
1433 EXPECT_EQ(acd->codecs(), updated_acd->codecs()); 1432 EXPECT_EQ(acd->codecs(), updated_acd->codecs());
1434 EXPECT_EQ(vcd->type(), updated_vcd->type()); 1433 EXPECT_EQ(vcd->type(), updated_vcd->type());
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1468 // The Expected RTCP CNAME is the default one as we are using the default 1467 // The Expected RTCP CNAME is the default one as we are using the default
1469 // MediaSessionOptions. 1468 // MediaSessionOptions.
1470 EXPECT_EQ(updated_data_streams[0].cname, cricket::kDefaultRtcpCname); 1469 EXPECT_EQ(updated_data_streams[0].cname, cricket::kDefaultRtcpCname);
1471 } 1470 }
1472 1471
1473 // Create an offer with simulcast video stream. 1472 // Create an offer with simulcast video stream.
1474 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateSimulcastVideoOffer) { 1473 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateSimulcastVideoOffer) {
1475 MediaSessionOptions opts; 1474 MediaSessionOptions opts;
1476 const int num_sim_layers = 3; 1475 const int num_sim_layers = 3;
1477 opts.AddSendVideoStream(kVideoTrack1, kMediaStream1, num_sim_layers); 1476 opts.AddSendVideoStream(kVideoTrack1, kMediaStream1, num_sim_layers);
1478 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1477 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1479 1478
1480 ASSERT_TRUE(offer.get() != NULL); 1479 ASSERT_TRUE(offer.get() != nullptr);
1481 const ContentInfo* vc = offer->GetContentByName("video"); 1480 const ContentInfo* vc = offer->GetContentByName("video");
1482 ASSERT_TRUE(vc != NULL); 1481 ASSERT_TRUE(vc != nullptr);
1483 const VideoContentDescription* vcd = 1482 const VideoContentDescription* vcd =
1484 static_cast<const VideoContentDescription*>(vc->description); 1483 static_cast<const VideoContentDescription*>(vc->description);
1485 1484
1486 const StreamParamsVec& video_streams = vcd->streams(); 1485 const StreamParamsVec& video_streams = vcd->streams();
1487 ASSERT_EQ(1U, video_streams.size()); 1486 ASSERT_EQ(1U, video_streams.size());
1488 EXPECT_EQ(kVideoTrack1, video_streams[0].id); 1487 EXPECT_EQ(kVideoTrack1, video_streams[0].id);
1489 const SsrcGroup* sim_ssrc_group = 1488 const SsrcGroup* sim_ssrc_group =
1490 video_streams[0].get_ssrc_group(cricket::kSimSsrcGroupSemantics); 1489 video_streams[0].get_ssrc_group(cricket::kSimSsrcGroupSemantics);
1491 ASSERT_TRUE(sim_ssrc_group != NULL); 1490 ASSERT_TRUE(sim_ssrc_group != nullptr);
1492 EXPECT_EQ(static_cast<size_t>(num_sim_layers), sim_ssrc_group->ssrcs.size()); 1491 EXPECT_EQ(static_cast<size_t>(num_sim_layers), sim_ssrc_group->ssrcs.size());
1493 } 1492 }
1494 1493
1495 // Create an audio and video answer to a standard video offer with: 1494 // Create an audio and video answer to a standard video offer with:
1496 // - one video track 1495 // - one video track
1497 // - two audio tracks 1496 // - two audio tracks
1498 // - two data tracks 1497 // - two data tracks
1499 // and ensure it matches what we expect. Also updates the initial answer by 1498 // and ensure it matches what we expect. Also updates the initial answer by
1500 // adding a new video track and removes one of the audio tracks. 1499 // adding a new video track and removes one of the audio tracks.
1501 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateMultiStreamVideoAnswer) { 1500 TEST_F(MediaSessionDescriptionFactoryTest, TestCreateMultiStreamVideoAnswer) {
1502 MediaSessionOptions offer_opts; 1501 MediaSessionOptions offer_opts;
1503 offer_opts.recv_video = true; 1502 offer_opts.recv_video = true;
1504 offer_opts.data_channel_type = cricket::DCT_RTP; 1503 offer_opts.data_channel_type = cricket::DCT_RTP;
1505 f1_.set_secure(SEC_ENABLED); 1504 f1_.set_secure(SEC_ENABLED);
1506 f2_.set_secure(SEC_ENABLED); 1505 f2_.set_secure(SEC_ENABLED);
1507 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(offer_opts, NULL)); 1506 std::unique_ptr<SessionDescription> offer(
1507 f1_.CreateOffer(offer_opts, nullptr));
1508 1508
1509 MediaSessionOptions opts; 1509 MediaSessionOptions opts;
1510 opts.AddSendStream(MEDIA_TYPE_VIDEO, kVideoTrack1, kMediaStream1); 1510 opts.AddSendStream(MEDIA_TYPE_VIDEO, kVideoTrack1, kMediaStream1);
1511 opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack1, kMediaStream1); 1511 opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack1, kMediaStream1);
1512 opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack2, kMediaStream1); 1512 opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack2, kMediaStream1);
1513 opts.data_channel_type = cricket::DCT_RTP; 1513 opts.data_channel_type = cricket::DCT_RTP;
1514 opts.AddSendStream(MEDIA_TYPE_DATA, kDataTrack1, kMediaStream1); 1514 opts.AddSendStream(MEDIA_TYPE_DATA, kDataTrack1, kMediaStream1);
1515 opts.AddSendStream(MEDIA_TYPE_DATA, kDataTrack2, kMediaStream1); 1515 opts.AddSendStream(MEDIA_TYPE_DATA, kDataTrack2, kMediaStream1);
1516 1516
1517 std::unique_ptr<SessionDescription> answer( 1517 std::unique_ptr<SessionDescription> answer(
1518 f2_.CreateAnswer(offer.get(), opts, NULL)); 1518 f2_.CreateAnswer(offer.get(), opts, nullptr));
1519 1519
1520 ASSERT_TRUE(answer.get() != NULL); 1520 ASSERT_TRUE(answer.get() != nullptr);
1521 const ContentInfo* ac = answer->GetContentByName("audio"); 1521 const ContentInfo* ac = answer->GetContentByName("audio");
1522 const ContentInfo* vc = answer->GetContentByName("video"); 1522 const ContentInfo* vc = answer->GetContentByName("video");
1523 const ContentInfo* dc = answer->GetContentByName("data"); 1523 const ContentInfo* dc = answer->GetContentByName("data");
1524 ASSERT_TRUE(ac != NULL); 1524 ASSERT_TRUE(ac != nullptr);
1525 ASSERT_TRUE(vc != NULL); 1525 ASSERT_TRUE(vc != nullptr);
1526 ASSERT_TRUE(dc != NULL); 1526 ASSERT_TRUE(dc != nullptr);
1527 const AudioContentDescription* acd = 1527 const AudioContentDescription* acd =
1528 static_cast<const AudioContentDescription*>(ac->description); 1528 static_cast<const AudioContentDescription*>(ac->description);
1529 const VideoContentDescription* vcd = 1529 const VideoContentDescription* vcd =
1530 static_cast<const VideoContentDescription*>(vc->description); 1530 static_cast<const VideoContentDescription*>(vc->description);
1531 const DataContentDescription* dcd = 1531 const DataContentDescription* dcd =
1532 static_cast<const DataContentDescription*>(dc->description); 1532 static_cast<const DataContentDescription*>(dc->description);
1533 ASSERT_CRYPTO(acd, 1U, CS_AES_CM_128_HMAC_SHA1_32); 1533 ASSERT_CRYPTO(acd, 1U, CS_AES_CM_128_HMAC_SHA1_32);
1534 ASSERT_CRYPTO(vcd, 1U, CS_AES_CM_128_HMAC_SHA1_80); 1534 ASSERT_CRYPTO(vcd, 1U, CS_AES_CM_128_HMAC_SHA1_80);
1535 ASSERT_CRYPTO(dcd, 1U, CS_AES_CM_128_HMAC_SHA1_80); 1535 ASSERT_CRYPTO(dcd, 1U, CS_AES_CM_128_HMAC_SHA1_80);
1536 1536
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1578 EXPECT_TRUE(dcd->rtcp_mux()); // rtcp-mux defaults on 1578 EXPECT_TRUE(dcd->rtcp_mux()); // rtcp-mux defaults on
1579 1579
1580 // Update the answer. Add a new video track that is not synched to the 1580 // Update the answer. Add a new video track that is not synched to the
1581 // other tracks and remove 1 audio track. 1581 // other tracks and remove 1 audio track.
1582 opts.AddSendStream(MEDIA_TYPE_VIDEO, kVideoTrack2, kMediaStream2); 1582 opts.AddSendStream(MEDIA_TYPE_VIDEO, kVideoTrack2, kMediaStream2);
1583 opts.RemoveSendStream(MEDIA_TYPE_AUDIO, kAudioTrack2); 1583 opts.RemoveSendStream(MEDIA_TYPE_AUDIO, kAudioTrack2);
1584 opts.RemoveSendStream(MEDIA_TYPE_DATA, kDataTrack2); 1584 opts.RemoveSendStream(MEDIA_TYPE_DATA, kDataTrack2);
1585 std::unique_ptr<SessionDescription> updated_answer( 1585 std::unique_ptr<SessionDescription> updated_answer(
1586 f2_.CreateAnswer(offer.get(), opts, answer.get())); 1586 f2_.CreateAnswer(offer.get(), opts, answer.get()));
1587 1587
1588 ASSERT_TRUE(updated_answer.get() != NULL); 1588 ASSERT_TRUE(updated_answer.get() != nullptr);
1589 ac = updated_answer->GetContentByName("audio"); 1589 ac = updated_answer->GetContentByName("audio");
1590 vc = updated_answer->GetContentByName("video"); 1590 vc = updated_answer->GetContentByName("video");
1591 dc = updated_answer->GetContentByName("data"); 1591 dc = updated_answer->GetContentByName("data");
1592 ASSERT_TRUE(ac != NULL); 1592 ASSERT_TRUE(ac != nullptr);
1593 ASSERT_TRUE(vc != NULL); 1593 ASSERT_TRUE(vc != nullptr);
1594 ASSERT_TRUE(dc != NULL); 1594 ASSERT_TRUE(dc != nullptr);
1595 const AudioContentDescription* updated_acd = 1595 const AudioContentDescription* updated_acd =
1596 static_cast<const AudioContentDescription*>(ac->description); 1596 static_cast<const AudioContentDescription*>(ac->description);
1597 const VideoContentDescription* updated_vcd = 1597 const VideoContentDescription* updated_vcd =
1598 static_cast<const VideoContentDescription*>(vc->description); 1598 static_cast<const VideoContentDescription*>(vc->description);
1599 const DataContentDescription* updated_dcd = 1599 const DataContentDescription* updated_dcd =
1600 static_cast<const DataContentDescription*>(dc->description); 1600 static_cast<const DataContentDescription*>(dc->description);
1601 1601
1602 ASSERT_CRYPTO(updated_acd, 1U, CS_AES_CM_128_HMAC_SHA1_32); 1602 ASSERT_CRYPTO(updated_acd, 1U, CS_AES_CM_128_HMAC_SHA1_32);
1603 EXPECT_TRUE(CompareCryptoParams(acd->cryptos(), updated_acd->cryptos())); 1603 EXPECT_TRUE(CompareCryptoParams(acd->cryptos(), updated_acd->cryptos()));
1604 ASSERT_CRYPTO(updated_vcd, 1U, CS_AES_CM_128_HMAC_SHA1_80); 1604 ASSERT_CRYPTO(updated_vcd, 1U, CS_AES_CM_128_HMAC_SHA1_80);
(...skipping 26 matching lines...) Expand all
1631 1631
1632 // Create an updated offer after creating an answer to the original offer and 1632 // Create an updated offer after creating an answer to the original offer and
1633 // verify that the codecs that were part of the original answer are not changed 1633 // verify that the codecs that were part of the original answer are not changed
1634 // in the updated offer. 1634 // in the updated offer.
1635 TEST_F(MediaSessionDescriptionFactoryTest, 1635 TEST_F(MediaSessionDescriptionFactoryTest,
1636 RespondentCreatesOfferAfterCreatingAnswer) { 1636 RespondentCreatesOfferAfterCreatingAnswer) {
1637 MediaSessionOptions opts; 1637 MediaSessionOptions opts;
1638 opts.recv_audio = true; 1638 opts.recv_audio = true;
1639 opts.recv_video = true; 1639 opts.recv_video = true;
1640 1640
1641 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1641 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1642 std::unique_ptr<SessionDescription> answer( 1642 std::unique_ptr<SessionDescription> answer(
1643 f2_.CreateAnswer(offer.get(), opts, NULL)); 1643 f2_.CreateAnswer(offer.get(), opts, nullptr));
1644 1644
1645 const AudioContentDescription* acd = 1645 const AudioContentDescription* acd =
1646 GetFirstAudioContentDescription(answer.get()); 1646 GetFirstAudioContentDescription(answer.get());
1647 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs()); 1647 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs());
1648 1648
1649 const VideoContentDescription* vcd = 1649 const VideoContentDescription* vcd =
1650 GetFirstVideoContentDescription(answer.get()); 1650 GetFirstVideoContentDescription(answer.get());
1651 EXPECT_EQ(MAKE_VECTOR(kVideoCodecsAnswer), vcd->codecs()); 1651 EXPECT_EQ(MAKE_VECTOR(kVideoCodecsAnswer), vcd->codecs());
1652 1652
1653 std::unique_ptr<SessionDescription> updated_offer( 1653 std::unique_ptr<SessionDescription> updated_offer(
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1692 std::vector<VideoCodec> f1_codecs = MAKE_VECTOR(kVideoCodecs1); 1692 std::vector<VideoCodec> f1_codecs = MAKE_VECTOR(kVideoCodecs1);
1693 // This creates rtx for H264 with the payload type |f1_| uses. 1693 // This creates rtx for H264 with the payload type |f1_| uses.
1694 AddRtxCodec(VideoCodec::CreateRtxCodec(126, kVideoCodecs1[1].id), &f1_codecs); 1694 AddRtxCodec(VideoCodec::CreateRtxCodec(126, kVideoCodecs1[1].id), &f1_codecs);
1695 f1_.set_video_codecs(f1_codecs); 1695 f1_.set_video_codecs(f1_codecs);
1696 1696
1697 std::vector<VideoCodec> f2_codecs = MAKE_VECTOR(kVideoCodecs2); 1697 std::vector<VideoCodec> f2_codecs = MAKE_VECTOR(kVideoCodecs2);
1698 // This creates rtx for H264 with the payload type |f2_| uses. 1698 // This creates rtx for H264 with the payload type |f2_| uses.
1699 AddRtxCodec(VideoCodec::CreateRtxCodec(125, kVideoCodecs2[0].id), &f2_codecs); 1699 AddRtxCodec(VideoCodec::CreateRtxCodec(125, kVideoCodecs2[0].id), &f2_codecs);
1700 f2_.set_video_codecs(f2_codecs); 1700 f2_.set_video_codecs(f2_codecs);
1701 1701
1702 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1702 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1703 ASSERT_TRUE(offer.get() != NULL); 1703 ASSERT_TRUE(offer.get() != nullptr);
1704 std::unique_ptr<SessionDescription> answer( 1704 std::unique_ptr<SessionDescription> answer(
1705 f2_.CreateAnswer(offer.get(), opts, NULL)); 1705 f2_.CreateAnswer(offer.get(), opts, nullptr));
1706 1706
1707 const VideoContentDescription* vcd = 1707 const VideoContentDescription* vcd =
1708 GetFirstVideoContentDescription(answer.get()); 1708 GetFirstVideoContentDescription(answer.get());
1709 1709
1710 std::vector<VideoCodec> expected_codecs = MAKE_VECTOR(kVideoCodecsAnswer); 1710 std::vector<VideoCodec> expected_codecs = MAKE_VECTOR(kVideoCodecsAnswer);
1711 AddRtxCodec(VideoCodec::CreateRtxCodec(126, kVideoCodecs1[1].id), 1711 AddRtxCodec(VideoCodec::CreateRtxCodec(126, kVideoCodecs1[1].id),
1712 &expected_codecs); 1712 &expected_codecs);
1713 1713
1714 EXPECT_EQ(expected_codecs, vcd->codecs()); 1714 EXPECT_EQ(expected_codecs, vcd->codecs());
1715 1715
(...skipping 20 matching lines...) Expand all
1736 RespondentCreatesOfferWithVideoAndRtxAfterCreatingAudioAnswer) { 1736 RespondentCreatesOfferWithVideoAndRtxAfterCreatingAudioAnswer) {
1737 std::vector<VideoCodec> f1_codecs = MAKE_VECTOR(kVideoCodecs1); 1737 std::vector<VideoCodec> f1_codecs = MAKE_VECTOR(kVideoCodecs1);
1738 // This creates rtx for H264 with the payload type |f1_| uses. 1738 // This creates rtx for H264 with the payload type |f1_| uses.
1739 AddRtxCodec(VideoCodec::CreateRtxCodec(126, kVideoCodecs1[1].id), &f1_codecs); 1739 AddRtxCodec(VideoCodec::CreateRtxCodec(126, kVideoCodecs1[1].id), &f1_codecs);
1740 f1_.set_video_codecs(f1_codecs); 1740 f1_.set_video_codecs(f1_codecs);
1741 1741
1742 MediaSessionOptions opts; 1742 MediaSessionOptions opts;
1743 opts.recv_audio = true; 1743 opts.recv_audio = true;
1744 opts.recv_video = false; 1744 opts.recv_video = false;
1745 1745
1746 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1746 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1747 std::unique_ptr<SessionDescription> answer( 1747 std::unique_ptr<SessionDescription> answer(
1748 f2_.CreateAnswer(offer.get(), opts, NULL)); 1748 f2_.CreateAnswer(offer.get(), opts, nullptr));
1749 1749
1750 const AudioContentDescription* acd = 1750 const AudioContentDescription* acd =
1751 GetFirstAudioContentDescription(answer.get()); 1751 GetFirstAudioContentDescription(answer.get());
1752 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs()); 1752 EXPECT_EQ(MAKE_VECTOR(kAudioCodecsAnswer), acd->codecs());
1753 1753
1754 // Now - let |f2_| add video with RTX and let the payload type the RTX codec 1754 // Now - let |f2_| add video with RTX and let the payload type the RTX codec
1755 // reference be the same as an audio codec that was negotiated in the 1755 // reference be the same as an audio codec that was negotiated in the
1756 // first offer/answer exchange. 1756 // first offer/answer exchange.
1757 opts.recv_audio = true; 1757 opts.recv_audio = true;
1758 opts.recv_video = true; 1758 opts.recv_video = true;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1836 std::vector<VideoCodec> f1_codecs = MAKE_VECTOR(kVideoCodecs1); 1836 std::vector<VideoCodec> f1_codecs = MAKE_VECTOR(kVideoCodecs1);
1837 // This creates RTX without associated payload type parameter. 1837 // This creates RTX without associated payload type parameter.
1838 AddRtxCodec(VideoCodec(126, cricket::kRtxCodecName), &f1_codecs); 1838 AddRtxCodec(VideoCodec(126, cricket::kRtxCodecName), &f1_codecs);
1839 f1_.set_video_codecs(f1_codecs); 1839 f1_.set_video_codecs(f1_codecs);
1840 1840
1841 std::vector<VideoCodec> f2_codecs = MAKE_VECTOR(kVideoCodecs2); 1841 std::vector<VideoCodec> f2_codecs = MAKE_VECTOR(kVideoCodecs2);
1842 // This creates RTX for H264 with the payload type |f2_| uses. 1842 // This creates RTX for H264 with the payload type |f2_| uses.
1843 AddRtxCodec(VideoCodec::CreateRtxCodec(125, kVideoCodecs2[0].id), &f2_codecs); 1843 AddRtxCodec(VideoCodec::CreateRtxCodec(125, kVideoCodecs2[0].id), &f2_codecs);
1844 f2_.set_video_codecs(f2_codecs); 1844 f2_.set_video_codecs(f2_codecs);
1845 1845
1846 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1846 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1847 ASSERT_TRUE(offer.get() != NULL); 1847 ASSERT_TRUE(offer.get() != nullptr);
1848 // kCodecParamAssociatedPayloadType will always be added to the offer when RTX 1848 // kCodecParamAssociatedPayloadType will always be added to the offer when RTX
1849 // is selected. Manually remove kCodecParamAssociatedPayloadType so that it 1849 // is selected. Manually remove kCodecParamAssociatedPayloadType so that it
1850 // is possible to test that that RTX is dropped when 1850 // is possible to test that that RTX is dropped when
1851 // kCodecParamAssociatedPayloadType is missing in the offer. 1851 // kCodecParamAssociatedPayloadType is missing in the offer.
1852 VideoContentDescription* desc = 1852 VideoContentDescription* desc =
1853 static_cast<cricket::VideoContentDescription*>( 1853 static_cast<cricket::VideoContentDescription*>(
1854 offer->GetContentDescriptionByName(cricket::CN_VIDEO)); 1854 offer->GetContentDescriptionByName(cricket::CN_VIDEO));
1855 ASSERT_TRUE(desc != NULL); 1855 ASSERT_TRUE(desc != nullptr);
1856 std::vector<VideoCodec> codecs = desc->codecs(); 1856 std::vector<VideoCodec> codecs = desc->codecs();
1857 for (std::vector<VideoCodec>::iterator iter = codecs.begin(); 1857 for (std::vector<VideoCodec>::iterator iter = codecs.begin();
1858 iter != codecs.end(); ++iter) { 1858 iter != codecs.end(); ++iter) {
1859 if (iter->name.find(cricket::kRtxCodecName) == 0) { 1859 if (iter->name.find(cricket::kRtxCodecName) == 0) {
1860 iter->params.clear(); 1860 iter->params.clear();
1861 } 1861 }
1862 } 1862 }
1863 desc->set_codecs(codecs); 1863 desc->set_codecs(codecs);
1864 1864
1865 std::unique_ptr<SessionDescription> answer( 1865 std::unique_ptr<SessionDescription> answer(
1866 f2_.CreateAnswer(offer.get(), opts, NULL)); 1866 f2_.CreateAnswer(offer.get(), opts, nullptr));
1867 1867
1868 std::vector<std::string> codec_names = 1868 std::vector<std::string> codec_names =
1869 GetCodecNames(GetFirstVideoContentDescription(answer.get())->codecs()); 1869 GetCodecNames(GetFirstVideoContentDescription(answer.get())->codecs());
1870 EXPECT_EQ(codec_names.end(), std::find(codec_names.begin(), codec_names.end(), 1870 EXPECT_EQ(codec_names.end(), std::find(codec_names.begin(), codec_names.end(),
1871 cricket::kRtxCodecName)); 1871 cricket::kRtxCodecName));
1872 } 1872 }
1873 1873
1874 // Test that RTX will be filtered out in the answer if its associated payload 1874 // Test that RTX will be filtered out in the answer if its associated payload
1875 // type doesn't match the local value. 1875 // type doesn't match the local value.
1876 TEST_F(MediaSessionDescriptionFactoryTest, FilterOutRtxIfAptDoesntMatch) { 1876 TEST_F(MediaSessionDescriptionFactoryTest, FilterOutRtxIfAptDoesntMatch) {
1877 MediaSessionOptions opts; 1877 MediaSessionOptions opts;
1878 opts.recv_video = true; 1878 opts.recv_video = true;
1879 opts.recv_audio = false; 1879 opts.recv_audio = false;
1880 std::vector<VideoCodec> f1_codecs = MAKE_VECTOR(kVideoCodecs1); 1880 std::vector<VideoCodec> f1_codecs = MAKE_VECTOR(kVideoCodecs1);
1881 // This creates RTX for H264 in sender. 1881 // This creates RTX for H264 in sender.
1882 AddRtxCodec(VideoCodec::CreateRtxCodec(126, kVideoCodecs1[1].id), &f1_codecs); 1882 AddRtxCodec(VideoCodec::CreateRtxCodec(126, kVideoCodecs1[1].id), &f1_codecs);
1883 f1_.set_video_codecs(f1_codecs); 1883 f1_.set_video_codecs(f1_codecs);
1884 1884
1885 std::vector<VideoCodec> f2_codecs = MAKE_VECTOR(kVideoCodecs2); 1885 std::vector<VideoCodec> f2_codecs = MAKE_VECTOR(kVideoCodecs2);
1886 // This creates RTX for H263 in receiver. 1886 // This creates RTX for H263 in receiver.
1887 AddRtxCodec(VideoCodec::CreateRtxCodec(125, kVideoCodecs2[1].id), &f2_codecs); 1887 AddRtxCodec(VideoCodec::CreateRtxCodec(125, kVideoCodecs2[1].id), &f2_codecs);
1888 f2_.set_video_codecs(f2_codecs); 1888 f2_.set_video_codecs(f2_codecs);
1889 1889
1890 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1890 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1891 ASSERT_TRUE(offer.get() != NULL); 1891 ASSERT_TRUE(offer.get() != nullptr);
1892 // Associated payload type doesn't match, therefore, RTX codec is removed in 1892 // Associated payload type doesn't match, therefore, RTX codec is removed in
1893 // the answer. 1893 // the answer.
1894 std::unique_ptr<SessionDescription> answer( 1894 std::unique_ptr<SessionDescription> answer(
1895 f2_.CreateAnswer(offer.get(), opts, NULL)); 1895 f2_.CreateAnswer(offer.get(), opts, nullptr));
1896 1896
1897 std::vector<std::string> codec_names = 1897 std::vector<std::string> codec_names =
1898 GetCodecNames(GetFirstVideoContentDescription(answer.get())->codecs()); 1898 GetCodecNames(GetFirstVideoContentDescription(answer.get())->codecs());
1899 EXPECT_EQ(codec_names.end(), std::find(codec_names.begin(), codec_names.end(), 1899 EXPECT_EQ(codec_names.end(), std::find(codec_names.begin(), codec_names.end(),
1900 cricket::kRtxCodecName)); 1900 cricket::kRtxCodecName));
1901 } 1901 }
1902 1902
1903 // Test that when multiple RTX codecs are offered, only the matched RTX codec 1903 // Test that when multiple RTX codecs are offered, only the matched RTX codec
1904 // is added in the answer, and the unsupported RTX codec is filtered out. 1904 // is added in the answer, and the unsupported RTX codec is filtered out.
1905 TEST_F(MediaSessionDescriptionFactoryTest, 1905 TEST_F(MediaSessionDescriptionFactoryTest,
(...skipping 10 matching lines...) Expand all
1916 AddRtxCodec(VideoCodec::CreateRtxCodec(126, kVideoCodecs1[1].id), &f1_codecs); 1916 AddRtxCodec(VideoCodec::CreateRtxCodec(126, kVideoCodecs1[1].id), &f1_codecs);
1917 f1_.set_video_codecs(f1_codecs); 1917 f1_.set_video_codecs(f1_codecs);
1918 1918
1919 std::vector<VideoCodec> f2_codecs = MAKE_VECTOR(kVideoCodecs2); 1919 std::vector<VideoCodec> f2_codecs = MAKE_VECTOR(kVideoCodecs2);
1920 // This creates RTX for H264 in receiver. 1920 // This creates RTX for H264 in receiver.
1921 AddRtxCodec(VideoCodec::CreateRtxCodec(124, kVideoCodecs2[0].id), &f2_codecs); 1921 AddRtxCodec(VideoCodec::CreateRtxCodec(124, kVideoCodecs2[0].id), &f2_codecs);
1922 f2_.set_video_codecs(f2_codecs); 1922 f2_.set_video_codecs(f2_codecs);
1923 1923
1924 // H264-SVC codec is removed in the answer, therefore, associated RTX codec 1924 // H264-SVC codec is removed in the answer, therefore, associated RTX codec
1925 // for H264-SVC should also be removed. 1925 // for H264-SVC should also be removed.
1926 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1926 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1927 ASSERT_TRUE(offer.get() != NULL); 1927 ASSERT_TRUE(offer.get() != nullptr);
1928 std::unique_ptr<SessionDescription> answer( 1928 std::unique_ptr<SessionDescription> answer(
1929 f2_.CreateAnswer(offer.get(), opts, NULL)); 1929 f2_.CreateAnswer(offer.get(), opts, nullptr));
1930 const VideoContentDescription* vcd = 1930 const VideoContentDescription* vcd =
1931 GetFirstVideoContentDescription(answer.get()); 1931 GetFirstVideoContentDescription(answer.get());
1932 std::vector<VideoCodec> expected_codecs = MAKE_VECTOR(kVideoCodecsAnswer); 1932 std::vector<VideoCodec> expected_codecs = MAKE_VECTOR(kVideoCodecsAnswer);
1933 AddRtxCodec(VideoCodec::CreateRtxCodec(126, kVideoCodecs1[1].id), 1933 AddRtxCodec(VideoCodec::CreateRtxCodec(126, kVideoCodecs1[1].id),
1934 &expected_codecs); 1934 &expected_codecs);
1935 1935
1936 EXPECT_EQ(expected_codecs, vcd->codecs()); 1936 EXPECT_EQ(expected_codecs, vcd->codecs());
1937 } 1937 }
1938 1938
1939 // Test that after one RTX codec has been negotiated, a new offer can attempt 1939 // Test that after one RTX codec has been negotiated, a new offer can attempt
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1982 opts.AddSendVideoStream("stream1", "stream1label", 3); 1982 opts.AddSendVideoStream("stream1", "stream1label", 3);
1983 1983
1984 // Use a single real codec, and then add RTX for it. 1984 // Use a single real codec, and then add RTX for it.
1985 std::vector<VideoCodec> f1_codecs; 1985 std::vector<VideoCodec> f1_codecs;
1986 f1_codecs.push_back(VideoCodec(97, "H264")); 1986 f1_codecs.push_back(VideoCodec(97, "H264"));
1987 AddRtxCodec(VideoCodec::CreateRtxCodec(125, 97), &f1_codecs); 1987 AddRtxCodec(VideoCodec::CreateRtxCodec(125, 97), &f1_codecs);
1988 f1_.set_video_codecs(f1_codecs); 1988 f1_.set_video_codecs(f1_codecs);
1989 1989
1990 // Ensure that the offer has an RTX ssrc for each regular ssrc, and that there 1990 // Ensure that the offer has an RTX ssrc for each regular ssrc, and that there
1991 // is a FID ssrc + grouping for each. 1991 // is a FID ssrc + grouping for each.
1992 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 1992 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
1993 ASSERT_TRUE(offer.get() != NULL); 1993 ASSERT_TRUE(offer.get() != nullptr);
1994 VideoContentDescription* desc = static_cast<VideoContentDescription*>( 1994 VideoContentDescription* desc = static_cast<VideoContentDescription*>(
1995 offer->GetContentDescriptionByName(cricket::CN_VIDEO)); 1995 offer->GetContentDescriptionByName(cricket::CN_VIDEO));
1996 ASSERT_TRUE(desc != NULL); 1996 ASSERT_TRUE(desc != nullptr);
1997 EXPECT_TRUE(desc->multistream()); 1997 EXPECT_TRUE(desc->multistream());
1998 const StreamParamsVec& streams = desc->streams(); 1998 const StreamParamsVec& streams = desc->streams();
1999 // Single stream. 1999 // Single stream.
2000 ASSERT_EQ(1u, streams.size()); 2000 ASSERT_EQ(1u, streams.size());
2001 // Stream should have 6 ssrcs: 3 for video, 3 for RTX. 2001 // Stream should have 6 ssrcs: 3 for video, 3 for RTX.
2002 EXPECT_EQ(6u, streams[0].ssrcs.size()); 2002 EXPECT_EQ(6u, streams[0].ssrcs.size());
2003 // And should have a SIM group for the simulcast. 2003 // And should have a SIM group for the simulcast.
2004 EXPECT_TRUE(streams[0].has_ssrc_group("SIM")); 2004 EXPECT_TRUE(streams[0].has_ssrc_group("SIM"));
2005 // And a FID group for RTX. 2005 // And a FID group for RTX.
2006 EXPECT_TRUE(streams[0].has_ssrc_group("FID")); 2006 EXPECT_TRUE(streams[0].has_ssrc_group("FID"));
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
2101 RespondentCreatesOfferAfterCreatingAnswerWithRtpExtensions) { 2101 RespondentCreatesOfferAfterCreatingAnswerWithRtpExtensions) {
2102 MediaSessionOptions opts; 2102 MediaSessionOptions opts;
2103 opts.recv_audio = true; 2103 opts.recv_audio = true;
2104 opts.recv_video = true; 2104 opts.recv_video = true;
2105 2105
2106 f1_.set_audio_rtp_header_extensions(MAKE_VECTOR(kAudioRtpExtension1)); 2106 f1_.set_audio_rtp_header_extensions(MAKE_VECTOR(kAudioRtpExtension1));
2107 f1_.set_video_rtp_header_extensions(MAKE_VECTOR(kVideoRtpExtension1)); 2107 f1_.set_video_rtp_header_extensions(MAKE_VECTOR(kVideoRtpExtension1));
2108 f2_.set_audio_rtp_header_extensions(MAKE_VECTOR(kAudioRtpExtension2)); 2108 f2_.set_audio_rtp_header_extensions(MAKE_VECTOR(kAudioRtpExtension2));
2109 f2_.set_video_rtp_header_extensions(MAKE_VECTOR(kVideoRtpExtension2)); 2109 f2_.set_video_rtp_header_extensions(MAKE_VECTOR(kVideoRtpExtension2));
2110 2110
2111 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 2111 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
2112 std::unique_ptr<SessionDescription> answer( 2112 std::unique_ptr<SessionDescription> answer(
2113 f2_.CreateAnswer(offer.get(), opts, NULL)); 2113 f2_.CreateAnswer(offer.get(), opts, nullptr));
2114 2114
2115 EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtensionAnswer), 2115 EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtensionAnswer),
2116 GetFirstAudioContentDescription( 2116 GetFirstAudioContentDescription(
2117 answer.get())->rtp_header_extensions()); 2117 answer.get())->rtp_header_extensions());
2118 EXPECT_EQ(MAKE_VECTOR(kVideoRtpExtensionAnswer), 2118 EXPECT_EQ(MAKE_VECTOR(kVideoRtpExtensionAnswer),
2119 GetFirstVideoContentDescription( 2119 GetFirstVideoContentDescription(
2120 answer.get())->rtp_header_extensions()); 2120 answer.get())->rtp_header_extensions());
2121 2121
2122 std::unique_ptr<SessionDescription> updated_offer( 2122 std::unique_ptr<SessionDescription> updated_offer(
2123 f2_.CreateOffer(opts, answer.get())); 2123 f2_.CreateOffer(opts, answer.get()));
(...skipping 30 matching lines...) Expand all
2154 // same ID is used. Also verify that the ID isn't changed when creating an 2154 // same ID is used. Also verify that the ID isn't changed when creating an
2155 // updated offer (this was previously a bug). 2155 // updated offer (this was previously a bug).
2156 TEST_F(MediaSessionDescriptionFactoryTest, RtpExtensionIdReused) { 2156 TEST_F(MediaSessionDescriptionFactoryTest, RtpExtensionIdReused) {
2157 MediaSessionOptions opts; 2157 MediaSessionOptions opts;
2158 opts.recv_audio = true; 2158 opts.recv_audio = true;
2159 opts.recv_video = true; 2159 opts.recv_video = true;
2160 2160
2161 f1_.set_audio_rtp_header_extensions(MAKE_VECTOR(kAudioRtpExtension3)); 2161 f1_.set_audio_rtp_header_extensions(MAKE_VECTOR(kAudioRtpExtension3));
2162 f1_.set_video_rtp_header_extensions(MAKE_VECTOR(kVideoRtpExtension3)); 2162 f1_.set_video_rtp_header_extensions(MAKE_VECTOR(kVideoRtpExtension3));
2163 2163
2164 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, NULL)); 2164 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(opts, nullptr));
2165 2165
2166 // Since the audio extensions used ID 3 for "both_audio_and_video", so should 2166 // Since the audio extensions used ID 3 for "both_audio_and_video", so should
2167 // the video extensions. 2167 // the video extensions.
2168 const RtpExtension kExpectedVideoRtpExtension[] = { 2168 const RtpExtension kExpectedVideoRtpExtension[] = {
2169 kVideoRtpExtension3[0], kAudioRtpExtension3[1], 2169 kVideoRtpExtension3[0], kAudioRtpExtension3[1],
2170 }; 2170 };
2171 2171
2172 EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtension3), 2172 EXPECT_EQ(MAKE_VECTOR(kAudioRtpExtension3),
2173 GetFirstAudioContentDescription( 2173 GetFirstAudioContentDescription(
2174 offer.get())->rtp_header_extensions()); 2174 offer.get())->rtp_header_extensions());
(...skipping 20 matching lines...) Expand all
2195 AudioContentDescription* acd(new AudioContentDescription()); 2195 AudioContentDescription* acd(new AudioContentDescription());
2196 acd->set_codecs(MAKE_VECTOR(kAudioCodecs1)); 2196 acd->set_codecs(MAKE_VECTOR(kAudioCodecs1));
2197 acd->AddLegacyStream(1); 2197 acd->AddLegacyStream(1);
2198 source.AddContent(cricket::CN_AUDIO, cricket::NS_JINGLE_RTP, acd); 2198 source.AddContent(cricket::CN_AUDIO, cricket::NS_JINGLE_RTP, acd);
2199 VideoContentDescription* vcd(new VideoContentDescription()); 2199 VideoContentDescription* vcd(new VideoContentDescription());
2200 vcd->set_codecs(MAKE_VECTOR(kVideoCodecs1)); 2200 vcd->set_codecs(MAKE_VECTOR(kVideoCodecs1));
2201 vcd->AddLegacyStream(2); 2201 vcd->AddLegacyStream(2);
2202 source.AddContent(cricket::CN_VIDEO, cricket::NS_JINGLE_RTP, vcd); 2202 source.AddContent(cricket::CN_VIDEO, cricket::NS_JINGLE_RTP, vcd);
2203 2203
2204 std::unique_ptr<SessionDescription> copy(source.Copy()); 2204 std::unique_ptr<SessionDescription> copy(source.Copy());
2205 ASSERT_TRUE(copy.get() != NULL); 2205 ASSERT_TRUE(copy.get() != nullptr);
2206 EXPECT_TRUE(copy->HasGroup(cricket::CN_AUDIO)); 2206 EXPECT_TRUE(copy->HasGroup(cricket::CN_AUDIO));
2207 const ContentInfo* ac = copy->GetContentByName("audio"); 2207 const ContentInfo* ac = copy->GetContentByName("audio");
2208 const ContentInfo* vc = copy->GetContentByName("video"); 2208 const ContentInfo* vc = copy->GetContentByName("video");
2209 ASSERT_TRUE(ac != NULL); 2209 ASSERT_TRUE(ac != nullptr);
2210 ASSERT_TRUE(vc != NULL); 2210 ASSERT_TRUE(vc != nullptr);
2211 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type); 2211 EXPECT_EQ(std::string(NS_JINGLE_RTP), ac->type);
2212 const AudioContentDescription* acd_copy = 2212 const AudioContentDescription* acd_copy =
2213 static_cast<const AudioContentDescription*>(ac->description); 2213 static_cast<const AudioContentDescription*>(ac->description);
2214 EXPECT_EQ(acd->codecs(), acd_copy->codecs()); 2214 EXPECT_EQ(acd->codecs(), acd_copy->codecs());
2215 EXPECT_EQ(1u, acd->first_ssrc()); 2215 EXPECT_EQ(1u, acd->first_ssrc());
2216 2216
2217 EXPECT_EQ(std::string(NS_JINGLE_RTP), vc->type); 2217 EXPECT_EQ(std::string(NS_JINGLE_RTP), vc->type);
2218 const VideoContentDescription* vcd_copy = 2218 const VideoContentDescription* vcd_copy =
2219 static_cast<const VideoContentDescription*>(vc->description); 2219 static_cast<const VideoContentDescription*>(vc->description);
2220 EXPECT_EQ(vcd->codecs(), vcd_copy->codecs()); 2220 EXPECT_EQ(vcd->codecs(), vcd_copy->codecs());
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
2349 // Verifies that creating answer fails if the offer has UDP/TLS/RTP/SAVPF but 2349 // Verifies that creating answer fails if the offer has UDP/TLS/RTP/SAVPF but
2350 // DTLS is not enabled locally. 2350 // DTLS is not enabled locally.
2351 TEST_F(MediaSessionDescriptionFactoryTest, 2351 TEST_F(MediaSessionDescriptionFactoryTest,
2352 TestOfferDtlsSavpfWithoutDtlsFailed) { 2352 TestOfferDtlsSavpfWithoutDtlsFailed) {
2353 f1_.set_secure(SEC_ENABLED); 2353 f1_.set_secure(SEC_ENABLED);
2354 f2_.set_secure(SEC_ENABLED); 2354 f2_.set_secure(SEC_ENABLED);
2355 tdf1_.set_secure(SEC_DISABLED); 2355 tdf1_.set_secure(SEC_DISABLED);
2356 tdf2_.set_secure(SEC_DISABLED); 2356 tdf2_.set_secure(SEC_DISABLED);
2357 2357
2358 std::unique_ptr<SessionDescription> offer( 2358 std::unique_ptr<SessionDescription> offer(
2359 f1_.CreateOffer(MediaSessionOptions(), NULL)); 2359 f1_.CreateOffer(MediaSessionOptions(), nullptr));
2360 ASSERT_TRUE(offer.get() != NULL); 2360 ASSERT_TRUE(offer.get() != nullptr);
2361 ContentInfo* offer_content = offer->GetContentByName("audio"); 2361 ContentInfo* offer_content = offer->GetContentByName("audio");
2362 ASSERT_TRUE(offer_content != NULL); 2362 ASSERT_TRUE(offer_content != nullptr);
2363 AudioContentDescription* offer_audio_desc = 2363 AudioContentDescription* offer_audio_desc =
2364 static_cast<AudioContentDescription*>(offer_content->description); 2364 static_cast<AudioContentDescription*>(offer_content->description);
2365 offer_audio_desc->set_protocol(cricket::kMediaProtocolDtlsSavpf); 2365 offer_audio_desc->set_protocol(cricket::kMediaProtocolDtlsSavpf);
2366 2366
2367 std::unique_ptr<SessionDescription> answer( 2367 std::unique_ptr<SessionDescription> answer(
2368 f2_.CreateAnswer(offer.get(), MediaSessionOptions(), NULL)); 2368 f2_.CreateAnswer(offer.get(), MediaSessionOptions(), nullptr));
2369 ASSERT_TRUE(answer != NULL); 2369 ASSERT_TRUE(answer != nullptr);
2370 ContentInfo* answer_content = answer->GetContentByName("audio"); 2370 ContentInfo* answer_content = answer->GetContentByName("audio");
2371 ASSERT_TRUE(answer_content != NULL); 2371 ASSERT_TRUE(answer_content != nullptr);
2372 2372
2373 ASSERT_TRUE(answer_content->rejected); 2373 ASSERT_TRUE(answer_content->rejected);
2374 } 2374 }
2375 2375
2376 // Offers UDP/TLS/RTP/SAVPF and verifies the answer can be created and contains 2376 // Offers UDP/TLS/RTP/SAVPF and verifies the answer can be created and contains
2377 // UDP/TLS/RTP/SAVPF. 2377 // UDP/TLS/RTP/SAVPF.
2378 TEST_F(MediaSessionDescriptionFactoryTest, TestOfferDtlsSavpfCreateAnswer) { 2378 TEST_F(MediaSessionDescriptionFactoryTest, TestOfferDtlsSavpfCreateAnswer) {
2379 f1_.set_secure(SEC_ENABLED); 2379 f1_.set_secure(SEC_ENABLED);
2380 f2_.set_secure(SEC_ENABLED); 2380 f2_.set_secure(SEC_ENABLED);
2381 tdf1_.set_secure(SEC_ENABLED); 2381 tdf1_.set_secure(SEC_ENABLED);
2382 tdf2_.set_secure(SEC_ENABLED); 2382 tdf2_.set_secure(SEC_ENABLED);
2383 2383
2384 std::unique_ptr<SessionDescription> offer( 2384 std::unique_ptr<SessionDescription> offer(
2385 f1_.CreateOffer(MediaSessionOptions(), NULL)); 2385 f1_.CreateOffer(MediaSessionOptions(), nullptr));
2386 ASSERT_TRUE(offer.get() != NULL); 2386 ASSERT_TRUE(offer.get() != nullptr);
2387 ContentInfo* offer_content = offer->GetContentByName("audio"); 2387 ContentInfo* offer_content = offer->GetContentByName("audio");
2388 ASSERT_TRUE(offer_content != NULL); 2388 ASSERT_TRUE(offer_content != nullptr);
2389 AudioContentDescription* offer_audio_desc = 2389 AudioContentDescription* offer_audio_desc =
2390 static_cast<AudioContentDescription*>(offer_content->description); 2390 static_cast<AudioContentDescription*>(offer_content->description);
2391 offer_audio_desc->set_protocol(cricket::kMediaProtocolDtlsSavpf); 2391 offer_audio_desc->set_protocol(cricket::kMediaProtocolDtlsSavpf);
2392 2392
2393 std::unique_ptr<SessionDescription> answer( 2393 std::unique_ptr<SessionDescription> answer(
2394 f2_.CreateAnswer(offer.get(), MediaSessionOptions(), NULL)); 2394 f2_.CreateAnswer(offer.get(), MediaSessionOptions(), nullptr));
2395 ASSERT_TRUE(answer != NULL); 2395 ASSERT_TRUE(answer != nullptr);
2396 2396
2397 const ContentInfo* answer_content = answer->GetContentByName("audio"); 2397 const ContentInfo* answer_content = answer->GetContentByName("audio");
2398 ASSERT_TRUE(answer_content != NULL); 2398 ASSERT_TRUE(answer_content != nullptr);
2399 ASSERT_FALSE(answer_content->rejected); 2399 ASSERT_FALSE(answer_content->rejected);
2400 2400
2401 const AudioContentDescription* answer_audio_desc = 2401 const AudioContentDescription* answer_audio_desc =
2402 static_cast<const AudioContentDescription*>(answer_content->description); 2402 static_cast<const AudioContentDescription*>(answer_content->description);
2403 EXPECT_EQ(std::string(cricket::kMediaProtocolDtlsSavpf), 2403 EXPECT_EQ(std::string(cricket::kMediaProtocolDtlsSavpf),
2404 answer_audio_desc->protocol()); 2404 answer_audio_desc->protocol());
2405 } 2405 }
2406 2406
2407 // Test that we include both SDES and DTLS in the offer, but only include SDES 2407 // Test that we include both SDES and DTLS in the offer, but only include SDES
2408 // in the answer if DTLS isn't negotiated. 2408 // in the answer if DTLS isn't negotiated.
2409 TEST_F(MediaSessionDescriptionFactoryTest, TestCryptoDtls) { 2409 TEST_F(MediaSessionDescriptionFactoryTest, TestCryptoDtls) {
2410 f1_.set_secure(SEC_ENABLED); 2410 f1_.set_secure(SEC_ENABLED);
2411 f2_.set_secure(SEC_ENABLED); 2411 f2_.set_secure(SEC_ENABLED);
2412 tdf1_.set_secure(SEC_ENABLED); 2412 tdf1_.set_secure(SEC_ENABLED);
2413 tdf2_.set_secure(SEC_DISABLED); 2413 tdf2_.set_secure(SEC_DISABLED);
2414 MediaSessionOptions options; 2414 MediaSessionOptions options;
2415 options.recv_audio = true; 2415 options.recv_audio = true;
2416 options.recv_video = true; 2416 options.recv_video = true;
2417 std::unique_ptr<SessionDescription> offer, answer; 2417 std::unique_ptr<SessionDescription> offer, answer;
2418 const cricket::MediaContentDescription* audio_media_desc; 2418 const cricket::MediaContentDescription* audio_media_desc;
2419 const cricket::MediaContentDescription* video_media_desc; 2419 const cricket::MediaContentDescription* video_media_desc;
2420 const cricket::TransportDescription* audio_trans_desc; 2420 const cricket::TransportDescription* audio_trans_desc;
2421 const cricket::TransportDescription* video_trans_desc; 2421 const cricket::TransportDescription* video_trans_desc;
2422 2422
2423 // Generate an offer with SDES and DTLS support. 2423 // Generate an offer with SDES and DTLS support.
2424 offer.reset(f1_.CreateOffer(options, NULL)); 2424 offer.reset(f1_.CreateOffer(options, nullptr));
2425 ASSERT_TRUE(offer.get() != NULL); 2425 ASSERT_TRUE(offer.get() != nullptr);
2426 2426
2427 audio_media_desc = static_cast<const cricket::MediaContentDescription*>( 2427 audio_media_desc = static_cast<const cricket::MediaContentDescription*>(
2428 offer->GetContentDescriptionByName("audio")); 2428 offer->GetContentDescriptionByName("audio"));
2429 ASSERT_TRUE(audio_media_desc != NULL); 2429 ASSERT_TRUE(audio_media_desc != nullptr);
2430 video_media_desc = static_cast<const cricket::MediaContentDescription*>( 2430 video_media_desc = static_cast<const cricket::MediaContentDescription*>(
2431 offer->GetContentDescriptionByName("video")); 2431 offer->GetContentDescriptionByName("video"));
2432 ASSERT_TRUE(video_media_desc != NULL); 2432 ASSERT_TRUE(video_media_desc != nullptr);
2433 EXPECT_EQ(2u, audio_media_desc->cryptos().size()); 2433 EXPECT_EQ(2u, audio_media_desc->cryptos().size());
2434 EXPECT_EQ(1u, video_media_desc->cryptos().size()); 2434 EXPECT_EQ(1u, video_media_desc->cryptos().size());
2435 2435
2436 audio_trans_desc = offer->GetTransportDescriptionByName("audio"); 2436 audio_trans_desc = offer->GetTransportDescriptionByName("audio");
2437 ASSERT_TRUE(audio_trans_desc != NULL); 2437 ASSERT_TRUE(audio_trans_desc != nullptr);
2438 video_trans_desc = offer->GetTransportDescriptionByName("video"); 2438 video_trans_desc = offer->GetTransportDescriptionByName("video");
2439 ASSERT_TRUE(video_trans_desc != NULL); 2439 ASSERT_TRUE(video_trans_desc != nullptr);
2440 ASSERT_TRUE(audio_trans_desc->identity_fingerprint.get() != NULL); 2440 ASSERT_TRUE(audio_trans_desc->identity_fingerprint.get() != nullptr);
2441 ASSERT_TRUE(video_trans_desc->identity_fingerprint.get() != NULL); 2441 ASSERT_TRUE(video_trans_desc->identity_fingerprint.get() != nullptr);
2442 2442
2443 // Generate an answer with only SDES support, since tdf2 has crypto disabled. 2443 // Generate an answer with only SDES support, since tdf2 has crypto disabled.
2444 answer.reset(f2_.CreateAnswer(offer.get(), options, NULL)); 2444 answer.reset(f2_.CreateAnswer(offer.get(), options, nullptr));
2445 ASSERT_TRUE(answer.get() != NULL); 2445 ASSERT_TRUE(answer.get() != nullptr);
2446 2446
2447 audio_media_desc = static_cast<const cricket::MediaContentDescription*>( 2447 audio_media_desc = static_cast<const cricket::MediaContentDescription*>(
2448 answer->GetContentDescriptionByName("audio")); 2448 answer->GetContentDescriptionByName("audio"));
2449 ASSERT_TRUE(audio_media_desc != NULL); 2449 ASSERT_TRUE(audio_media_desc != nullptr);
2450 video_media_desc = static_cast<const cricket::MediaContentDescription*>( 2450 video_media_desc = static_cast<const cricket::MediaContentDescription*>(
2451 answer->GetContentDescriptionByName("video")); 2451 answer->GetContentDescriptionByName("video"));
2452 ASSERT_TRUE(video_media_desc != NULL); 2452 ASSERT_TRUE(video_media_desc != nullptr);
2453 EXPECT_EQ(1u, audio_media_desc->cryptos().size()); 2453 EXPECT_EQ(1u, audio_media_desc->cryptos().size());
2454 EXPECT_EQ(1u, video_media_desc->cryptos().size()); 2454 EXPECT_EQ(1u, video_media_desc->cryptos().size());
2455 2455
2456 audio_trans_desc = answer->GetTransportDescriptionByName("audio"); 2456 audio_trans_desc = answer->GetTransportDescriptionByName("audio");
2457 ASSERT_TRUE(audio_trans_desc != NULL); 2457 ASSERT_TRUE(audio_trans_desc != nullptr);
2458 video_trans_desc = answer->GetTransportDescriptionByName("video"); 2458 video_trans_desc = answer->GetTransportDescriptionByName("video");
2459 ASSERT_TRUE(video_trans_desc != NULL); 2459 ASSERT_TRUE(video_trans_desc != nullptr);
2460 ASSERT_TRUE(audio_trans_desc->identity_fingerprint.get() == NULL); 2460 ASSERT_TRUE(audio_trans_desc->identity_fingerprint.get() == nullptr);
2461 ASSERT_TRUE(video_trans_desc->identity_fingerprint.get() == NULL); 2461 ASSERT_TRUE(video_trans_desc->identity_fingerprint.get() == nullptr);
2462 2462
2463 // Enable DTLS; the answer should now only have DTLS support. 2463 // Enable DTLS; the answer should now only have DTLS support.
2464 tdf2_.set_secure(SEC_ENABLED); 2464 tdf2_.set_secure(SEC_ENABLED);
2465 answer.reset(f2_.CreateAnswer(offer.get(), options, NULL)); 2465 answer.reset(f2_.CreateAnswer(offer.get(), options, nullptr));
2466 ASSERT_TRUE(answer.get() != NULL); 2466 ASSERT_TRUE(answer.get() != nullptr);
2467 2467
2468 audio_media_desc = static_cast<const cricket::MediaContentDescription*>( 2468 audio_media_desc = static_cast<const cricket::MediaContentDescription*>(
2469 answer->GetContentDescriptionByName("audio")); 2469 answer->GetContentDescriptionByName("audio"));
2470 ASSERT_TRUE(audio_media_desc != NULL); 2470 ASSERT_TRUE(audio_media_desc != nullptr);
2471 video_media_desc = static_cast<const cricket::MediaContentDescription*>( 2471 video_media_desc = static_cast<const cricket::MediaContentDescription*>(
2472 answer->GetContentDescriptionByName("video")); 2472 answer->GetContentDescriptionByName("video"));
2473 ASSERT_TRUE(video_media_desc != NULL); 2473 ASSERT_TRUE(video_media_desc != nullptr);
2474 EXPECT_TRUE(audio_media_desc->cryptos().empty()); 2474 EXPECT_TRUE(audio_media_desc->cryptos().empty());
2475 EXPECT_TRUE(video_media_desc->cryptos().empty()); 2475 EXPECT_TRUE(video_media_desc->cryptos().empty());
2476 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), 2476 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf),
2477 audio_media_desc->protocol()); 2477 audio_media_desc->protocol());
2478 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf), 2478 EXPECT_EQ(std::string(cricket::kMediaProtocolSavpf),
2479 video_media_desc->protocol()); 2479 video_media_desc->protocol());
2480 2480
2481 audio_trans_desc = answer->GetTransportDescriptionByName("audio"); 2481 audio_trans_desc = answer->GetTransportDescriptionByName("audio");
2482 ASSERT_TRUE(audio_trans_desc != NULL); 2482 ASSERT_TRUE(audio_trans_desc != nullptr);
2483 video_trans_desc = answer->GetTransportDescriptionByName("video"); 2483 video_trans_desc = answer->GetTransportDescriptionByName("video");
2484 ASSERT_TRUE(video_trans_desc != NULL); 2484 ASSERT_TRUE(video_trans_desc != nullptr);
2485 ASSERT_TRUE(audio_trans_desc->identity_fingerprint.get() != NULL); 2485 ASSERT_TRUE(audio_trans_desc->identity_fingerprint.get() != nullptr);
2486 ASSERT_TRUE(video_trans_desc->identity_fingerprint.get() != NULL); 2486 ASSERT_TRUE(video_trans_desc->identity_fingerprint.get() != nullptr);
2487 2487
2488 // Try creating offer again. DTLS enabled now, crypto's should be empty 2488 // Try creating offer again. DTLS enabled now, crypto's should be empty
2489 // in new offer. 2489 // in new offer.
2490 offer.reset(f1_.CreateOffer(options, offer.get())); 2490 offer.reset(f1_.CreateOffer(options, offer.get()));
2491 ASSERT_TRUE(offer.get() != NULL); 2491 ASSERT_TRUE(offer.get() != nullptr);
2492 audio_media_desc = static_cast<const cricket::MediaContentDescription*>( 2492 audio_media_desc = static_cast<const cricket::MediaContentDescription*>(
2493 offer->GetContentDescriptionByName("audio")); 2493 offer->GetContentDescriptionByName("audio"));
2494 ASSERT_TRUE(audio_media_desc != NULL); 2494 ASSERT_TRUE(audio_media_desc != nullptr);
2495 video_media_desc = static_cast<const cricket::MediaContentDescription*>( 2495 video_media_desc = static_cast<const cricket::MediaContentDescription*>(
2496 offer->GetContentDescriptionByName("video")); 2496 offer->GetContentDescriptionByName("video"));
2497 ASSERT_TRUE(video_media_desc != NULL); 2497 ASSERT_TRUE(video_media_desc != nullptr);
2498 EXPECT_TRUE(audio_media_desc->cryptos().empty()); 2498 EXPECT_TRUE(audio_media_desc->cryptos().empty());
2499 EXPECT_TRUE(video_media_desc->cryptos().empty()); 2499 EXPECT_TRUE(video_media_desc->cryptos().empty());
2500 2500
2501 audio_trans_desc = offer->GetTransportDescriptionByName("audio"); 2501 audio_trans_desc = offer->GetTransportDescriptionByName("audio");
2502 ASSERT_TRUE(audio_trans_desc != NULL); 2502 ASSERT_TRUE(audio_trans_desc != nullptr);
2503 video_trans_desc = offer->GetTransportDescriptionByName("video"); 2503 video_trans_desc = offer->GetTransportDescriptionByName("video");
2504 ASSERT_TRUE(video_trans_desc != NULL); 2504 ASSERT_TRUE(video_trans_desc != nullptr);
2505 ASSERT_TRUE(audio_trans_desc->identity_fingerprint.get() != NULL); 2505 ASSERT_TRUE(audio_trans_desc->identity_fingerprint.get() != nullptr);
2506 ASSERT_TRUE(video_trans_desc->identity_fingerprint.get() != NULL); 2506 ASSERT_TRUE(video_trans_desc->identity_fingerprint.get() != nullptr);
2507 } 2507 }
2508 2508
2509 // Test that an answer can't be created if cryptos are required but the offer is 2509 // Test that an answer can't be created if cryptos are required but the offer is
2510 // unsecure. 2510 // unsecure.
2511 TEST_F(MediaSessionDescriptionFactoryTest, TestSecureAnswerToUnsecureOffer) { 2511 TEST_F(MediaSessionDescriptionFactoryTest, TestSecureAnswerToUnsecureOffer) {
2512 MediaSessionOptions options; 2512 MediaSessionOptions options;
2513 f1_.set_secure(SEC_DISABLED); 2513 f1_.set_secure(SEC_DISABLED);
2514 tdf1_.set_secure(SEC_DISABLED); 2514 tdf1_.set_secure(SEC_DISABLED);
2515 f2_.set_secure(SEC_REQUIRED); 2515 f2_.set_secure(SEC_REQUIRED);
2516 tdf1_.set_secure(SEC_ENABLED); 2516 tdf1_.set_secure(SEC_ENABLED);
2517 2517
2518 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(options, NULL)); 2518 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(options, nullptr));
2519 ASSERT_TRUE(offer.get() != NULL); 2519 ASSERT_TRUE(offer.get() != nullptr);
2520 std::unique_ptr<SessionDescription> answer( 2520 std::unique_ptr<SessionDescription> answer(
2521 f2_.CreateAnswer(offer.get(), options, NULL)); 2521 f2_.CreateAnswer(offer.get(), options, nullptr));
2522 EXPECT_TRUE(answer.get() == NULL); 2522 EXPECT_TRUE(answer.get() == nullptr);
2523 } 2523 }
2524 2524
2525 // Test that we accept a DTLS offer without SDES and create an appropriate 2525 // Test that we accept a DTLS offer without SDES and create an appropriate
2526 // answer. 2526 // answer.
2527 TEST_F(MediaSessionDescriptionFactoryTest, TestCryptoOfferDtlsButNotSdes) { 2527 TEST_F(MediaSessionDescriptionFactoryTest, TestCryptoOfferDtlsButNotSdes) {
2528 f1_.set_secure(SEC_DISABLED); 2528 f1_.set_secure(SEC_DISABLED);
2529 f2_.set_secure(SEC_ENABLED); 2529 f2_.set_secure(SEC_ENABLED);
2530 tdf1_.set_secure(SEC_ENABLED); 2530 tdf1_.set_secure(SEC_ENABLED);
2531 tdf2_.set_secure(SEC_ENABLED); 2531 tdf2_.set_secure(SEC_ENABLED);
2532 MediaSessionOptions options; 2532 MediaSessionOptions options;
2533 options.recv_audio = true; 2533 options.recv_audio = true;
2534 options.recv_video = true; 2534 options.recv_video = true;
2535 options.data_channel_type = cricket::DCT_RTP; 2535 options.data_channel_type = cricket::DCT_RTP;
2536 2536
2537 std::unique_ptr<SessionDescription> offer, answer; 2537 std::unique_ptr<SessionDescription> offer, answer;
2538 2538
2539 // Generate an offer with DTLS but without SDES. 2539 // Generate an offer with DTLS but without SDES.
2540 offer.reset(f1_.CreateOffer(options, NULL)); 2540 offer.reset(f1_.CreateOffer(options, nullptr));
2541 ASSERT_TRUE(offer.get() != NULL); 2541 ASSERT_TRUE(offer.get() != nullptr);
2542 2542
2543 const AudioContentDescription* audio_offer = 2543 const AudioContentDescription* audio_offer =
2544 GetFirstAudioContentDescription(offer.get()); 2544 GetFirstAudioContentDescription(offer.get());
2545 ASSERT_TRUE(audio_offer->cryptos().empty()); 2545 ASSERT_TRUE(audio_offer->cryptos().empty());
2546 const VideoContentDescription* video_offer = 2546 const VideoContentDescription* video_offer =
2547 GetFirstVideoContentDescription(offer.get()); 2547 GetFirstVideoContentDescription(offer.get());
2548 ASSERT_TRUE(video_offer->cryptos().empty()); 2548 ASSERT_TRUE(video_offer->cryptos().empty());
2549 const DataContentDescription* data_offer = 2549 const DataContentDescription* data_offer =
2550 GetFirstDataContentDescription(offer.get()); 2550 GetFirstDataContentDescription(offer.get());
2551 ASSERT_TRUE(data_offer->cryptos().empty()); 2551 ASSERT_TRUE(data_offer->cryptos().empty());
2552 2552
2553 const cricket::TransportDescription* audio_offer_trans_desc = 2553 const cricket::TransportDescription* audio_offer_trans_desc =
2554 offer->GetTransportDescriptionByName("audio"); 2554 offer->GetTransportDescriptionByName("audio");
2555 ASSERT_TRUE(audio_offer_trans_desc->identity_fingerprint.get() != NULL); 2555 ASSERT_TRUE(audio_offer_trans_desc->identity_fingerprint.get() != nullptr);
2556 const cricket::TransportDescription* video_offer_trans_desc = 2556 const cricket::TransportDescription* video_offer_trans_desc =
2557 offer->GetTransportDescriptionByName("video"); 2557 offer->GetTransportDescriptionByName("video");
2558 ASSERT_TRUE(video_offer_trans_desc->identity_fingerprint.get() != NULL); 2558 ASSERT_TRUE(video_offer_trans_desc->identity_fingerprint.get() != nullptr);
2559 const cricket::TransportDescription* data_offer_trans_desc = 2559 const cricket::TransportDescription* data_offer_trans_desc =
2560 offer->GetTransportDescriptionByName("data"); 2560 offer->GetTransportDescriptionByName("data");
2561 ASSERT_TRUE(data_offer_trans_desc->identity_fingerprint.get() != NULL); 2561 ASSERT_TRUE(data_offer_trans_desc->identity_fingerprint.get() != nullptr);
2562 2562
2563 // Generate an answer with DTLS. 2563 // Generate an answer with DTLS.
2564 answer.reset(f2_.CreateAnswer(offer.get(), options, NULL)); 2564 answer.reset(f2_.CreateAnswer(offer.get(), options, nullptr));
2565 ASSERT_TRUE(answer.get() != NULL); 2565 ASSERT_TRUE(answer.get() != nullptr);
2566 2566
2567 const cricket::TransportDescription* audio_answer_trans_desc = 2567 const cricket::TransportDescription* audio_answer_trans_desc =
2568 answer->GetTransportDescriptionByName("audio"); 2568 answer->GetTransportDescriptionByName("audio");
2569 EXPECT_TRUE(audio_answer_trans_desc->identity_fingerprint.get() != NULL); 2569 EXPECT_TRUE(audio_answer_trans_desc->identity_fingerprint.get() != nullptr);
2570 const cricket::TransportDescription* video_answer_trans_desc = 2570 const cricket::TransportDescription* video_answer_trans_desc =
2571 answer->GetTransportDescriptionByName("video"); 2571 answer->GetTransportDescriptionByName("video");
2572 EXPECT_TRUE(video_answer_trans_desc->identity_fingerprint.get() != NULL); 2572 EXPECT_TRUE(video_answer_trans_desc->identity_fingerprint.get() != nullptr);
2573 const cricket::TransportDescription* data_answer_trans_desc = 2573 const cricket::TransportDescription* data_answer_trans_desc =
2574 answer->GetTransportDescriptionByName("data"); 2574 answer->GetTransportDescriptionByName("data");
2575 EXPECT_TRUE(data_answer_trans_desc->identity_fingerprint.get() != NULL); 2575 EXPECT_TRUE(data_answer_trans_desc->identity_fingerprint.get() != nullptr);
2576 } 2576 }
2577 2577
2578 // Verifies if vad_enabled option is set to false, CN codecs are not present in 2578 // Verifies if vad_enabled option is set to false, CN codecs are not present in
2579 // offer or answer. 2579 // offer or answer.
2580 TEST_F(MediaSessionDescriptionFactoryTest, TestVADEnableOption) { 2580 TEST_F(MediaSessionDescriptionFactoryTest, TestVADEnableOption) {
2581 MediaSessionOptions options; 2581 MediaSessionOptions options;
2582 options.recv_audio = true; 2582 options.recv_audio = true;
2583 options.recv_video = true; 2583 options.recv_video = true;
2584 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(options, NULL)); 2584 std::unique_ptr<SessionDescription> offer(f1_.CreateOffer(options, nullptr));
2585 ASSERT_TRUE(offer.get() != NULL); 2585 ASSERT_TRUE(offer.get() != nullptr);
2586 const ContentInfo* audio_content = offer->GetContentByName("audio"); 2586 const ContentInfo* audio_content = offer->GetContentByName("audio");
2587 EXPECT_FALSE(VerifyNoCNCodecs(audio_content)); 2587 EXPECT_FALSE(VerifyNoCNCodecs(audio_content));
2588 2588
2589 options.vad_enabled = false; 2589 options.vad_enabled = false;
2590 offer.reset(f1_.CreateOffer(options, NULL)); 2590 offer.reset(f1_.CreateOffer(options, nullptr));
2591 ASSERT_TRUE(offer.get() != NULL); 2591 ASSERT_TRUE(offer.get() != nullptr);
2592 audio_content = offer->GetContentByName("audio"); 2592 audio_content = offer->GetContentByName("audio");
2593 EXPECT_TRUE(VerifyNoCNCodecs(audio_content)); 2593 EXPECT_TRUE(VerifyNoCNCodecs(audio_content));
2594 std::unique_ptr<SessionDescription> answer( 2594 std::unique_ptr<SessionDescription> answer(
2595 f1_.CreateAnswer(offer.get(), options, NULL)); 2595 f1_.CreateAnswer(offer.get(), options, nullptr));
2596 ASSERT_TRUE(answer.get() != NULL); 2596 ASSERT_TRUE(answer.get() != nullptr);
2597 audio_content = answer->GetContentByName("audio"); 2597 audio_content = answer->GetContentByName("audio");
2598 EXPECT_TRUE(VerifyNoCNCodecs(audio_content)); 2598 EXPECT_TRUE(VerifyNoCNCodecs(audio_content));
2599 } 2599 }
2600 2600
2601 // Test that the content name ("mid" in SDP) is unchanged when creating a 2601 // Test that the content name ("mid" in SDP) is unchanged when creating a
2602 // new offer. 2602 // new offer.
2603 TEST_F(MediaSessionDescriptionFactoryTest, 2603 TEST_F(MediaSessionDescriptionFactoryTest,
2604 TestContentNameNotChangedInSubsequentOffers) { 2604 TestContentNameNotChangedInSubsequentOffers) {
2605 MediaSessionOptions opts; 2605 MediaSessionOptions opts;
2606 opts.recv_audio = true; 2606 opts.recv_audio = true;
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
2750 sf.set_audio_codecs(send_codecs, recv_codecs); 2750 sf.set_audio_codecs(send_codecs, recv_codecs);
2751 sf.set_add_legacy_streams(add_legacy_stream); 2751 sf.set_add_legacy_streams(add_legacy_stream);
2752 2752
2753 MediaSessionOptions opts; 2753 MediaSessionOptions opts;
2754 opts.recv_audio = (direction == cricket::MD_RECVONLY || 2754 opts.recv_audio = (direction == cricket::MD_RECVONLY ||
2755 direction == cricket::MD_SENDRECV); 2755 direction == cricket::MD_SENDRECV);
2756 opts.recv_video = false; 2756 opts.recv_video = false;
2757 if (direction == cricket::MD_SENDONLY || direction == cricket::MD_SENDRECV) 2757 if (direction == cricket::MD_SENDONLY || direction == cricket::MD_SENDRECV)
2758 opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack1, kMediaStream1); 2758 opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack1, kMediaStream1);
2759 2759
2760 std::unique_ptr<SessionDescription> offer(sf.CreateOffer(opts, NULL)); 2760 std::unique_ptr<SessionDescription> offer(sf.CreateOffer(opts, nullptr));
2761 ASSERT_TRUE(offer.get() != NULL); 2761 ASSERT_TRUE(offer.get() != nullptr);
2762 const ContentInfo* ac = offer->GetContentByName("audio"); 2762 const ContentInfo* ac = offer->GetContentByName("audio");
2763 2763
2764 // If the factory didn't add any audio content to the offer, we cannot check 2764 // If the factory didn't add any audio content to the offer, we cannot check
2765 // that the codecs put in are right. This happens when we neither want to send 2765 // that the codecs put in are right. This happens when we neither want to send
2766 // nor receive audio. The checks are still in place if at some point we'd 2766 // nor receive audio. The checks are still in place if at some point we'd
2767 // instead create an inactive stream. 2767 // instead create an inactive stream.
2768 if (ac) { 2768 if (ac) {
2769 AudioContentDescription* acd = 2769 AudioContentDescription* acd =
2770 static_cast<AudioContentDescription*>(ac->description); 2770 static_cast<AudioContentDescription*>(ac->description);
2771 // sendrecv and inactive should both present lists as if the channel was to 2771 // sendrecv and inactive should both present lists as if the channel was to
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
2855 MediaSessionOptions offer_opts; 2855 MediaSessionOptions offer_opts;
2856 offer_opts.recv_audio = (offer_direction == cricket::MD_RECVONLY || 2856 offer_opts.recv_audio = (offer_direction == cricket::MD_RECVONLY ||
2857 offer_direction == cricket::MD_SENDRECV); 2857 offer_direction == cricket::MD_SENDRECV);
2858 offer_opts.recv_video = false; 2858 offer_opts.recv_video = false;
2859 if (offer_direction == cricket::MD_SENDONLY || 2859 if (offer_direction == cricket::MD_SENDONLY ||
2860 offer_direction == cricket::MD_SENDRECV) { 2860 offer_direction == cricket::MD_SENDRECV) {
2861 offer_opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack1, kMediaStream1); 2861 offer_opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack1, kMediaStream1);
2862 } 2862 }
2863 2863
2864 std::unique_ptr<SessionDescription> offer( 2864 std::unique_ptr<SessionDescription> offer(
2865 offer_factory.CreateOffer(offer_opts, NULL)); 2865 offer_factory.CreateOffer(offer_opts, nullptr));
2866 ASSERT_TRUE(offer.get() != NULL); 2866 ASSERT_TRUE(offer.get() != nullptr);
2867 2867
2868 MediaSessionOptions answer_opts; 2868 MediaSessionOptions answer_opts;
2869 answer_opts.recv_audio = (answer_direction == cricket::MD_RECVONLY || 2869 answer_opts.recv_audio = (answer_direction == cricket::MD_RECVONLY ||
2870 answer_direction == cricket::MD_SENDRECV); 2870 answer_direction == cricket::MD_SENDRECV);
2871 answer_opts.recv_video = false; 2871 answer_opts.recv_video = false;
2872 if (answer_direction == cricket::MD_SENDONLY || 2872 if (answer_direction == cricket::MD_SENDONLY ||
2873 answer_direction == cricket::MD_SENDRECV) { 2873 answer_direction == cricket::MD_SENDRECV) {
2874 answer_opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack1, kMediaStream1); 2874 answer_opts.AddSendStream(MEDIA_TYPE_AUDIO, kAudioTrack1, kMediaStream1);
2875 } 2875 }
2876 std::unique_ptr<SessionDescription> answer( 2876 std::unique_ptr<SessionDescription> answer(
2877 answer_factory.CreateAnswer(offer.get(), answer_opts, NULL)); 2877 answer_factory.CreateAnswer(offer.get(), answer_opts, nullptr));
2878 const ContentInfo* ac = answer->GetContentByName("audio"); 2878 const ContentInfo* ac = answer->GetContentByName("audio");
2879 2879
2880 // If the factory didn't add any audio content to the answer, we cannot check 2880 // If the factory didn't add any audio content to the answer, we cannot check
2881 // that the codecs put in are right. This happens when we neither want to send 2881 // that the codecs put in are right. This happens when we neither want to send
2882 // nor receive audio. The checks are still in place if at some point we'd 2882 // nor receive audio. The checks are still in place if at some point we'd
2883 // instead create an inactive stream. 2883 // instead create an inactive stream.
2884 if (ac) { 2884 if (ac) {
2885 const AudioContentDescription* acd = 2885 const AudioContentDescription* acd =
2886 static_cast<const AudioContentDescription*>(ac->description); 2886 static_cast<const AudioContentDescription*>(ac->description);
2887 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type()); 2887 EXPECT_EQ(MEDIA_TYPE_AUDIO, acd->type());
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
2980 ::testing::Combine( 2980 ::testing::Combine(
2981 ::testing::Values(cricket::MD_SENDONLY, 2981 ::testing::Values(cricket::MD_SENDONLY,
2982 cricket::MD_RECVONLY, 2982 cricket::MD_RECVONLY,
2983 cricket::MD_SENDRECV, 2983 cricket::MD_SENDRECV,
2984 cricket::MD_INACTIVE), 2984 cricket::MD_INACTIVE),
2985 ::testing::Values(cricket::MD_SENDONLY, 2985 ::testing::Values(cricket::MD_SENDONLY,
2986 cricket::MD_RECVONLY, 2986 cricket::MD_RECVONLY,
2987 cricket::MD_SENDRECV, 2987 cricket::MD_SENDRECV,
2988 cricket::MD_INACTIVE), 2988 cricket::MD_INACTIVE),
2989 ::testing::Bool())); 2989 ::testing::Bool()));
OLDNEW
« webrtc/base/event.cc ('K') | « webrtc/pc/mediasession.cc ('k') | webrtc/pc/mediastream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698