Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(73)

Side by Side Diff: net/base/mock_file_stream.cc

Issue 82273002: Fix various issues in RedirectToFileResourceHandler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: UUUUNIT TESTS Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/base/mock_file_stream.h" 5 #include "net/base/mock_file_stream.h"
6 6
7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h"
9
7 namespace net { 10 namespace net {
8 11
9 namespace testing { 12 namespace testing {
10 13
14 MockFileStream::MockFileStream(net::NetLog* net_log)
15 : net::FileStream(net_log),
16 forced_error_(net::OK),
17 async_error_(false),
18 throttled_(false),
19 weak_factory_(this) {
20 }
21
22 MockFileStream::MockFileStream(base::PlatformFile file,
23 int flags,
24 net::NetLog* net_log)
25 : net::FileStream(file, flags, net_log),
26 forced_error_(net::OK),
27 async_error_(false),
28 throttled_(false),
29 weak_factory_(this) {
30 }
31
32 MockFileStream::MockFileStream(
33 base::PlatformFile file,
34 int flags,
35 net::NetLog* net_log,
36 const scoped_refptr<base::TaskRunner>& task_runner)
37 : net::FileStream(file, flags, net_log, task_runner),
38 forced_error_(net::OK),
39 async_error_(false),
40 throttled_(false),
41 weak_factory_(this) {
42 }
43
11 int MockFileStream::OpenSync(const base::FilePath& path, int open_flags) { 44 int MockFileStream::OpenSync(const base::FilePath& path, int open_flags) {
12 path_ = path; 45 path_ = path;
13 return ReturnError(FileStream::OpenSync(path, open_flags)); 46 return ReturnError(FileStream::OpenSync(path, open_flags));
14 } 47 }
15 48
16 int MockFileStream::Seek(Whence whence, int64 offset, 49 int MockFileStream::Seek(Whence whence, int64 offset,
17 const Int64CompletionCallback& callback) { 50 const Int64CompletionCallback& callback) {
18 return ReturnError(FileStream::Seek(whence, offset, callback)); 51 Int64CompletionCallback wrapped_callback =
52 base::Bind(&MockFileStream::DoCallback64,
53 weak_factory_.GetWeakPtr(), callback);
54 if (forced_error_ == net::OK)
55 return FileStream::Seek(whence, offset, wrapped_callback);
56 return ErrorCallback64(wrapped_callback);
19 } 57 }
20 58
21 int64 MockFileStream::SeekSync(Whence whence, int64 offset) { 59 int64 MockFileStream::SeekSync(Whence whence, int64 offset) {
22 return ReturnError64(FileStream::SeekSync(whence, offset)); 60 return ReturnError64(FileStream::SeekSync(whence, offset));
23 } 61 }
24 62
25 int64 MockFileStream::Available() { 63 int64 MockFileStream::Available() {
26 return ReturnError64(FileStream::Available()); 64 return ReturnError64(FileStream::Available());
27 } 65 }
28 66
29 int MockFileStream::Read(IOBuffer* buf, 67 int MockFileStream::Read(IOBuffer* buf,
30 int buf_len, 68 int buf_len,
31 const CompletionCallback& callback) { 69 const CompletionCallback& callback) {
32 return ReturnError(FileStream::Read(buf, buf_len, callback)); 70 CompletionCallback wrapped_callback = base::Bind(&MockFileStream::DoCallback,
71 weak_factory_.GetWeakPtr(),
72 callback);
73 if (forced_error_ == net::OK)
74 return FileStream::Read(buf, buf_len, wrapped_callback);
75 return ErrorCallback(wrapped_callback);
33 } 76 }
34 77
35 int MockFileStream::ReadSync(char* buf, int buf_len) { 78 int MockFileStream::ReadSync(char* buf, int buf_len) {
36 return ReturnError(FileStream::ReadSync(buf, buf_len)); 79 return ReturnError(FileStream::ReadSync(buf, buf_len));
37 } 80 }
38 81
39 int MockFileStream::ReadUntilComplete(char *buf, int buf_len) { 82 int MockFileStream::ReadUntilComplete(char *buf, int buf_len) {
40 return ReturnError(FileStream::ReadUntilComplete(buf, buf_len)); 83 return ReturnError(FileStream::ReadUntilComplete(buf, buf_len));
41 } 84 }
42 85
43 int MockFileStream::Write(IOBuffer* buf, 86 int MockFileStream::Write(IOBuffer* buf,
44 int buf_len, 87 int buf_len,
45 const CompletionCallback& callback) { 88 const CompletionCallback& callback) {
46 return ReturnError(FileStream::Write(buf, buf_len, callback)); 89 CompletionCallback wrapped_callback = base::Bind(&MockFileStream::DoCallback,
90 weak_factory_.GetWeakPtr(),
91 callback);
92 if (forced_error_ == net::OK)
93 return FileStream::Write(buf, buf_len, wrapped_callback);
94 return ErrorCallback(wrapped_callback);
47 } 95 }
48 96
49 int MockFileStream::WriteSync(const char* buf, int buf_len) { 97 int MockFileStream::WriteSync(const char* buf, int buf_len) {
50 return ReturnError(FileStream::WriteSync(buf, buf_len)); 98 return ReturnError(FileStream::WriteSync(buf, buf_len));
51 } 99 }
52 100
53 int64 MockFileStream::Truncate(int64 bytes) { 101 int64 MockFileStream::Truncate(int64 bytes) {
54 return ReturnError64(FileStream::Truncate(bytes)); 102 return ReturnError64(FileStream::Truncate(bytes));
55 } 103 }
56 104
57 int MockFileStream::Flush(const CompletionCallback& callback) { 105 int MockFileStream::Flush(const CompletionCallback& callback) {
58 return ReturnError(FileStream::Flush(callback)); 106 CompletionCallback wrapped_callback = base::Bind(&MockFileStream::DoCallback,
107 weak_factory_.GetWeakPtr(),
108 callback);
109 if (forced_error_ == net::OK)
110 return FileStream::Flush(wrapped_callback);
111 return ErrorCallback(wrapped_callback);
59 } 112 }
60 113
61 int MockFileStream::FlushSync() { 114 int MockFileStream::FlushSync() {
62 return ReturnError(FileStream::FlushSync()); 115 return ReturnError(FileStream::FlushSync());
63 } 116 }
64 117
118 void MockFileStream::ThrottleCallbacks() {
119 DCHECK(!throttled_);
120 throttled_ = true;
121 }
122
123 void MockFileStream::ReleaseCallbacks() {
124 DCHECK(throttled_);
125 throttled_ = false;
126
127 if (!throttled_task_.is_null()) {
128 base::Closure throttled_task = throttled_task_;
129 throttled_task_.Reset();
130 base::MessageLoop::current()->PostTask(FROM_HERE, throttled_task);
131 }
132 }
133
134 void MockFileStream::DoCallback(const CompletionCallback& callback,
135 int result) {
136 if (!throttled_) {
137 callback.Run(result);
138 return;
139 }
140 DCHECK(throttled_task_.is_null());
141 throttled_task_ = base::Bind(callback, result);
142 }
143
144 void MockFileStream::DoCallback64(const Int64CompletionCallback& callback,
145 int64 result) {
146 if (!throttled_) {
147 callback.Run(result);
148 return;
149 }
150 DCHECK(throttled_task_.is_null());
151 throttled_task_ = base::Bind(callback, result);
152 }
153
154 int MockFileStream::ErrorCallback(const CompletionCallback& callback) {
155 DCHECK_NE(net::OK, forced_error_);
156 if (async_error_) {
157 base::MessageLoop::current()->PostTask(
158 FROM_HERE, base::Bind(callback, forced_error_));
159 clear_forced_error();
160 return net::ERR_IO_PENDING;
161 }
162 int ret = forced_error_;
163 clear_forced_error();
164 return ret;
165 }
166
167 int64 MockFileStream::ErrorCallback64(const Int64CompletionCallback& callback) {
168 DCHECK_NE(net::OK, forced_error_);
169 if (async_error_) {
170 base::MessageLoop::current()->PostTask(
171 FROM_HERE, base::Bind(callback, forced_error_));
172 clear_forced_error();
173 return net::ERR_IO_PENDING;
174 }
175 int64 ret = forced_error_;
176 clear_forced_error();
177 return ret;
178 }
179
65 } // namespace testing 180 } // namespace testing
66 181
67 } // namespace net 182 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698