Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Unified Diff: chrome/browser/chromeos/drive/webkit_file_stream_writer_impl.cc

Issue 148913005: Create fileapi/ subdirectory under c/b/cros/drive. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/chromeos/drive/webkit_file_stream_writer_impl.h ('k') | chrome/chrome_browser_chromeos.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « chrome/browser/chromeos/drive/webkit_file_stream_writer_impl.h ('k') | chrome/chrome_browser_chromeos.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698