Chromium Code Reviews| 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 f09b5c534327eca620272731a82e4543d4b272e7..51946230ef142b6ceb0a6877860fb5d98a5755cd 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 |
| @@ -12,6 +12,7 @@ |
| #include "base/strings/stringprintf.h" |
| #include "net/base/request_priority.h" |
| #include "net/http/http_byte_range.h" |
| +#include "net/http/http_response_headers.h" |
| #include "net/url_request/url_request_job_factory_impl.h" |
| #include "net/url_request/url_request_test_util.h" |
| @@ -93,6 +94,11 @@ class StreamReaderDelegate : |
| std::string* charset) OVERRIDE { |
| return false; |
| } |
| + |
| + virtual void UpdateHeaders(JNIEnv* env, |
| + net::HttpResponseHeaders* headers) OVERRIDE { |
| + // no-op |
| + } |
| }; |
| class NullStreamReaderDelegate : public StreamReaderDelegate { |
| @@ -106,6 +112,33 @@ class NullStreamReaderDelegate : public StreamReaderDelegate { |
| } |
| }; |
| +class HeaderAlteringStreamReaderDelegate : public NullStreamReaderDelegate { |
| + public: |
| + HeaderAlteringStreamReaderDelegate() {} |
| + |
| + virtual void UpdateHeaders(JNIEnv* env, |
| + net::HttpResponseHeaders* headers) OVERRIDE { |
| + headers->ReplaceStatusLine(kStatusLine); |
| + std::string headerLine(kCustomHeaderName); |
| + headerLine.append(": "); |
| + headerLine.append(kCustomHeaderValue); |
| + headers->AddHeader(headerLine); |
| + } |
| + |
| + static const int kResponseCode; |
| + static const char* kStatusLine; |
| + static const char* kCustomHeaderName; |
| + static const char* kCustomHeaderValue; |
| +}; |
| + |
| +const int HeaderAlteringStreamReaderDelegate::kResponseCode = 401; |
|
benm (inactive)
2014/05/15 16:17:40
are there any headers that we shouldn't allow the
mkosiba (inactive)
2014/05/15 17:03:21
That's a good question. I'm not sure there is a lo
|
| +const char* HeaderAlteringStreamReaderDelegate::kStatusLine = |
| + "HTTP/1.1 401 Gone"; |
| +const char* HeaderAlteringStreamReaderDelegate::kCustomHeaderName = |
| + "X-Test-Header"; |
| +const char* HeaderAlteringStreamReaderDelegate::kCustomHeaderValue = |
| + "TestHeaderValue"; |
| + |
| class MockInputStreamReader : public InputStreamReader { |
| public: |
| MockInputStreamReader() : InputStreamReader(new NotImplInputStream()) {} |
| @@ -245,6 +278,35 @@ TEST_F(AndroidStreamReaderURLRequestJobTest, ReadWithNullStream) { |
| EXPECT_EQ(404, req_->GetResponseCode()); |
| } |
| +TEST_F(AndroidStreamReaderURLRequestJobTest, ModifyHeadersAndStatus) { |
| + SetUpTestJob(scoped_ptr<InputStreamReader>(), |
| + make_scoped_ptr(new HeaderAlteringStreamReaderDelegate()) |
| + .PassAs<AndroidStreamReaderURLRequestJob::Delegate>()); |
| + req_->Start(); |
| + |
| + // The TestDelegate will quit the message loop on request completion. |
| + base::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(HeaderAlteringStreamReaderDelegate::kResponseCode, |
| + req_->GetResponseCode()); |
| + EXPECT_EQ(HeaderAlteringStreamReaderDelegate::kStatusLine, |
| + req_->response_headers()->GetStatusLine()); |
| + EXPECT_TRUE(req_->response_headers()->HasHeader( |
| + HeaderAlteringStreamReaderDelegate::kCustomHeaderName)); |
| + std::string header_value; |
| + EXPECT_TRUE(req_->response_headers()->EnumerateHeader( |
| + NULL, HeaderAlteringStreamReaderDelegate::kCustomHeaderName, |
| + &header_value)); |
| + EXPECT_EQ(HeaderAlteringStreamReaderDelegate::kCustomHeaderValue, |
| + header_value); |
| +} |
| + |
| TEST_F(AndroidStreamReaderURLRequestJobTest, ReadPartOfStream) { |
| const int bytes_available = 128; |
| const int offset = 32; |