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/location.h"
9 #include "base/single_thread_task_runner.h"
10 #include "base/thread_task_runner_handle.h"
16 MockFileStream::MockFileStream(
17 const scoped_refptr
<base::TaskRunner
>& task_runner
)
18 : FileStream(task_runner
),
25 MockFileStream::MockFileStream(
27 const scoped_refptr
<base::TaskRunner
>& task_runner
)
28 : FileStream(file
.Pass(), task_runner
),
35 MockFileStream::~MockFileStream() {
38 int MockFileStream::Seek(base::File::Whence whence
,
40 const Int64CompletionCallback
& callback
) {
41 Int64CompletionCallback wrapped_callback
=
42 base::Bind(&MockFileStream::DoCallback64
,
43 weak_factory_
.GetWeakPtr(), callback
);
44 if (forced_error_
== OK
)
45 return FileStream::Seek(whence
, offset
, wrapped_callback
);
46 return ErrorCallback64(wrapped_callback
);
49 int MockFileStream::Read(IOBuffer
* buf
,
51 const CompletionCallback
& callback
) {
52 CompletionCallback wrapped_callback
= base::Bind(&MockFileStream::DoCallback
,
53 weak_factory_
.GetWeakPtr(),
55 if (forced_error_
== OK
)
56 return FileStream::Read(buf
, buf_len
, wrapped_callback
);
57 return ErrorCallback(wrapped_callback
);
60 int MockFileStream::Write(IOBuffer
* buf
,
62 const CompletionCallback
& callback
) {
63 CompletionCallback wrapped_callback
= base::Bind(&MockFileStream::DoCallback
,
64 weak_factory_
.GetWeakPtr(),
66 if (forced_error_
== OK
)
67 return FileStream::Write(buf
, buf_len
, wrapped_callback
);
68 return ErrorCallback(wrapped_callback
);
71 int MockFileStream::Flush(const CompletionCallback
& callback
) {
72 CompletionCallback wrapped_callback
= base::Bind(&MockFileStream::DoCallback
,
73 weak_factory_
.GetWeakPtr(),
75 if (forced_error_
== OK
)
76 return FileStream::Flush(wrapped_callback
);
77 return ErrorCallback(wrapped_callback
);
80 void MockFileStream::ThrottleCallbacks() {
85 void MockFileStream::ReleaseCallbacks() {
89 if (!throttled_task_
.is_null()) {
90 base::Closure throttled_task
= throttled_task_
;
91 throttled_task_
.Reset();
92 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE
, throttled_task
);
96 void MockFileStream::DoCallback(const CompletionCallback
& callback
,
102 CHECK(throttled_task_
.is_null());
103 throttled_task_
= base::Bind(callback
, result
);
106 void MockFileStream::DoCallback64(const Int64CompletionCallback
& callback
,
109 callback
.Run(result
);
112 CHECK(throttled_task_
.is_null());
113 throttled_task_
= base::Bind(callback
, result
);
116 int MockFileStream::ErrorCallback(const CompletionCallback
& callback
) {
117 CHECK_NE(OK
, forced_error_
);
119 base::ThreadTaskRunnerHandle::Get()->PostTask(
120 FROM_HERE
, base::Bind(callback
, forced_error_
));
121 clear_forced_error();
122 return ERR_IO_PENDING
;
124 int ret
= forced_error_
;
125 clear_forced_error();
129 int64_t MockFileStream::ErrorCallback64(
130 const Int64CompletionCallback
& callback
) {
131 CHECK_NE(OK
, forced_error_
);
133 base::ThreadTaskRunnerHandle::Get()->PostTask(
134 FROM_HERE
, base::Bind(callback
, forced_error_
));
135 clear_forced_error();
136 return ERR_IO_PENDING
;
138 int64_t ret
= forced_error_
;
139 clear_forced_error();
143 } // namespace testing