Commit 18e7dc4c authored by hclam@chromium.org's avatar hclam@chromium.org

URLRequestFileJob provides file handle if net::LOAD_ENABLE_DOWNLOAD_FILE

Make URLRequestFileJob to respect net::LOAD_ENABLE_DOWNLOAD_FILE
load flag. It reopens the file specified by file:/// URL and saves
the asynchronous file handle in HttpResponseInfo.

Review URL: http://codereview.chromium.org/42657

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12605 0039d316-1c4b-4281-b951-d872f2087c98
parent c5a70118
......@@ -21,9 +21,11 @@
#include "base/compiler_specific.h"
#include "base/message_loop.h"
#include "base/platform_file.h"
#include "base/string_util.h"
#include "base/worker_pool.h"
#include "googleurl/src/gurl.h"
#include "net/base/load_flags.h"
#include "net/base/mime_util.h"
#include "net/base/net_errors.h"
#include "net/base/net_util.h"
......@@ -155,6 +157,24 @@ bool URLRequestFileJob::GetMimeType(std::string* mime_type) const {
return net::GetMimeTypeFromFile(file_path_, mime_type);
}
void URLRequestFileJob::GetResponseInfo(net::HttpResponseInfo* info) {
DCHECK(request_);
// If we have enabled downloading the file, the requester expects to receive
// a file handle to the file. Since we are serving file:/// url requests we
// can provide such a handle if the file exists.
bool created;
if ((request_->load_flags() & net::LOAD_ENABLE_DOWNLOAD_FILE) &&
stream_.IsOpen()) {
info->response_data_file =
base::CreatePlatformFile(file_path_.ToWStringHack(),
base::PLATFORM_FILE_OPEN |
base::PLATFORM_FILE_READ |
base::PLATFORM_FILE_ASYNC,
&created);
}
}
void URLRequestFileJob::DidResolve(
bool exists, const file_util::FileInfo& file_info) {
#if defined(OS_WIN)
......
......@@ -25,6 +25,7 @@ class URLRequestFileJob : public URLRequestJob {
virtual bool ReadRawData(net::IOBuffer* buf, int buf_size, int* bytes_read);
virtual bool IsRedirectResponse(GURL* location, int* http_status_code);
virtual bool GetMimeType(std::string* mime_type) const;
virtual void GetResponseInfo(net::HttpResponseInfo* info);
static URLRequest::ProtocolFactory Factory;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment