// 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. // This file implements FileStream for POSIX. #ifndef NET_BASE_FILE_STREAM_POSIX_H_ #define NET_BASE_FILE_STREAM_POSIX_H_ #pragma once #include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" #include "base/platform_file.h" #include "net/base/completion_callback.h" #include "net/base/file_stream_whence.h" #include "net/base/net_export.h" #include "net/base/net_log.h" class FilePath; namespace base { class WaitableEvent; } namespace net { class IOBuffer; class NET_EXPORT FileStreamPosix { public: explicit FileStreamPosix(net::NetLog* net_log); FileStreamPosix(base::PlatformFile file, int flags, net::NetLog* net_log); ~FileStreamPosix(); // FileStream implementations. void Close(const CompletionCallback& callback); void CloseSync(); int Open(const FilePath& path, int open_flags, const CompletionCallback& callback); int OpenSync(const FilePath& path, int open_flags); bool IsOpen() const; int Seek(Whence whence, int64 offset, const Int64CompletionCallback& callback); int64 SeekSync(Whence whence, int64 offset); int64 Available(); int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback); int ReadSync(char* buf, int buf_len); int ReadUntilComplete(char *buf, int buf_len); int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback); int WriteSync(const char* buf, int buf_len); int64 Truncate(int64 bytes); int Flush(); void EnableErrorStatistics(); void SetBoundNetLogSource( const net::BoundNetLog& owner_bound_net_log); base::PlatformFile GetPlatformFileForTesting(); // Resets on_io_complete_ and WeakPtr's. // Called when Read() or Write() is completed. void ResetOnIOComplete(); private: // Called when the file_ is closed asynchronously. void OnClosed(const CompletionCallback& callback); // Waits until the in-flight async open/close/read/write operation is // complete. void WaitForIOCompletion(); base::PlatformFile file_; int open_flags_; bool auto_closed_; bool record_uma_; net::BoundNetLog bound_net_log_; base::WeakPtrFactory weak_ptr_factory_; scoped_ptr on_io_complete_; DISALLOW_COPY_AND_ASSIGN(FileStreamPosix); }; } // namespace net #endif // NET_BASE_FILE_STREAM_POSIX_H