diff options
author | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-11 05:31:09 +0000 |
---|---|---|
committer | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-11 05:31:09 +0000 |
commit | 8623b0f992684cf2bca8fc27f733ad1c31cdd8f8 (patch) | |
tree | fa1796b2903884cf4403f916bb305c10848e4de1 /webkit/fileapi/file_writer_delegate.h | |
parent | 791c3beb045e5f207d652366f943e9b92d6183ec (diff) | |
download | chromium_src-8623b0f992684cf2bca8fc27f733ad1c31cdd8f8.zip chromium_src-8623b0f992684cf2bca8fc27f733ad1c31cdd8f8.tar.gz chromium_src-8623b0f992684cf2bca8fc27f733ad1c31cdd8f8.tar.bz2 |
FileWriterDelegate should not call URLRequest::Start() after Cancel().
- This should also fix one of the flaky crashes in FileWriterDelegate::OnDataWritten after cancel
- This patch also removes Start/End quota update from FileWriterDelegate since now we do that in FileSystemOperation
BUG=122160,116639
TEST=file-writer-abort-continue.html
Review URL: https://chromiumcodereview.appspot.com/10008047
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@136513 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/fileapi/file_writer_delegate.h')
-rw-r--r-- | webkit/fileapi/file_writer_delegate.h | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/webkit/fileapi/file_writer_delegate.h b/webkit/fileapi/file_writer_delegate.h index 4b37af0..3b58ae0 100644 --- a/webkit/fileapi/file_writer_delegate.h +++ b/webkit/fileapi/file_writer_delegate.h @@ -30,10 +30,15 @@ class FileWriterDelegate : public net::URLRequest::Delegate { virtual ~FileWriterDelegate(); void Start(base::PlatformFile file, - net::URLRequest* request); - base::PlatformFile file() { - return file_; - } + scoped_ptr<net::URLRequest> request); + + // Cancels the current write operation. Returns true if it is ok to + // delete this instance immediately. Otherwise this will call + // |write_operation|->DidWrite() with complete=true to let the operation + // perform the final cleanup. + bool Cancel(); + + base::PlatformFile file() const { return file_; } virtual void OnReceivedRedirect(net::URLRequest* request, const GURL& new_url, @@ -51,7 +56,8 @@ class FileWriterDelegate : public net::URLRequest::Delegate { int bytes_read) OVERRIDE; private: - void OnGetFileInfoAndCallStartUpdate( + void OnGetFileInfoAndStartRequest( + scoped_ptr<net::URLRequest> request, base::PlatformFileError error, const base::PlatformFileInfo& file_info); void Read(); @@ -69,6 +75,7 @@ class FileWriterDelegate : public net::URLRequest::Delegate { FileSystemPath path_; int64 size_; int64 offset_; + bool has_pending_write_; base::Time last_progress_event_time_; int bytes_written_backlog_; int bytes_written_; @@ -78,7 +85,7 @@ class FileWriterDelegate : public net::URLRequest::Delegate { scoped_refptr<net::IOBufferWithSize> io_buffer_; scoped_refptr<net::DrainableIOBuffer> cursor_; scoped_ptr<net::FileStream> file_stream_; - net::URLRequest* request_; + scoped_ptr<net::URLRequest> request_; base::WeakPtrFactory<FileWriterDelegate> weak_factory_; }; |