11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <string> 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/ref_counted.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/base/net_errors.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/http/http_response_headers.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/http/http_version.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/url_request/url_request_data_job.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gtest/include/gtest/gtest.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "url/gurl.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace net { 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(BuildResponseTest, Simple) { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string mime_type; 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string charset; 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string data; 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<net::HttpResponseHeaders> headers( 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new net::HttpResponseHeaders(std::string())); 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_EQ( 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::OK, 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestDataJob::BuildResponse( 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL("data:,Hello"), &mime_type, &charset, &data, headers.get())); 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("text/plain", mime_type); 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("US-ASCII", charset); 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("Hello", data); 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const net::HttpVersion& version = headers->GetParsedHttpVersion(); 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, version.major_value()); 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, version.minor_value()); 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("OK", headers->GetStatusText()); 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string value; 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(headers->GetNormalizedHeader("Content-Type", &value)); 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(value, "text/plain;charset=US-ASCII"); 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci value.clear(); 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci headers->GetNormalizedHeader("Access-Control-Allow-Origin", &value)); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(value, "*"); 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(BuildResponseTest, InvalidInput) { 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string mime_type; 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string charset; 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string data; 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<net::HttpResponseHeaders> headers( 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new net::HttpResponseHeaders(std::string())); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ( 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::ERR_INVALID_URL, 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestDataJob::BuildResponse( 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL("bogus"), &mime_type, &charset, &data, headers.get())); 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(BuildResponseTest, InvalidMimeType) { 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string mime_type; 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string charset; 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string data; 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<net::HttpResponseHeaders> headers( 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new net::HttpResponseHeaders(std::string())); 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 66ab8f6f0bd665d3c1ff476eb06c58c42630e462d4Ben Murdoch // MIME type contains delimiters. Must be accepted but Content-Type header 67ab8f6f0bd665d3c1ff476eb06c58c42630e462d4Ben Murdoch // should be generated as if the mediatype was text/plain. 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ( 69ab8f6f0bd665d3c1ff476eb06c58c42630e462d4Ben Murdoch net::OK, 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestDataJob::BuildResponse( 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL("data:f(o/b)r,test"), 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &mime_type, &charset, &data, headers.get())); 73ab8f6f0bd665d3c1ff476eb06c58c42630e462d4Ben Murdoch 74ab8f6f0bd665d3c1ff476eb06c58c42630e462d4Ben Murdoch std::string value; 75ab8f6f0bd665d3c1ff476eb06c58c42630e462d4Ben Murdoch EXPECT_TRUE(headers->GetNormalizedHeader("Content-Type", &value)); 76ab8f6f0bd665d3c1ff476eb06c58c42630e462d4Ben Murdoch EXPECT_EQ(value, "text/plain;charset=US-ASCII"); 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(BuildResponseTest, InvalidCharset) { 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string mime_type; 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string charset; 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string data; 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<net::HttpResponseHeaders> headers( 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new net::HttpResponseHeaders(std::string())); 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // MIME type contains delimiters. Must be rejected. 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ( 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::ERR_INVALID_URL, 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLRequestDataJob::BuildResponse( 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GURL("data:text/html;charset=(),test"), 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &mime_type, &charset, &data, headers.get())); 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace net 95