summaryrefslogtreecommitdiffstats
path: root/src/core/net/url_request_custom_job.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/net/url_request_custom_job.cpp')
-rw-r--r--src/core/net/url_request_custom_job.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/core/net/url_request_custom_job.cpp b/src/core/net/url_request_custom_job.cpp
index 607e8d232..0d4ac620f 100644
--- a/src/core/net/url_request_custom_job.cpp
+++ b/src/core/net/url_request_custom_job.cpp
@@ -62,6 +62,7 @@ URLRequestCustomJob::URLRequestCustomJob(URLRequest *request,
: URLRequestJob(request, networkDelegate)
, m_proxy(new URLRequestCustomJobProxy(this, scheme, profileAdapter))
, m_device(nullptr)
+ , m_firstBytePosition(0)
, m_error(0)
, m_pendingReadSize(0)
, m_pendingReadPos(0)
@@ -184,6 +185,19 @@ bool URLRequestCustomJob::IsRedirectResponse(GURL *location, int *http_status_co
return false;
}
+void URLRequestCustomJob::SetExtraRequestHeaders(const HttpRequestHeaders &headers)
+{
+ std::string rangeHeader;
+ if (headers.GetHeader(HttpRequestHeaders::kRange, &rangeHeader)) {
+ std::vector<HttpByteRange> ranges;
+ if (HttpUtil::ParseRangeHeader(rangeHeader, &ranges)) {
+ // Chromium doesn't support multiple range requests in one single URL request.
+ if (ranges.size() == 1)
+ m_firstBytePosition = ranges[0].first_byte_position();
+ }
+ }
+}
+
int URLRequestCustomJob::ReadRawData(IOBuffer *buf, int bufSize)
{
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);