Index: chrome/browser/chromeos/drive/webkit_file_stream_writer_impl.cc |
diff --git a/chrome/browser/chromeos/drive/webkit_file_stream_writer_impl.cc b/chrome/browser/chromeos/drive/webkit_file_stream_writer_impl.cc |
deleted file mode 100644 |
index 007ec9d9b13a9763f1d22d639af4c820649abb72..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chromeos/drive/webkit_file_stream_writer_impl.cc |
+++ /dev/null |
@@ -1,179 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/chromeos/drive/webkit_file_stream_writer_impl.h" |
- |
-#include "base/bind.h" |
-#include "base/callback_helpers.h" |
-#include "chrome/browser/chromeos/drive/file_system_util.h" |
-#include "chrome/browser/chromeos/drive/fileapi_worker.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "google_apis/drive/task_util.h" |
-#include "net/base/io_buffer.h" |
-#include "net/base/net_errors.h" |
-#include "webkit/browser/fileapi/file_stream_writer.h" |
- |
-using content::BrowserThread; |
- |
-namespace drive { |
-namespace internal { |
-namespace { |
- |
-// Creates a writable snapshot file of the |drive_path|. |
-void CreateWritableSnapshotFile( |
- const WebkitFileStreamWriterImpl::FileSystemGetter& file_system_getter, |
- const base::FilePath& drive_path, |
- const fileapi_internal::CreateWritableSnapshotFileCallback& callback) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- BrowserThread::PostTask( |
- BrowserThread::UI, |
- FROM_HERE, |
- base::Bind( |
- &fileapi_internal::RunFileSystemCallback, |
- file_system_getter, |
- base::Bind(&fileapi_internal::CreateWritableSnapshotFile, |
- drive_path, google_apis::CreateRelayCallback(callback)), |
- google_apis::CreateRelayCallback(base::Bind( |
- callback, base::File::FILE_ERROR_FAILED, base::FilePath(), |
- base::Closure())))); |
-} |
- |
-} // namespace |
- |
-WebkitFileStreamWriterImpl::WebkitFileStreamWriterImpl( |
- const FileSystemGetter& file_system_getter, |
- base::TaskRunner* file_task_runner, |
- const base::FilePath& file_path, |
- int64 offset) |
- : file_system_getter_(file_system_getter), |
- file_task_runner_(file_task_runner), |
- file_path_(file_path), |
- offset_(offset), |
- weak_ptr_factory_(this) { |
-} |
- |
-WebkitFileStreamWriterImpl::~WebkitFileStreamWriterImpl() { |
- if (local_file_writer_) { |
- // If the file is opened, close it at destructor. |
- // It is necessary to close the local file in advance. |
- local_file_writer_.reset(); |
- DCHECK(!close_callback_on_ui_thread_.is_null()); |
- BrowserThread::PostTask(BrowserThread::UI, |
- FROM_HERE, |
- close_callback_on_ui_thread_); |
- } |
-} |
- |
-int WebkitFileStreamWriterImpl::Write(net::IOBuffer* buf, |
- int buf_len, |
- const net::CompletionCallback& callback) { |
- DCHECK(pending_write_callback_.is_null()); |
- DCHECK(pending_cancel_callback_.is_null()); |
- DCHECK(!callback.is_null()); |
- |
- // If the local file is already available, just delegate to it. |
- if (local_file_writer_) |
- return local_file_writer_->Write(buf, buf_len, callback); |
- |
- // The local file is not yet ready. Create the writable snapshot. |
- if (file_path_.empty()) |
- return net::ERR_FILE_NOT_FOUND; |
- |
- pending_write_callback_ = callback; |
- CreateWritableSnapshotFile( |
- file_system_getter_, file_path_, |
- base::Bind( |
- &WebkitFileStreamWriterImpl::WriteAfterCreateWritableSnapshotFile, |
- weak_ptr_factory_.GetWeakPtr(), make_scoped_refptr(buf), buf_len)); |
- return net::ERR_IO_PENDING; |
-} |
- |
-int WebkitFileStreamWriterImpl::Cancel( |
- const net::CompletionCallback& callback) { |
- DCHECK(pending_cancel_callback_.is_null()); |
- DCHECK(!callback.is_null()); |
- |
- // If LocalFileWriter is already created, just delegate the cancel to it. |
- if (local_file_writer_) |
- return local_file_writer_->Cancel(callback); |
- |
- // If file open operation is in-flight, wait for its completion and cancel |
- // further write operation in WriteAfterCreateWritableSnapshotFile. |
- if (!pending_write_callback_.is_null()) { |
- // Dismiss pending write callback immediately. |
- pending_write_callback_.Reset(); |
- pending_cancel_callback_ = callback; |
- return net::ERR_IO_PENDING; |
- } |
- |
- // Write() is not called yet. |
- return net::ERR_UNEXPECTED; |
-} |
- |
-int WebkitFileStreamWriterImpl::Flush(const net::CompletionCallback& callback) { |
- DCHECK(pending_cancel_callback_.is_null()); |
- DCHECK(!callback.is_null()); |
- |
- // If LocalFileWriter is already created, just delegate to it. |
- if (local_file_writer_) |
- return local_file_writer_->Flush(callback); |
- |
- // There shouldn't be in-flight Write operation. |
- DCHECK(pending_write_callback_.is_null()); |
- |
- // Here is the case Flush() is called before any Write() invocation. |
- // Do nothing. |
- // Synchronization to the remote server is not done until the file is closed. |
- return net::OK; |
-} |
- |
-void WebkitFileStreamWriterImpl::WriteAfterCreateWritableSnapshotFile( |
- net::IOBuffer* buf, |
- int buf_len, |
- base::File::Error open_result, |
- const base::FilePath& local_path, |
- const base::Closure& close_callback_on_ui_thread) { |
- DCHECK(!local_file_writer_); |
- |
- if (!pending_cancel_callback_.is_null()) { |
- DCHECK(pending_write_callback_.is_null()); |
- // Cancel() is called during the creation of the snapshot file. |
- // Don't write to the file. |
- if (open_result == base::File::FILE_OK) { |
- // Here the file is internally created. To revert the operation, close |
- // the file. |
- DCHECK(!close_callback_on_ui_thread.is_null()); |
- BrowserThread::PostTask(BrowserThread::UI, |
- FROM_HERE, |
- close_callback_on_ui_thread); |
- } |
- |
- base::ResetAndReturn(&pending_cancel_callback_).Run(net::OK); |
- return; |
- } |
- |
- DCHECK(!pending_write_callback_.is_null()); |
- |
- const net::CompletionCallback callback = |
- base::ResetAndReturn(&pending_write_callback_); |
- if (open_result != base::File::FILE_OK) { |
- DCHECK(close_callback_on_ui_thread.is_null()); |
- callback.Run( |
- net::FileErrorToNetError(open_result)); |
- return; |
- } |
- |
- // Keep |close_callback| to close the file when the stream is destructed. |
- DCHECK(!close_callback_on_ui_thread.is_null()); |
- close_callback_on_ui_thread_ = close_callback_on_ui_thread; |
- local_file_writer_.reset(fileapi::FileStreamWriter::CreateForLocalFile( |
- file_task_runner_.get(), local_path, offset_)); |
- int result = local_file_writer_->Write(buf, buf_len, callback); |
- if (result != net::ERR_IO_PENDING) |
- callback.Run(result); |
-} |
- |
-} // namespace internal |
-} // namespace drive |