diff options
author | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-16 18:56:01 +0000 |
---|---|---|
committer | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-16 18:56:01 +0000 |
commit | 657678fcf5ceecb34538c9dd955529fa8f1f0b44 (patch) | |
tree | b4530791a109597e5784f525325131f6d0068850 /webkit/media | |
parent | b6536df0203bcb40613d40a6ae28a82c6e8a2e95 (diff) | |
download | chromium_src-657678fcf5ceecb34538c9dd955529fa8f1f0b44.zip chromium_src-657678fcf5ceecb34538c9dd955529fa8f1f0b44.tar.gz chromium_src-657678fcf5ceecb34538c9dd955529fa8f1f0b44.tar.bz2 |
Trust servers that claim "Accept-Ranges: bytes" but serve a 200 for Range:0-
BUG=110309
Review URL: http://codereview.chromium.org/9701082
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@127217 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/media')
-rw-r--r-- | webkit/media/buffered_data_source_unittest.cc | 17 | ||||
-rw-r--r-- | webkit/media/buffered_resource_loader.cc | 6 |
2 files changed, 20 insertions, 3 deletions
diff --git a/webkit/media/buffered_data_source_unittest.cc b/webkit/media/buffered_data_source_unittest.cc index bb7c8be..b153bb2 100644 --- a/webkit/media/buffered_data_source_unittest.cc +++ b/webkit/media/buffered_data_source_unittest.cc @@ -21,6 +21,7 @@ using ::testing::StrictMock; using ::testing::NiceMock; using WebKit::WebFrame; +using WebKit::WebString; using WebKit::WebURLLoader; using WebKit::WebURLResponse; using WebKit::WebView; @@ -219,6 +220,22 @@ TEST_F(BufferedDataSourceTest, Range_NotSupported) { Stop(); } +// Special carve-out for Apache versions that choose to return a 200 for +// Range:0- ("because it's more efficient" than a 206) +TEST_F(BufferedDataSourceTest, Range_SupportedButReturned200) { + Initialize(media::PIPELINE_OK); + EXPECT_CALL(host_, SetTotalBytes(response_generator_.content_length())); + EXPECT_CALL(host_, SetBufferedBytes(0)); + WebURLResponse response = response_generator_.Generate200(); + response.setHTTPHeaderField(WebString::fromUTF8("Accept-Ranges"), + WebString::fromUTF8("bytes")); + Respond(response); + + EXPECT_TRUE(data_source_->loading()); + EXPECT_FALSE(data_source_->IsStreaming()); + Stop(); +} + TEST_F(BufferedDataSourceTest, Range_MissingContentRange) { Initialize(media::PIPELINE_ERROR_NETWORK); Respond(response_generator_.Generate206( diff --git a/webkit/media/buffered_resource_loader.cc b/webkit/media/buffered_resource_loader.cc index 953f265..55cc0a6 100644 --- a/webkit/media/buffered_resource_loader.cc +++ b/webkit/media/buffered_resource_loader.cc @@ -392,9 +392,9 @@ void BufferedResourceLoader::didReceiveResponse( range_supported_ = true; } else if (ok_response && first_byte_position_ == 0 && last_byte_position_ == kPositionNotSpecified) { - // We accept a 200 response for a Range:0- request and down-grade the - // data source to streaming. - range_supported_ = false; + // We accept a 200 response for a Range:0- request, trusting the + // Accept-Ranges header, because Apache thinks that's a reasonable thing + // to return. } else { error = net::ERR_INVALID_RESPONSE; } |