Index: android_webview/browser/net/android_stream_reader_url_request_job_unittest.cc |
diff --git a/android_webview/browser/net/android_stream_reader_url_request_job_unittest.cc b/android_webview/browser/net/android_stream_reader_url_request_job_unittest.cc |
index df7931db662816aeb676ecc141ffbd258e752be1..027615cf5f750baf6a7c6a89de417b6ea906e207 100644 |
--- a/android_webview/browser/net/android_stream_reader_url_request_job_unittest.cc |
+++ b/android_webview/browser/net/android_stream_reader_url_request_job_unittest.cc |
@@ -95,6 +95,17 @@ class StreamReaderDelegate : |
} |
}; |
+class NullStreamReaderDelegate : public StreamReaderDelegate { |
+ public: |
+ NullStreamReaderDelegate() {} |
+ |
+ virtual scoped_ptr<InputStream> OpenInputStream( |
+ JNIEnv* env, |
+ const GURL& url) { |
+ return make_scoped_ptr<InputStream>(NULL); |
+ } |
+}; |
+ |
class MockInputStreamReader : public InputStreamReader { |
public: |
MockInputStreamReader() : InputStreamReader(new NotImplInputStream()) {} |
@@ -160,8 +171,14 @@ class AndroidStreamReaderURLRequestJobTest : public Test { |
} |
void SetUpTestJob(scoped_ptr<InputStreamReader> stream_reader) { |
- scoped_ptr<AndroidStreamReaderURLRequestJob::Delegate> |
- stream_reader_delegate(new StreamReaderDelegate()); |
+ SetUpTestJob(stream_reader.Pass(), |
+ make_scoped_ptr(new StreamReaderDelegate()) |
+ .PassAs<AndroidStreamReaderURLRequestJob::Delegate>()); |
+ } |
+ |
+ void SetUpTestJob(scoped_ptr<InputStreamReader> stream_reader, |
+ scoped_ptr<AndroidStreamReaderURLRequestJob::Delegate> |
+ stream_reader_delegate) { |
TestStreamReaderJob* test_stream_reader_job = |
new TestStreamReaderJob( |
req_.get(), |
@@ -208,6 +225,26 @@ TEST_F(AndroidStreamReaderURLRequestJobTest, ReadEmptyStream) { |
EXPECT_FALSE(url_request_delegate_.request_failed()); |
EXPECT_EQ(1, network_delegate_.completed_requests()); |
+ EXPECT_EQ(0, network_delegate_.error_count()); |
+ EXPECT_EQ(200, req_->GetResponseCode()); |
+} |
+ |
+TEST_F(AndroidStreamReaderURLRequestJobTest, ReadWithNullStream) { |
+ SetUpTestJob(scoped_ptr<InputStreamReader>(), |
+ make_scoped_ptr(new NullStreamReaderDelegate()) |
+ .PassAs<AndroidStreamReaderURLRequestJob::Delegate>()); |
+ req_->Start(); |
+ |
+ // The TestDelegate will quit the message loop on request completion. |
+ MessageLoop::current()->Run(); |
+ |
+ // The request_failed() method is named confusingly but all it checks is |
+ // whether the request got as far as calling NotifyHeadersComplete. |
+ EXPECT_FALSE(url_request_delegate_.request_failed()); |
+ EXPECT_EQ(1, network_delegate_.completed_requests()); |
+ // A null input stream shouldn't result in an error. See crbug.com/180950. |
+ EXPECT_EQ(0, network_delegate_.error_count()); |
+ EXPECT_EQ(404, req_->GetResponseCode()); |
} |
TEST_F(AndroidStreamReaderURLRequestJobTest, ReadPartOfStream) { |
@@ -238,6 +275,7 @@ TEST_F(AndroidStreamReaderURLRequestJobTest, ReadPartOfStream) { |
EXPECT_FALSE(url_request_delegate_.request_failed()); |
EXPECT_EQ(bytes_to_read, url_request_delegate_.bytes_received()); |
EXPECT_EQ(1, network_delegate_.completed_requests()); |
+ EXPECT_EQ(0, network_delegate_.error_count()); |
} |
TEST_F(AndroidStreamReaderURLRequestJobTest, |
@@ -268,6 +306,7 @@ TEST_F(AndroidStreamReaderURLRequestJobTest, |
EXPECT_FALSE(url_request_delegate_.request_failed()); |
EXPECT_EQ(bytes_to_read, url_request_delegate_.bytes_received()); |
EXPECT_EQ(1, network_delegate_.completed_requests()); |
+ EXPECT_EQ(0, network_delegate_.error_count()); |
} |
TEST_F(AndroidStreamReaderURLRequestJobTest, DeleteJobMidWaySeek) { |