summaryrefslogtreecommitdiffstats
path: root/webkit/fileapi/file_writer_delegate.h
diff options
context:
space:
mode:
authorkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-11 05:31:09 +0000
committerkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-11 05:31:09 +0000
commit8623b0f992684cf2bca8fc27f733ad1c31cdd8f8 (patch)
treefa1796b2903884cf4403f916bb305c10848e4de1 /webkit/fileapi/file_writer_delegate.h
parent791c3beb045e5f207d652366f943e9b92d6183ec (diff)
downloadchromium_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.h19
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_;
};