url_request_data_job_unittest.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_response_headers.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_version.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/url_request/url_request_data_job.h"
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "url/gurl.h"
143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(BuildResponseTest, Simple) {
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string mime_type;
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string charset;
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string data;
21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  scoped_refptr<net::HttpResponseHeaders> headers(
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new net::HttpResponseHeaders(std::string()));
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      net::OK,
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      URLRequestDataJob::BuildResponse(
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          GURL("data:,Hello"), &mime_type, &charset, &data, headers.get()));
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_EQ("text/plain", mime_type);
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ("US-ASCII", charset);
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ("Hello", data);
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  const net::HttpVersion& version = headers->GetParsedHttpVersion();
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1, version.major_value());
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1, version.minor_value());
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("OK", headers->GetStatusText());
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string value;
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(headers->GetNormalizedHeader("Content-Type", &value));
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(value, "text/plain;charset=US-ASCII");
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  value.clear();
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      headers->GetNormalizedHeader("Access-Control-Allow-Origin", &value));
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(value, "*");
44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}
45e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST(BuildResponseTest, InvalidInput) {
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string mime_type;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string charset;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string data;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<net::HttpResponseHeaders> headers(
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new net::HttpResponseHeaders(std::string()));
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      net::ERR_INVALID_URL,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      URLRequestDataJob::BuildResponse(
56          GURL("bogus"), &mime_type, &charset, &data, headers.get()));
57}
58
59TEST(BuildResponseTest, InvalidMimeType) {
60  std::string mime_type;
61  std::string charset;
62  std::string data;
63  scoped_refptr<net::HttpResponseHeaders> headers(
64      new net::HttpResponseHeaders(std::string()));
65
66  // MIME type contains delimiters. Must be rejected.
67  EXPECT_EQ(
68      net::ERR_INVALID_URL,
69      URLRequestDataJob::BuildResponse(
70          GURL("data:f(o/b)r,test"),
71          &mime_type, &charset, &data, headers.get()));
72}
73
74TEST(BuildResponseTest, InvalidCharset) {
75  std::string mime_type;
76  std::string charset;
77  std::string data;
78  scoped_refptr<net::HttpResponseHeaders> headers(
79      new net::HttpResponseHeaders(std::string()));
80
81  // MIME type contains delimiters. Must be rejected.
82  EXPECT_EQ(
83      net::ERR_INVALID_URL,
84      URLRequestDataJob::BuildResponse(
85          GURL("data:text/html;charset=(),test"),
86          &mime_type, &charset, &data, headers.get()));
87}
88
89}  // namespace net
90