summaryrefslogtreecommitdiffstats
path: root/webkit/media
diff options
context:
space:
mode:
authorfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-16 18:56:01 +0000
committerfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-16 18:56:01 +0000
commit657678fcf5ceecb34538c9dd955529fa8f1f0b44 (patch)
treeb4530791a109597e5784f525325131f6d0068850 /webkit/media
parentb6536df0203bcb40613d40a6ae28a82c6e8a2e95 (diff)
downloadchromium_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.cc17
-rw-r--r--webkit/media/buffered_resource_loader.cc6
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;
}