Clear the FrameBuffer if it's full and a keyframe is being inserted.

Bug: webrtc:7705, webrtc:8593, chromium:706599, chromium:807624
Change-Id: Ie4e3e217bc2930fe511f8b6ad3a36afed484ab5f
Reviewed-on: https://webrtc-review.googlesource.com/59321
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22304}
diff --git a/modules/video_coding/frame_buffer2_unittest.cc b/modules/video_coding/frame_buffer2_unittest.cc
index 807520c..ffc02e8 100644
--- a/modules/video_coding/frame_buffer2_unittest.cc
+++ b/modules/video_coding/frame_buffer2_unittest.cc
@@ -559,5 +559,20 @@
   CheckNoFrame(2);
 }
 
+TEST_F(TestFrameBuffer2, KeyframeClearsFullBuffer) {
+  const int kMaxBufferSize = 600;
+
+  for (int i = 1; i <= kMaxBufferSize; ++i)
+    EXPECT_EQ(-1, InsertFrame(i, 0, i * 1000, false, i - 1));
+  ExtractFrame();
+  CheckNoFrame(0);
+
+  EXPECT_EQ(
+      kMaxBufferSize + 1,
+      InsertFrame(kMaxBufferSize + 1, 0, (kMaxBufferSize + 1) * 1000, false));
+  ExtractFrame();
+  CheckFrame(1, kMaxBufferSize + 1, 0);
+}
+
 }  // namespace video_coding
 }  // namespace webrtc