Index: net/base/file_stream.cc |
diff --git a/net/base/file_stream.cc b/net/base/file_stream.cc |
index fd2eb4af3f93f1e227b820815283c4df326c0600..2df75214f6aa35c3a04e2ef631dc50d5aa7b6199 100644 |
--- a/net/base/file_stream.cc |
+++ b/net/base/file_stream.cc |
@@ -19,8 +19,7 @@ FileStream::FileStream(NetLog* net_log, |
const scoped_refptr<base::TaskRunner>& task_runner) |
/* To allow never opened stream to be destroyed on any thread we set flags |
as if stream was opened asynchronously. */ |
- : open_flags_(base::PLATFORM_FILE_ASYNC), |
- bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)), |
+ : bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)), |
context_(new Context(bound_net_log_, task_runner)) { |
bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_ALIVE); |
} |
@@ -28,8 +27,7 @@ FileStream::FileStream(NetLog* net_log, |
FileStream::FileStream(NetLog* net_log) |
/* To allow never opened stream to be destroyed on any thread we set flags |
as if stream was opened asynchronously. */ |
- : open_flags_(base::PLATFORM_FILE_ASYNC), |
- bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)), |
+ : bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)), |
context_(new Context(bound_net_log_, |
base::WorkerPool::GetTaskRunner(true /* slow */))) { |
bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_ALIVE); |
@@ -39,29 +37,40 @@ FileStream::FileStream(base::PlatformFile file, |
int flags, |
NetLog* net_log, |
const scoped_refptr<base::TaskRunner>& task_runner) |
- : open_flags_(flags), |
- bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)), |
- context_(new Context(file, bound_net_log_, open_flags_, task_runner)) { |
+ : bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)), |
+ context_(new Context(base::File(file), flags, bound_net_log_, |
+ task_runner)) { |
bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_ALIVE); |
} |
FileStream::FileStream(base::PlatformFile file, int flags, NetLog* net_log) |
- : open_flags_(flags), |
- bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)), |
- context_(new Context(file, |
- bound_net_log_, |
- open_flags_, |
+ : bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)), |
+ context_(new Context(base::File(file), flags, bound_net_log_, |
+ base::WorkerPool::GetTaskRunner(true /* slow */))) { |
+ bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_ALIVE); |
+} |
+ |
+FileStream::FileStream(base::File file, |
+ net::NetLog* net_log, |
+ const scoped_refptr<base::TaskRunner>& task_runner) |
+ : bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)), |
+ context_(new Context(file.Pass(), bound_net_log_, task_runner)) { |
+ bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_ALIVE); |
+} |
+ |
+FileStream::FileStream(base::File file, net::NetLog* net_log) |
+ : bound_net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_FILESTREAM)), |
+ context_(new Context(file.Pass(), bound_net_log_, |
base::WorkerPool::GetTaskRunner(true /* slow */))) { |
bound_net_log_.BeginEvent(NetLog::TYPE_FILE_STREAM_ALIVE); |
} |
FileStream::~FileStream() { |
- if (!is_async()) { |
- base::ThreadRestrictions::AssertIOAllowed(); |
+ if (context_->async()) { |
+ context_.release()->Orphan(); |
+ } else { |
context_->CloseSync(); |
context_.reset(); |
- } else { |
- context_.release()->Orphan(); |
} |
bound_net_log_.EndEvent(NetLog::TYPE_FILE_STREAM_ALIVE); |
@@ -74,8 +83,7 @@ int FileStream::Open(const base::FilePath& path, int open_flags, |
return ERR_UNEXPECTED; |
} |
- open_flags_ = open_flags; |
- DCHECK(is_async()); |
+ DCHECK(open_flags & base::File::FLAG_ASYNC); |
context_->OpenAsync(path, open_flags, callback); |
return ERR_IO_PENDING; |
} |
@@ -88,26 +96,25 @@ int FileStream::OpenSync(const base::FilePath& path, int open_flags) { |
return ERR_UNEXPECTED; |
} |
- open_flags_ = open_flags; |
- DCHECK(!is_async()); |
- return context_->OpenSync(path, open_flags_); |
+ DCHECK(!context_->async()); |
+ return context_->OpenSync(path, open_flags); |
} |
int FileStream::Close(const CompletionCallback& callback) { |
- DCHECK(is_async()); |
+ DCHECK(context_->async()); |
context_->CloseAsync(callback); |
return ERR_IO_PENDING; |
} |
int FileStream::CloseSync() { |
- DCHECK(!is_async()); |
+ DCHECK(!context_->async()); |
base::ThreadRestrictions::AssertIOAllowed(); |
context_->CloseSync(); |
return OK; |
} |
bool FileStream::IsOpen() const { |
- return context_->file() != base::kInvalidPlatformFileValue; |
+ return context_->file().IsValid(); |
} |
int FileStream::Seek(Whence whence, |
@@ -117,7 +124,7 @@ int FileStream::Seek(Whence whence, |
return ERR_UNEXPECTED; |
// Make sure we're async. |
- DCHECK(is_async()); |
+ DCHECK(context_->async()); |
context_->SeekAsync(whence, offset, callback); |
return ERR_IO_PENDING; |
} |
@@ -129,7 +136,7 @@ int64 FileStream::SeekSync(Whence whence, int64 offset) { |
return ERR_UNEXPECTED; |
// If we're in async, make sure we don't have a request in flight. |
- DCHECK(!is_async() || !context_->async_in_progress()); |
+ DCHECK(!context_->async() || !context_->async_in_progress()); |
return context_->SeekSync(whence, offset); |
} |
@@ -159,8 +166,7 @@ int FileStream::Read(IOBuffer* buf, |
// read(..., 0) will return 0, which indicates end-of-file. |
DCHECK_GT(buf_len, 0); |
- DCHECK(open_flags_ & base::PLATFORM_FILE_READ); |
- DCHECK(is_async()); |
+ DCHECK(context_->async()); |
return context_->ReadAsync(buf, buf_len, callback); |
} |
@@ -171,10 +177,9 @@ int FileStream::ReadSync(char* buf, int buf_len) { |
if (!IsOpen()) |
return ERR_UNEXPECTED; |
- DCHECK(!is_async()); |
+ DCHECK(!context_->async()); |
// read(..., 0) will return 0, which indicates end-of-file. |
DCHECK_GT(buf_len, 0); |
- DCHECK(open_flags_ & base::PLATFORM_FILE_READ); |
return context_->ReadSync(buf, buf_len); |
} |
@@ -208,8 +213,7 @@ int FileStream::Write(IOBuffer* buf, |
if (!IsOpen()) |
return ERR_UNEXPECTED; |
- DCHECK(is_async()); |
- DCHECK(open_flags_ & base::PLATFORM_FILE_WRITE); |
+ DCHECK(context_->async()); |
// write(..., 0) will return 0, which indicates end-of-file. |
DCHECK_GT(buf_len, 0); |
@@ -222,8 +226,7 @@ int FileStream::WriteSync(const char* buf, int buf_len) { |
if (!IsOpen()) |
return ERR_UNEXPECTED; |
- DCHECK(!is_async()); |
- DCHECK(open_flags_ & base::PLATFORM_FILE_WRITE); |
+ DCHECK(!context_->async()); |
// write(..., 0) will return 0, which indicates end-of-file. |
DCHECK_GT(buf_len, 0); |
@@ -236,9 +239,6 @@ int64 FileStream::Truncate(int64 bytes) { |
if (!IsOpen()) |
return ERR_UNEXPECTED; |
- // We'd better be open for writing. |
- DCHECK(open_flags_ & base::PLATFORM_FILE_WRITE); |
- |
// Seek to the position to truncate from. |
int64 seek_position = SeekSync(FROM_BEGIN, bytes); |
if (seek_position != bytes) |
@@ -252,9 +252,8 @@ int FileStream::Flush(const CompletionCallback& callback) { |
if (!IsOpen()) |
return ERR_UNEXPECTED; |
- DCHECK(open_flags_ & base::PLATFORM_FILE_WRITE); |
// Make sure we're async. |
- DCHECK(is_async()); |
+ DCHECK(context_->async()); |
context_->FlushAsync(callback); |
return ERR_IO_PENDING; |
@@ -266,7 +265,6 @@ int FileStream::FlushSync() { |
if (!IsOpen()) |
return ERR_UNEXPECTED; |
- DCHECK(open_flags_ & base::PLATFORM_FILE_WRITE); |
return context_->FlushSync(); |
} |
@@ -291,7 +289,7 @@ void FileStream::SetBoundNetLogSource(const BoundNetLog& owner_bound_net_log) { |
bound_net_log_.source().ToEventParametersCallback()); |
} |
-base::PlatformFile FileStream::GetPlatformFileForTesting() { |
+const base::File& FileStream::GetFileForTesting() const { |
return context_->file(); |
} |