Index: net/base/mock_file_stream.h |
diff --git a/net/base/mock_file_stream.h b/net/base/mock_file_stream.h |
index a37b49546d4faeacf26dffacc4f287b9af4d1378..5b779d4027c7be1ad9a1bb7fb8ad156276fc805f 100644 |
--- a/net/base/mock_file_stream.h |
+++ b/net/base/mock_file_stream.h |
@@ -10,6 +10,7 @@ |
#include "base/basictypes.h" |
#include "base/compiler_specific.h" |
#include "base/files/file_path.h" |
+#include "base/memory/weak_ptr.h" |
#include "net/base/file_stream.h" |
#include "net/base/net_errors.h" |
@@ -21,11 +22,11 @@ namespace testing { |
class MockFileStream : public net::FileStream { |
public: |
- MockFileStream(net::NetLog* net_log) |
- : net::FileStream(net_log), forced_error_(net::OK) {} |
- |
- MockFileStream(base::PlatformFile file, int flags, net::NetLog* net_log) |
- : net::FileStream(file, flags, net_log), forced_error_(net::OK) {} |
+ explicit MockFileStream(net::NetLog* net_log); |
+ MockFileStream(base::PlatformFile file, int flags, net::NetLog* net_log); |
+ MockFileStream(base::PlatformFile file, int flags, net::NetLog* net_log, |
+ const scoped_refptr<base::TaskRunner>& task_runner); |
+ virtual ~MockFileStream(); |
// FileStream methods. |
virtual int OpenSync(const base::FilePath& path, int open_flags) OVERRIDE; |
@@ -46,11 +47,28 @@ class MockFileStream : public net::FileStream { |
virtual int Flush(const CompletionCallback& callback) OVERRIDE; |
virtual int FlushSync() OVERRIDE; |
- void set_forced_error(int error) { forced_error_ = error; } |
- void clear_forced_error() { forced_error_ = net::OK; } |
+ void set_forced_error_async(int error) { |
+ forced_error_ = error; |
+ async_error_ = true; |
+ } |
+ void set_forced_error(int error) { |
+ forced_error_ = error; |
+ async_error_ = false; |
+ } |
+ void clear_forced_error() { |
+ forced_error_ = net::OK; |
+ async_error_ = false; |
+ } |
int forced_error() const { return forced_error_; } |
const base::FilePath& get_path() const { return path_; } |
+ // Throttles all asynchronous callbacks, including forced errors, until a |
+ // matching ReleaseCallbacks call. |
+ void ThrottleCallbacks(); |
+ |
+ // Resumes running asynchronous callbacks and runs any throttled callbacks. |
+ void ReleaseCallbacks(); |
+ |
private: |
int ReturnError(int function_error) { |
if (forced_error_ != net::OK) { |
@@ -72,8 +90,23 @@ class MockFileStream : public net::FileStream { |
return function_error; |
} |
+ // Wrappers for callbacks to make them honor ThrottleCallbacks and |
+ // ReleaseCallbacks. |
+ void DoCallback(const CompletionCallback& callback, int result); |
+ void DoCallback64(const Int64CompletionCallback& callback, int64 result); |
+ |
+ // Depending on |async_error_|, either synchronously returns |forced_error_| |
+ // asynchronously calls |callback| with |async_error_|. |
+ int ErrorCallback(const CompletionCallback& callback); |
+ int64 ErrorCallback64(const Int64CompletionCallback& callback); |
+ |
int forced_error_; |
+ bool async_error_; |
+ bool throttled_; |
+ base::Closure throttled_task_; |
base::FilePath path_; |
+ |
+ base::WeakPtrFactory<MockFileStream> weak_factory_; |
}; |
} // namespace testing |