1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_URL_REQUEST_JOB_H_ 6 #define WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_URL_REQUEST_JOB_H_ 7 8 #include <string> 9 10 #include "base/files/file.h" 11 #include "base/memory/ref_counted.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/weak_ptr.h" 14 #include "net/http/http_byte_range.h" 15 #include "net/url_request/url_request_job.h" 16 #include "webkit/browser/fileapi/file_system_url.h" 17 #include "webkit/browser/webkit_storage_browser_export.h" 18 19 class GURL; 20 21 namespace base { 22 class FilePath; 23 } 24 25 namespace webkit_blob { 26 class FileStreamReader; 27 } 28 29 namespace fileapi { 30 class FileSystemContext; 31 32 // A request job that handles reading filesystem: URLs 33 class WEBKIT_STORAGE_BROWSER_EXPORT_PRIVATE FileSystemURLRequestJob 34 : public net::URLRequestJob { 35 public: 36 FileSystemURLRequestJob( 37 net::URLRequest* request, 38 net::NetworkDelegate* network_delegate, 39 const std::string& storage_domain, 40 FileSystemContext* file_system_context); 41 42 // URLRequestJob methods: 43 virtual void Start() OVERRIDE; 44 virtual void Kill() OVERRIDE; 45 virtual bool ReadRawData(net::IOBuffer* buf, 46 int buf_size, 47 int* bytes_read) OVERRIDE; 48 virtual bool IsRedirectResponse(GURL* location, 49 int* http_status_code) OVERRIDE; 50 virtual void SetExtraRequestHeaders( 51 const net::HttpRequestHeaders& headers) OVERRIDE; 52 virtual void GetResponseInfo(net::HttpResponseInfo* info) OVERRIDE; 53 virtual int GetResponseCode() const OVERRIDE; 54 55 // FilterContext methods (via URLRequestJob): 56 virtual bool GetMimeType(std::string* mime_type) const OVERRIDE; 57 58 private: 59 class CallbackDispatcher; 60 61 virtual ~FileSystemURLRequestJob(); 62 63 void StartAsync(); 64 void DidAttemptAutoMount(base::File::Error result); 65 void DidGetMetadata(base::File::Error error_code, 66 const base::File::Info& file_info); 67 void DidRead(int result); 68 void NotifyFailed(int rv); 69 70 const std::string storage_domain_; 71 FileSystemContext* file_system_context_; 72 scoped_ptr<webkit_blob::FileStreamReader> reader_; 73 FileSystemURL url_; 74 bool is_directory_; 75 scoped_ptr<net::HttpResponseInfo> response_info_; 76 int64 remaining_bytes_; 77 net::HttpByteRange byte_range_; 78 base::WeakPtrFactory<FileSystemURLRequestJob> weak_factory_; 79 80 DISALLOW_COPY_AND_ASSIGN(FileSystemURLRequestJob); 81 }; 82 83 } // namespace fileapi 84 85 #endif // WEBKIT_BROWSER_FILEAPI_FILE_SYSTEM_URL_REQUEST_JOB_H_ 86