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

Side by Side Diff: android_webview/browser/net/android_stream_reader_url_request_job_unittest.cc

Issue 12531002: [android_webview] Make intercepted URLRequests have status codes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix unit test Created 7 years, 9 months 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 "android_webview/browser/input_stream.h" 5 #include "android_webview/browser/input_stream.h"
6 #include "android_webview/browser/net/android_stream_reader_url_request_job.h" 6 #include "android_webview/browser/net/android_stream_reader_url_request_job.h"
7 #include "android_webview/browser/net/aw_url_request_job_factory.h" 7 #include "android_webview/browser/net/aw_url_request_job_factory.h"
8 #include "android_webview/browser/net/input_stream_reader.h" 8 #include "android_webview/browser/net/input_stream_reader.h"
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 88
89 virtual bool GetCharset( 89 virtual bool GetCharset(
90 JNIEnv* env, 90 JNIEnv* env,
91 net::URLRequest* request, 91 net::URLRequest* request,
92 android_webview::InputStream* stream, 92 android_webview::InputStream* stream,
93 std::string* charset) { 93 std::string* charset) {
94 return false; 94 return false;
95 } 95 }
96 }; 96 };
97 97
98 class NullStreamReaderDelegate : public StreamReaderDelegate {
99 public:
100 NullStreamReaderDelegate() {}
101
102 virtual scoped_ptr<InputStream> OpenInputStream(
103 JNIEnv* env,
104 const GURL& url) {
105 return make_scoped_ptr<InputStream>(NULL);
106 }
107 };
108
98 class MockInputStreamReader : public InputStreamReader { 109 class MockInputStreamReader : public InputStreamReader {
99 public: 110 public:
100 MockInputStreamReader() : InputStreamReader(new NotImplInputStream()) {} 111 MockInputStreamReader() : InputStreamReader(new NotImplInputStream()) {}
101 ~MockInputStreamReader() {} 112 ~MockInputStreamReader() {}
102 113
103 MOCK_METHOD1(Seek, int(const net::HttpByteRange& byte_range)); 114 MOCK_METHOD1(Seek, int(const net::HttpByteRange& byte_range));
104 MOCK_METHOD2(ReadRawData, int(net::IOBuffer* buffer, int buffer_size)); 115 MOCK_METHOD2(ReadRawData, int(net::IOBuffer* buffer, int buffer_size));
105 }; 116 };
106 117
107 118
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 void SetRange(net::URLRequest* req, int first_byte, int last_byte) { 164 void SetRange(net::URLRequest* req, int first_byte, int last_byte) {
154 net::HttpRequestHeaders headers; 165 net::HttpRequestHeaders headers;
155 headers.SetHeader(net::HttpRequestHeaders::kRange, 166 headers.SetHeader(net::HttpRequestHeaders::kRange,
156 base::StringPrintf( 167 base::StringPrintf(
157 "bytes=%" PRIuS "-%" PRIuS, 168 "bytes=%" PRIuS "-%" PRIuS,
158 first_byte, last_byte)); 169 first_byte, last_byte));
159 req->SetExtraRequestHeaders(headers); 170 req->SetExtraRequestHeaders(headers);
160 } 171 }
161 172
162 void SetUpTestJob(scoped_ptr<InputStreamReader> stream_reader) { 173 void SetUpTestJob(scoped_ptr<InputStreamReader> stream_reader) {
163 scoped_ptr<AndroidStreamReaderURLRequestJob::Delegate> 174 SetUpTestJob(stream_reader.Pass(),
164 stream_reader_delegate(new StreamReaderDelegate()); 175 make_scoped_ptr(new StreamReaderDelegate())
176 .PassAs<AndroidStreamReaderURLRequestJob::Delegate>());
177 }
178
179 void SetUpTestJob(scoped_ptr<InputStreamReader> stream_reader,
180 scoped_ptr<AndroidStreamReaderURLRequestJob::Delegate>
181 stream_reader_delegate) {
165 TestStreamReaderJob* test_stream_reader_job = 182 TestStreamReaderJob* test_stream_reader_job =
166 new TestStreamReaderJob( 183 new TestStreamReaderJob(
167 req_.get(), 184 req_.get(),
168 &network_delegate_, 185 &network_delegate_,
169 stream_reader_delegate.Pass(), 186 stream_reader_delegate.Pass(),
170 stream_reader.Pass()); 187 stream_reader.Pass());
171 // The Interceptor is owned by the |factory_|. 188 // The Interceptor is owned by the |factory_|.
172 TestJobInterceptor* protocol_handler = new TestJobInterceptor; 189 TestJobInterceptor* protocol_handler = new TestJobInterceptor;
173 protocol_handler->set_main_intercept_job(test_stream_reader_job); 190 protocol_handler->set_main_intercept_job(test_stream_reader_job);
174 bool set_protocol = factory_.SetProtocolHandler("http", protocol_handler); 191 bool set_protocol = factory_.SetProtocolHandler("http", protocol_handler);
(...skipping 26 matching lines...) Expand all
201 218
202 SetUpTestJob(stream_reader.PassAs<InputStreamReader>()); 219 SetUpTestJob(stream_reader.PassAs<InputStreamReader>());
203 220
204 req_->Start(); 221 req_->Start();
205 222
206 // The TestDelegate will quit the message loop on request completion. 223 // The TestDelegate will quit the message loop on request completion.
207 MessageLoop::current()->Run(); 224 MessageLoop::current()->Run();
208 225
209 EXPECT_FALSE(url_request_delegate_.request_failed()); 226 EXPECT_FALSE(url_request_delegate_.request_failed());
210 EXPECT_EQ(1, network_delegate_.completed_requests()); 227 EXPECT_EQ(1, network_delegate_.completed_requests());
228 EXPECT_EQ(0, network_delegate_.error_count());
229 EXPECT_EQ(200, req_->GetResponseCode());
230 }
231
232 TEST_F(AndroidStreamReaderURLRequestJobTest, ReadWithNullStream) {
233 SetUpTestJob(scoped_ptr<InputStreamReader>(),
234 make_scoped_ptr(new NullStreamReaderDelegate())
235 .PassAs<AndroidStreamReaderURLRequestJob::Delegate>());
236 req_->Start();
237
238 // The TestDelegate will quit the message loop on request completion.
239 MessageLoop::current()->Run();
240
241 // The request_failed() method is named confusingly but all it checks is
242 // whether the request got as far as calling NotifyHeadersComplete.
243 EXPECT_FALSE(url_request_delegate_.request_failed());
244 EXPECT_EQ(1, network_delegate_.completed_requests());
245 // A null input stream shouldn't result in an error. See crbug.com/180950.
246 EXPECT_EQ(0, network_delegate_.error_count());
247 EXPECT_EQ(404, req_->GetResponseCode());
211 } 248 }
212 249
213 TEST_F(AndroidStreamReaderURLRequestJobTest, ReadPartOfStream) { 250 TEST_F(AndroidStreamReaderURLRequestJobTest, ReadPartOfStream) {
214 const int bytes_available = 128; 251 const int bytes_available = 128;
215 const int offset = 32; 252 const int offset = 32;
216 const int bytes_to_read = bytes_available - offset; 253 const int bytes_to_read = bytes_available - offset;
217 scoped_ptr<StrictMock<MockInputStreamReader> > stream_reader( 254 scoped_ptr<StrictMock<MockInputStreamReader> > stream_reader(
218 new StrictMock<MockInputStreamReader>()); 255 new StrictMock<MockInputStreamReader>());
219 { 256 {
220 InSequence s; 257 InSequence s;
(...skipping 10 matching lines...) Expand all
231 SetUpTestJob(stream_reader.PassAs<InputStreamReader>()); 268 SetUpTestJob(stream_reader.PassAs<InputStreamReader>());
232 269
233 SetRange(req_.get(), offset, bytes_available); 270 SetRange(req_.get(), offset, bytes_available);
234 req_->Start(); 271 req_->Start();
235 272
236 MessageLoop::current()->Run(); 273 MessageLoop::current()->Run();
237 274
238 EXPECT_FALSE(url_request_delegate_.request_failed()); 275 EXPECT_FALSE(url_request_delegate_.request_failed());
239 EXPECT_EQ(bytes_to_read, url_request_delegate_.bytes_received()); 276 EXPECT_EQ(bytes_to_read, url_request_delegate_.bytes_received());
240 EXPECT_EQ(1, network_delegate_.completed_requests()); 277 EXPECT_EQ(1, network_delegate_.completed_requests());
278 EXPECT_EQ(0, network_delegate_.error_count());
241 } 279 }
242 280
243 TEST_F(AndroidStreamReaderURLRequestJobTest, 281 TEST_F(AndroidStreamReaderURLRequestJobTest,
244 ReadStreamWithMoreAvailableThanActual) { 282 ReadStreamWithMoreAvailableThanActual) {
245 const int bytes_available_reported = 190; 283 const int bytes_available_reported = 190;
246 const int bytes_available = 128; 284 const int bytes_available = 128;
247 const int offset = 0; 285 const int offset = 0;
248 const int bytes_to_read = bytes_available - offset; 286 const int bytes_to_read = bytes_available - offset;
249 scoped_ptr<StrictMock<MockInputStreamReader> > stream_reader( 287 scoped_ptr<StrictMock<MockInputStreamReader> > stream_reader(
250 new StrictMock<MockInputStreamReader>()); 288 new StrictMock<MockInputStreamReader>());
(...skipping 10 matching lines...) Expand all
261 SetUpTestJob(stream_reader.PassAs<InputStreamReader>()); 299 SetUpTestJob(stream_reader.PassAs<InputStreamReader>());
262 300
263 SetRange(req_.get(), offset, bytes_available_reported); 301 SetRange(req_.get(), offset, bytes_available_reported);
264 req_->Start(); 302 req_->Start();
265 303
266 MessageLoop::current()->Run(); 304 MessageLoop::current()->Run();
267 305
268 EXPECT_FALSE(url_request_delegate_.request_failed()); 306 EXPECT_FALSE(url_request_delegate_.request_failed());
269 EXPECT_EQ(bytes_to_read, url_request_delegate_.bytes_received()); 307 EXPECT_EQ(bytes_to_read, url_request_delegate_.bytes_received());
270 EXPECT_EQ(1, network_delegate_.completed_requests()); 308 EXPECT_EQ(1, network_delegate_.completed_requests());
309 EXPECT_EQ(0, network_delegate_.error_count());
271 } 310 }
272 311
273 TEST_F(AndroidStreamReaderURLRequestJobTest, DeleteJobMidWaySeek) { 312 TEST_F(AndroidStreamReaderURLRequestJobTest, DeleteJobMidWaySeek) {
274 const int offset = 20; 313 const int offset = 20;
275 const int bytes_available = 128; 314 const int bytes_available = 128;
276 base::RunLoop loop; 315 base::RunLoop loop;
277 scoped_ptr<StrictMock<MockInputStreamReader> > stream_reader( 316 scoped_ptr<StrictMock<MockInputStreamReader> > stream_reader(
278 new StrictMock<MockInputStreamReader>()); 317 new StrictMock<MockInputStreamReader>());
279 EXPECT_CALL(*stream_reader, Seek(_)) 318 EXPECT_CALL(*stream_reader, Seek(_))
280 .WillOnce(DoAll(InvokeWithoutArgs(&loop, &base::RunLoop::Quit), 319 .WillOnce(DoAll(InvokeWithoutArgs(&loop, &base::RunLoop::Quit),
(...skipping 30 matching lines...) Expand all
311 350
312 SetRange(req_.get(), offset, bytes_available); 351 SetRange(req_.get(), offset, bytes_available);
313 req_->Start(); 352 req_->Start();
314 353
315 loop.Run(); 354 loop.Run();
316 355
317 EXPECT_EQ(0, network_delegate_.completed_requests()); 356 EXPECT_EQ(0, network_delegate_.completed_requests());
318 req_->Cancel(); 357 req_->Cancel();
319 EXPECT_EQ(1, network_delegate_.completed_requests()); 358 EXPECT_EQ(1, network_delegate_.completed_requests());
320 } 359 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698