1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "net/base/mock_file_stream.h"
8 #include "base/message_loop/message_loop.h"
14 MockFileStream::MockFileStream(
15 const scoped_refptr
<base::TaskRunner
>& task_runner
)
16 : FileStream(task_runner
),
23 MockFileStream::MockFileStream(
25 const scoped_refptr
<base::TaskRunner
>& task_runner
)
26 : FileStream(file
.Pass(), task_runner
),
33 MockFileStream::~MockFileStream() {
36 int MockFileStream::Seek(base::File::Whence whence
,
38 const Int64CompletionCallback
& callback
) {
39 Int64CompletionCallback wrapped_callback
=
40 base::Bind(&MockFileStream::DoCallback64
,
41 weak_factory_
.GetWeakPtr(), callback
);
42 if (forced_error_
== OK
)
43 return FileStream::Seek(whence
, offset
, wrapped_callback
);
44 return ErrorCallback64(wrapped_callback
);
47 int MockFileStream::Read(IOBuffer
* buf
,
49 const CompletionCallback
& callback
) {
50 CompletionCallback wrapped_callback
= base::Bind(&MockFileStream::DoCallback
,
51 weak_factory_
.GetWeakPtr(),
53 if (forced_error_
== OK
)
54 return FileStream::Read(buf
, buf_len
, wrapped_callback
);
55 return ErrorCallback(wrapped_callback
);
58 int MockFileStream::Write(IOBuffer
* buf
,
60 const CompletionCallback
& callback
) {
61 CompletionCallback wrapped_callback
= base::Bind(&MockFileStream::DoCallback
,
62 weak_factory_
.GetWeakPtr(),
64 if (forced_error_
== OK
)
65 return FileStream::Write(buf
, buf_len
, wrapped_callback
);
66 return ErrorCallback(wrapped_callback
);
69 int MockFileStream::Flush(const CompletionCallback
& callback
) {
70 CompletionCallback wrapped_callback
= base::Bind(&MockFileStream::DoCallback
,
71 weak_factory_
.GetWeakPtr(),
73 if (forced_error_
== OK
)
74 return FileStream::Flush(wrapped_callback
);
75 return ErrorCallback(wrapped_callback
);
78 void MockFileStream::ThrottleCallbacks() {
83 void MockFileStream::ReleaseCallbacks() {
87 if (!throttled_task_
.is_null()) {
88 base::Closure throttled_task
= throttled_task_
;
89 throttled_task_
.Reset();
90 base::MessageLoop::current()->PostTask(FROM_HERE
, throttled_task
);
94 void MockFileStream::DoCallback(const CompletionCallback
& callback
,
100 CHECK(throttled_task_
.is_null());
101 throttled_task_
= base::Bind(callback
, result
);
104 void MockFileStream::DoCallback64(const Int64CompletionCallback
& callback
,
107 callback
.Run(result
);
110 CHECK(throttled_task_
.is_null());
111 throttled_task_
= base::Bind(callback
, result
);
114 int MockFileStream::ErrorCallback(const CompletionCallback
& callback
) {
115 CHECK_NE(OK
, forced_error_
);
117 base::MessageLoop::current()->PostTask(
118 FROM_HERE
, base::Bind(callback
, forced_error_
));
119 clear_forced_error();
120 return ERR_IO_PENDING
;
122 int ret
= forced_error_
;
123 clear_forced_error();
127 int64_t MockFileStream::ErrorCallback64(
128 const Int64CompletionCallback
& callback
) {
129 CHECK_NE(OK
, forced_error_
);
131 base::MessageLoop::current()->PostTask(
132 FROM_HERE
, base::Bind(callback
, forced_error_
));
133 clear_forced_error();
134 return ERR_IO_PENDING
;
136 int64_t ret
= forced_error_
;
137 clear_forced_error();
141 } // namespace testing