| 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;
|
| +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;
|
|
|