| 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
|
|
|