| Index: webrtc/media/engine/webrtcvideoengine2_unittest.cc
 | 
| diff --git a/webrtc/media/engine/webrtcvideoengine2_unittest.cc b/webrtc/media/engine/webrtcvideoengine2_unittest.cc
 | 
| index b44eb9907d7a2a2bacb731532dee1aab0f4f3533..076fe130c2915a31ab6732c98c6421f7c571d451 100644
 | 
| --- a/webrtc/media/engine/webrtcvideoengine2_unittest.cc
 | 
| +++ b/webrtc/media/engine/webrtcvideoengine2_unittest.cc
 | 
| @@ -919,12 +919,13 @@ class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test {
 | 
|      return streams[streams.size() - 1];
 | 
|    }
 | 
|  
 | 
| -  void SetSendCodecsShouldWorkForBitrates(const char* min_bitrate_kbps,
 | 
| -                                          int expected_min_bitrate_bps,
 | 
| -                                          const char* start_bitrate_kbps,
 | 
| -                                          int expected_start_bitrate_bps,
 | 
| -                                          const char* max_bitrate_kbps,
 | 
| -                                          int expected_max_bitrate_bps) {
 | 
| +  void SetSendCodecsShouldWorkForBitrates(
 | 
| +      const char* min_bitrate_kbps,
 | 
| +      int expected_min_bitrate_bps,
 | 
| +      const char* start_bitrate_kbps,
 | 
| +      int expected_start_bitrate_bps,
 | 
| +      const char* max_bitrate_kbps,
 | 
| +      rtc::Optional<int> expected_max_bitrate_bps) {
 | 
|      auto& codecs = send_parameters_.codecs;
 | 
|      codecs.clear();
 | 
|      codecs.push_back(kVp8Codec);
 | 
| @@ -1094,11 +1095,11 @@ class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test {
 | 
|    }
 | 
|  
 | 
|    void SetAndExpectMaxBitrate(cricket::FakeVideoCapturer& capturer,
 | 
| -                              int global_max,
 | 
| -                              int stream_max,
 | 
| +                              rtc::Optional<int> global_max,
 | 
| +                              rtc::Optional<int> stream_max,
 | 
|                                int expected_encoder_bitrate) {
 | 
|      VideoSendParameters limited_send_params = send_parameters_;
 | 
| -    limited_send_params.max_bandwidth_bps = global_max;
 | 
| +    limited_send_params.max_bitrate_bps = global_max;
 | 
|      EXPECT_TRUE(channel_->SetSendParameters(limited_send_params));
 | 
|      webrtc::RtpParameters parameters = channel_->GetRtpParameters(last_ssrc_);
 | 
|      EXPECT_EQ(1UL, parameters.encodings.size());
 | 
| @@ -2193,11 +2194,12 @@ TEST_F(WebRtcVideoChannel2Test, SetSendCodecsChangesExistingStreams) {
 | 
|  
 | 
|  TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithBitrates) {
 | 
|    SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200",
 | 
| -                                     200000);
 | 
| +                                     rtc::Optional<int>(200000));
 | 
|  }
 | 
|  
 | 
|  TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithHighMaxBitrate) {
 | 
| -  SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000", 10000000);
 | 
| +  SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "10000",
 | 
| +                                     rtc::Optional<int>(10000000));
 | 
|    std::vector<webrtc::VideoStream> streams = AddSendStream()->GetVideoStreams();
 | 
|    ASSERT_EQ(1u, streams.size());
 | 
|    EXPECT_EQ(10000000, streams[0].max_bitrate_bps);
 | 
| @@ -2205,12 +2207,12 @@ TEST_F(WebRtcVideoChannel2Test, SetSendCodecsWithHighMaxBitrate) {
 | 
|  
 | 
|  TEST_F(WebRtcVideoChannel2Test,
 | 
|         SetSendCodecsWithoutBitratesUsesCorrectDefaults) {
 | 
| -  SetSendCodecsShouldWorkForBitrates(
 | 
| -      "", 0, "", -1, "", -1);
 | 
| +  SetSendCodecsShouldWorkForBitrates("", 0, "", -1, "", rtc::Optional<int>());
 | 
|  }
 | 
|  
 | 
|  TEST_F(WebRtcVideoChannel2Test, SetSendCodecsCapsMinAndStartBitrate) {
 | 
| -  SetSendCodecsShouldWorkForBitrates("-1", 0, "-100", -1, "", -1);
 | 
| +  SetSendCodecsShouldWorkForBitrates("-1", 0, "-100", -1, "",
 | 
| +                                     rtc::Optional<int>());
 | 
|  }
 | 
|  
 | 
|  TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectsMaxLessThanMinBitrate) {
 | 
| @@ -2222,24 +2224,27 @@ TEST_F(WebRtcVideoChannel2Test, SetSendCodecsRejectsMaxLessThanMinBitrate) {
 | 
|  TEST_F(WebRtcVideoChannel2Test,
 | 
|         SetMaxSendBandwidthShouldPreserveOtherBitrates) {
 | 
|    SetSendCodecsShouldWorkForBitrates("100", 100000, "150", 150000, "200",
 | 
| -                                     200000);
 | 
| -  send_parameters_.max_bandwidth_bps = 300000;
 | 
| +                                     rtc::Optional<int>(200000));
 | 
| +  send_parameters_.max_bitrate_bps = rtc::Optional<int>(300000);
 | 
|    EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
 | 
|    EXPECT_EQ(100000, fake_call_->GetConfig().bitrate_config.min_bitrate_bps)
 | 
|        << "Setting max bitrate should keep previous min bitrate.";
 | 
|    EXPECT_EQ(-1, fake_call_->GetConfig().bitrate_config.start_bitrate_bps)
 | 
|        << "Setting max bitrate should not reset start bitrate.";
 | 
| -  EXPECT_EQ(300000, fake_call_->GetConfig().bitrate_config.max_bitrate_bps);
 | 
| +  EXPECT_EQ(rtc::Optional<int>(300000),
 | 
| +            fake_call_->GetConfig().bitrate_config.max_bitrate_bps);
 | 
|  }
 | 
|  
 | 
|  TEST_F(WebRtcVideoChannel2Test, SetMaxSendBandwidthShouldBeRemovable) {
 | 
| -  send_parameters_.max_bandwidth_bps = 300000;
 | 
| +  send_parameters_.max_bitrate_bps = rtc::Optional<int>(300000);
 | 
|    EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
 | 
| -  EXPECT_EQ(300000, fake_call_->GetConfig().bitrate_config.max_bitrate_bps);
 | 
| -  // <= 0 means disable (infinite) max bitrate.
 | 
| -  send_parameters_.max_bandwidth_bps = 0;
 | 
| +  EXPECT_EQ(rtc::Optional<int>(300000),
 | 
| +            fake_call_->GetConfig().bitrate_config.max_bitrate_bps);
 | 
| +  // <not set> means disable (infinite) max bitrate.
 | 
| +  send_parameters_.max_bitrate_bps = rtc::Optional<int>();
 | 
|    EXPECT_TRUE(channel_->SetSendParameters(send_parameters_));
 | 
| -  EXPECT_EQ(-1, fake_call_->GetConfig().bitrate_config.max_bitrate_bps)
 | 
| +  EXPECT_EQ(rtc::Optional<int>(),
 | 
| +            fake_call_->GetConfig().bitrate_config.max_bitrate_bps)
 | 
|        << "Setting zero max bitrate did not reset start bitrate.";
 | 
|  }
 | 
|  
 | 
| @@ -2260,7 +2265,7 @@ TEST_F(WebRtcVideoChannel2Test, SetMaxSendBitrateCanIncreaseSenderBitrate) {
 | 
|    int initial_max_bitrate_bps = streams[0].max_bitrate_bps;
 | 
|    EXPECT_GT(initial_max_bitrate_bps, 0);
 | 
|  
 | 
| -  parameters.max_bandwidth_bps = initial_max_bitrate_bps * 2;
 | 
| +  parameters.max_bitrate_bps = rtc::Optional<int>(initial_max_bitrate_bps * 2);
 | 
|    EXPECT_TRUE(channel_->SetSendParameters(parameters));
 | 
|    // Insert a frame to update the encoder config.
 | 
|    EXPECT_TRUE(capturer.CaptureFrame());
 | 
| @@ -2292,7 +2297,7 @@ TEST_F(WebRtcVideoChannel2Test,
 | 
|    int initial_max_bitrate_bps = GetTotalMaxBitrateBps(streams);
 | 
|    EXPECT_GT(initial_max_bitrate_bps, 0);
 | 
|  
 | 
| -  parameters.max_bandwidth_bps = initial_max_bitrate_bps * 2;
 | 
| +  parameters.max_bitrate_bps = rtc::Optional<int>(initial_max_bitrate_bps * 2);
 | 
|    EXPECT_TRUE(channel_->SetSendParameters(parameters));
 | 
|    // Insert a frame to update the encoder config.
 | 
|    EXPECT_TRUE(capturer.CaptureFrame());
 | 
| @@ -3145,7 +3150,7 @@ TEST_F(WebRtcVideoChannel2Test, RedRtxPacketDoesntCreateUnsignalledStream) {
 | 
|    TestReceiveUnsignalledSsrcPacket(kRedRtxPayloadType, false);
 | 
|  }
 | 
|  
 | 
| -TEST_F(WebRtcVideoChannel2Test, CanSentMaxBitrateForExistingStream) {
 | 
| +TEST_F(WebRtcVideoChannel2Test, CanSetMaxBitrateForExistingStream) {
 | 
|    AddSendStream();
 | 
|  
 | 
|    cricket::FakeVideoCapturer capturer;
 | 
| @@ -3160,23 +3165,31 @@ TEST_F(WebRtcVideoChannel2Test, CanSentMaxBitrateForExistingStream) {
 | 
|    int default_encoder_bitrate = GetMaxEncoderBitrate(capturer);
 | 
|    EXPECT_TRUE(default_encoder_bitrate > 1000);
 | 
|  
 | 
| -  // TODO(skvlad): Resolve the inconsistency between the interpretation
 | 
| -  // of the global bitrate limit for audio and video:
 | 
| -  // - Audio: max_bandwidth_bps = 0 - fail the operation,
 | 
| -  //          max_bandwidth_bps = -1 - remove the bandwidth limit
 | 
| -  // - Video: max_bandwidth_bps = 0 - remove the bandwidth limit,
 | 
| -  //          max_bandwidth_bps = -1 - do not change the previously set
 | 
| -  //                                   limit.
 | 
| -
 | 
| -  SetAndExpectMaxBitrate(capturer, 1000, 0, 1000);
 | 
| -  SetAndExpectMaxBitrate(capturer, 1000, 800, 800);
 | 
| -  SetAndExpectMaxBitrate(capturer, 600, 800, 600);
 | 
| -  SetAndExpectMaxBitrate(capturer, 0, 800, 800);
 | 
| -  SetAndExpectMaxBitrate(capturer, 0, 0, default_encoder_bitrate);
 | 
| +  SetAndExpectMaxBitrate(capturer, rtc::Optional<int>(1000),
 | 
| +                         rtc::Optional<int>(), 1000);
 | 
| +  SetAndExpectMaxBitrate(capturer, rtc::Optional<int>(1000),
 | 
| +                         rtc::Optional<int>(800), 800);
 | 
| +  SetAndExpectMaxBitrate(capturer, rtc::Optional<int>(600),
 | 
| +                         rtc::Optional<int>(800), 600);
 | 
| +  SetAndExpectMaxBitrate(capturer, rtc::Optional<int>(),
 | 
| +                         rtc::Optional<int>(800), 800);
 | 
| +  SetAndExpectMaxBitrate(capturer, rtc::Optional<int>(), rtc::Optional<int>(),
 | 
| +                         default_encoder_bitrate);
 | 
|  
 | 
|    EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL));
 | 
|  }
 | 
|  
 | 
| +TEST_F(WebRtcVideoChannel2Test, CannotSetNegativeOrZeroMaxBitrate) {
 | 
| +  AddSendStream();
 | 
| +  webrtc::RtpParameters bad_parameters;
 | 
| +  bad_parameters.encodings.push_back(webrtc::RtpEncodingParameters());
 | 
| +
 | 
| +  bad_parameters.encodings[0].max_bitrate_bps = rtc::Optional<int>(0);
 | 
| +  EXPECT_FALSE(channel_->SetRtpParameters(last_ssrc_, bad_parameters));
 | 
| +  bad_parameters.encodings[0].max_bitrate_bps = rtc::Optional<int>(-1);
 | 
| +  EXPECT_FALSE(channel_->SetRtpParameters(last_ssrc_, bad_parameters));
 | 
| +}
 | 
| +
 | 
|  TEST_F(WebRtcVideoChannel2Test, CannotSetMaxBitrateForNonexistentStream) {
 | 
|    webrtc::RtpParameters nonexistent_parameters =
 | 
|        channel_->GetRtpParameters(last_ssrc_);
 | 
| @@ -3297,7 +3310,8 @@ class WebRtcVideoChannel2SimulcastTest : public testing::Test {
 | 
|      ASSERT_EQ(expected_num_streams, video_streams.size());
 | 
|  
 | 
|      std::vector<webrtc::VideoStream> expected_streams = GetSimulcastConfig(
 | 
| -        num_configured_streams, codec.width, codec.height, 0, kDefaultQpMax,
 | 
| +        num_configured_streams, codec.width, codec.height, rtc::Optional<int>(),
 | 
| +        kDefaultQpMax,
 | 
|          codec.framerate != 0 ? codec.framerate : kDefaultFramerate);
 | 
|  
 | 
|      ASSERT_EQ(expected_streams.size(), video_streams.size());
 | 
| 
 |