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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 | 83 |
84 virtual bool GetCharset( | 84 virtual bool GetCharset( |
85 JNIEnv* env, | 85 JNIEnv* env, |
86 net::URLRequest* request, | 86 net::URLRequest* request, |
87 android_webview::InputStream* stream, | 87 android_webview::InputStream* stream, |
88 std::string* charset) { | 88 std::string* charset) { |
89 return false; | 89 return false; |
90 } | 90 } |
91 }; | 91 }; |
92 | 92 |
| 93 class NullStreamReaderDelegate : public StreamReaderDelegate { |
| 94 public: |
| 95 NullStreamReaderDelegate() {} |
| 96 |
| 97 virtual scoped_ptr<InputStream> OpenInputStream( |
| 98 JNIEnv* env, |
| 99 net::URLRequest* request) { |
| 100 return make_scoped_ptr<InputStream>(NULL); |
| 101 } |
| 102 }; |
| 103 |
93 class MockInputStreamReader : public InputStreamReader { | 104 class MockInputStreamReader : public InputStreamReader { |
94 public: | 105 public: |
95 MockInputStreamReader() : InputStreamReader(new NotImplInputStream()) {} | 106 MockInputStreamReader() : InputStreamReader(new NotImplInputStream()) {} |
96 ~MockInputStreamReader() {} | 107 ~MockInputStreamReader() {} |
97 | 108 |
98 MOCK_METHOD1(Seek, int(const net::HttpByteRange& byte_range)); | 109 MOCK_METHOD1(Seek, int(const net::HttpByteRange& byte_range)); |
99 MOCK_METHOD2(ReadRawData, int(net::IOBuffer* buffer, int buffer_size)); | 110 MOCK_METHOD2(ReadRawData, int(net::IOBuffer* buffer, int buffer_size)); |
100 }; | 111 }; |
101 | 112 |
102 | 113 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 void SetRange(net::URLRequest* req, int first_byte, int last_byte) { | 159 void SetRange(net::URLRequest* req, int first_byte, int last_byte) { |
149 net::HttpRequestHeaders headers; | 160 net::HttpRequestHeaders headers; |
150 headers.SetHeader(net::HttpRequestHeaders::kRange, | 161 headers.SetHeader(net::HttpRequestHeaders::kRange, |
151 base::StringPrintf( | 162 base::StringPrintf( |
152 "bytes=%" PRIuS "-%" PRIuS, | 163 "bytes=%" PRIuS "-%" PRIuS, |
153 first_byte, last_byte)); | 164 first_byte, last_byte)); |
154 req->SetExtraRequestHeaders(headers); | 165 req->SetExtraRequestHeaders(headers); |
155 } | 166 } |
156 | 167 |
157 void SetUpTestJob(scoped_ptr<InputStreamReader> stream_reader) { | 168 void SetUpTestJob(scoped_ptr<InputStreamReader> stream_reader) { |
158 scoped_ptr<AndroidStreamReaderURLRequestJob::Delegate> | 169 SetUpTestJob(stream_reader.Pass(), |
159 stream_reader_delegate(new StreamReaderDelegate()); | 170 make_scoped_ptr(new StreamReaderDelegate()) |
| 171 .PassAs<AndroidStreamReaderURLRequestJob::Delegate>()); |
| 172 } |
| 173 |
| 174 void SetUpTestJob(scoped_ptr<InputStreamReader> stream_reader, |
| 175 scoped_ptr<AndroidStreamReaderURLRequestJob::Delegate> |
| 176 stream_reader_delegate) { |
160 TestStreamReaderJob* test_stream_reader_job = | 177 TestStreamReaderJob* test_stream_reader_job = |
161 new TestStreamReaderJob( | 178 new TestStreamReaderJob( |
162 req_.get(), | 179 req_.get(), |
163 &network_delegate_, | 180 &network_delegate_, |
164 stream_reader_delegate.Pass(), | 181 stream_reader_delegate.Pass(), |
165 stream_reader.Pass()); | 182 stream_reader.Pass()); |
166 // The Interceptor is owned by the |factory_|. | 183 // The Interceptor is owned by the |factory_|. |
167 TestJobInterceptor* protocol_handler = new TestJobInterceptor; | 184 TestJobInterceptor* protocol_handler = new TestJobInterceptor; |
168 protocol_handler->set_main_intercept_job(test_stream_reader_job); | 185 protocol_handler->set_main_intercept_job(test_stream_reader_job); |
169 bool set_protocol = factory_.SetProtocolHandler("http", protocol_handler); | 186 bool set_protocol = factory_.SetProtocolHandler("http", protocol_handler); |
(...skipping 26 matching lines...) Expand all Loading... |
196 | 213 |
197 SetUpTestJob(stream_reader.PassAs<InputStreamReader>()); | 214 SetUpTestJob(stream_reader.PassAs<InputStreamReader>()); |
198 | 215 |
199 req_->Start(); | 216 req_->Start(); |
200 | 217 |
201 // The TestDelegate will quit the message loop on request completion. | 218 // The TestDelegate will quit the message loop on request completion. |
202 MessageLoop::current()->Run(); | 219 MessageLoop::current()->Run(); |
203 | 220 |
204 EXPECT_FALSE(url_request_delegate_.request_failed()); | 221 EXPECT_FALSE(url_request_delegate_.request_failed()); |
205 EXPECT_EQ(1, network_delegate_.completed_requests()); | 222 EXPECT_EQ(1, network_delegate_.completed_requests()); |
| 223 EXPECT_EQ(200, req_->GetResponseCode()); |
| 224 } |
| 225 |
| 226 TEST_F(AndroidStreamReaderURLRequestJobTest, ReadWithNullStream) { |
| 227 SetUpTestJob(scoped_ptr<InputStreamReader>(), |
| 228 make_scoped_ptr(new NullStreamReaderDelegate()) |
| 229 .PassAs<AndroidStreamReaderURLRequestJob::Delegate>()); |
| 230 req_->Start(); |
| 231 |
| 232 // The TestDelegate will quit the message loop on request completion. |
| 233 MessageLoop::current()->Run(); |
| 234 |
| 235 EXPECT_FALSE(url_request_delegate_.request_failed()); |
| 236 EXPECT_EQ(1, network_delegate_.completed_requests()); |
| 237 EXPECT_EQ(404, req_->GetResponseCode()); |
206 } | 238 } |
207 | 239 |
208 TEST_F(AndroidStreamReaderURLRequestJobTest, ReadPartOfStream) { | 240 TEST_F(AndroidStreamReaderURLRequestJobTest, ReadPartOfStream) { |
209 const int bytes_available = 128; | 241 const int bytes_available = 128; |
210 const int offset = 32; | 242 const int offset = 32; |
211 const int bytes_to_read = bytes_available - offset; | 243 const int bytes_to_read = bytes_available - offset; |
212 scoped_ptr<StrictMock<MockInputStreamReader> > stream_reader( | 244 scoped_ptr<StrictMock<MockInputStreamReader> > stream_reader( |
213 new StrictMock<MockInputStreamReader>()); | 245 new StrictMock<MockInputStreamReader>()); |
214 { | 246 { |
215 InSequence s; | 247 InSequence s; |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 | 338 |
307 SetRange(req_.get(), offset, bytes_available); | 339 SetRange(req_.get(), offset, bytes_available); |
308 req_->Start(); | 340 req_->Start(); |
309 | 341 |
310 loop.Run(); | 342 loop.Run(); |
311 | 343 |
312 EXPECT_EQ(0, network_delegate_.completed_requests()); | 344 EXPECT_EQ(0, network_delegate_.completed_requests()); |
313 req_->Cancel(); | 345 req_->Cancel(); |
314 EXPECT_EQ(1, network_delegate_.completed_requests()); | 346 EXPECT_EQ(1, network_delegate_.completed_requests()); |
315 } | 347 } |
OLD | NEW |