| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <string> |
| |
| #include "base/memory/ref_counted.h" |
| #include "net/base/net_errors.h" |
| #include "net/http/http_response_headers.h" |
| #include "net/http/http_version.h" |
| #include "net/url_request/url_request_data_job.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "url/gurl.h" |
| |
| namespace net { |
| |
| TEST(BuildResponseTest, Simple) { |
| std::string mime_type; |
| std::string charset; |
| std::string data; |
| scoped_refptr<HttpResponseHeaders> headers( |
| new HttpResponseHeaders(std::string())); |
| |
| ASSERT_EQ(OK, |
| URLRequestDataJob::BuildResponse(GURL("data:,Hello"), &mime_type, |
| &charset, &data, headers.get())); |
| |
| EXPECT_EQ("text/plain", mime_type); |
| EXPECT_EQ("US-ASCII", charset); |
| EXPECT_EQ("Hello", data); |
| |
| const HttpVersion& version = headers->GetHttpVersion(); |
| EXPECT_EQ(1, version.major_value()); |
| EXPECT_EQ(1, version.minor_value()); |
| EXPECT_EQ("OK", headers->GetStatusText()); |
| std::string value; |
| EXPECT_TRUE(headers->GetNormalizedHeader("Content-Type", &value)); |
| EXPECT_EQ(value, "text/plain;charset=US-ASCII"); |
| value.clear(); |
| } |
| |
| TEST(BuildResponseTest, InvalidInput) { |
| std::string mime_type; |
| std::string charset; |
| std::string data; |
| scoped_refptr<HttpResponseHeaders> headers( |
| new HttpResponseHeaders(std::string())); |
| |
| EXPECT_EQ(ERR_INVALID_URL, |
| URLRequestDataJob::BuildResponse(GURL("bogus"), &mime_type, |
| &charset, &data, headers.get())); |
| } |
| |
| TEST(BuildResponseTest, InvalidMimeType) { |
| std::string mime_type; |
| std::string charset; |
| std::string data; |
| scoped_refptr<HttpResponseHeaders> headers( |
| new HttpResponseHeaders(std::string())); |
| |
| // MIME type contains delimiters. Must be accepted but Content-Type header |
| // should be generated as if the mediatype was text/plain. |
| EXPECT_EQ(OK, URLRequestDataJob::BuildResponse(GURL("data:f(o/b)r,test"), |
| &mime_type, &charset, &data, |
| headers.get())); |
| |
| std::string value; |
| EXPECT_TRUE(headers->GetNormalizedHeader("Content-Type", &value)); |
| EXPECT_EQ(value, "text/plain;charset=US-ASCII"); |
| } |
| |
| TEST(BuildResponseTest, InvalidCharset) { |
| std::string mime_type; |
| std::string charset; |
| std::string data; |
| scoped_refptr<HttpResponseHeaders> headers( |
| new HttpResponseHeaders(std::string())); |
| |
| // MIME type contains delimiters. Must be rejected. |
| EXPECT_EQ(ERR_INVALID_URL, URLRequestDataJob::BuildResponse( |
| GURL("data:text/html;charset=(),test"), |
| &mime_type, &charset, &data, headers.get())); |
| } |
| |
| } // namespace net |