Chromium Code Reviews| Index: media/blink/buffered_data_source_unittest.cc |
| diff --git a/media/blink/buffered_data_source_unittest.cc b/media/blink/buffered_data_source_unittest.cc |
| index b2716ac5940a569b83678a439f5f96b192182812..dad2be6532a47f016f8922a8651beb4c0d9ae274 100644 |
| --- a/media/blink/buffered_data_source_unittest.cc |
| +++ b/media/blink/buffered_data_source_unittest.cc |
| @@ -108,6 +108,8 @@ static const int kDataSize = 1024; |
| static const char kHttpUrl[] = "http://localhost/foo.webm"; |
| static const char kFileUrl[] = "file:///tmp/bar.webm"; |
| +static const char kHttpDifferentPathUrl[] = "http://localhost/bar.webm"; |
| +static const char kHttpDifferentOriginUrl[] = "http://127.0.0.1/foo.webm"; |
| class BufferedDataSourceTest : public testing::Test { |
| public: |
| @@ -220,6 +222,47 @@ class BufferedDataSourceTest : public testing::Test { |
| message_loop_.RunUntilIdle(); |
| } |
| + void ExecuteMixedResponseSuccessTest(const WebURLResponse& response1, |
| + const WebURLResponse& response2) { |
| + EXPECT_CALL(host_, SetTotalBytes(kFileSize)); |
| + EXPECT_CALL(host_, AddBufferedByteRange(kDataSize, kDataSize * 2 - 1)); |
| + EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1)); |
| + EXPECT_CALL(*this, ReadCallback(kDataSize)).Times(2); |
| + |
| + Respond(response1); |
| + ReadAt(0); |
| + ReceiveData(kDataSize); |
| + EXPECT_TRUE(data_source_->loading()); |
| + |
| + ExpectCreateResourceLoader(); |
| + FinishLoading(); |
| + ReadAt(kDataSize); |
| + Respond(response2); |
| + ReceiveData(kDataSize); |
| + FinishLoading(); |
| + Stop(); |
| + } |
| + |
| + void ExecuteMixedResponseFailureTest(const WebURLResponse& response1, |
| + const WebURLResponse& response2) { |
| + EXPECT_CALL(host_, SetTotalBytes(kFileSize)); |
| + EXPECT_CALL(host_, AddBufferedByteRange(0, kDataSize - 1)); |
| + EXPECT_CALL(*this, ReadCallback(kDataSize)); |
| + EXPECT_CALL(*this, ReadCallback(media::DataSource::kReadError)); |
| + |
| + Respond(response1); |
| + ReadAt(0); |
| + ReceiveData(kDataSize); |
| + EXPECT_TRUE(data_source_->loading()); |
| + |
| + ExpectCreateResourceLoader(); |
| + FinishLoading(); |
| + ReadAt(kDataSize); |
| + Respond(response2); |
| + EXPECT_FALSE(data_source_->loading()); |
| + Stop(); |
| + } |
| + |
| // Accessors for private variables on |data_source_|. |
| BufferedResourceLoader* loader() { |
| return data_source_->loader_.get(); |
| @@ -443,6 +486,84 @@ TEST_F(BufferedDataSourceTest, Http_RetryOnError) { |
| Stop(); |
| } |
| +TEST_F(BufferedDataSourceTest, Http_PartialResponse) { |
| + Initialize(kHttpUrl, true); |
| + WebURLResponse response1 = |
| + response_generator_->GeneratePartial206(0, kDataSize - 1); |
| + WebURLResponse response2 = |
| + response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1); |
| + ExecuteMixedResponseSuccessTest(response1, response2); |
| +} |
| + |
| +TEST_F(BufferedDataSourceTest, |
| + Http_MixedResponse_RedirectedToDifferentPathResponse) { |
| + Initialize(kHttpUrl, true); |
| + WebURLResponse response1 = |
| + response_generator_->GeneratePartial206(0, kDataSize - 1); |
| + WebURLResponse response2 = |
| + response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1); |
| + response2.setURL(GURL(kHttpDifferentPathUrl)); |
| + ExecuteMixedResponseSuccessTest(response1, response2); |
| +} |
| + |
| +TEST_F(BufferedDataSourceTest, |
| + Http_MixedResponse_RedirectedToDifferentOriginResponse) { |
| + Initialize(kHttpUrl, true); |
| + WebURLResponse response1 = |
| + response_generator_->GeneratePartial206(0, kDataSize - 1); |
| + WebURLResponse response2 = |
| + response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1); |
| + response2.setURL(GURL(kHttpDifferentOriginUrl)); |
| + ExecuteMixedResponseFailureTest(response1, response2); |
| +} |
| + |
| +TEST_F(BufferedDataSourceTest, |
| + Http_MixedResponse_ServiceWorkerGeneratedResponseAndNormalResponse) { |
| + Initialize(kHttpUrl, true); |
| + WebURLResponse response1 = |
| + response_generator_->GeneratePartial206(0, kDataSize - 1); |
| + response1.setWasFetchedViaServiceWorker(true); |
| + WebURLResponse response2 = |
| + response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1); |
| + ExecuteMixedResponseFailureTest(response1, response2); |
|
falken
2015/07/07 02:32:49
(as discussed offline) I was confused by this expe
horo
2015/07/07 03:48:36
Done.
|
| +} |
| + |
| +TEST_F(BufferedDataSourceTest, |
| + Http_MixedResponse_ServiceWorkerProxiedAndSameURLResponse) { |
| + Initialize(kHttpUrl, true); |
| + WebURLResponse response1 = |
| + response_generator_->GeneratePartial206(0, kDataSize - 1); |
| + response1.setWasFetchedViaServiceWorker(true); |
| + response1.setOriginalURLViaServiceWorker(GURL(kHttpUrl)); |
| + WebURLResponse response2 = |
| + response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1); |
| + ExecuteMixedResponseSuccessTest(response1, response2); |
| +} |
| + |
| +TEST_F(BufferedDataSourceTest, |
| + Http_MixedResponse_ServiceWorkerProxiedAndDifferentPathResponse) { |
| + Initialize(kHttpUrl, true); |
| + WebURLResponse response1 = |
| + response_generator_->GeneratePartial206(0, kDataSize - 1); |
| + response1.setWasFetchedViaServiceWorker(true); |
| + response1.setOriginalURLViaServiceWorker(GURL(kHttpDifferentPathUrl)); |
| + WebURLResponse response2 = |
| + response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1); |
| + ExecuteMixedResponseSuccessTest(response1, response2); |
| +} |
| + |
| +TEST_F(BufferedDataSourceTest, |
| + Http_MixedResponse_ServiceWorkerProxiedAndDifferentOriginResponse) { |
| + Initialize(kHttpUrl, true); |
| + WebURLResponse response1 = |
| + response_generator_->GeneratePartial206(0, kDataSize - 1); |
| + response1.setWasFetchedViaServiceWorker(true); |
| + response1.setOriginalURLViaServiceWorker(GURL(kHttpDifferentOriginUrl)); |
| + WebURLResponse response2 = |
| + response_generator_->GeneratePartial206(kDataSize, kDataSize * 2 - 1); |
| + ExecuteMixedResponseFailureTest(response1, response2); |
| +} |
| + |
| TEST_F(BufferedDataSourceTest, File_Retry) { |
| InitializeWithFileResponse(); |