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