Fix bug where a connection switch causes BWE to be set to zero.

BUG=webrtc:6076
R=sprang@webrtc.org

Review URL: https://codereview.webrtc.org/2125523004 .

Cr-Commit-Position: refs/heads/master@{#13414}
diff --git a/webrtc/call/call.cc b/webrtc/call/call.cc
index c85eaf6..dfb1879 100644
--- a/webrtc/call/call.cc
+++ b/webrtc/call/call.cc
@@ -579,7 +579,12 @@
     // Nothing new to set, early abort to avoid encoder reconfigurations.
     return;
   }
-  config_.bitrate_config = bitrate_config;
+  config_.bitrate_config.min_bitrate_bps = bitrate_config.min_bitrate_bps;
+  // Start bitrate of -1 means we should keep the old bitrate, which there is
+  // no point in remembering for the future.
+  if (bitrate_config.start_bitrate_bps > 0)
+    config_.bitrate_config.start_bitrate_bps = bitrate_config.start_bitrate_bps;
+  config_.bitrate_config.max_bitrate_bps = bitrate_config.max_bitrate_bps;
   congestion_controller_->SetBweBitrates(bitrate_config.min_bitrate_bps,
                                          bitrate_config.start_bitrate_bps,
                                          bitrate_config.max_bitrate_bps);
diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc
index ddd0999..3a8acbc 100644
--- a/webrtc/video/video_send_stream_tests.cc
+++ b/webrtc/video/video_send_stream_tests.cc
@@ -1121,6 +1121,54 @@
   RunBaseTest(&test);
 }
 
+TEST_F(VideoSendStreamTest, ChangingNetworkRoute) {
+  class ChangingNetworkRouteTest : public test::EndToEndTest {
+   public:
+    const int kStartBitrateBps = 300000;
+    const int kNewMaxBitrateBps = 1234567;
+
+    ChangingNetworkRouteTest()
+        : EndToEndTest(test::CallTest::kDefaultTimeoutMs),
+          call_(nullptr) {}
+
+    void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
+      call_ = sender_call;
+    }
+
+    Action OnSendRtp(const uint8_t* packet, size_t length) override {
+      if (call_->GetStats().send_bandwidth_bps > kStartBitrateBps) {
+        observation_complete_.Set();
+      }
+
+      return SEND_PACKET;
+    }
+
+    void PerformTest() override {
+      rtc::NetworkRoute new_route(true, 10, 20, -1);
+      call_->OnNetworkRouteChanged("transport", new_route);
+      Call::Config::BitrateConfig bitrate_config;
+      bitrate_config.start_bitrate_bps = kStartBitrateBps;
+      call_->SetBitrateConfig(bitrate_config);
+      EXPECT_TRUE(Wait())
+          << "Timed out while waiting for start bitrate to be exceeded.";
+
+      bitrate_config.start_bitrate_bps = -1;
+      bitrate_config.max_bitrate_bps = kNewMaxBitrateBps;
+      call_->SetBitrateConfig(bitrate_config);
+      // TODO(holmer): We should set the last sent packet id here and verify
+      // that we correctly ignore any packet loss reported prior to that id.
+      ++new_route.local_network_id;
+      call_->OnNetworkRouteChanged("transport", new_route);
+      EXPECT_EQ(kStartBitrateBps, call_->GetStats().send_bandwidth_bps);
+    }
+
+   private:
+    Call* call_;
+  } test;
+
+  RunBaseTest(&test);
+}
+
 class MaxPaddingSetTest : public test::SendTest {
  public:
   static const uint32_t kMinTransmitBitrateBps = 400000;