| OLD | NEW |
| 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 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 virtual base::TaskRunner* GetWorkerThreadRunner() { | 140 virtual base::TaskRunner* GetWorkerThreadRunner() { |
| 141 return message_loop_proxy_.get(); | 141 return message_loop_proxy_.get(); |
| 142 } | 142 } |
| 143 | 143 |
| 144 scoped_ptr<InputStreamReader> stream_reader_; | 144 scoped_ptr<InputStreamReader> stream_reader_; |
| 145 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; | 145 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; |
| 146 }; | 146 }; |
| 147 | 147 |
| 148 class AndroidStreamReaderURLRequestJobTest : public Test { | 148 class AndroidStreamReaderURLRequestJobTest : public Test { |
| 149 public: | 149 public: |
| 150 AndroidStreamReaderURLRequestJobTest() | 150 AndroidStreamReaderURLRequestJobTest() : loop_(base::MessageLoop::TYPE_IO) {} |
| 151 : loop_(MessageLoop::TYPE_IO) { | 151 |
| 152 } | |
| 153 protected: | 152 protected: |
| 154 virtual void SetUp() { | 153 virtual void SetUp() { |
| 155 context_.set_job_factory(&factory_); | 154 context_.set_job_factory(&factory_); |
| 156 context_.set_network_delegate(&network_delegate_); | 155 context_.set_network_delegate(&network_delegate_); |
| 157 req_.reset( | 156 req_.reset( |
| 158 new TestURLRequest(GURL("content://foo"), | 157 new TestURLRequest(GURL("content://foo"), |
| 159 &url_request_delegate_, | 158 &url_request_delegate_, |
| 160 &context_, | 159 &context_, |
| 161 &network_delegate_)); | 160 &network_delegate_)); |
| 162 req_->set_method("GET"); | 161 req_->set_method("GET"); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 191 protocol_handler->set_main_intercept_job(test_stream_reader_job); | 190 protocol_handler->set_main_intercept_job(test_stream_reader_job); |
| 192 bool set_protocol = factory_.SetProtocolHandler("http", protocol_handler); | 191 bool set_protocol = factory_.SetProtocolHandler("http", protocol_handler); |
| 193 DCHECK(set_protocol); | 192 DCHECK(set_protocol); |
| 194 | 193 |
| 195 protocol_handler = new TestJobInterceptor; | 194 protocol_handler = new TestJobInterceptor; |
| 196 protocol_handler->set_main_intercept_job(test_stream_reader_job); | 195 protocol_handler->set_main_intercept_job(test_stream_reader_job); |
| 197 set_protocol = factory_.SetProtocolHandler("content", protocol_handler); | 196 set_protocol = factory_.SetProtocolHandler("content", protocol_handler); |
| 198 DCHECK(set_protocol); | 197 DCHECK(set_protocol); |
| 199 } | 198 } |
| 200 | 199 |
| 201 MessageLoop loop_; | 200 base::MessageLoop loop_; |
| 202 TestURLRequestContext context_; | 201 TestURLRequestContext context_; |
| 203 android_webview::AwURLRequestJobFactory factory_; | 202 android_webview::AwURLRequestJobFactory factory_; |
| 204 TestDelegate url_request_delegate_; | 203 TestDelegate url_request_delegate_; |
| 205 TestNetworkDelegate network_delegate_; | 204 TestNetworkDelegate network_delegate_; |
| 206 scoped_ptr<TestURLRequest> req_; | 205 scoped_ptr<TestURLRequest> req_; |
| 207 }; | 206 }; |
| 208 | 207 |
| 209 TEST_F(AndroidStreamReaderURLRequestJobTest, ReadEmptyStream) { | 208 TEST_F(AndroidStreamReaderURLRequestJobTest, ReadEmptyStream) { |
| 210 scoped_ptr<StrictMock<MockInputStreamReader> > stream_reader( | 209 scoped_ptr<StrictMock<MockInputStreamReader> > stream_reader( |
| 211 new StrictMock<MockInputStreamReader>()); | 210 new StrictMock<MockInputStreamReader>()); |
| 212 { | 211 { |
| 213 InSequence s; | 212 InSequence s; |
| 214 EXPECT_CALL(*stream_reader, Seek(_)) | 213 EXPECT_CALL(*stream_reader, Seek(_)) |
| 215 .WillOnce(Return(0)); | 214 .WillOnce(Return(0)); |
| 216 EXPECT_CALL(*stream_reader, ReadRawData(NotNull(), Gt(0))) | 215 EXPECT_CALL(*stream_reader, ReadRawData(NotNull(), Gt(0))) |
| 217 .WillOnce(Return(0)); | 216 .WillOnce(Return(0)); |
| 218 } | 217 } |
| 219 | 218 |
| 220 SetUpTestJob(stream_reader.PassAs<InputStreamReader>()); | 219 SetUpTestJob(stream_reader.PassAs<InputStreamReader>()); |
| 221 | 220 |
| 222 req_->Start(); | 221 req_->Start(); |
| 223 | 222 |
| 224 // The TestDelegate will quit the message loop on request completion. | 223 // The TestDelegate will quit the message loop on request completion. |
| 225 MessageLoop::current()->Run(); | 224 base::MessageLoop::current()->Run(); |
| 226 | 225 |
| 227 EXPECT_FALSE(url_request_delegate_.request_failed()); | 226 EXPECT_FALSE(url_request_delegate_.request_failed()); |
| 228 EXPECT_EQ(1, network_delegate_.completed_requests()); | 227 EXPECT_EQ(1, network_delegate_.completed_requests()); |
| 229 EXPECT_EQ(0, network_delegate_.error_count()); | 228 EXPECT_EQ(0, network_delegate_.error_count()); |
| 230 EXPECT_EQ(200, req_->GetResponseCode()); | 229 EXPECT_EQ(200, req_->GetResponseCode()); |
| 231 } | 230 } |
| 232 | 231 |
| 233 TEST_F(AndroidStreamReaderURLRequestJobTest, ReadWithNullStream) { | 232 TEST_F(AndroidStreamReaderURLRequestJobTest, ReadWithNullStream) { |
| 234 SetUpTestJob(scoped_ptr<InputStreamReader>(), | 233 SetUpTestJob(scoped_ptr<InputStreamReader>(), |
| 235 make_scoped_ptr(new NullStreamReaderDelegate()) | 234 make_scoped_ptr(new NullStreamReaderDelegate()) |
| 236 .PassAs<AndroidStreamReaderURLRequestJob::Delegate>()); | 235 .PassAs<AndroidStreamReaderURLRequestJob::Delegate>()); |
| 237 req_->Start(); | 236 req_->Start(); |
| 238 | 237 |
| 239 // The TestDelegate will quit the message loop on request completion. | 238 // The TestDelegate will quit the message loop on request completion. |
| 240 MessageLoop::current()->Run(); | 239 base::MessageLoop::current()->Run(); |
| 241 | 240 |
| 242 // The request_failed() method is named confusingly but all it checks is | 241 // The request_failed() method is named confusingly but all it checks is |
| 243 // whether the request got as far as calling NotifyHeadersComplete. | 242 // whether the request got as far as calling NotifyHeadersComplete. |
| 244 EXPECT_FALSE(url_request_delegate_.request_failed()); | 243 EXPECT_FALSE(url_request_delegate_.request_failed()); |
| 245 EXPECT_EQ(1, network_delegate_.completed_requests()); | 244 EXPECT_EQ(1, network_delegate_.completed_requests()); |
| 246 // A null input stream shouldn't result in an error. See crbug.com/180950. | 245 // A null input stream shouldn't result in an error. See crbug.com/180950. |
| 247 EXPECT_EQ(0, network_delegate_.error_count()); | 246 EXPECT_EQ(0, network_delegate_.error_count()); |
| 248 EXPECT_EQ(404, req_->GetResponseCode()); | 247 EXPECT_EQ(404, req_->GetResponseCode()); |
| 249 } | 248 } |
| 250 | 249 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 264 .WillOnce(Return(bytes_to_read/2)); | 263 .WillOnce(Return(bytes_to_read/2)); |
| 265 EXPECT_CALL(*stream_reader, ReadRawData(NotNull(), Ge(bytes_to_read))) | 264 EXPECT_CALL(*stream_reader, ReadRawData(NotNull(), Ge(bytes_to_read))) |
| 266 .WillOnce(Return(0)); | 265 .WillOnce(Return(0)); |
| 267 } | 266 } |
| 268 | 267 |
| 269 SetUpTestJob(stream_reader.PassAs<InputStreamReader>()); | 268 SetUpTestJob(stream_reader.PassAs<InputStreamReader>()); |
| 270 | 269 |
| 271 SetRange(req_.get(), offset, bytes_available); | 270 SetRange(req_.get(), offset, bytes_available); |
| 272 req_->Start(); | 271 req_->Start(); |
| 273 | 272 |
| 274 MessageLoop::current()->Run(); | 273 base::MessageLoop::current()->Run(); |
| 275 | 274 |
| 276 EXPECT_FALSE(url_request_delegate_.request_failed()); | 275 EXPECT_FALSE(url_request_delegate_.request_failed()); |
| 277 EXPECT_EQ(bytes_to_read, url_request_delegate_.bytes_received()); | 276 EXPECT_EQ(bytes_to_read, url_request_delegate_.bytes_received()); |
| 278 EXPECT_EQ(1, network_delegate_.completed_requests()); | 277 EXPECT_EQ(1, network_delegate_.completed_requests()); |
| 279 EXPECT_EQ(0, network_delegate_.error_count()); | 278 EXPECT_EQ(0, network_delegate_.error_count()); |
| 280 } | 279 } |
| 281 | 280 |
| 282 TEST_F(AndroidStreamReaderURLRequestJobTest, | 281 TEST_F(AndroidStreamReaderURLRequestJobTest, |
| 283 ReadStreamWithMoreAvailableThanActual) { | 282 ReadStreamWithMoreAvailableThanActual) { |
| 284 const int bytes_available_reported = 190; | 283 const int bytes_available_reported = 190; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 295 .WillOnce(Return(bytes_available)); | 294 .WillOnce(Return(bytes_available)); |
| 296 EXPECT_CALL(*stream_reader, ReadRawData(NotNull(), Ge(bytes_to_read))) | 295 EXPECT_CALL(*stream_reader, ReadRawData(NotNull(), Ge(bytes_to_read))) |
| 297 .WillOnce(Return(0)); | 296 .WillOnce(Return(0)); |
| 298 } | 297 } |
| 299 | 298 |
| 300 SetUpTestJob(stream_reader.PassAs<InputStreamReader>()); | 299 SetUpTestJob(stream_reader.PassAs<InputStreamReader>()); |
| 301 | 300 |
| 302 SetRange(req_.get(), offset, bytes_available_reported); | 301 SetRange(req_.get(), offset, bytes_available_reported); |
| 303 req_->Start(); | 302 req_->Start(); |
| 304 | 303 |
| 305 MessageLoop::current()->Run(); | 304 base::MessageLoop::current()->Run(); |
| 306 | 305 |
| 307 EXPECT_FALSE(url_request_delegate_.request_failed()); | 306 EXPECT_FALSE(url_request_delegate_.request_failed()); |
| 308 EXPECT_EQ(bytes_to_read, url_request_delegate_.bytes_received()); | 307 EXPECT_EQ(bytes_to_read, url_request_delegate_.bytes_received()); |
| 309 EXPECT_EQ(1, network_delegate_.completed_requests()); | 308 EXPECT_EQ(1, network_delegate_.completed_requests()); |
| 310 EXPECT_EQ(0, network_delegate_.error_count()); | 309 EXPECT_EQ(0, network_delegate_.error_count()); |
| 311 } | 310 } |
| 312 | 311 |
| 313 TEST_F(AndroidStreamReaderURLRequestJobTest, DeleteJobMidWaySeek) { | 312 TEST_F(AndroidStreamReaderURLRequestJobTest, DeleteJobMidWaySeek) { |
| 314 const int offset = 20; | 313 const int offset = 20; |
| 315 const int bytes_available = 128; | 314 const int bytes_available = 128; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 | 350 |
| 352 SetRange(req_.get(), offset, bytes_available); | 351 SetRange(req_.get(), offset, bytes_available); |
| 353 req_->Start(); | 352 req_->Start(); |
| 354 | 353 |
| 355 loop.Run(); | 354 loop.Run(); |
| 356 | 355 |
| 357 EXPECT_EQ(0, network_delegate_.completed_requests()); | 356 EXPECT_EQ(0, network_delegate_.completed_requests()); |
| 358 req_->Cancel(); | 357 req_->Cancel(); |
| 359 EXPECT_EQ(1, network_delegate_.completed_requests()); | 358 EXPECT_EQ(1, network_delegate_.completed_requests()); |
| 360 } | 359 } |
| OLD | NEW |