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..878d5f7ea007d663509dca2b131239f303645ad0 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,46 @@ 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); |
+ Stop(); |
+ } |
+ |
// Accessors for private variables on |data_source_|. |
BufferedResourceLoader* loader() { |
return data_source_->loader_.get(); |
@@ -443,6 +485,98 @@ 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); |
+ // The origin URL of response1 and response2 are same. So no error should |
+ // occur. |
+ 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)); |
+ // The origin URL of response1 and response2 are same. So no error should |
+ // occur. |
+ 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)); |
+ // The origin URL of response1 and response2 are different. So an error should |
+ // occur. |
+ 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); |
+ // response1 is generated in a Service Worker but response2 is from a native |
+ // server. So an error should occur. |
+ ExecuteMixedResponseFailureTest(response1, response2); |
+} |
+ |
+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); |
+ // The origin URL of response1 and response2 are same. So no error should |
+ // occur. |
+ 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); |
+ // The origin URL of response1 and response2 are same. So no error should |
+ // occur. |
+ 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); |
+ // The origin URL of response1 and response2 are different. So an error should |
+ // occur. |
+ ExecuteMixedResponseFailureTest(response1, response2); |
+} |
+ |
TEST_F(BufferedDataSourceTest, File_Retry) { |
InitializeWithFileResponse(); |