Index: media/blink/multibuffer_data_source_unittest.cc |
diff --git a/media/blink/multibuffer_data_source_unittest.cc b/media/blink/multibuffer_data_source_unittest.cc |
index c9ebdfbb51d994f209fefa537417ad319d9b99a4..ea90482591765fcf53aa27dda70fe380d0575185 100644 |
--- a/media/blink/multibuffer_data_source_unittest.cc |
+++ b/media/blink/multibuffer_data_source_unittest.cc |
@@ -1593,4 +1593,44 @@ TEST_F(MultibufferDataSourceTest, CheckBufferSizes) { |
EXPECT_EQ(71 << 20, buffer_size()); |
} |
+// Provoke an edge case where the loading state may not end up transitioning |
+// back to "idle" when we're done loading. |
+TEST_F(MultibufferDataSourceTest, Http_CheckLoadingTransition) { |
+ GURL gurl(kHttpUrl); |
+ data_source_.reset(new MockMultibufferDataSource( |
+ gurl, UrlData::CORS_UNSPECIFIED, message_loop_.task_runner(), url_index_, |
+ view_->mainFrame()->toWebLocalFrame(), &host_)); |
+ data_source_->SetPreload(preload_); |
+ |
+ response_generator_.reset(new TestResponseGenerator(gurl, kDataSize * 1)); |
+ EXPECT_CALL(*this, OnInitialize(true)); |
+ data_source_->Initialize(base::Bind(&MultibufferDataSourceTest::OnInitialize, |
+ base::Unretained(this))); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // Not really loading until after OnInitialize is called. |
+ EXPECT_EQ(data_source_->downloading(), false); |
+ |
+ EXPECT_CALL(host_, SetTotalBytes(response_generator_->content_length())); |
+ Respond(response_generator_->Generate206(0)); |
+ EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize)); |
+ ReceiveData(kDataSize); |
+ |
+ EXPECT_EQ(data_source_->downloading(), true); |
+ EXPECT_CALL(host_, AddBufferedByteRange(kDataSize, kDataSize + 1)); |
+ ReceiveDataLow(1); |
+ EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize * 3)); |
+ data_provider()->didFinishLoading(0); |
+ |
+ EXPECT_CALL(*this, ReadCallback(1)); |
+ data_source_->Read(kDataSize, 2, buffer_, |
+ base::Bind(&MultibufferDataSourceTest::ReadCallback, |
+ base::Unretained(this))); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // Make sure we're not downloading anymore. |
+ EXPECT_EQ(data_source_->downloading(), false); |
+ Stop(); |
+} |
+ |
} // namespace media |