summaryrefslogtreecommitdiffstats
path: root/net/url_request/url_request_file_job.h
diff options
context:
space:
mode:
Diffstat (limited to 'net/url_request/url_request_file_job.h')
-rw-r--r--net/url_request/url_request_file_job.h41
1 files changed, 34 insertions, 7 deletions
diff --git a/net/url_request/url_request_file_job.h b/net/url_request/url_request_file_job.h
index 15c7d62..9c2199c 100644
--- a/net/url_request/url_request_file_job.h
+++ b/net/url_request/url_request_file_job.h
@@ -9,6 +9,7 @@
#include <vector>
#include "base/file_path.h"
+#include "base/memory/weak_ptr.h"
#include "net/base/net_export.h"
#include "net/http/http_byte_range.h"
#include "net/url_request/url_request.h"
@@ -54,23 +55,49 @@ class NET_EXPORT URLRequestFileJob : public URLRequestJob {
FilePath file_path_;
private:
+ // Meta information about the file. It's used as a member in the
+ // URLRequestFileJob and also passed between threads because disk access is
+ // necessary to obtain it.
+ struct FileMetaInfo {
+ FileMetaInfo();
+
+ // Size of the file.
+ int64 file_size;
+ // Mime type associated with the file.
+ std::string mime_type;
+ // Result returned from GetMimeTypeFromFile(), i.e. flag showing whether
+ // obtaining of the mime type was successful.
+ bool mime_type_result;
+ // Flag showing whether the file exists.
+ bool file_exists;
+ // Flag showing whether the file name actually refers to a directory.
+ bool is_directory;
+ };
+
+ // Fetches file info on a background thread.
+ static void FetchMetaInfo(const FilePath& file_path,
+ FileMetaInfo* meta_info);
+
// Callback after fetching file info on a background thread.
- void DidResolve(bool exists, const base::PlatformFileInfo& file_info);
+ void DidFetchMetaInfo(const FileMetaInfo* meta_info);
+
+ // Callback after opening file on a background thread.
+ void DidOpen(int result);
+
+ // Callback after seeking to the beginning of |byte_range_| in the file
+ // on a background thread.
+ void DidSeek(int64 result);
// Callback after data is asynchronously read from the file.
void DidRead(int result);
scoped_ptr<FileStream> stream_;
- bool is_directory_;
+ FileMetaInfo meta_info_;
HttpByteRange byte_range_;
int64 remaining_bytes_;
- // The initial file metadata is fetched on a background thread.
- // AsyncResolver runs that task.
- class AsyncResolver;
- friend class AsyncResolver;
- scoped_refptr<AsyncResolver> async_resolver_;
+ base::WeakPtrFactory<URLRequestFileJob> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(URLRequestFileJob);
};