| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/common/fileapi/webfilewriter_impl.h" | 5 #include "content/common/fileapi/webfilewriter_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" |
| 7 #include "content/common/child_thread.h" | 8 #include "content/common/child_thread.h" |
| 8 #include "content/common/fileapi/file_system_dispatcher.h" | 9 #include "content/common/fileapi/file_system_dispatcher.h" |
| 9 | 10 |
| 10 namespace content { | 11 namespace content { |
| 11 namespace { | 12 namespace { |
| 12 | 13 |
| 13 inline FileSystemDispatcher* GetFileSystemDispatcher() { | 14 inline FileSystemDispatcher* GetFileSystemDispatcher() { |
| 14 return ChildThread::current()->file_system_dispatcher(); | 15 return ChildThread::current()->file_system_dispatcher(); |
| 15 } | 16 } |
| 16 } | 17 } |
| 17 | 18 |
| 18 class WebFileWriterImpl::CallbackDispatcher | 19 class WebFileWriterImpl::CallbackDispatcher { |
| 19 : public fileapi::FileSystemCallbackDispatcher { | |
| 20 public: | 20 public: |
| 21 ~CallbackDispatcher() {} |
| 22 |
| 23 static FileSystemDispatcher::StatusCallback GetStatusCallback( |
| 24 const base::WeakPtr<WebFileWriterImpl>& writer) { |
| 25 CallbackDispatcher* dispatcher = new CallbackDispatcher(writer); |
| 26 return base::Bind(&CallbackDispatcher::DidFinish, base::Owned(dispatcher)); |
| 27 } |
| 28 |
| 29 static FileSystemDispatcher::WriteCallback GetWriteCallback( |
| 30 const base::WeakPtr<WebFileWriterImpl>& writer) { |
| 31 CallbackDispatcher* dispatcher = new CallbackDispatcher(writer); |
| 32 return base::Bind(&CallbackDispatcher::DidWrite, base::Owned(dispatcher)); |
| 33 } |
| 34 |
| 35 void DidFinish(base::PlatformFileError error_code) { |
| 36 if (!writer_) |
| 37 return; |
| 38 if (error_code == base::PLATFORM_FILE_OK) |
| 39 writer_->DidSucceed(); |
| 40 else |
| 41 writer_->DidFail(error_code); |
| 42 } |
| 43 |
| 44 void DidWrite(base::PlatformFileError error_code, |
| 45 int64 bytes, bool complete) { |
| 46 if (!writer_) |
| 47 return; |
| 48 if (error_code == base::PLATFORM_FILE_OK) |
| 49 writer_->DidWrite(bytes, complete); |
| 50 else |
| 51 writer_->DidFail(error_code); |
| 52 } |
| 53 |
| 54 private: |
| 21 explicit CallbackDispatcher( | 55 explicit CallbackDispatcher( |
| 22 const base::WeakPtr<WebFileWriterImpl>& writer) : writer_(writer) { | 56 const base::WeakPtr<WebFileWriterImpl>& writer) : writer_(writer) { |
| 23 } | 57 } |
| 24 virtual ~CallbackDispatcher() { | |
| 25 } | |
| 26 virtual void DidReadMetadata( | |
| 27 const base::PlatformFileInfo&, | |
| 28 const base::FilePath&) OVERRIDE { | |
| 29 NOTREACHED(); | |
| 30 } | |
| 31 virtual void DidCreateSnapshotFile( | |
| 32 const base::PlatformFileInfo&, | |
| 33 const base::FilePath&) OVERRIDE { | |
| 34 NOTREACHED(); | |
| 35 } | |
| 36 virtual void DidReadDirectory( | |
| 37 const std::vector<base::FileUtilProxy::Entry>& entries, | |
| 38 bool has_more) OVERRIDE { | |
| 39 NOTREACHED(); | |
| 40 } | |
| 41 virtual void DidOpenFileSystem(const std::string& name, | |
| 42 const GURL& root) OVERRIDE { | |
| 43 NOTREACHED(); | |
| 44 } | |
| 45 virtual void DidSucceed() OVERRIDE { | |
| 46 if (writer_) | |
| 47 writer_->DidSucceed(); | |
| 48 } | |
| 49 virtual void DidFail(base::PlatformFileError error_code) OVERRIDE { | |
| 50 if (writer_) | |
| 51 writer_->DidFail(error_code); | |
| 52 } | |
| 53 virtual void DidWrite(int64 bytes, bool complete) OVERRIDE { | |
| 54 if (writer_) | |
| 55 writer_->DidWrite(bytes, complete); | |
| 56 } | |
| 57 | 58 |
| 58 private: | |
| 59 base::WeakPtr<WebFileWriterImpl> writer_; | 59 base::WeakPtr<WebFileWriterImpl> writer_; |
| 60 }; | 60 }; |
| 61 | 61 |
| 62 WebFileWriterImpl::WebFileWriterImpl( | 62 WebFileWriterImpl::WebFileWriterImpl( |
| 63 const GURL& path, WebKit::WebFileWriterClient* client) | 63 const GURL& path, WebKit::WebFileWriterClient* client) |
| 64 : WebFileWriterBase(path, client), | 64 : WebFileWriterBase(path, client), |
| 65 request_id_(0) { | 65 request_id_(0) { |
| 66 } | 66 } |
| 67 | 67 |
| 68 WebFileWriterImpl::~WebFileWriterImpl() { | 68 WebFileWriterImpl::~WebFileWriterImpl() { |
| 69 } | 69 } |
| 70 | 70 |
| 71 void WebFileWriterImpl::DoTruncate(const GURL& path, int64 offset) { | 71 void WebFileWriterImpl::DoTruncate(const GURL& path, int64 offset) { |
| 72 // The FileSystemDispatcher takes ownership of the CallbackDispatcher. | 72 // The FileSystemDispatcher takes ownership of the CallbackDispatcher. |
| 73 GetFileSystemDispatcher()->Truncate(path, offset, &request_id_, | 73 GetFileSystemDispatcher()->Truncate( |
| 74 new CallbackDispatcher(AsWeakPtr())); | 74 path, offset, &request_id_, |
| 75 CallbackDispatcher::GetStatusCallback(AsWeakPtr())); |
| 75 } | 76 } |
| 76 | 77 |
| 77 void WebFileWriterImpl::DoWrite( | 78 void WebFileWriterImpl::DoWrite( |
| 78 const GURL& path, const GURL& blob_url, int64 offset) { | 79 const GURL& path, const GURL& blob_url, int64 offset) { |
| 79 GetFileSystemDispatcher()->Write( | 80 GetFileSystemDispatcher()->Write( |
| 80 path, blob_url, offset, &request_id_, | 81 path, blob_url, offset, &request_id_, |
| 81 new CallbackDispatcher(AsWeakPtr())); | 82 CallbackDispatcher::GetWriteCallback(AsWeakPtr())); |
| 82 } | 83 } |
| 83 | 84 |
| 84 void WebFileWriterImpl::DoCancel() { | 85 void WebFileWriterImpl::DoCancel() { |
| 85 GetFileSystemDispatcher()->Cancel(request_id_, | 86 GetFileSystemDispatcher()->Cancel( |
| 86 new CallbackDispatcher(AsWeakPtr())); | 87 request_id_, |
| 88 CallbackDispatcher::GetStatusCallback(AsWeakPtr())); |
| 87 } | 89 } |
| 88 | 90 |
| 89 } // namespace content | 91 } // namespace content |
| OLD | NEW |