| Index: content/browser/renderer_host/resource_dispatcher_host_impl.cc
|
| diff --git a/content/browser/renderer_host/resource_dispatcher_host_impl.cc b/content/browser/renderer_host/resource_dispatcher_host_impl.cc
|
| index 111edc5a9fdabf7eed215daf838f2d97c91f399b..c2d4552ca0567270123d30922a38542dac47d998 100644
|
| --- a/content/browser/renderer_host/resource_dispatcher_host_impl.cc
|
| +++ b/content/browser/renderer_host/resource_dispatcher_host_impl.cc
|
| @@ -49,6 +49,7 @@
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/content_browser_client.h"
|
| #include "content/public/browser/download_manager.h"
|
| +#include "content/public/browser/download_save_info.h"
|
| #include "content/public/browser/global_request_id.h"
|
| #include "content/public/browser/notification_service.h"
|
| #include "content/public/browser/resource_dispatcher_host_delegate.h"
|
| @@ -498,6 +499,9 @@ net::Error ResourceDispatcherHostImpl::BeginDownload(
|
| int route_id,
|
| bool prefer_cache,
|
| scoped_ptr<DownloadSaveInfo> save_info,
|
| + const std::string& last_modified,
|
| + const std::string& etag,
|
| + content::DownloadId download_id,
|
| const DownloadStartedCallback& started_callback) {
|
| if (is_shutdown_)
|
| return CallbackAndReturn(started_callback, net::ERR_INSUFFICIENT_RESOURCES);
|
| @@ -536,6 +540,27 @@ net::Error ResourceDispatcherHostImpl::BeginDownload(
|
| request_id_--;
|
|
|
| const net::URLRequestContext* request_context = context->GetRequestContext();
|
| +
|
| + // If we're not at the beginning of the file, retrieve only the remaining
|
| + // portion.
|
| + if (save_info->offset > 0) {
|
| + request->SetExtraRequestHeaderByName(
|
| + "Range",
|
| + StringPrintf("bytes=%" PRId64 "-", save_info->offset),
|
| + true);
|
| + }
|
| +
|
| + // If it's the second (or later) request for this file, make sure it
|
| + // hasn't been modified.
|
| + if (!last_modified.empty()) {
|
| + request->SetExtraRequestHeaderByName("If-Unmodified-Since",
|
| + last_modified,
|
| + true);
|
| + }
|
| + if (!etag.empty()) {
|
| + // Set requested ETAG.
|
| + request->SetExtraRequestHeaderByName("If-Match", etag, true);
|
| + }
|
| if (!request_context->job_factory()->IsHandledURL(url)) {
|
| VLOG(1) << "Download request for unsupported protocol: "
|
| << url.possibly_invalid_spec();
|
|
|