Index: net/base/file_stream_context.cc |
diff --git a/net/base/file_stream_context.cc b/net/base/file_stream_context.cc |
deleted file mode 100644 |
index 69741e5af0930352a4dfac70de91193435e43b98..0000000000000000000000000000000000000000 |
--- a/net/base/file_stream_context.cc |
+++ /dev/null |
@@ -1,252 +0,0 @@ |
-// Copyright (c) 2012 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 "net/base/file_stream_context.h" |
- |
-#include "base/files/file_path.h" |
-#include "base/location.h" |
-#include "base/message_loop/message_loop_proxy.h" |
-#include "base/profiler/scoped_tracker.h" |
-#include "base/task_runner.h" |
-#include "base/task_runner_util.h" |
-#include "base/threading/thread_restrictions.h" |
-#include "base/values.h" |
-#include "net/base/net_errors.h" |
- |
-#if defined(OS_ANDROID) |
-#include "base/android/content_uri_utils.h" |
-#endif |
- |
-namespace net { |
- |
-namespace { |
- |
-void CallInt64ToInt(const CompletionCallback& callback, int64 result) { |
- callback.Run(static_cast<int>(result)); |
-} |
- |
-} // namespace |
- |
-FileStream::Context::IOResult::IOResult() |
- : result(OK), |
- os_error(0) { |
-} |
- |
-FileStream::Context::IOResult::IOResult(int64 result, |
- logging::SystemErrorCode os_error) |
- : result(result), |
- os_error(os_error) { |
-} |
- |
-// static |
-FileStream::Context::IOResult FileStream::Context::IOResult::FromOSError( |
- logging::SystemErrorCode os_error) { |
- return IOResult(MapSystemError(os_error), os_error); |
-} |
- |
-// --------------------------------------------------------------------- |
- |
-FileStream::Context::OpenResult::OpenResult() { |
-} |
- |
-FileStream::Context::OpenResult::OpenResult(base::File file, |
- IOResult error_code) |
- : file(file.Pass()), |
- error_code(error_code) { |
-} |
- |
-FileStream::Context::OpenResult::OpenResult(RValue other) |
- : file(other.object->file.Pass()), |
- error_code(other.object->error_code) { |
-} |
- |
-FileStream::Context::OpenResult& FileStream::Context::OpenResult::operator=( |
- RValue other) { |
- if (this != other.object) { |
- file = other.object->file.Pass(); |
- error_code = other.object->error_code; |
- } |
- return *this; |
-} |
- |
-// --------------------------------------------------------------------- |
- |
-void FileStream::Context::Orphan() { |
- DCHECK(!orphaned_); |
- |
- orphaned_ = true; |
- |
- if (!async_in_progress_) { |
- CloseAndDelete(); |
- } else if (file_.IsValid()) { |
-#if defined(OS_WIN) |
- CancelIo(file_.GetPlatformFile()); |
-#endif |
- } |
-} |
- |
-void FileStream::Context::Open(const base::FilePath& path, |
- int open_flags, |
- const CompletionCallback& callback) { |
- DCHECK(!async_in_progress_); |
- |
- bool posted = base::PostTaskAndReplyWithResult( |
- task_runner_.get(), |
- FROM_HERE, |
- base::Bind( |
- &Context::OpenFileImpl, base::Unretained(this), path, open_flags), |
- base::Bind(&Context::OnOpenCompleted, base::Unretained(this), callback)); |
- DCHECK(posted); |
- |
- async_in_progress_ = true; |
-} |
- |
-void FileStream::Context::Close(const CompletionCallback& callback) { |
- DCHECK(!async_in_progress_); |
- bool posted = base::PostTaskAndReplyWithResult( |
- task_runner_.get(), |
- FROM_HERE, |
- base::Bind(&Context::CloseFileImpl, base::Unretained(this)), |
- base::Bind(&Context::OnAsyncCompleted, |
- base::Unretained(this), |
- IntToInt64(callback))); |
- DCHECK(posted); |
- |
- async_in_progress_ = true; |
-} |
- |
-void FileStream::Context::Seek(base::File::Whence whence, |
- int64 offset, |
- const Int64CompletionCallback& callback) { |
- DCHECK(!async_in_progress_); |
- |
- bool posted = base::PostTaskAndReplyWithResult( |
- task_runner_.get(), |
- FROM_HERE, |
- base::Bind( |
- &Context::SeekFileImpl, base::Unretained(this), whence, offset), |
- base::Bind(&Context::OnAsyncCompleted, |
- base::Unretained(this), |
- callback)); |
- DCHECK(posted); |
- |
- async_in_progress_ = true; |
-} |
- |
-void FileStream::Context::Flush(const CompletionCallback& callback) { |
- DCHECK(!async_in_progress_); |
- |
- bool posted = base::PostTaskAndReplyWithResult( |
- task_runner_.get(), |
- FROM_HERE, |
- base::Bind(&Context::FlushFileImpl, base::Unretained(this)), |
- base::Bind(&Context::OnAsyncCompleted, |
- base::Unretained(this), |
- IntToInt64(callback))); |
- DCHECK(posted); |
- |
- async_in_progress_ = true; |
-} |
- |
-FileStream::Context::OpenResult FileStream::Context::OpenFileImpl( |
- const base::FilePath& path, int open_flags) { |
- // TODO(vadimt): Remove ScopedTracker below once crbug.com/423948 is fixed. |
- tracked_objects::ScopedTracker tracking_profile( |
- FROM_HERE_WITH_EXPLICIT_FUNCTION( |
- "423948 FileStream::Context::OpenFileImpl")); |
- |
-#if defined(OS_POSIX) |
- // Always use blocking IO. |
- open_flags &= ~base::File::FLAG_ASYNC; |
-#endif |
- base::File file; |
-#if defined(OS_ANDROID) |
- if (path.IsContentUri()) { |
- // Check that only Read flags are set. |
- DCHECK_EQ(open_flags & ~base::File::FLAG_ASYNC, |
- base::File::FLAG_OPEN | base::File::FLAG_READ); |
- file = base::OpenContentUriForRead(path); |
- } else { |
-#endif // defined(OS_ANDROID) |
- // FileStream::Context actually closes the file asynchronously, |
- // independently from FileStream's destructor. It can cause problems for |
- // users wanting to delete the file right after FileStream deletion. Thus |
- // we are always adding SHARE_DELETE flag to accommodate such use case. |
- // TODO(rvargas): This sounds like a bug, as deleting the file would |
- // presumably happen on the wrong thread. There should be an async delete. |
- open_flags |= base::File::FLAG_SHARE_DELETE; |
- file.Initialize(path, open_flags); |
-#if defined(OS_ANDROID) |
- } |
-#endif // defined(OS_ANDROID) |
- if (!file.IsValid()) |
- return OpenResult(base::File(), |
- IOResult::FromOSError(logging::GetLastSystemErrorCode())); |
- |
- return OpenResult(file.Pass(), IOResult(OK, 0)); |
-} |
- |
-FileStream::Context::IOResult FileStream::Context::CloseFileImpl() { |
- file_.Close(); |
- return IOResult(OK, 0); |
-} |
- |
-FileStream::Context::IOResult FileStream::Context::FlushFileImpl() { |
- if (file_.Flush()) |
- return IOResult(OK, 0); |
- |
- return IOResult::FromOSError(logging::GetLastSystemErrorCode()); |
-} |
- |
-void FileStream::Context::OnOpenCompleted(const CompletionCallback& callback, |
- OpenResult open_result) { |
- file_ = open_result.file.Pass(); |
- if (file_.IsValid() && !orphaned_) { |
- // TODO(vadimt): Remove ScopedTracker below once crbug.com/423948 is fixed. |
- tracked_objects::ScopedTracker tracking_profile( |
- FROM_HERE_WITH_EXPLICIT_FUNCTION( |
- "423948 FileStream::Context::OnOpenCompleted")); |
- |
- OnFileOpened(); |
- } |
- |
- OnAsyncCompleted(IntToInt64(callback), open_result.error_code); |
-} |
- |
-void FileStream::Context::CloseAndDelete() { |
- // TODO(ananta) |
- // Replace this CHECK with a DCHECK once we figure out the root cause of |
- // http://crbug.com/455066 |
- CHECK(!async_in_progress_); |
- |
- if (file_.IsValid()) { |
- bool posted = task_runner_.get()->PostTask( |
- FROM_HERE, |
- base::Bind(base::IgnoreResult(&Context::CloseFileImpl), |
- base::Owned(this))); |
- DCHECK(posted); |
- } else { |
- delete this; |
- } |
-} |
- |
-Int64CompletionCallback FileStream::Context::IntToInt64( |
- const CompletionCallback& callback) { |
- return base::Bind(&CallInt64ToInt, callback); |
-} |
- |
-void FileStream::Context::OnAsyncCompleted( |
- const Int64CompletionCallback& callback, |
- const IOResult& result) { |
- // Reset this before Run() as Run() may issue a new async operation. Also it |
- // should be reset before Close() because it shouldn't run if any async |
- // operation is in progress. |
- async_in_progress_ = false; |
- if (orphaned_) |
- CloseAndDelete(); |
- else |
- callback.Run(result.result); |
-} |
- |
-} // namespace net |